TIME_WAIT是什么?http连接

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

TIME_WAIT是什么?http连接的相关文章

Windows操作系统error10048端口释放问题TIME_WAIT状态的TCP连接快速回收时间

本文来自于https://blog.csdn.net/stillfantasy1988/article/details/43196627?tdsourcetag=s_pcqq_aiomsg.http://www.huawei.com/ecommunity/bbs/10221255.html 1.问题 大规模Windows环境下,采用Nginx反向代理服务后,操作系统会产生较多TIME_WAIT的TCP(Transmission Control Protocol)连接,操作系统默认TIME_WAI

处于CLOSE_WAIT和TIME_WAIT状态连接的原因及解决

常用的三个状态是:ESTABLISHED   TIME_WAIT   CLOSE_WAIT ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭. 具体每种状态什么意思,其实无需多说,看看下面这种图就明白了,注意这里提到的服务器应该是业务请求接受处理的一方: 这么多状态不用都记住,只要了解到我上面提到的最常见的三种状态的意义就可以了.一般不到万不得已的情况也不会去查看网络状态,如果服务器出了异常,百分之八九十都是下面两种情况: 1.服务器保持

TCP 连接中的TIME_WAIT

原文:http://blog.csdn.net/wangpengqi/article/details/17245349 这就有个细节,一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么情况下服务端先断? 百度后,找到原因,主要有http1.0和http1.1之间保持连接的差异以及http头中connection.content-length.Transfer-encoding等参数有关: 当然,在nginx中,对于http1.0与http1.1也是支持长连接的.什么是长连接呢?我

TCP连接(Time_Wait、Close_Wait)说明

修改Time_Wait和CLOSE_WAIT时间 修改Time_Wait参数的方法 (在服务端修改)Windows下在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters,添加名为TcpTimedWaitDelay的DWORD键,设置为30,以缩短TIME_WAIT的等待时间 解决CLOSE_WAIT的方法:(在客户端修改)1 一般原因都是TCP连接没有调用关闭方法.需要应用来处理网络链接关闭.2 对于Web请

TCP短连接TIME_WAIT问题解决方法大全

tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”,长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接的TIME_WAIT问题. 短连接最大的优点是方便,特别是脚本语言,由于执行完毕后脚本语言的进程就结束了,基本上都是用短连接.但短连接最大的缺点是将占用大量的系统资源,例如:本地端口.socket句柄.导致这个问题的原因其实很简单:tcp协议层并没有长短连接的概念,因此不管长连接还是短连接,连接建立

性能测试机中存在大量的TIME_WAIT状态的连接,影响并发压力的发起

现在一个测试项目,发现性能测试机中有很多TIME_WAIT状态的TCP连接,在网上查了一下,这种状态也叫TCP半连接状态. 测试环境:3台winserver测试机,其中包括一台压力控制机,即controller机器 服务器环境:websphere+DB2 问题表现:controller机器使用其中任何一台windows测试机并发5个vuser或者更多,都会在8分钟或者10分钟左右出现大量的失败交易 分析:通过在cmd中查看netstat -ano > d:/port.txt(把netstat打印

TCP/IP协议--TIME_WAIT状态存在的原因

1. 实际问题         初步查看发现,无法对外新建TCP连接时,线上服务器存在大量处于TIME_WAIT状态的TCP连接(最多的一次为单机10w+,其中引起报警的那个模块产生的TIME_WAIT约2w),导致其无法跟下游模块建立新TCP连接. TIME_WAIT涉及到TCP释放连接过程中的状态迁移,也涉及到具体的socket api对TCP状态的影响,下面开始逐步介绍这些概念. 2. TCP状态迁移        面向连接的TCP协议要求每次peer间通信前建立一条TCP连接,该连接可抽

linux 查看TCP连接IP统计小程序

#!/usr/bin/env python #coding:utf8 import commands import time import sys def main(count_list): print "数量\t\tIP地址 \t\t\t连接状态" for i in count_list: for x in i.split(): if len(x) > 14: print "%s \t"% x, else: print "%s \t\t"

Linux 大量的TIME_WAIT解决办法

发现存在大量TIME_WAIT状态的连接tcp        0      0 127.0.0.1:3306              127.0.0.1:41378             TIME_WAITtcp        0      0 127.0.0.1:3306              127.0.0.1:41379             TIME_WAITtcp        0      0 127.0.0.1:3306              127.0.0.1:39