服务器未能连接到sys,Linux系统无法建立TCP连接、不响应SYS包的问题解决

导读: 开发人员反馈,说有时能连接到服务器,有时又不能连接到服务器,频繁出现连接断线的情况,这个问题已经困扰他们一两个月了。通过使用Wireshark在服务器抓包,的确如开发人员说的那样:客户端请求服务器建立TCP连接时,向服务器发送SYS包,但服务器却对该SYS...

开发人员反馈,说有时能连接到服务器,有时又不能连接到服务器,频繁出现连接断线的情况,这个问题已经困扰他们一两个月了。通过使用Wireshark在服务器抓包,的确如开发人员说的那样:客户端请求服务器建立TCP连接时,向服务器发送SYS包,但服务器却对该SYS包不作任何回应,所以才出现连接断线的情况。抓包结果如下:

2015082029490.html

从抓包截图中可以清晰地看到,客户端的35425端口连续3次向服务器的80端口发送SYS包,请求建立TCP连接。但服务器却未回应,没有将回应包发送到客户端的35425端口,因此客户端认为建立TCP连接失败,表现出现的现象就是连接断线或网络断开等。

经查询,对发生这种服务器不响应客户端SYS包请求的解释如下:

当客户端发出的SYS包带有时间戳的情况下,经过NAT转换后,如果使用的端口在之前已经使用过,而且之前相同端口的SYS包中携带时间戳大于本次SYS包中的时间戳。在这种情况下,Linux系统内核将会直接丢弃本次SYS包,造成本次链接无法正常完成TCP/IP的3次握手。【该功能和rfc1323有关:http://tools.ietf.org/html/rfc1323】

上面的说法可能有些绕口,不容易理解,举个例子来说明一下。假如处于同一内部网络的主机A和主机B通过NAT网关(1个ip地址,且端口也相同)访问serverN,由于timestamp时间为系统启动到当前的时间,因此,主机A和主机B的timestamp不相同;这时,timestamp大的主机访问serverN成功,而timestmap小的主机则访问serverN失败。

解决该问题的方法为:关闭TCP的timestmap功能,即不启用时间戳。

# vi /etc/sysctl.conf,设置

view plain copy

net.ipv4.tcp_timestamps = 0

## 默认情况下,该值为1,即启用

然后执行# sysctl -p 使配置生效,这样就不会出现间歇性断线的情况了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值