博客
关于我
TCP第4次挥手为何要等待2MSL才关闭?
阅读量:301 次
发布时间:2019-03-03

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

MSL是Maximum Segment Lifetime的缩写,译为报文最大生存时间,也就是任何报文在网络上存活的最大时间,一旦超过该时间,报文就会被丢弃。2MSL也就是指的2倍MSL的时间。

回归主题,首先回顾一下。

在这里插入图片描述
假如第四次挥手失败了,因为丢失而未到达服务器会怎样呢?这样,服务器会一直收不到客户端的回应,也就无法得知客户端是否收到了即将要断开连接的请求。客户端此刻还蒙在鼓里,还在等待服务器继续发送消息。服务器不能判断客户端是否收到,本身就是一个BUG,于是才有的等待2MSL的情况。为了保证客户端最后一次挥手的报文能够到达服务器,若第4次挥手的报文段丢失了,服务器就会超时重传第3次挥手的报文段,所以客户端此时不是直接进入CLOSED,而是保持TIME_WAIT(等待2MSL就是TIME_WAIT)。当客户端再次受到服务器因为超时重传而发送的第3次挥手的请求时,客户端就会重新给服务器发送第4次挥手的报文(保证服务器能够受到客户端的回应报文)。最后,客户端、服务器才真正断开连接。说白了,等待2MSL就是为了确保服务器能够受到客户端最后的回应。
如果客户端直接CLOSED,然后又再次向服务器发起一个新连接,谁也不能保证新发起的连接和刚关闭的连接的端口号是不同的,有可能新、老连接的端口号就是一样的。假设新、老连接端口号一致,若老连接的一些数据仍滞留在网络中,这些滞留数据在新连接建立后才到达服务器,鉴于前后端口号一致,TCP协议就默认这些数据属于新连接,于是数据就这样乱成一锅粥了。所以TCP连接还要在TIME_WAIT状态下等待2MSL,确保所有老连接的数据都在网络中消失!

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

你可能感兴趣的文章
MFC中精确获取时间并且计算事情所用时间
查看>>
鸡啄米之VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)
查看>>
Linux系统基本操作命令
查看>>
程序员职业划分
查看>>
MFC使用opencv在picture控件上面播放摄像头视频
查看>>
浪潮服务器电脑BOOST界面设置开机启动
查看>>
C++开源网络库(Socket library)
查看>>
Unity材质双面显示+安卓发布时候也能出现
查看>>
Unity使用try-catch
查看>>
java面试知识总结2021
查看>>
mysql的五种日期和时间类型
查看>>
23种设计模式 GoF23
查看>>
六祎-学习IT网站
查看>>
六祎-Photoshop快捷键
查看>>
【六袆-Mysql】insert新增数据,并获取主键 selectKey的说明
查看>>
【六袆-Java】哈希算法内存图;set集合低层采用哈希表存储元素;哈希算法的流程
查看>>
第七章PL/SQL语言开发
查看>>
Oracle 隐式游标I
查看>>
JAVA面试基础
查看>>
linux下最全的快捷键大全
查看>>