https://www.eet-china.com/mp/a44399.html
答:MSL
指的是报文在网络中最大生存时间。在客户端发送对服务器端的 FIN
的确认包 ACK
后,这个 ACK
包是有可能不可达的,服务器如果收不到 ACK
的话需要重新发送 FIN
包。
所以客户端发送 ACK
后需要留出 2MSL
时间(ACK 到达服务器 + 服务器发送 FIN 重传包,一来一回)等待确认服务器端确实收到了 ACK 包。
也就是说客户端如果等待 2MSL 时间也没有收到服务器端的重传包 FIN ,说明可以确认服务器已经收到客户端发送的 ACK。
还有第 2 个理由,避免新旧连接混淆。
在客户端发送完最后一个 ACK
报文段后,在经过 2MSL
时间,就可以使本连接持续的时间内所产生的所有报文都从网络中消失,使下一个新的连接不会出现这种旧的连接请求报文。
你要知道,有些自作主张的路由器会缓存 IP 数据包,如果连接重用了,那么这些延迟收到的包就有可能会跟新连接混在一起。
[65、为什么TIME_WAIT状态需要经过2MSL才能返回到CLOSE状态?](https://www.notion.so/65-TIME_WAIT-2MSL-CLOSE-8893ab00c18c4825aaa48ed1cf744dab)
[TCP的四次挥手及为什么要等待2MSL](https://www.notion.so/TCP-2MSL-4809a008f7d94fcaa966215feb769faf)