织梦CMS - 轻松建站从此开始!

罗索实验室

当前位置: 主页 > 基础技术 > 高性能服务器 >

TCP FIN_WAIT_2状态问题分析

落鹤生 发布于 2015-06-08 22:30 点击:次 
TCP FIN_WAIT_2状态问题分析 1、出现fin_wait_2一般为客户端,如果为服务端出现,则表明是服务端主动发起的断开。 C:\Documents and Settings\Administratornetstat -an|findstr 10.208.8.2: TCP 10.88.2.26:9002 10.208.8.2:1040 FIN_WAIT_2 TCP 10.88.2.26:9002 10.2
TAG: FIN_WAIT_2  TCP连接断开  

TCP FIN_WAIT_2状态问题分析

1、出现fin_wait_2一般为客户端,如果为服务端出现,则表明是服务端主动发起的断开。
C:\Documents and Settings\Administrator>netstat -an|findstr 10.208.8.2:
TCP    10.88.2.26:9002        10.208.8.2:1040        FIN_WAIT_2
TCP    10.88.2.26:9002        10.208.8.2:1048        FIN_WAIT_2
TCP    10.88.2.26:9002        10.208.8.2:1051        FIN_WAIT_2
TCP    10.88.2.26:9002        10.208.8.2:1052        FIN_WAIT_2
TCP    10.88.2.26:9002        10.208.8.2:1056        FIN_WAIT_2
TCP    10.88.2.26:9002        10.208.8.2:1058        FIN_WAIT_2 #netstat -an|grep 10.116.50.30  www.2cto.com  
tcp        0      0 192.168.129.44.64306   10.116.50.30.53081       FIN_WAIT_2
tcp        0      0 192.168.129.44.63611   10.116.50.30.57966       FIN_WAIT_2
tcp        0      0 192.168.129.44.57835   10.116.50.30.49188       FIN_WAIT_2
tcp        0      0 192.168.129.44.57502   10.116.50.30.52615       ESTABLISHED
2、为什么发生


 
a.客户端状态迁移(主动结束连 接)CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSEDb. 服务器状态迁移CLOSED->LISTEN->SYN收到 ->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED 有缺陷的客户端与持久连接
有一些客户端在处理持久连接(aka keepalives)时存在问题。当连接空闲下来服务器关闭连接时(基于KeepAliveTimeout指令), 客户端的程序编制使它不发送FIN和ACK回服务器。这样就意味着这个连接 将停留在FIN_WAIT_2状态直到以下之一发生:
 
客户端为同一个或者不同的站点打开新的连接,这样会使它在该个套接字上完全关闭以前的连接。
用户退出客户端程序,这样在一些(也许是大多数?)客户端上会使操作系统完全关闭连接。
FIN_WAIT_2超时,在那些具有FIN_WAIT_2状态超时设置的服务器上。
如果你够幸运,这样意味着那些有缺陷的客户端会完全关闭连接并释放你服务器的资源。 然而,有一些情况下套接字永远不会完全关闭,比如一个拨号客户端在关闭客户端程序之前从ISP断开。 此外,有的客户端有可能空置好几天不创建新连接,并且这样在好几天里保持着套接字的有效即使已经不再使用。 这是浏览器或者操作系统的TCP实现的Bug。
 
3、如何解决  www.2cto.com  
为 FIN_WAIT_2 增加 超时机制
windows:
开始->运行->输入regedit
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
在详细信息窗格中双击 TCPFinWait2Delay ,然后从 30 到 300 中输入一个值。 
请注意 如果不存在 TCPFinWait2Delay 值,必须为 REG _ DWORD 注册表值来创建它。 注册表该值控制 TCP 连接之前等待的秒数它被强制关闭, 关闭 (s,SD_SEND) 函数调用之后。 在默认值为 240 秒。 此值范围是 30 到 300。 必须手动创建此注册表值。 否则,使用默认值。
 
HP-UNIX:
#ndd -set /dev/tcp tcp_fin_wait_2_timeout 60000   (1分钟)
执行上述命令,重起系统后将失效,如果需要一致起作用,则修改下列文件:/etc/rc.config.d/nddconf
设置参数tcp_fin_wait_2_timeout值。
禁止KeepAlive  www.2cto.com  
Apache:编辑你的httpd.conf并把"KeepAlive On"改为"KeepAlive Off"。
使用linger:
linger    lig;   
lig.l_onoff=1;   
lig.l_linger=0;   
int    ilen=sizeof(linger);   
setsockopt(Socket,SOL_SOCKET,SO_LINGER,(char*)&lig,ilen);
(秩名)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www1.rosoo.net/a/201506/17328.html]
本文出处:2cto 作者:秩名
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
相关文章
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容