如何关闭time_wait连接?

转载 2007年09月27日 11:23:00

原贴:http://www.csna.cn/viewthread.php?tid=1468

如何关闭time_wait连接?

今天在电影服务器上使用NETSTAT -AN察看系统连接,发现有大量的TIME_WAIT连接,IP都是内网用户访问电影服务器时留下的,有的IP甚至有200-300个连接。网上查了一些资料,都说TIME_WAIT连接的默认时间是240秒,也就是四分钟。但是10分钟以后这些连接还没有消失。重启服务器,查看连接还在。请教诸位,有没有手动关闭这些连接的方法?另外,大量的time_wait对系统有哪些方面的影响?非常感谢!!

TCP结束的过程如下:

Server                             Client

-------------- FIN -------------->  server: fin_wait_1

<------------- ACK --------------- client: close_wait  server:fin_wait_2

<------------- FIN  --------------- client发出fin之后就关闭

-------------- ACK ------------->  server发出ack后进入time_wait状态

Time_Wait的默认时间是2倍的MLS,就是240秒钟。MLS是TCP 片在网上的最长存活时间。
TIME_Wait的主要作用是保证关闭的TCP端口不立即被使用。因为当网络存在延迟时,可能当某个端口被关闭后,网络中还有一些重传的TCP片在发向这个端口,如果这个端口立即建立新的TCP连接,则可能会有影响。所以使用2倍的MSL时间来限制这个端口立即被使用。

现在的问题在于,4分钟的时间有点长。
因此,Time_wait的影响,我想,首先每个TCP连接都各自有个数据结构,叫TCP Control Block.Time_wait的时候这个数据结构没有被释放。所以当有太多的TCP连接时,内存可能会被占用很多。

[ 本帖最后由 ValorZ 于 2006-9-19 10:32 编辑 ]
代做 系统集成、软件外包、美工设计、机票、旅游、饭店、办公用品
To ValorZ:TIME_WAIT状态也称为2MSL等待状态,而不是2MLS,笔误吧!

每个TCP报文在网络内的最长时间,就称为MSL(Maximum Segment Lifetime),它的作用和IP数据包的TTL类似。

RFC793指出,MSL的值是2分钟,但是在实际的实现中,常用的值有以下三种:30秒,1分钟,2分钟。

注意一个问题,进入TIME_WAIT状态的一般情况下是客户端,大多数服务器端一般执行被动关闭,不会进入TIME_WAIT状态,当在服务器端关闭某个服务再重新启动时,它是会进入TIME_WAIT状态的。

举例:
1.客户端连接服务器的80服务,这时客户端会启用一个本地的端口访问服务器的80,访问完成后关闭此连接,立刻再次访问服务器的80,这时客户端会启用另一个本地的端口,而不是刚才使用的那个本地端口。原因就是刚才的那个连接还处于TIME_WAIT状态。
2.客户端连接服务器的80服务,这时服务器关闭80端口,立即再次重启80端口的服务,这时可能不会成功启动,原因也是服务器的连接还处于TIME_WAIT状态。
这些都不是我的,但这些都会是我的。
谢谢楼上的版主们的讲解!

回复 #1 ge_xin_yu 的帖子

大量的time_wait 当然会占用更多的端口与内存资源. 如果是synflood攻击,则会发现有大量的time_wait在排队.如果流量非常大,系统可用资源被占用殆尽,则服务器通常会崩溃掉.正常情况下(非synflood攻击)可以通过增加服务器内存解决并发访问请求过多的状况.

"10分钟以后这些连接还没有消失, 重启服务器,查看连接还在",服务器重启后是会马上就会收到客户端的连接请求.这些连接一直是以前那些IP吗?还是新的IP?用科来抓一下包看看.

一般用不着手动关闭这些连接,超时后系统自然会将状态置位,你其实可以将time_wait时间改小.

如果你的电影服务器是Windows平台,可以修改下面的注册表键值:

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters]
"TcpTimedWaitDelay"=dword:0000001e

此值是TIME_WAIT状态的最长时间。缺省为240秒,最低为30秒,最高为300秒。建议为30秒。
非常感谢楼上诸位兄弟的说明!!!
版主可不可以共享一些RFC中文版的文档出来?
支持zhang_ming
引用:
正常情况下(非synflood攻击)可以通过增加服务器内存解决并发访问请求过多的状况.
只能缓解,无法解决。
 

如何解决TIME_WAIT过多的解决办法(附Socket中的TIME_WAIT状态详解)

linux和windows下TIME_WAIT过多的解决办法 如果使用了nginx代理,那么系统TIME_WAIT的数量会变得比较多,这是由于nginx代理使用了短链接的方式和后端交互的原因,使得n...
  • zjl410091917
  • zjl410091917
  • 2012年09月18日 10:53
  • 24391

一个解除TCP连接的TIME_WAIT状态限制的简便方法

/************************************ *              版权声明 *   本文为本人原创,本人拥有此文的版权。鉴于本人持续受益于开源软件社区, ...
  • wyhang0
  • wyhang0
  • 2014年10月26日 22:36
  • 1691

面试总结之time_wait状态产生的原因,危害,如何避免

前言请说说你对TCP连接中time_wait状态的理解解答:先上TCP的状态变迁图1. time_wait状态如何产生? 由上面的变迁图,首先调用close()发起主动关闭的一方,在发送最后一个AC...
  • u013616945
  • u013616945
  • 2017年08月23日 19:54
  • 1867

主动关闭TCP连接的一方为什么要有TIME_WAIT状态

TCP连接是全双工通信,主动方和被动方都需要自主关闭通信链路,TCP正常情况下连接断开会进行四次挥手(流程如上图所示): 1.由主动断开方发起FIN 2.被动方回复ACK 3.待被动方数据传输完成,被...
  • huangxiang1991
  • huangxiang1991
  • 2017年04月18日 13:41
  • 636

再谈应用环境下的TIME_WAIT和CLOSE_WAIT

昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下:http://blog.csdn.net/shootyou/article/details/6615051里头的分析过程有提到...
  • shootyou
  • shootyou
  • 2011年07月21日 10:50
  • 39243

如何关闭time_wait连接?

原贴:http://www.csna.cn/viewthread.php?tid=1468 ...
  • chinalinuxzend
  • chinalinuxzend
  • 2007年09月27日 11:23
  • 5005

服务器TIME_WAIT和CLOSE_WAIT详解和解决办法

服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
  • tengliu6
  • tengliu6
  • 2017年11月28日 16:09
  • 89

理解tcp关闭连接中的time_wait状态

首先看一下tcp关闭连接时的四次握手过程: 1.Client向Server发送FIN包,表示Client主动要关闭连接,然后进入FIN_WAIT_1状态,等待Server返回ACK包。此后Cl...
  • godleading
  • godleading
  • 2016年03月10日 19:16
  • 1232

netstat下time_wait状态的tcp连接

netstat -an 192.168.12.13:3306      192.168.12.12:30443      TIME_WAIT 192.168.12.13:3306     ...
  • isoleo
  • isoleo
  • 2016年11月25日 15:52
  • 1592

服务器TIME_WAIT和CLOSE_WAIT详解和解决办法

近来在写服务端的时候纠结服务端要不要主动调用close()关闭socket,后来深入了解tcp断开连接四次握手,心中有点答案了。 下面内容均为转载:昨天解决了一个HttpClient调用错误导致的服...
  • luomoshusheng
  • luomoshusheng
  • 2016年07月25日 23:44
  • 2885
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何关闭time_wait连接?
举报原因:
原因补充:

(最多只允许输入30个字)