TIME_WAIT 状态的存在的原因?为什么需要 TIME_WAIT 状态?
主动发起关闭连接的一方,才会有 TIME-WAIT 状态。
需要 TIME-WAIT 状态,主要是两个原因:
- 防止具有相同「四元组」的「旧」数据包被收到;
- 保证「被动关闭连接」的⼀方能被正确的关闭,即保证最后的 ACK 能让被动关闭方接收,从而帮助其正常关闭。
TCP 四元组可以唯⼀的确定⼀个连接,四元组包括如下:
- 源地址
- 源端⼝
- ⽬的地址
- ⽬的端⼝
原因⼀:防止旧连接的数据包
假设 TIME-WAIT 没有等待时间或时间过短,被延迟的数据包抵达后会发⽣什么呢?
如上图黄色框框服务端在关闭连接之前发送的 SEQ = 301 报文,被网络延迟了。
这时有相同端口的 TCP 连接被复用后,被延迟的 SEQ = 301 抵达了客户端,那么客户端可能会正常接收这个过期的报文,这就会产生数据错乱等严重的问题。
所以,TCP 就设计出了⼀个机制,经过 2MSL 这个时间,⾜以让两个方向上的数据包都被丢弃,使得原来 连接的数据包在⽹络中都⾃然消失,再出现的数据包⼀定都是新建立连接所产生的。
原因二:保证连接正确关闭
TIME-WAIT 作⽤是等待足够的时间以确保最后的 ACK 能让被动关闭方接收,从而帮助其正常关闭。
假设 TIME-WAIT 没有等待时间或时间过短,断开连接会造成什么问题呢?
如图红色框客户端四次挥手的最后⼀个 ACK 报文如果在网络中被丢失了,此时如果客户端 TIME-WAIT 过短或没有,则就直接进入了 CLOSED 状态了,那么服务端会⼀直处在 LASE_ACK 状态。
当客户端发起建立连接的 SYN 请求报文后,服务端会发送 RST 报文给客户端,连接建立的过程就会被终止。
如果 TIME-WAIT 等待足够长的情况就会遇到两种情况:
- 服务端正常收到四次挥手的最后⼀个 ACK 报文,则服务端正常关闭连接。
- 服务端没有收到四次挥手的最后⼀个 ACK 报文时,则会重发 FIN 关闭连接报文并等待新的 ACK 报文。
所以客户端在 TIME-WAIT 状态等待 2MSL 时间后,就可以保证双方的连接都可以正常的关闭。
TIME_WAIT 状态的存在的原因?为什么需要 TIME_WAIT 状态?相关推荐
- linux 进程 状态 ri,LINUX下解决netstat查看TIME_WAIT状态过多问题(转)
# netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c 16 CLOSING 130 ESTABLISHED 298 FIN_WAIT1 13 FIN_WA ...
- Kubernetes pod 状态出现 ImagePullBackOff 的原因
通过一个试验作为例子来学习一下. 我们创建一个名为fail 的 deployment,让它故意指向一个实际并不存在的 Docker 镜像: $ kubectl run fail --image=jer ...
- php中http有哪些状态码,http状态码是什么意思?http常用状态码有哪些
作为开发人员对http状态码都是很熟悉的,只有对这些http状态码熟悉,才能找到问题的关键所在,那么http状态码是什么意思?http常用状态码有哪些?接下来php中文网就向大家介绍一下http状态码 ...
- cmd中执行netsh wlan start hostednetwork 无法启动承载网络。 组或资源的状态不是执行请求操作的正确状态。
cmd中执行netsh wlan start hostednetwork 无法启动承载网络. 组或资源的状态不是执行请求操作的正确状态. 解决办法: 1.打开网络共享中心,点击"更改适配器& ...
- HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)
TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...
- java修改状态码_JavaWeb-用过滤器修改请求的返回状态码
问题: 客户SDK对接服务,默认只识别200和非200的请求状态码.需要修改当前应用的状态码(如将201转为200) 解决方案:通过扩展HttpServletResponseWrapper,获取到每个 ...
- php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)
状态模式 (State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.其别名为状态对象(Objects for States) (一)为什么需要状态模式 ...
- spring期刊状态_无状态Spring安全性第2部分:无状态认证
spring期刊状态 Spring Stateless Security系列的第二部分是关于以无状态方式探索身份验证的方法. 如果您错过了有关CSRF的第一部分,可以在这里找到. 因此,在谈论身份验证 ...
- 无状态Spring安全性第2部分:无状态身份验证
Spring Stateless Security系列的第二部分是关于以无状态方式探索身份验证的方法. 如果您错过了CSRF的第一部分,可以在这里找到. 因此,在谈论身份验证时,其全部内容就是让客户端 ...
- 在使用win 7 无线承载网络时,启动该服务时,有时会提示:组或资源的状态不是执行请求操作的正确状态。 网上有文章指出,解决这个问题的方法是在设备管理器中启动“Microsoft托管网络虚拟适配
在使用win 7 无线承载网络时,启动该服务时,有时会提示:组或资源的状态不是执行请求操作的正确状态. 网上有文章指出,解决这个问题的方法是在设备管理器中启动"Microsoft托管网络虚拟 ...
最新文章
- BGP的各种属性配置
- Linux系统断电后起不来,centos/linux 断电后,开机光标闪现不能开启,重新引导
- fastJson toJSONString注意点
- Reading SBAR SDN flow-Based monitoring and Application Recognition
- 运行cudasift
- 【图像处理】RGB图像边缘检测
- Compound供应量突破70亿美元
- UltraEdit 所有快捷键 说明
- 【渝粤教育】国家开放大学2018年秋季 3722-22T燃气输配工程 参考试题
- 【C++】C++继承和派生类、虚基类
- 无人驾驶-控制-阿克曼模型
- 冠层分析法(VCP)提取叶面积指数
- 电容在微分、积分电路中的本质以及应用
- MATLAB——根轨迹原理及其Matlab绘制
- React Native学习-第一篇
- vue传值给子页面html,vue.js如何父传子?
- 这可能是东半球最详细的Linux下搭建Jenkins服务器实现自动打包的教程(上)
- 1035神奇的数字9
- 美多商城项目之用户登录:账号登录、QQ登录
- jsp企业财务管理系统设计与实现(论文+PPT+源码