这张图较为直观,对照看下图
TIME_WAIT
一般来说,tcp正常关闭需要四个包。比如a和b关闭连接,a先给b发一个fin,b会进行确认ack,然后b也会发出fin,当a接受到这个fin,并发出最后一个ack后,就会处于time_wait状态,通常是所估计的最大分段使用期的2倍(称为2MSL,通常为2分钟)
虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文,并保证于此。
那么问题来了:
我写一个测试程序,循环调用某http接口,并没有启用keep-alive, 如果有time_wait状态存在的话,理论上两次请求中间,至少要等待2MSL时间?不是这样呢?
使用org.apache.httpcomponents:httpclient,写一个简单测程序,循环发起http调用,使用wiresharp抓发,结果如下
结论:主动发起关闭连接的一方,进入time_wait状态,此时进程所占用的端口号不能被释放,但是断开连接后再次连接时,SOCKET将使用了不同的端口,等几分钟后,原有的端口就会自动关闭了
- 大小: 234.5 KB
- 大小: 43.3 KB
- 大小: 177.9 KB
分享到:
相关推荐
近期服务器出现大量time_wait的TCP连接造成服务器连接数过多而最终导致tomcat假死状态。连接服务器查看连接数的时候提示如下。 [root@test apache-tomcat-7.0.53]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a...
tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”, 长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接的TIME_WAIT...
可靠的关闭TCP连接 在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发 fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以 主动方要处于 TIME_WAIT 状态,而不能是 CLOSED ...
LINUX 大量TIME_WAIT状态的连接解决方法
修改注册表中的tcpip的TIMEWAIT回收时间属性值,需要重启后生效 在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,添加名为TcpTimedWaitDelay的DWORD键,设置为十进制0,以缩短TIME_WAIT...
linux c 网络编程 测试tcp连接的TIME_WAIT状态 非常适合于初学者
NULL 博文链接:https://bert82503.iteye.com/blog/2147899
netstat显示 TIME_WAIT 的原因及解决办法 netstat显示TCP连接进入TIME_WAIT状态的原因及解决办法
摘要视图订阅01.02.03.04.05.06.162149次第9644名99篇1篇0篇30条【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导
使用 TCP 快速回收:TCP 快速回收是一种优化网络性能的方法,可以在系统内核中设置,可以减少 TIME_WAIT 状态的存在时间。 使用网络优化软件:如果想要快速解决问题,可以使用专业的网络优化软件,例如 TCP ...
客户端:CLOSED -> FIN_WAIT_1 -> FIN_WAIT_2 -> TIME_WAIT -> CLOSED 服务器:CLOSED -> LISTEN -> ESTABLISHED -> CLOSE_WAIT -> LAST_ACK -> CLOSED TIME_WAIT 状态 TIME_WAIT 状态是一个非常重要的状态,它的...
1 检测web服务器的链接数量及状态: ...122 125.162.71.199 TIME_WAIT 99 79.119.125.43 TIME_WAIT 81 125.167.243.77 TIME_WAIT 75 110.137.106.75 TIME_WAIT 29 118.97.140.166 TIME_WAIT 29 115.192.
TIME_WAIT 状态的存在是为了确保 TCP 连接的可靠终止和允许老的重复分节在网络中消逝。 了解 TCP 连接状态是非常重要的,因为它可以帮助我们更好地理解 TCP 协议的工作机理,并更好地解决网络连接问题。
TCP连接中time_wait是什举状忞?意丿?好处坏处? 第事大题 算法秳序 1. 呾2010年校招童词几乎一样,网上有癿。 2. 统计英文文本宋整句子数(字母开头句号结尾),英文文本叧包吨大小写英文字母,空格,逗号,...
time_wait值比较高的话,我们要考虑看我们内核是否需要调优,太高的time_wait值的话会占用太多端口,要是端口少的话后果不堪设想 一、TCP状态介绍 1、man netstat查看TCP的各种状态信息描述: LISTEN :侦听来自...
在TIME-WAIT状态下的TCP连接 收到SYN后会发生什么557-569
//TCP连接的数目 // nNum = 0; for (int i = 0; i; i++) { m_PortList.InsertItem(i,""); sTemp.Format("%03d",i+1); m_PortList.SetItemText(i,0,sTemp); m_PortList.SetItemText(i,1,"TCP"); ...
通过修改注册表,直接修改tcp的连接时间,避免超多的timewait
SUM(wait_time_ms - signal_wait_time_ms) * 1.0 / SUM (wait_time_ms) * 100 AS [resource_wait_percent资源等待%] FROM sys.dm_os_wait_stats --一个信号等待时间过多对资源的等待时间那么你的CPU是目前的一个...
通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高httpd服务器的吞吐率(更少的tcp连接意味着更少的系统内核调用,socket的accept()和close()调用)。