TCP协议中的“四次挥别”

熟悉笑来老师的同学都知道,笑来老师是不和老婆吵架的,而且这一不吵就是20年。这样的状态一定是很多人羡慕以求的,这是如何做到的呢?

笑来老师曾用3句话进行简洁明了的说明:
共同创建协议,
共同遵守协议,
共同升级协议……

借着这个话题,接下来要引出TCP/IP协议为何仅需“三次握手”而必须“四次挥别”呢?

当客户端进入TIME-WAIT状态的时候(也就是第四次挥手的时候),必须经过时间计数器设置的时间2MSL(最长报文段寿命)后,才能进入关闭状态,这又是为什么呢?

TCP四次挥别.png

这最主要是因为两个原因:

1、为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一旦这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。

2、他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。

注意:在服务器发送了FIN-ACK之后,会立即启动超时重传计时器。客户端在发送最后一个ACK之后会立即启动时间等待计时器。

你可能感兴趣的:(TCP协议中的“四次挥别”)