TIME_WAIT状态小析
毫无疑问,TCP中有关网络编程最不容易理解的就是TIME_WAIT状态。
首先明确一个概念:最长分节生命期(maximum segment lifetime,MSL).MSL是IP数据报能够在互联网中生存的
最长时间。
这个状态是执行主动关闭的一端才会有的
存在TIME_WAIT状态有两个理由:
1.可靠的实现TCP全双工连接的终止
如果TCP打算执行所有必要的工作以彻底终止某个连接上两个方向的数据流(即全双工关闭),那它必须正确处理
连接终止序列四个分节中任何一个分节丢失的情况。
详见<<UNP>> P38
2.允许老的重复分节在网络中消逝
对于第2点原因的解释如下:如果有一个连接正常终止以后,又起了一个相同IP地址和端口的连接,那么后一个
称之为前一个连接的化身。如果前一个连接的重复(迷途)分组在网络中被当做后一个的分组,那显然结果是不可
预期的,因此TCP必须防止这种情况的发生。
因此,TCP在一个连接结束之前,必须确保该连接的所重复有分组在网络中消逝,由此设定TIME_WAIT状态。
此状态持续时间是2MSL,这足够允许某个方向上的分组最多存活MSL秒即被丢弃,另一个方向上的应答最多存
活MSL秒也被丢弃。