再谈TCP状态

发表于:2007-05-25来源:作者:点击数: 标签:http存在应用TCP状态
在HTTP应用中,存在一个问题,SERVER由于某种原因关闭连接,如KEEPALIVE的超时,这样,作为主动关闭的SERVER一方就会进入FIN_WAIT2状态,但TCP/IP协议栈有个问题,FIN_WAIT2状态是没有超时的(不象TIME_WAIT状态),所以如果CLIENT不关闭,这个FIN_WAIT_2状

在HTTP应用中,存在一个问题,SERVER由于某种原因关闭连接,如KEEPALIVE的超时,这样,作为主动关闭的SERVER一方就会进入FIN_WAIT2状态,但TCP/IP协议栈有个问题,FIN_WAIT2状态是没有超时的(不象TIME_WAIT状态),所以如果CLIENT不关闭,这个FIN_WAIT_2状态将保持到系统重新启动,越来越多的FIN_WAIT_2状态会致使内核crash

 chdonald 回复于:2003-07-11 12:30:51
产生原因:
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

 无双 回复于:2003-07-11 17:57:53
不错
原创吗
给你加个原创吧

 蓝色键盘 回复于:2003-07-11 18:03:45
给予鼓励,希望以后多发表一些自己的看法和优秀文章。

 icedust 回复于:2003-07-11 19:32:33
不错,只得学习

 惜过 回复于:2003-07-11 20:24:16
不错不错,我下次也去下一点看看??

 koath 回复于:2003-07-11 23:21:00
是啊,我也编过HTTP brute force的client 
好像iis, apache都是这样了,想是为了防止穷举。 
不过再看看TCP/IP volume 2估计可以找到解决方案,代码不是bsd的,不爽

 houhuaw 回复于:2003-07-15 11:36:44
不错,有深度

 threehair 回复于:2003-07-15 13:11:50
不错不错

 uniks 回复于:2003-07-16 08:41:44
只有当建立连接后,才可以使连接建立定时器无效。也就是说,在同步开放连接建立过程中,当主机收到一个ACK时,定时器应置为无效,使状态转移到ESTABLISHED。好像fin_wati_2状态机也是有超时设置的。

原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)