记一次TCP连接异常故障解决
推荐 原创
©著作权归作者所有:来自51CTO博客作者potaski的原创作品,请联系作者获取转载授权,否则将追究法律责任
关键字:linux 服务器 无法建立TCP连接 时间戳 net.ipv4.tcp_timestamps
一.情况表现为
1.在公司内网对站点的http访问:
linux主机出现故障:curl以及抓包分析,发现服务端不响应linux客户端的请求,无法建立TCP连接,浏览器返回“无法连接到服务器”
windows主机正常
2.http访问质量下降:
基调显示,新架构上线后,访问质量下滑,主要表现为
2.1.访问提示“无法连接到服务器”
2.2.仅少数人遇到这种故障,并且一天中不是每次访问都会遇到,而是出现时好时坏的现象
二.处理过程
直接上google搜索关键字“服务器无法建立TCP连接”。
翻了几页后,发现这篇博文:“http://www.sunchis.com/html/os/linux/2012/0518/413.html”。
看了一下,和我们公司内网的表现一模一样,但各种问题(1为这方面基础知识薄弱,2为没有时间验证此配置)
然后这种问题持续了n久...一直以为是内部设备问题
后期搞不定了,大胆在线上启用这个参数“net.ipv4.tcp_timestamps = 0”,做了下测试后,发现故障解除,原故障机每次访问都正常了!
不过还是不明其中原理,只是大意了解,同样处于NAT上网方式的用户里(与别人共用出口IP地址),如果你的时间戳小于别人的,那么服务器不会响应你的TCP请求,要忽略此项,将net.ipv4.tcp_timestamps = 0(/etc/sysctl.conf)
三.总结
后期学习时,看见了一个更加详细的博客,讲的很详细,也引入了新的问题:http://huoding.com/2012/01/19/142
====== 小抄 ======
其实,linux服务器原本对时间戳(timestamps)默认是不开启的,Linux是否启用这种行为取决于tcp_timestamps和tcp_tw_recycle,因为tcp_timestamps缺省就是开启的,所以当tcp_tw_recycle被开启后,实际上这种行为就被激活了。
net.ipv4.tcp_tw_recycle又是啥呢,搜索了一下基本上是TIME_WAIT连接的回收参数
当 net.ipv4.tcp_timestamps 没有设置(缺省为开启),并且 net.ipv4.tcp_tw_recycle 也开启时,这个坑爹的错误就出现了,但是注意,只表现在NAT网络环境中。而且,大多数博客,以及一些大牛们,都有说过要开启 net.ipv4.tcp_tw_recycle ...
====== 小抄 ======
四.未完成的事项
上文 http://huoding.com/2012/01/19/142 中提到的:
1.(未验证)关闭timestamps后,tw_recycle功能是失效的问题
2.(未验证)新的解决TIME_WAIT连接过多的方法:net.ipv4.tcp_max_tw_buckets = 10000 设置一个最大值,不过坏处是系统日志会提示:TCP: time wait bucket table overflow
下一篇:简单快速分析iis日志脚本
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
TCP关闭连接的方式tcp
-
TCP 连接建立 故障排查
我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助。
网络 服务器 客户端 套接字 -
传输层 TCP连接管理 建立TCP连接/状态/变迁
应用程序在通信的时候,也即是进程在通信的时候,浏览器访问web站点,HTTP协议要想发
网络协议 客户端 三次握手 服务器 -
传输层 TCP主要特点和TCP连接
TCP是面向连接的传输层协议。(在正式传数据之前需要发3个数据包,这叫三次
网络协议 套接字 字节流 端口号