原贴:http://www.csna.cn/viewthread.php?tid=1468
如何关闭time_wait连接?
今天在电影服务器上使用NETSTAT -AN察看系统连接,发现有大量的TIME_WAIT连接,IP都是内网用户访问电影服务器时留下的,有的IP甚至有200-300个连接。网上查了一些资料,都说TIME_WAIT连接的默认时间是240秒,也就是四分钟。但是10分钟以后这些连接还没有消失。重启服务器,查看连接还在。请教诸位,有没有手动关闭这些连接的方法?另外,大量的time_wait对系统有哪些方面的影响?非常感谢!!
搜索更多相关主题的帖子: wait time
|
|
|
版主   
|
2#
大
中
小 发表于 2006-9-19 10:24
只看该作者
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 编辑 ]
代做 系统集成、软件外包、美工设计、机票、旅游、饭店、办公用品
|
|
|
超级版主  
|
3#
大
中
小 发表于 2006-9-19 14:19
只看该作者
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状态。
这些都不是我的,但这些都会是我的。
|
|
|
小试牛刀 
|
4#
大
中
小 发表于 2006-9-19 14:41
只看该作者
|
|
|
分析专家 
|
5#
大
中
小 发表于 2006-9-19 22:56
只看该作者
回复 #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秒。
|
|
|
初来乍到 
|
6#
大
中
小 发表于 2006-9-20 04:06
只看该作者
|
|
|
初来乍到 
|
7#
大
中
小 发表于 2006-9-21 02:40
只看该作者
|
|
|
初来乍到 
|
8#
大
中
小 发表于 2006-10-2 17:59
只看该作者
|
|
|
初来乍到 
|
9#
大
中
小 发表于 2007-5-5 01:17
只看该作者
引用:
正常情况下(非synflood攻击)可以通过增加服务器内存解决并发访问请求过多的状况.
只能缓解,无法解决。
|