文章目录

  • 为什么需要TIME_WAIT
    • 一、何为TIME_WAIT?
    • 二、为什么需要TIME_WAIT
      • 原因一:防止被动关闭方的延迟数据被人窃取
      • 原因二:防止被动关闭方没有收到最后的ACK

为什么需要TIME_WAIT

一、何为TIME_WAIT?

我们在日常做服务器的研发中、或者面试网络部分知识的时候,会经常问到TIME_WAIT这个词,这个词作为服务端的开发者尤为重要。TIME_WAIT是TCP协议中断开连接所经历的一种状态。

上图是TCP连接的状态转换,包括了一些触发条件,如果不是很直观,可以对比看下面的简图。

这里面作为主动关闭的一方(Client)出现了TIME_WAIT状态,目的是告诉Server端,自己没有需要发送的数据,但是它仍然保持了接收对方数据的能力,一个常见的关闭连接过程如下:

1、当客户端没有待发送的数据时,它会向服务端发送 FIN 消息,发送消息后会进入 FIN_WAIT_1 状态;

2、服务端接收到客户端的 FIN 消息后,会进入 CLOSE_WAIT 状态并向客户端发送 ACK 消息,客户端接收到 ACK 消息时会进入 FIN_WAIT_2 状态;

3、当服务端没有待发送的数据时,服务端会向客户端发送 FIN 消息;

4、客户端接收到 FIN 消息后,会进入 TIME_WAIT 状态并向服务端发送 ACK 消息,服务端收到后会进入 CLOSED 状态;

5、客户端等待两个最大数据段生命周期(Maximum segment lifetime,MSL)的时间后也会进入 CLOSED 状态;

二、为什么需要TIME_WAIT

TIME_WAIT一定是发生在主动关闭一方

被动关闭一方,会直接进入CLOSED状态,而主动关闭一方需要等待2*MSL时间才会最终关闭。

原因:

1、防止被动关闭方的延迟数据被人窃取

2、防止被动关闭方没有收到最后的ACK

原因一:防止被动关闭方的延迟数据被人窃取

如下图所示,

1、在①中,服务端发送seq=1001的消息,由于网络延迟或其他原因,没有及时到达Client1客户端,导致整个包一直存留在网络环境的传输过程中。

2、在②中,Client1收到server的FIN包之后,变成了TIME_WAIT状态,这里假设TIME_WAIT等待的时间很短暂,那么,还没等之前的那个延迟包seq=1001到来,就回复给了Server最后一个ACK包。那么Server就会变成CLOSED状态。

3、在③中,相同的端口号的Client2的TCP链接被重用后

4、在④中,seq=1001的延迟包消息才发送给客户端,而这个延迟的消息却被Client2正常接收,主要就会给Client2带来严重的问题。所以TIME_WAIT不要轻易的调整,或者缩小时间,可能就会出现这种问题。

原因二:防止被动关闭方没有收到最后的ACK

该作用就是等待足够长的时间以确定远程的TCP链接收到了其发出的终止链接消息FIN包的回执消息ACK包。

如下图所示:

1、在①中,CLient1端主动发起关闭链接,Server针对Client1FIN回执了ACK包,然后接着发送了自己的FIN包,等待Client1回执最终的ACK包。

2、在②中,这里假设TIME_WAIT的时间不足够充分,当Server还没有收到 ACK 消息时,Client1就主动变成CLOSED状态。

3、在③中,由于Server一直没有等到自己FIN包的ACK应答包,导致一直处于LAST_ACK状态。

4、在④中,因为 服务端因为没有收到 ACK 消息,当Client2重新与Server建立TCP链接,认为当前连接是合法的,CLient2重新发送 SYN 消息请求握手时会收到ServerRST 消息,连接建立的过程就会被终止。

所以,我们在默认情况下,如果客户端等待足够长的时间就会遇到以下两种情况:

1.服务端正常收到了 ACK 消息并关闭当前 TCP 连接;

2.服务端没有收到 ACK 消息,重新发送 FIN 关闭连接并等待新的 ACK 消息;

只要客户端等待 2 MSL 的时间,客户端和服务端之间的连接就会正常关闭,新创建的 TCP 连接收到影响的概率也微乎其微,保证了数据传输的可靠性。

计算机网络之TCP中TIME_WAIT状态意义详解相关推荐

  1. 数控编程:CNC数控编程加工中功能字意义详解

    序段由次序号字.准备功用字.尺度字.进给功用字.主轴功用字.刀具功用字.辅佐功用字和程序结束符组成.此有插补参数字等.每个字都由字母开头,称为"地址". 各个功用字的含义如下: ( ...

  2. TCP端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口

    参考文章:端口状态 LISTENING.ESTABLISHED.TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口

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

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

  4. TCP的TIME_WAIT状态为什么要等待2MSL的时长

    TCP四次挥手的第四次挥手后为什么要经过TIME_WAIT状态? TIME_WAIT状态为什么是2MSL的时长?为什么不是等待其他时长? TCP第四次挥手后为什么要经过TIME_WAIT状态? 第四次 ...

  5. 计算机网络之TCP中6种标识位

    文章目录 计算机网络之TCP中6种标识位 1.TCP中6种标识位 2.SYN 3.ACK 4.FIN 计算机网络之TCP中6种标识位 1.TCP中6种标识位 标志位也叫位码.也叫控制位 SYN (sy ...

  6. TCP丢包检测技术详解

    TCP丢包检测技术详解 http://www.cctime.com/html/2007-12-6/20071261023151210.htm           2007年12月6日 10:23  中 ...

  7. python爬虫常见报错_Python爬虫常见HTTP响应状态码详解

    在使用Python进行网页数据抓取时,经常会遇到无数据返还或错误等异常,这个时候可以通过status_code命令来查看获得http请求返回的状态码,以便查找原因并制定相应的解决方案.import r ...

  8. mysql in从数据库取数_MySQL数据库中 where in 用法详解

    本文主要向大家介绍了MySQL数据库中 where in 用法详解,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 这里分两种情况来介绍 WHERE column IN (valu ...

  9. [转]HTTP协议之状态码详解

    HTTP协议之状态码详解 HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了.  如果是做AJ ...

最新文章

  1. BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )
  2. c语言e怎么表示_C语言程序设计(山东联盟)
  3. Spring MVC集成slf4j-logback - 我想跟代码谈谈 - 博客频道 - CSDN.NET
  4. linux 和windows 下golang安装
  5. 尼康d850相机参数测试软件,尼康 D850最全参数信息曝光 快来围观
  6. 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.2 安装数据库软件)...
  7. latex 幻灯片演示模板
  8. python安装虚拟环境出现错误_virtualenv 安装虚拟环境问题 请大神指点一二
  9. C/C++ OpenCV均值滤波
  10. http://blog.seirsoft.com
  11. 视频编解码(十七):视频流错误检查步骤-进程查看内存方法
  12. ip设计包括什么_一天卖200多万个潮玩,泡泡玛特如何打造超级IP?
  13. Mastik:微体系结构侧信道攻击工具包
  14. debian linux ntfs,让Debian支持ntfs文件系统读写
  15. CentOS7内存清理脚本
  16. 单片机设计智能浇水系统
  17. 手把手教你在Imtoken上收录你的合约
  18. 计算机软考科目中,该怎么选择考试科目?
  19. swt包下载,swt包引入(一个简单的SWT程序实例及详解)
  20. 30岁开始学编程,学什么语言比较好?

热门文章

  1. 【虹科】如何逐跳识别网络问题
  2. 2019年9月30日08:22:25
  3. 毛哥的快乐生活(27) Servlet版新闻网站之接受用户页面请求
  4. jieba分词器使用指南
  5. 利用区域生长法绘画一个白色矩形框
  6. python官方论坛_python
  7. NLP 中文形近字相似度算法开源实现
  8. Ubuntu22.04应用程序启动时闪退
  9. RPG游戏《黑暗之光》流程介绍与代码分析之(八):装备系统的实现
  10. R绘图-物种、环境因子相关性网络图(简单图、提取子图、修改图布局参数、物种-环境因子分别成环径向网络图)