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 连贯曾经死亡 **。
如果你感觉文章还不错,记得 ”点赞关注“
关注我的微信公众号【加班猿】能够获取更多内容