在TCP断开的过程中会有四个状态变化过程,如下图所示:

在连接撤销过程中,有如下过程:                                          
1.HOST1上的应用程序关闭己方的连接导致TCP发送一个FIN消息给HOST2。
2.HOST2发送一个确认消息给HOST1,并且HOST2把FIN作为EOF递交给HOST2上的应用程序。
3.一段时间过后,HOST2上的应用程序关闭它那边的连接,引发一个FIN消息给HOST1。
4.HOST1给HOST2发送一个确认消息,然后HOST2关闭连接并释放资源,然而,HOST1却没有关闭连接,而是进入了TIME_WAIT状态,并为两个最大段生存时间(2MSL)保留在此状态.
 
为什么需要TIME_WAIT?
1.因为在第四步的时候,HOST1发送的ACK可能丢失并导致HOST2重新发送FIN消息,TIME_WAIT维护连接状态.
  如果执行主动关闭的一方HOST1 不进入到TIME_WAIT状态就关闭连接那会发生什么呢?当重传的FIN消息到达时,因为TCP已经不再有连接的信息了,所以就用RST(重新启动)消息应答,导致HOST2进入错误的状态而不是有序终止状态,如果发送最后ACK消息的一方处于TIME_WAIT状态并仍然记录着连接的信息,它就可以正确的响应对等方HOST2的FIN消息了.
2.TIME_WAIT为连接中”离群的段”提供从网络中消失的时间.
  考虑一下,如果延迟或者重传段在连接关闭后到达时会发生什么呢?通常情况下,因为TCP仅仅丢弃该数据并响应RST消息,所以这不会造成任何问题。当RST消息到达发出延时段的主机时,因为该主机也没有记录连接的任何信息,所以它也丢弃该段。然而,如果两个相同主机之间又建立了一个具有相同端口号的新连接,那么离群的段就可能被看成是新连接的,如果离群的段中数据的任何序列号恰恰在新连接的当前接收窗口中,数据就会被重新接收,其结果就是破坏新连接。

TIME_WAIT是什么?相关推荐

  1. Linux socket TIME_WAIT 优化

    如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决, vim /etc/sysctl.conf 编辑文件,加入以下内容: net.ipv4.tcp_syncookies = 1 ne ...

  2. 为什么TCP的TIME_WAIT状态要保持2MSL?

    TIMEWAIT状态也称为 2MSL等待状态. 每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime). 它是任何报文段被丢弃前在网络内的最长时间. ...

  3. Linux-TCP/IP TIME_WAIT状态原理

    TIME_WAIT状态原理 ---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动关闭连接时,会发送最后一个 ...

  4. 服务压测发现怪异现象,一顿排查,揪出“TIME_WAIT”这个内鬼

    点击关注公众号,Java干货及时送达 最近有同事在用 ab 进行服务压测,到 QPS 瓶颈后怀疑是起压机的问题,来跟我借测试机,于是我就趁机分析了一波起压机可能成为压测瓶颈的可能,除了网络 I/O.机 ...

  5. 面试官问:大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 几个方面: 问题描述:什么现象?什么影响? 问题分析 解决 ...

  6. linux 大量的TIME_WAIT解决办法

    统计在一台前端机上高峰时间TCP连接的情况,统计命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 结果: ...

  7. nginx大量TIME_WAIT的解决办法(转载)

    2019独角兽企业重金招聘Python工程师标准>>> 转载自: http://liuyieyer.iteye.com/blog/2214722?utm_source=tuicool ...

  8. TCP连接状态详解及TIME_WAIT过多的解决方法

    TCP建立连接的三次握手过程,以及关闭连接的四次握手过程. TCP建立连接的三次握手过程,以及关闭连接的四次握手过程. 1.建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务 ...

  9. TCP端口状态说明ESTABLISHED、TIME_WAIT、 CLOSE_WAIT

    一. 首先说下tcp端口的几种状态: 1.LISTENING状态 FTP服务启动后首先处于侦听(LISTENING)状态. 2.ESTABLISHED状态 ESTABLISHED的意思是建立连接.表示 ...

  10. 记一次TIME_WAIT网络故障

    最近发现一个PHP脚本时常出现连不上服务器的现象,调试了一下,发现是TIME_WAIT状态过多造成的,本文简要介绍一下解决问题的过程. 遇到这类问题,我习惯于先用strace命令跟踪了一下看看: sh ...

最新文章

  1. 谷歌的AI应用开发之道
  2. 2021年春季学期-信号与系统-第十三次作业参考答案-第二小题
  3. 用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy
  4. 用自定义IHttpModule实现URL重写
  5. MySQL - MySQL不同存储引擎下索引的实现
  6. linux切换图片的代码,cacaview – Linux终端下将图片转换ASCII Art代码图案
  7. Java环境搭建若干问题
  8. jQuery介绍 DOM对象和jQuery对象的转换与区别
  9. UNIX环境高级编程——线程同步之条件变量以及属性
  10. 删除电脑中用强制删除不能删除的bat命令脚本
  11. MFC对话框打开一幅图片并在picture显示和图片保存
  12. 跳频电台的设计与测试挑战
  13. java 金字塔 2的幂_三角形数(金字塔三角形数量公式)
  14. CentOS7 下MariaDB安装与简单配置(最新)
  15. C++报错信息:LNK2001:无法解析的外部符号 原因分析及解决方法
  16. 差分数组分析详解+例题
  17. 剖析Mozilla代码之七武器
  18. STM32选型手册 2021
  19. 【进制转换】— 包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细
  20. 大学计算机实验报告信息的表示与转换,大学计算机实验报告一(8页)-原创力文档...

热门文章

  1. MySQL主外键以及基本查询
  2. 作用力与反作用力摘要(补课= =)
  3. cdn服务器性能要求,搭建直播平台选择CDN服务器的标准
  4. 外网访问内网服务器设置方法(路由器设置)
  5. 大数据开发就业如何?好找工作吗?
  6. 亿华通寻路:“氢”能之火,何以燎原?
  7. 【Linux粘滞位】解读
  8. Linuxmint20.1解决wine 微信输入框文字显示小黑块的问题
  9. python导入自定义的包
  10. c语言程序二级模拟试卷,C语言程序设计二级考试模拟题集.doc