TCP连接定义了11种状态,状态转换如下
在网络交错复杂情况下,同时打开和同时关闭是很罕见的情况不过可能发生。
当TCP连接断开时候,执行主动关闭那一端会进入TIME_WAIT状态,知道等待2msl(每个分节最长生命期)
TIME_WAIT状态有两种存在的理由
1,可靠的实现TCP全双工连接的终止
2,允许老的重复分节在网络中消逝
第一个理由可以通过考虑四次挥手最后一个ACK丢失,服务器重新发送最后一个FIN,客户端必须维护状态信息,以维护发送最终的ACK。
如果A端不维持TIME_WAIT状态,而是处于CLOSED 状态,那么会返回的信息会被服务器认为错误信息。TCP要彻底终止序列双向的数据流,那么必须处理4个分节中任意一个分节丢失的情况
第二个理由就是
TCP分节可能由于路由器异常而“迷途”,在迷途期间,TCP发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后也会被送到最终目的地,这个迟到的迷途分节到达时可能会引起问题。在关闭“前一个连接”之后,马上又重新建立起一个相同的IP和端口之间的“新连接”,“前一个连接”的迷途重复分组在“前一个连接”终止后到达,而被“新连接”收到了。为了避免这个情况,TCP协议不允许处于TIME_WAIT状态的连接启动一个新的可用连接,因为TIME_WAIT状态持续2MSL(往返各MSL),就可以保证当成功建立一个新TCP连接的时候,来自旧连接重复分组已经在网络中消逝。
TCP状态转换图和TIME_WAIT状态,布布扣,bubuko.com
原文:http://www.cnblogs.com/mtmzn/p/3632962.html