文档章节

TIME_WAIT是什么?http连接

r
 ranjiewen
发布于 2016/11/03 23:48
字数 624
阅读 0
收藏 0
http连接分为:建立连接,即tcp三次握手

                    发送请求信息

                    发送响应信息

                    关闭连接(tcp四次握手);下面讲此过程:

 在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消息到达发出延时段的主机时,因为该主机也没有记录连接的任何信息,所以它也丢弃该段。然而,如果两个相同主机之间又建立了一个具有相同端口号的新连接,那么离群的段就可能被看成是新连接的,如果离群的段中数据的任何序列号恰恰在新连接的当前接收窗口中,数据就会被重新接收,其结果就是破坏新连接。

 

本文转载自:http://www.cnblogs.com/ranjiewen/p/5901298.html

r
粉丝 1
博文 203
码字总数 28
作品 0
武汉
程序员
私信 提问
TIME_WAIT和CLOSE_WAIT过多

转自大神(致敬):https://blog.csdn.net/shootyou/article/details/6622226 昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下:http://blog.csdn.net/shootyou/article/d...

sailikung
2018/08/25
0
0
系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT

高性能网络 | 你所不知道的TIMEWAIT和CLOSEWAIT 2016-02-18 大房 大房说 本文是我将最近两篇文章,重新整理成一篇,方便收藏。如果你已经阅读过前两篇,并且已经做了收藏,可以重新收藏本文即...

fdhay
2016/03/16
2.9K
1
linux和windows下TIME_WAIT过多的解决办法

如果使用了nginx代理,那么系统TIME_WAIT的数量会变得比较多,这是由于nginx代理使用了短链接的方式和后端交互的原因,使得nginx 和后端的ESTABLISHED变得很少而TIME_WAIT很多。这不但发生在...

红薯
2009/06/09
7.3K
2
服务器TIME_WAIT和CLOSE_WAIT详解和解决办法

昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http://blog.csdn.net/shootyou/article/details/6615051 里头的分析过程有提到,通过查看服务器网络状态检测到服务器有...

八戒_o
2016/02/04
449
0
ORACLE sid,pid,spid总结

概念上: 1.spid (system process id) 是操作系统层面的进程id . 2.pid(process id) 这个是基于oracle的进程id个人理解为就是oracle给自己的进程的一个编号。 3.sid.(这个就是session 的id)...

技术小美
2017/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部