博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
居然很少有人质疑: 2MSL的TIME_WAIT时间真的足够保证旧连接上的所有包都消失吗?
阅读量:4142 次
发布时间:2019-05-25

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

        看了不少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来说话。

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

你可能感兴趣的文章
最长递增子序列
查看>>
从一列数中筛除尽可能少的数,使得从左往右看这些数是从小到大再从大到小...
查看>>
判断一个整数是否是回文数
查看>>
经典shell面试题整理
查看>>
腾讯的一道面试题—不用除法求数字乘积
查看>>
素数算法
查看>>
java多线程环境单例模式实现详解
查看>>
将一个数插入到有序的数列中,插入后的数列仍然有序
查看>>
在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出no found
查看>>
万年历
查看>>
作为码农你希望面试官当场指出你错误么?有面试官这样遭到投诉!
查看>>
好多程序员都认为写ppt是很虚的技能,可事实真的是这样么?
查看>>
如果按照代码行数发薪水会怎样?码农:我能刷到公司破产!
查看>>
程序员失误造成服务停用3小时,只得到半月辞退补偿,发帖喊冤
查看>>
码农:很多人称我“技术”,感觉这是不尊重!纠正无果后果断辞职
查看>>
php程序员看过来,这老外是在吐糟你吗?看看你中了几点!
查看>>
为什么说程序员是“培训班出来的”就是鄙视呢?
查看>>
码农吐糟同事:写代码低调点不行么?空格回车键与你有仇吗?
查看>>
阿里p8程序员四年提交6000次代码的确有功,但一次错误让人唏嘘!
查看>>
一道技术问题引起的遐想,最后得出结论技术的本质是多么的朴实!
查看>>