居然很少有人质疑: 2MSL的TIME_WAIT时间真的足够保证旧连接上的所有包都消失吗?
来源:互联网 发布:学了Java再学什么 编辑:程序博客网 时间:2024/05/17 11:32
看了不少TIME_WAIT方面的书籍和网络文章, 很多地方不过是在人云亦云的拷贝别人的说法和思想而已, 看得让人颇为无趣。
对于TIME_WAIT, 言必称2MSL, 当然, 如果是笔试面试, 我也会这么答, 因为这就是所谓的标准答案啊。 然而, 2MSL的TIME_WAIT时间真的足够保证旧连接上的所有包都消失吗? 我最近一直在思考这个问题。 从理论上来讲, 这是扯淡。
如果tcp四次挥手最后的ACK有好几次没有达到, 那么对端会重传FIN包, FIN包过来, 加上最后的新ACK, 要保证他们消失, 岂是2MSL时间能做到的? 别忘了, 从TIME_WAIT的起点到最后的新ACK的达到, 经历的理论时间为: Tx(刚进入CLOSE_WAIT状态到对端发最后FIN的时间差) + MSL(最后FIN包传输对应的MSL) + MSL(最后的新ACK传输对应的MSL)
显然, TIME_WAIT的理论时间, 可以比2MSL还大。
大家不要再以讹传讹了。
当然, 到处在说2MSL, 说明这个东西并非没有道理, 其实, 2MSL只是一个经验值, 而非理论值。 在RFC中, 2MSL的值被建议为4分钟, 而在很多实现中, 2MSL的值被实现为1分钟。 所以, 你看, 2MSL这个东西, 是根据经验和系统环境而定的。 把TIME_WAIT定义为2MSL -1秒, 系统会异常吗? 不会, 几乎没什么影响的!
2MSL能尽力而为地期望(而非百分之百地保证), 旧连接上的所有数据包都消失。 其实, 在实际中, 这个时间足够了, 已经是仁至义尽了。
为了不至于误会(不是随大流), 以后在谈论TIME_WAIT的时候, 我让人会用2MSL来说话。
- 居然很少有人质疑: 2MSL的TIME_WAIT时间真的足够保证旧连接上的所有包都消失吗?
- 为什么TIME_WAIT的时间是2MSL
- TCP断开连接时的2MSL的time_wait状态
- TIME_WAIT 2MSL保持的必要性
- 2MSL TIME_WAIT状态存在的理由
- TIME_WAIT状态(2MSL)的作用
- TIME_WAIT状态(2MSL)的作用
- TCP 连接关闭的 TIME_WAIT (2MSL) 状态,及 TCP 连接状态图
- 上的时间很少了
- 为什么TCP的TIME_WAIT状态要保持2MSL?
- 深入浅出TCP协议的2MSL TIME_WAIT状态
- 深入浅出TCP协议的2MSL TIME_WAIT状态
- 功能强大但很少有人用的函数
- TCP释放连接时为什么time_wait状态必须等待2MSL时间(阅读笔记)?
- TCP释放连接时为什么time_wait状态必须等待2MSL时间
- 有人说有关DB2的书籍很少,今天在csdn上就看到了这么多,还是很丰富吗~
- 我的blog居然有人回复哦!
- TCP的2MSL问题
- 百练OJ:2713:肿瘤面积
- HDU1008
- [架构师之路]TOMCAT启动出错
- 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
- hdu 4745 Two Rabbits
- 居然很少有人质疑: 2MSL的TIME_WAIT时间真的足够保证旧连接上的所有包都消失吗?
- 数组逆序操作
- HDU
- 元素出栈、入栈顺序的合法性
- 不再纠结OpenCV图像中的x,y;width,height;cols,rows
- 日常学习2017.7.22
- java中的线程
- java-可变参数
- 内部排序-交换类排序