近日八股——计算机网络

发布于:2025-04-07 ⋅ 阅读:(60) ⋅ 点赞:(0)

一.c. TCP握手为什么三次、不能是二次、或四次?

i.不能是两次:

防止已经失效的连接报文突然又传到了服务端,产生错误
如果不采用三次握手,服务端直接建立连接,会白白浪费资源
三次握手告诉服务端,客户端有没有收这个数据,连接的序号是否是有效的·服务端收到正常的数据后,建立tcp连接,否则关闭端口,减少服务器开销

ii.不能是四次:

三次已经创建可靠连接,没有必要多一次握手花费更多建立连接。

iii.TCP二次握手:

在TCP三次握手的过程中,当用户首次访问Server时,发送SYN包Server根据用户IP生成Cookie(已加密),并与SYN-ACK一同发回Client;当Client随后重连时,在SYN包携带TCP Cookie;如果Server校验合法,则在用户回复ACK前就可以直接发送数据;否则按照正常三次握手进行。

二.三次握手中每一次没收到报文会发生什么情况

i.第一次握手:

客户端没有收到确认报文,等待一段时间会重新发送SYN报文

ii.第二次握手:

服务端会触发超时重传,重传SYN-ACK报文前。

ii.第三次握手:

服务端会触发超时重传,重传到收到ACK报文或达到最大次数关闭连

三.第二次握手传回了ACK,为什么还要传回SYN

i.ACK:

是为了告诉客户端传过来的数据已经接受无误

ii.SYN:

告诉客户端,服务端已经响应客户端的报文。服务端在本次连接没有需要超时处理的事情

四.第三次握手可以携带数据吗?

第三次握手可以携带数据。

在 TCP 三次握手过程中,前两次握手主要用于建立连接,确认双方的发送和接收能力。第三次握手时,客户端在发送的 ACK 报文中可以携带数据。如果此时携带数据,那么服务器在收到带有数据的第三次握手报文后,就可以直接对数据进行处理,而无需等待客户端再发送一个专门的数据报文,这样可以减少一次数据传输的往返时间,提高通信效率。

五.客户端在发送完最后一个确认报文后,为什么不直接进入关闭状态?而是要进入时间等待状态,2MSL后才进入关闭状态,这是否有必要呢?

i.如果客户端最后一个确认报文丢失后,服务器无法进入关闭状态,会反复重传FIN报文。因此等待时间2msl,可以确保服务器可以收到最后TCP确认报文

ii.客户端发送最后一个TCP确认报文段后,经过2MSL时长,可以使当前所有产生的报文段从网络中消失。

六.为什么是2MSL

i.2MSL是报文最大生存时间,任何超过该时间的报文都将丢弃

ii.2MSL是因为网络中存在发送方的数据包,当这些发送方的数据包被接受方处理后又会被响应,所以来回需要2MSL


网站公告

今日签到

点亮在社区的每一天
去签到