如何关闭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攻击)可以通过增加服务器内存解决并发访问请求过多的状况.
只能缓解,无法解决。
 

相关文章推荐

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

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

windows 下解决 Time_Wait 和 CLOSE_WAIT 方法

修改Time_Wait参数的方法  Windows下在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters,添加名...

linux下如何释放TIME_WAIT

今天服务网站明显过慢查年了一下服务器联接数,纠结于怎么搞定TIME_WAIT # netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c        68...

ES _type 的相关整理

ES、elasticSearch、_type

Elasticsearch增、删、改、查操作深入详解

引言: 对于刚接触ES的童鞋,经常搞不明白ES的各个概念的含义。尤其对“索引”二字更是与关系型数据库混淆的不行。本文通过对比关系型数据库,将ES中常见的增、删、改、查操作进行图文呈现。能加深你对...

TCP 连接关闭的 TIME_WAIT (2MSL) 状态,及 TCP 连接状态图

上学时画的 TCP 连接状态图,本来是为了搞清楚 socket 编程时的一个问题:客户端通常不绑定(bind()) inet 地址结构,而采用随机的端口建立连接 socket(connect())。如...
  • kaylc
  • kaylc
  • 2011年02月26日 15:43
  • 2260

Netstat命令详解 如何关闭TIME_WAIT连接 如何查看nginx的访问流量

做计算机管理员,我们都必要了解一下netstat这个命令,它是一个查看网络连接状态的工具,在windows下也默认有这个工具。 Netstat命令详解 netstat命令怎样使用 如何关闭TIME_...

关于流量升高导致TIME_WAIT增加,MySQL连接大量失败的问题

有个应用就是每次都会去查一个接口,接口返回用户的信息数据,从而展现不同的页面效果。大致流程如下 应用APP(电信)->  memcache ->电信custom接口 ->master-db 应...
  • ldb2741
  • ldb2741
  • 2012年05月09日 19:46
  • 1118

tcp短连接TIME_WAIT问题解决方法大全(3)——tcp_tw_recycle

【tcp_tw_recycle和tcp_timestamps】 参考官方文档(http://www.kernel.org/doc/Documentation/networking/ip-sysctl....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何关闭time_wait连接?
举报原因:
原因补充:

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