解决TIMEWAIT造成的服务器无法访问

上传人:re****.1 文档编号:500429157 上传时间:2023-09-10 格式:DOC 页数:5 大小:22.50KB
返回 下载 相关 举报
解决TIMEWAIT造成的服务器无法访问_第1页
第1页 / 共5页
解决TIMEWAIT造成的服务器无法访问_第2页
第2页 / 共5页
解决TIMEWAIT造成的服务器无法访问_第3页
第3页 / 共5页
解决TIMEWAIT造成的服务器无法访问_第4页
第4页 / 共5页
解决TIMEWAIT造成的服务器无法访问_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《解决TIMEWAIT造成的服务器无法访问》由会员分享,可在线阅读,更多相关《解决TIMEWAIT造成的服务器无法访问(5页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! vi /etc/sysctl.confnet.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1-net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;net.ipv4.t

2、cp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。再执行以下命令,让修改结果立即生效:/sbin/sysctl -p用以下语句看了一下服务器的TCP状态:netstat -n | awk /tcp/ +S$NF END for(a in S) print a, Sa返回结果如下:ESTABLISHED 1423FIN_WAIT1 1FIN_WAIT2 262SYN_SENT 1TIME_WAIT 962-http:/ 检查net.ipv4.tcp_tw当前值,将当前的值更改为1分钟:rootaaa1 # sysctl -a

3、|grep net.ipv4.tcp_twnet.ipv4.tcp_tw_reuse = 0net.ipv4.tcp_tw_recycle = 0rootaaa1 # vi /etc/sysctl增加或修改net.ipv4.tcp_tw值:net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1使内核参数生效:rootaaa1 # sysctl -prootaaa1 # sysctl -a|grep net.ipv4.tcp_twnet.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1设置这两个参数

4、: reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接; recyse是加速TIME-WAIT sockets回收用netstat再观察正常这里解决问题的关键是如何能够重复利用time_wait的值,我们可以设置时检查一下time和wait的值#sysctl -a | grep time | grep filter.ip_conntrack_tcp_timeout_time_wait = filter.ip_conntrack_tcp_timeout_close_wait = filter.ip_conntrack_tcp_timeout_fin_wai

5、t = 120今天检查了一下基本一台服务器,发现TIME_WAIT高到3k多(正常1000-2000没有问题).TIME_WAIT本身并不会占用很大资源的,除非受到攻击.但太多服务器还是有可能挂掉.TIME_WAIT 3699CLOSE_WAIT 52FIN_WAIT1 32SYN_SENT 1FIN_WAIT2 2ESTABLISHED 17SYN_RECV 45CLOSING 6根据TCP/IP详解中的TCP的建立和终止中有关TCP的终止的讲解TCP的终止通过双方的四次握手实现。发起终止的一方执行主动关闭,响应的另一方执行被动关闭。1. 发起方更改状态为FIN_WAIT_1,关闭应用程序进

6、程,发出一个TCP的FIN段;2. 接收方收到FIN段,返回一个带确认序号的ACK,同时向自己对应的进程发送一个文件结束符EOF,同时更改状态为CLOSE_WAIT,发起方接到ACK后状态更改为FIN_WAIT_2;3. 接收方关闭应用程序进程,更改状态为LAST_ACK,并向对方发出一个TCP的FIN段;4. 发起方接到FIN后状态更改为TIME_WAIT,并发出这个FIN的ACK确认。ACK发送成功后(2MSL内)双方TCP状态变为CLOSED。我们不难看出上面的显示的结果的意思。根据TCP协议,主动发起关闭的一方,会进入TIME_WAIT状态(TCP实现必须可靠地终止连接的两个方向(全双

7、工关闭),持续2*MSL(Max Segment Lifetime),缺省为240秒.为什么 TIME_WAIT 状态需要保持 2MSL 这么长的时间?TIME_WAIT的等待时间为2MSL,即最大段生存时间.如果 TIME_WAIT 状态保持时间不足够长(比如小于2MSL),第一个连接就正常终止了。第二个拥有相同相关五元组的连接出现(因为连接终止前发起的一方可能需要重发 ACK,所以停留在该状态的时间必须为MSL的2倍。),而第一个连接的重复报文到达,干扰了第二个连接。TCP实现必须防止某个连接的重复报文在连接终止后出现,所以让TIME_WAIT态保持时间足够长(2MSL),连接相应方向上的

8、TCP报文要么完全响应完毕,要么被丢弃。建立第二个连接的时候,不会混淆。注:MSL(最大分段生存期)指明TCP报文在Internet上最长生存时间,每个具体的TCP实现都必须选择一个确定 的MSL值。RFC 1122建议是2分钟,但BSD传统实现采用了30秒。TIME_WAIT 状态最大保持时间是2 * MSL,也就是1-4分钟。对apache的操作HTTP协议1.1版规定default行为是Keep-Alive,也就是会重用TCP连接传输多个request/response.所以我打开 http中的keepalive On,发现TIME_WAIT就立刻少了下来.只有300的样子.总结一下.我

9、认为有二个原因.1.keepalive没有开,导致每次请求都要建立新的tcp连接,请求完成以后关闭,增加了很多time_wait的状态,没有重用,KeepAlive我认为它指的是保持连接活跃,类似于Mysql的永久连接。如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。2.然后keepalive在系统中本身的值很高.默认空闲连接 7200 秒(2 小时)内没有活动.才会断开.我们开启KeepAlive:KeepAlive OnMaxKeepAliveRequests 120KeepAliveTimeout 15这样每

10、个连接可以发送100次请求,超时时间为15秒(如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接)。有关内核级别的keepalive和time_wait的优化调整vi /etc/sysctlnet.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_keepalive_time = 1800net.ipv4.tcp_fin_timeout = dev_max_backlog =8096修改完记的使用sysctl -p 让它生效以上参数的注解/proc/sys/n

11、et/ipv4/tcp_tw_reuse该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。/proc/sys/net/ipv4/tcp_tw_recyclerecyse是加速TIME-WAIT sockets回收对tcp_tw_reuse和tcp_tw_recycle的修改,可能会出现.warning, got duplicate tcp line warning, got BOGUS tcp line.上面这二个参数指的是存在这两个完全一样的TCP连接,这会发生在一个连接被迅速的断开并且重新连接的情况,而且使用的端口和地址相同。但基本上这样的事情不会发生,

12、无论如何,使能上述设置会增加重现机会。这个提示不会有人和危害,而且也不会降低系统性能,目前正在进行工作/proc/sys/net/ipv4/tcp_keepalive_time表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时/proc/sys/net/ipv4/tcp_fin_timeout 最佳值和BSD一样为30fin_wait1状态是在发起端主动要求关闭tcp连接,并且主动发送fin以后,等待接收端回复ack时候的状态。对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡

13、。/proc/sys/net/core/netdev_max_backlog该文件指定了,在接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目 -因为2.6内核中tcp_timestamps默认是打开的,所以当打开 tcp_tw_recycle时会导致部分通过NAT上网client无法正确连接服务器,故障表现为client发出SYN后无法收到server返回的SYN+ACK,推荐的解决方法是关闭tcp_tw_recycle,打开tcp_tw_reuse解决TIME-WAIT过多的问题。tcp_timestamps BOOLEAN Enable timestamps

14、as defined in RFC1323. Default value is 1.tcp_tw_recycle BOOLEAN Enable fast recycling TIME-WAIT sockets. Default value is 0. It should not be changed without advice/request of technical experts.tcp_tw_reuse BOOLEAN Allow to reuse TIME-WAIT sockets for new connections when it is safe from protocol viewpoint. Default value is 0. It should not be changed without advice/request of technical experts. /

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号