内容简介:上篇中记录了关于TIME_WAIT产生的原因, 本篇主要记录TIME_WAIT的作用;主动关闭方: A 被动关闭方: B上篇我们知道A在发送完对于B的FIN报文的确认报文ACK之后, 会进入TIME_WAIT状态; 但是网络环境会存在丢包的情况, 那么当主动关闭一方对于被动关闭一方的FIN确认报文ACK在网络中丢失的时候。为了能够让客户机服务器两遍的连接最终都处于CLOSED状态来释放文件数以及网络连接标识资源, 就需要有TIME_WAIT这种机制来保证。
前言
上篇中记录了关于TIME_WAIT产生的原因, 本篇主要记录TIME_WAIT的作用;
TIME_WAIT存在的作用
主动关闭方: A 被动关闭方: B
上篇我们知道A在发送完对于B的FIN报文的确认报文ACK之后, 会进入TIME_WAIT状态; 但是网络环境会存在丢包的情况, 那么当主动关闭一方对于被动关闭一方的FIN确认报文ACK在网络中丢失的时候。为了能够让客户机服务器两遍的连接最终都处于CLOSED状态来释放文件数以及网络连接标识资源, 就需要有TIME_WAIT这种机制来保证。
那么我们看一下TIME_WAIT是如何保证两边都能够进入CLOSED状态的; 我们从四个场景来看:
场景一、A发送给B的ACK确认报文正确到达B
这个时候没有什么问题, 处于LAST_ACK状态的B收到A的确认报文之后, 直接进入CLOSED状态, 而 A经过 2MSL的等待之后, 进入CLOSED状态
场景二、A发送给B的ACK确认报文没有到达B, A处于TIME_WAIT状态
这个时候B经过一段时间(这个一段时间应该是1MSL, 待确认)没有收到A的确认报文ACK, 那么B会重新发送FIN报文给A, 这个时候因为A的TIME_WAIT状态会持续 2MSL, 所以后面也会有两种情况:
1、在TIME_WAIT时间范围内, A收到了B重发的FIN报文, 那么A会回一个ACK给到B, 并不确保ACK一定到B; 等到TIME_WAIT超时之后, 进入CLOSED状态. 2、在TIME_WAIT时间范围内, A并没有收到B重发的FIN报文, 那么A就进入CLOSED状态, 但是B还处于LAST_ACK状态, 那么经过 2个MSL之后(这里为什么是两个MSL, 理论上应该是自己发送的FIN + A返回的ACK报文 在网络中存在的最大时长, 待确认), 会再发送FIN给A, 因为此时A已经处于CLOSED状态, 所以A会发送给B一个RST报文, 来表示我已经断开连接了, 你也断开吧; 如果B一直收不到任何反馈, 那么会一直定时发送FIN给A 直到TCP的重传超时, B会由LAST_ACK状态进入CLOSED状态; 3、在TIME_WAIT时间范围内, A并没有收到B重发的FIN报文, 那么A就进入CLOSED状态, 但是B还处于LAST_ACK状态, 如果这时候A又发起了SNY连接, 使用了上一次的端口号, 那么B收到SYN连接请求之后, 发现该连接处于LAST_ACK状态, 那么会发送RST给客户端, 导致三次握手失败;
注: 1、对于网上某一篇博客的思考,博客中提到:当客户端开启net.ipv4.tcp_tw_reuse这个属性的时候, 会出现服务端发送的FIN报文, 被新的连接接收到从而导致断开连接, 这种情况看来是不存在的; 因为服务器处于LAST_ACK的时候, 即使开启tw_reuse, 也会被服务器给reset掉, 并不会重新建立连接的. 仅为个人理解, 如有不同观点欢迎添加微信: wangchao932963710 讨论;
注: 2、对于上面思考的重新思考: 当B在超时时间内没有收到ACK的时候, 那么B会重新发送FIN, 那么此时的LAST_ACK会不会重新开始计算超时时间? 如果重新开始计算超时时间, 那么注①的理解就是正确的, 如果不会重新开始计算LAST_ACK状态的超时时间, 确实有可能B发送完FIN之后, B马上LAST_ACK超时, B的状态变为了CLOSED状态, 此时客户端重新再同一端口上面发起SYN请求, B接受请求并建立连接; 如果此时FIN才到达A端, 那么A端会如何处理呢?
1、根本不存在这种情况 2、如果丢弃, 是依托与什么判断机制来丢弃的, 3、如果断开新的连接, 那么TCP就是不可靠的传输协议了. 显然后面这种是不可能的, 所以只有去资料中查找什么机制去丢弃FIN报文了? 这个答案待后面查找资料补充.
以上所述就是小编给大家介绍的《TCP TIME_WAIT状态之作用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 图解词法作用域与作用域链
- javascript作用域之块级作用域
- javascript静态作用域和动态作用域
- JavaScript系列之作用域和作用域链
- 【7】JavaScript 函数高级——作用域与作用域链
- 深入学习js之——词法作用域和动态作用域
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web Security, Privacy and Commerce, 2nd Edition
Simson Garfinkel / O'Reilly Media / 2002-01-15 / USD 44.95
Since the first edition of this classic reference was published, World Wide Web use has exploded and e-commerce has become a daily part of business and personal life. As Web use has grown, so have ......一起来看看 《Web Security, Privacy and Commerce, 2nd Edition》 这本书的介绍吧!