TIME_WAIT状态

毫无疑问,TCP中有关网络编程最不容易理解的就是它的TIME_WAIT状态。主动关闭的那一端经历了这个状态。该端点停留在这个状态的持续时间时最长字节生命期的两倍,有时候时2MSL。
任何TCP实现都必须为MSL选择一个值。TIME_WAIT状态的持续时间时有限的。MSL是 任何IP数据报所能够在因特网存活的最长时间。因为每个数据报含有一个称为跳限的8位字段,它的最大值为255。尽管这个是一个跳数限制而不是真正的时间限制,我们仍然假设:具有最大跳限(255)的分组在网络中存在时间不可能超过MSL秒。
分组在网络中“迷途‘通常是路由异常的结果。如果某个路由器崩溃了或者某两个路由器之间的某个链路断了,路由协议需要花数秒钟的时间才能稳定并找到另一条通路。在这段时间内有可能就此陷入这样的循环。假设迷途的分组是一个TCP分节,在它迷途期间,发送端TCP超时并重传该分组,而重传的分组却通过某条候选路径到达最终的目的地。然而不久后(自迷途的分组开始其旅程起最多MSL秒以内)路由循环修复,早先迷失在这个循环中的分组最终也被送到最终目的地。这个原来的分组称为迷途的重复分组或漫游的重复分组。TCP必须正确处理这些重复的分组。
TIME_WAIT状态由两个存在的理由:
(1)可靠地实现TCP全双工连接的终止
(2)允许老的重复分节在网络中消逝
第一个理由可以 假设最终的ACK丢失来解释。服务器重新发送它的最终那个FIN,因此客户必须维护状态信息,以允许它重新发送最终那个ACK。要是客户不维护状态信息,它将响应一个RST(另外一种类型的TCP分节),该分节被服务器解释成错误。如果TCP打算执行所有必要的工作以彻底终止序列4个字节中任何一个字节丢失的情况。本例子也说明了为什么执行主动关闭的那一端是处于TIME_WAIT状态的那一端;因为可能不得不重传最终那个ACK就是那一端
为理解存在TIME_WAIT状态的第二个理由,我们假设在12.106.32.254的1500端口和206.168.112.219的21端口之间有一个TCP连接。我们关闭这个连接,过一段时间后在相同的IP地址和端口号之间建立另一个连接。后一个连接称为前一个连接的化身,因为它们的IP地址和端口号相同。TCP必须防止来自某个连接的老的重复分组在该连接已终止后再现,从而被误解成属于同一个连接的某一个新的化身。为了做到这一点,TCP将不给处于TIME_WAIT状态的连接发起新的化身。既然TIME_WAIT状态持续时间时MSL的2倍,这就足以让某个方向上的分组最多存活MSL秒即被抛弃,另一个方向上的答应最多存活MSL秒也被丢弃。通过实施这个规则,我们就能保证每成功建立一个TCP连接时,来自该新连接先前化身的重复分组已经在网络中消逝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值