MSL(Maximum Segment Lifetime)最大报文生存时间,是指一个 TCP 报文在网络上最多能存活的时间(超时了就丢弃)。
为什么要等待 2MSL?原因主要有两个:
-
确保最后一个 ACK能让对方收到。
TCP挥手过程最后一次(第四次挥手)是主动关闭方发一个 ACK 给被动关闭方。
但是网络是不可靠的,万一这个 ACK 丢了呢?
如果丢了,被动关闭方超时之后会重新发送 FIN,那么主动关闭方需要还在那儿等着,能收到这个 FIN,再重新发 ACK。➔ 所以,主动关闭方不能立刻关闭,得等一段时间,确保对方没再发 FIN过来。
-
防止旧连接中的数据包混入新连接。
TCP的端口号、IP地址组合(称为五元组)唯一标识一个连接。
如果刚刚关闭就立刻允许复用同样的IP+端口建立新的连接,网络中可能还在漂泊的旧数据包可能会被新连接接收到,造成混乱。➔ 所以,要等待2倍MSL的时间,确保之前连接中的包都彻底消失在网络中。