博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于TIME_WAIT状态的理解
阅读量:7023 次
发布时间:2019-06-28

本文共 945 字,大约阅读时间需要 3 分钟。

TCP/IP状态变迁图置顶:

可见,主动关闭的一方会进入TIME_WAIT状态。
该状态存在的缘由:

  • 主动关闭的一方再最后回应了ACK报文之后,该ACK报文有丢失的可能,如果丢失,对端会重发FIN报文,因此目的之一是为ACK报文的丢失做应对措施。
  • 主动关闭的一方再回应ACK报文之后,如果立刻关闭本连接,后续有可能新的连接复用该连接,这样就会有可能导致原连接的部分报文因为某些原因重新到来,导致与新连接的报文相混淆,扰乱正常报文。

MSL

MSL:Maximum Segment Lifetime,报文网络中最大存活时间。

RFC 793 [Postel 1981c] 指出MSL为2分钟。然而,实现中的常用值是30秒,1分钟,或2分钟。

时间为何是2MSL

  • 对应上文的第一条原因,主动关闭的一方回应的ACK报文最大存活MSL,假设在存活时间段的最后也没有到达对方(此为一次MSL),则对方会重发FIN报文,该FIN报文假设在存活的MSL的最后到达了本端(此为一次MSL),则来得及重回ACK,否则就认为对端已正常关闭,那好,本端也可以关闭连接了。
  • 其次,有足够的时间让这个连接不会跟后面的连接混在一起(你要知道,有些自做主张的路由器会缓存IP数据包,如果连接被重用了,那么这些延迟收到的包就有可能会跟新连接混在一起)。

补充

在连接处于2MSL等待时,任何迟到的报文段将被丢弃。 因为处于2MSL等待的、由该插口对(socket pair,即连接五元组)定义的连接在这段时间内不能被再用,因此当要建立一个有效的连接时,来 自该连接的一个较早替身(incarnation)的迟到报文段作为新连接的一部分不可能不被曲解 (一个连接由一个插口对来定义。一个连接的新的实例(instance)称为该连接的替身)。

《TCP IP详解卷一》18.6.1原文描述如下:

TCP将不给处于TIME_WAIT状态的连接发起新的化身,既然TIME_WAIT状态的持续时间是MSL的2倍,这就足以让某个方向上的分组最多存活MSL秒即被丢弃,另一个方向上的应答最多存活MSL秒也被丢弃。通过实施这个规则,我们就能保证每成功建立一个TCP连接时, 来自该连接先前化身的老的重复分组都已在网络中消逝了。

参考连接:

转载地址:http://oivxl.baihongyu.com/

你可能感兴趣的文章
【HTTP】WireShark中获取Content-Encoding: gzip时的响应内容
查看>>
一些组织和个人网站
查看>>
二叉树应用进阶之折纸(二叉树的右根左遍历)
查看>>
运维相关开源项目
查看>>
Lua MD5加密字符串
查看>>
Heap & Priority Queue
查看>>
RDA PQ工具使用 (Adi Analysis)
查看>>
LEETCODE
查看>>
织云Lite发布:详解包管理核心能力
查看>>
hadoop04---shell
查看>>
HDU 4419 Colourful Rectangle(线段树)
查看>>
webservice接口的开发和调用
查看>>
【uTenux实验】内存池管理(固定内存池和可变内存池)
查看>>
Android——Android Studio的一些小技巧(转)
查看>>
Spring学习【Spring概述】
查看>>
【Java数据结构学习笔记之一】线性表的存储结构及其代码实现
查看>>
Facebook内部人才建设潜规则
查看>>
巧用test判断来写shell脚本
查看>>
类装载器
查看>>
考勤处理脚本
查看>>