FIN_WAIT_2状态解释
关于网络设备的FIN_WAIT_2状态解释出处:http://hi.baidu.com/netdemon1981/blog/item/584bfbb2aeb1d4acd9335ad9.html
在HTTP应用中,存在一个问题,SERVER由于某种原因关闭连接,如KEEPALIVE的超时,这样,作为主动关闭的SERVER一方就会进入 FIN_WAIT2状态,但TCP/IP协议栈有个问题,FIN_WAIT2状态是没有超时的(不象TIME_WAIT状态),所以如果CLIENT不关闭,这个FIN_WAIT_2状态将保持到系统重新启动,越来越多的FIN_WAIT_2状态会致使内核crash。
产生原因:
1。常连接并且当连接一直处于IDLE状态导致SERVER CLOSE时,CLIENT编程缺陷,没有向SERVER 发出FIN和ACK包
2。APACHE1.1和APACHE1.2增加了linger_close()函数,前面的帖子有介绍,这个函数可能引起了这个问题(为什么我也不清楚)
解决办法:
1。对FIN_WAIT_2状态增加超时机制,这个特性在协议里没有体现,但在一些OS中已经实现
如:LINUX、SOLARIS、FREEBSD、HP-UNIX、IRIX等
2。不要用linger_close()编译
3。用SO_LINGER代替,这个在某些系统中还能很好地处理
4。增加用于存储网络连接状态的内存mbuf,以防止内核crash
5。DISABLE KEEPALIVE
TCP FIN_WAIT_2状态问题分析
出处:http://hi.baidu.com/huochai2020/item/eb3fc2530fb52bd6d48bace5
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
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、如何解决
为 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
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);

FIN_WAIT_2状态解释的更多相关文章
- 网络的FIN_WAIT_2状态解释和分析
关于网络设备的FIN_WAIT_2状态解释出处:http://hi.baidu.com/netdemon1981/blog/item/584bfbb2aeb1d4acd9335ad9.html 在HT ...
- TCP 之 FIN_WAIT_2状态处理流程
概述 在主动关闭方发送了FIN之后,进入FIN_WAIT_1状态,在此状态收到了ACK,则进入FIN_WAIT_2状态,而FIN_WAIT_2后续要做的工作是等待接收对端发过来的FIN包,并且发送AC ...
- Memcached 查询stats及各项状态解释
一.两个最常用状态查询(掌握第一个就完全OK了) 1)查看状态:printf “stats\r\n” |nc 127.0.0.1 11211 2)模拟top命令查看状态:watch “ech ...
- Tcp抓包以及tcp状态解释
tcp三次握手 发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手:接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它, ...
- 迅雷中Peer连接信息中的状态解释(转)
在标准 Peer-to-Peer(P2P 点对点网络)中,以"Flags"表示 Peer Status(Peer 状态).其中: D - 正从 Peer 下载(感兴趣:解阻塞)搜索 ...
- [SVN] SVN在Eclipse里的各个状态解释
中文意义: A代表添加D代表删除U代表更新C代表合并,并且合并中有冲突G代表合并,合并中没有冲突 每个字母代表的意义: U = item (U)pdated to repository version ...
- android手机状态解释,比方android.os.Build.VERSION.SDK
//BOARD 主板 String phoneInfo = "BOARD: " + android.os.Build.BOARD; phoneInfo += ", BOO ...
- TCP连接状态具体解释
tcp状态: LISTEN:侦听来自远方的TCPport的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ...
- 关于TCP连接状态的解释
TCP各个状态主要存在于三次握手和四次挥手的过程 1.TCP建立连接时的三次握手: 服务端应用监听端口处于LISTEN状态,等待建立连接. 第一次握手:客户端发送SYN=一个随机数,然后进入SYN_S ...
随机推荐
- vue项目打包后的资源路径问题
最近做的vue项目,本地测试完成后,build上线,却发现了文件路径问题,提示各种诸如js,css等资源找不到的错: 正确解决方式有两种,一种是绝对路径配置,详细可以网上查,个人推荐第二种相对路径,这 ...
- Ubuntu 16.04 强制使用ipv4安装apt-get
参考文献:https://www.linuxidc.com/Linux/2015-09/123340.htm 起因:每次校园网都要自动用ipv6不知道为什么又总之链接不上,导致安装失败,有以下命令强行 ...
- IAR project build with command line
The simple way is that using iarbuild.exe project.eww -build Release/Debug Release/Debug is the con ...
- defer、return、返回值,这三者的执行逻辑
defer.return.返回值,这三者的执行逻辑是: return 最先执行,return 负责将结果写入返回值中:接着defer执行,可能修改返回值:最后函数携带当前返回值退出.
- ORACLE数据库在导入导出时序列不一致的问题
ORACLE数据库在导入导出时序列不一致的问题 在使用ORACLE数据库时,当给一个表设置自增字段时,我们经常会使用到序列+触发器来完成.但当你需要对数据库进行导入导出时,序列很容易出问题. 当你 ...
- java自动更新问题
第一次运行公司erp,打开的是jnlp文件,在弹出的第一个框上,同事点了更新java,后面悲剧了,再也没有办法打开erp了,直接跳到java官网上要求更新,而erp在java8上有一些功能不兼容,所以 ...
- 【配置阿里云 I】申请配置阿里云服务器,并部署IIS和开发环境,项目上线经验
https://blog.csdn.net/vapaad1/article/details/78769520 最近一年在实验室做web后端开发,涉及到一些和服务器搭建及部署上线项目的相关经验,写个帖子 ...
- PRBS
PRBS是Pseudo Random Binary Sequence的缩写,即“伪随机二进制序列”的意思.PRBS码具有“随机”特性,是因为在PRBS码流中,二进制数“0”和“1”是随机出现的,但是它 ...
- C#中将鼠标光标变为忙碌状态
this.Cursor = System.Windows.Forms.Cursors.WaitCursor; do_longtime_work(); this.Cursor = System.Wind ...
- PHP安装Eclipse与使用
PHP有非常多相当不错的开发工具,如Zend Studio.NetBeans.phpdesigner等,但对于习惯Java编程的程序员们来说,最经常使用的还要属Eclipse. 那么Eclipse能用 ...