1 2MSL等待
TIME_WAIT状态也称为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime) 。它是任何报文段被丢弃前在网络内的最长时间。实现中的常用值是30秒,1分钟,或2分钟。
对一个具体实现所给定的MSL值,处理的原则是:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的 F I N) 。这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的插口(客户的IP地址和端口号,服务器的IP地址和端口号)不能再被使用。这个连接只能在2MSL结束后才能再被使用。
2 注意
某些TCP实现允许一个新的连接请求到达仍处于TIME_WAIT状态的连接,只要新的序号大于该连接前一个替身的最后序号。对于同一连接的前一个替身,这个具体实现中的特性让客户程序和服务器程序能连续地重用每一端的相同端口号,但这只有在服务器执行主动关闭才有效。
3 平静时间
TCP在重启动后的MSL秒内不能建立任何连接。这就称为平静时间 (quiet time)。
只有极少的实现版遵守这一原则,因为大多数主机重启动的时间都比MSL秒要长。
4 FIN_WAIT_2
当客户端发送了一个FIN给到服务端,服务端返回一个ACK时,客户端进入FIN_WAIT_2状态,单如果此时服务端没有立刻返回一个FIN,则客户端会一直保持FIN_WAIT_2状态不会进入TIME_WAIT,为了避免这种无限等待的状态,客户端就设置一个定时器。如果这个连接空闲1 0分钟7 5秒,TCP将进入CLOSED状态。