TCP四次挥手客户端关闭链接为什么要等待2倍MSL
来源:互联网 发布:剑网三 捏脸数据 男 编辑:程序博客网 时间:2024/05/18 20:12
问题
主动发起关闭连接的操作的一方将达到TIME_WAIT状态,而且这个状态要保持Maximum Segment Lifetime的两倍时间。为什么要这样做而不是直接进入CLOSED状态?
原因:
- 保证TCP协议的全双工连接能够可靠关闭
- 保证这次连接的重复数据段从网络中消失
解释
- 如果Client直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因,导致Server没有收到Client最后回复的ACK。那么Server就会在超时之后继续发送FIN,此时由于Client已经CLOSED了,就找不到与重发的FIN对应的连接,最后Server就会收到RST而不是ACK,Server就会以为是连接错误把问题报告给高层。这样的情况虽然不会造成数据丢失,但是却导致TCP协议不符合可靠连接的要求。所以,Client不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。
- 如果Client直接CLOSED,然后又再向Server发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,又因为TCP协议判断不同连接的依据是socket pair,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。
备注:
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/70050297
作者:WSYW126
0 0
- TCP四次挥手客户端关闭链接为什么要等待2倍MSL
- TCP四次挥手中,主动关闭方最后为什么要等待2MSL之后才能关闭连接?
- TCP第四次挥手为什么要等待2MSL
- TCP为什么要3次握手和4次挥手时等待2MSL
- TCP为什么要3次握手和4次挥手时等待2MSL
- TCP四次挥手中的2MSL是什么?
- TCP为什么要四次挥手?
- Tcp为什么要三次握手四次挥手
- TCP关闭连接(四次挥手)
- TCP为什么是四次挥手
- tcp4次挥手时,客户端为何要等2msl
- 2MSL TCP三次握手连接与四次握手关闭过程
- 2MSL TCP三次握手连接与四次握手关闭过程
- 2MSL TCP三次握手连接与四次握手关闭过程
- 2MSL TCP三次握手连接与四次握手关闭过程
- 2MSL TCP三次握手连接与四次握手关闭过程
- TCP为什么要进行三次握手四次挥手
- 为什么TCP要三次握手和四次挥手?
- 递归实例总结
- 内存泄漏及管理(01)-简述GC机制和检测工具
- MySQL数据库最基本的操作
- 实现一个简单的进度条
- windows下用navicat远程链接虚拟机Linux下MySQL数据库
- TCP四次挥手客户端关闭链接为什么要等待2倍MSL
- View事件分发与相关源码解析
- 二叉树的中序遍历-LintCode
- Java异常体系
- 四种代码快执行的优先级
- js封装获取元素类名(className)的方法
- weblogic奇葩的乱码问题
- 【Git学习】git log自定义格式
- 未经检视的人生不值得活