TCP的状态变迁图如下:
其中的TIME_WAIT状态也成为2MSL等待状态。每个具体的TCP实现必须选择一个报文段最大生存时间MSL(maximum
segment lifetime)。它是任何报文段被丢弃前在网络内的最长时间 。我们知道这个时间是有限的,因为TCP报文段以IP
数据报在网络内传输,而IP数据报则有限制其生存时间的TTL字段。
在RFC793指出MSL为2分钟,然而,实现中的常用值是30秒,1分钟或2分钟。
对一个具体实现锁定的MSL值,处理的原则是:当TCP执行一个主动关闭,并发回最后一个ACK,该链接必须在TIME_WAIT
状态停留的时间为2倍的MSL。这样可以让TCP再次发送最后的ACK以防止这个ACK丢失。(另一端超时并重发最后的FIN)。
这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的socket(客户的IP地址和端口号,服务器
的IP地址和端口号不能被使用)。这个连接只能在2MSL结束后才能被使用。
遗憾的是,大多数TCP实现强加了更为严格的限制,在2MSL等待期间,插口中使用的本地端口在默认情况下不能再被使用。
注意: