title: 常见面试题之计算机网络
categories:

  • [网络通信]
    tags:
  • [面试题]
    date: 2021/05/13

作者:hackett

微信公众号:加班猿

计算机网络

1 请你说一下TCP怎么保障可靠性,并且简述一下TCP建设连贯和断开连接的过程

TCP保障可靠性:

(1)序列号、确认应答、超时重传

数据达到接管方,接管方须要收回一个确认应答,示意曾经收到该数据段,并且确认序号会阐明了它下一次须要接管的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据失落,也可能是确认应答失落,这时发送方在期待肯定工夫后会进行重传。这个工夫个别是2*RTT(报文段往返工夫)+一个偏差值。

(2)窗口管制与高速重发管制/疾速重传(反复确认应答)

TCP会利用窗口管制来进步传输速度,意思是在一个窗口大小内,不必肯定要等到应答能力发送下一段数据,窗口大小就是无需期待确认而能够持续发送数据的最大值。如果不应用窗口管制,每一个没收到确认应答的数据都要重发。

应用窗口管制,如果数据段1001-2000失落,前面数据每次传输,确认应答都会不停地发送序号为1001的应答,示意我要接管1001开始的数据,发送端如果收到3次雷同应答,就会立即进行重发;但还有种状况有可能是数据都收到了,然而有的应答失落了,这种状况不会进行重发,因为发送端晓得,如果是数据段失落,接收端不会放过它的,会疯狂向它揭示......

(3)拥塞管制

如果把窗口定的很大,发送端间断发送大量的数据,可能会造成网络的拥挤(大家都在用网,你在这狂发,吞吐量就那么大,当然会堵),甚至造成网络的瘫痪。所以TCP在为了避免这种状况而进行了拥塞管制。

慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答(通过一个rtt),将拥塞窗口大小*2。

拥塞防止:设置慢启动阈值,个别开始都设为65536。拥塞防止是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数回升,而是加法减少(每次确认应答/每个rtt,拥塞窗口大小+1),以此来防止拥塞。

将报文段的超时重传看做拥塞,则一旦产生超时重传,咱们须要先将阈值设为以后窗口大小的一半,并且将窗口大小设为初值1,而后从新进入慢启动过程。

疾速重传:在遇到3次反复确认应答(高速重发管制)时,代表收到了3个报文段,然而这之前的1个段失落了,便对它进行立刻重传。

而后,先将阈值设为以后窗口大小的一半,而后将拥塞窗口大小设为慢启动阈值+3的大小。

这样能够达到:在TCP通信时,网络吞吐量出现逐步的回升,并且随着拥挤来升高吞吐量,再进入缓缓回升的过程,网络不会轻易的产生瘫痪。

TCP建设连贯和断开连接的过程:

三次握手:

\1. Client将标记位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,期待Server确认。

\2. Server收到数据包后由标记位SYN=1晓得Client申请建设连贯,Server将标记位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连贯申请,Server进入SYN_RCVD状态。

\3. Client收到确认后,查看ack是否为J+1,ACK是否为1,如果正确则将标记位ACK置为1,ack=K+1,并将该数据包发送给Server,Server查看ack是否为K+1,ACK是否为1,如果正确则连贯建设胜利,Client和Server进入ESTABLISHED状态,实现三次握手,随后Client与Server之间能够开始传输数据了。

四次挥手:

因为TCP连贯时全双工的,因而,每个方向都必须要独自进行敞开,这一准则是当一方实现数据发送工作后,发送一个FIN来终止这一方向的连贯,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,然而在这个TCP连贯上依然可能发送数据,直到这一方向也发送了FIN。首先进行敞开的一方将执行被动敞开,而另一方则执行被动敞开。

1.数据传输完结后,客户端的利用过程收回连贯开释报文段,并进行发送数据,客户端进入FIN_WAIT_1状态,此时客户端仍然能够接管服务器发送来的数据。

2.服务器接管到FIN后,发送一个ACK给客户端,确认序号为收到的序号+1,服务器进入CLOSE_WAIT状态。客户端收到后进入FIN_WAIT_2状态。

3.当服务器没有数据要发送时,服务器发送一个FIN报文,此时服务器进入LAST_ACK状态,期待客户端的确认

4.客户端收到服务器的FIN报文后,给服务器发送一个ACK报文,确认序列号为收到的序号+1。此时客户端进入TIME_WAIT状态,期待2MSL(MSL:报文段最大生存工夫),而后敞开连贯。

2 请你说一说TCP的模型

四层TCP/IP模型如下:

3 请答复一下HTTP和HTTPS的区别,以及HTTPS有什么毛病?

HTTP协定和HTTPS协定区别如下:

1)HTTP协定是以明文的形式在网络中传输数据,而HTTPS协定传输的数据则是通过TLS加密后的,HTTPS具备更高的安全性

2)HTTPS在TCP三次握手阶段之后,还须要进行SSL 的handshake,协商加密应用的对称加密密钥

3)HTTPS协定须要服务端申请证书,浏览器端装置对应的根证书

4)HTTP协定端口是80,HTTPS协定端口是443

HTTPS长处:

HTTPS传输数据过程中应用密钥进行加密,所以安全性更高

HTTPS协定能够认证用户和服务器,确保数据发送到正确的用户和服务器

HTTPS毛病:

HTTPS握手阶段延时较高:因为在进行HTTP会话之前还须要进行SSL握手,因而HTTPS协定握手阶段延时减少

HTTPS部署老本高:一方面HTTPS协定须要应用证书来验证本身的安全性,所以须要购买CA证书;另一方面因为采纳HTTPS协定须要进行加解密的计算,占用CPU资源较多,须要的服务器配置或数目高

4 请你说一说HTTP返回码

HTTP协定的响应报文由状态行、响应头部和响应包体组成,其响应状态码总体形容如下:

1xx:批示信息--示意申请已接管,持续解决。

2xx:胜利--示意申请已被胜利接管、了解、承受。

3xx:重定向--要实现申请必须进行更进一步的操作。

4xx:客户端谬误--申请有语法错误或申请无奈实现。

5xx:服务器端谬误--服务器未能实现非法的申请。

常见状态代码、状态形容的具体阐明如下。

200 OK:客户端申请胜利。

206 partial content服务器曾经正确处理局部GET申请,实现断点续传或同时分片下载,该申请必须蕴含Range申请头来批示客户端冀望失去的范畴

300 multiple choices(可选重定向):被申请的资源有一系列可供选择的反馈信息,由浏览器/用户自行抉择其中一个。

301 moved permanently(永恒重定向):该资源已被永恒挪动到新地位,未来任何对该资源的拜访都要应用本响应返回的若干个URI之一。

302 move temporarily(长期重定向):申请的资源当初长期从不同的URI中取得,

304:not modified :如果客户端发送一个待条件的GET申请并且该申请以经被容许,而文档内容未被扭转,则返回304,该响应不蕴含包体(即可间接应用缓存)。

403 Forbidden:服务器收到申请,然而回绝提供服务。

404 not Found:申请资源不存在,举个例子:输出了谬误的URL。

5 请你说一说IP地址作用,以及MAC地址作用

MAC地址是一个硬件地址,用来定义网络设备的地位,次要由数据链路层负责。而IP地址是IP协定提供的一种对立的地址格局,为互联网上的每一个网络和每一台主机调配一个逻辑地址,以此来屏蔽物理地址的差别。

6 请答复OSI七层模型和TCP/IP四层模型,每层列举2个协定

OSI七层模型及其蕴含的协定如下:

应用层: 容许拜访OSI环境的伎俩,传输单位为APDU,次要包含的协定为FTP HTTP DNS

表示层: 对数据进行翻译、加密和压缩,传输单位为PPDU,次要包含的协定为JPEG ASII

会话层:建设、治理和终止会话,传输单位为SPDU,次要包含的协定为RPC NFS

传输层:提供端到端的牢靠报文传递和谬误复原,传输单位为报文,次要包含的协定为TCP UDP

网络层:负责数据包从源到宿的传递和网际互连,传输单位为包,次要包含的协定为IP ARP ICMP

数据链路层: 将比特组装成帧和点到点的传递,传输单位为帧,次要包含的协定为MAC VLAN PPP

物理层: 通过媒介传输比特,确定机械及电气标准,传输单位为bit,次要包含的协定为:IEE802.3 CLOCK RJ45

TCP/IP 4层模型包含:

应用层:HTTP DNS SMTP

网络接口层:MAC VLAN

网络层:IP ARP ICMP

传输层:TCP UDP

7 为什么是三次握手?不是两次、四次?

接下来以三个方面剖析三次握手的起因:

1)三次握手才能够阻⽌反复历史连贯的初始化(次要起因)报文网络拥挤

2)三次握手才能够同步单方的初始序列号

3)三次握手才能够防止资源节约

8 如果曾经建设了连贯,然而客户端忽然呈现故障了怎么办?

第一种,对端程序是失常工作的。当 TCP 保活的探测报文发送给对端, 对端会失常响应,这样 TCP 保活工夫会被重置,期待下一个 TCP 保活工夫的到来。

    第二种,对端程序解体并重启。当 TCP 保活的探测报文发送给对端后,对端是能够响应的,但因为没有该连贯的无效信息,**会产生一个 RST 报⽂**,这样很快就会发现 TCP 连贯曾经被重置。    第三种,是对端程序解体,或对端因为其余起因导致报文不不可达。当 TCP 保活的探测报文发送给对端后,石沉大海,没有响应,间断几次,达到保活探测次数后,**TCP 会报告该 TCP 连贯曾经死亡**。

如果你感觉文章还不错,记得"点赞关注"

关注我的微信公众号【 加班猿 】能够获取更多内容