之前所说了解有两个原因:
1、防止客户端最后一次发给服务器的确认在网络中丢失以至于客户端关闭,而服务端并未关闭,导致资源的浪费。
2、等待最大的2msl可以让本次连接的所有的网络包在链路上消失,以防造成不必要的干扰。
但对于第二条造成不必要的干扰之前没有做过多的解读,今天在网上查了下,顺便给大家分享下:
如果client直接closed,然后又向server发起了一个新连接,我们不能保证这个新连接和刚关闭的连接的端口号是不同的。假设新连接和已经关闭的老端口号是一样的,如果前一次滞留的某些数据仍然在网络中,这些延迟数据会在新连接建立后到达Server,所以socket就认为那个延迟的数据是属于新连接的,数据包就会发生混淆。所以client要在TIME_WAIT状态等待2倍的MSL,这样保证本次连接的所有数据都从网络中消失。
原文:https://www.cnblogs.com/leonandyou/p/11296793.html