一 TIME_WAIT状态的发生
在TCP连接中主动关闭连接的一方将进入到TIME_WAIT状态。该端点停留在这个状态的持续时间是最长分节生命期(MSL,maximum segment lifetime)的两倍,也就是2MSL。
二 TIME_WAIT状态存在的理由
(1)可靠地实现TCP全双工连接的终止。
(2)允许老的重复分节在网络中消逝。
对于第一个理由,可以这样解释:假如服务端主动关闭连接进入TIME_WAIT状态,在服务端最后的ACK因为某些原因丢失了,客户端肯定会重新发送FIN,这是因为TIME_WAIT机制的存在,服务端会重新发送ACK,如果没有TIME_WAIT,那么无论客户有没有收到ACK,服务器都已经关掉连接了,此时客户重新发送FIN,服务器将不会发送ACK,而是RST,从而使客户端报错。也就是说,TIME_WAIT有助于可靠地实现TCP全双工连接的终止。
对于第二个理由:TCP不会给处于TIME_WAIT状态的连接发起新的化身,意思是如果一个连接刚刚关闭,主动端处于TIME_WAIT状态,此时是不允许这两个ip重新发起TCP连接的。为什么呢,因为TIME_WAIT状态持续2*MSL时间,在这段时间内,旧连接的重复分组都会在MSL时间内在网络中消逝被丢弃,所以新的连接不会被旧连接的分节打扰。