tcp_tw_recycle和tcp_timestamps导致connect失败问题

问题现象

一个搭建好的几台云服务器上面配置好了SNAT,其中某些通过公网访问A服务器通,而同样网络环境下的服务器访问访问A服务器就不通。
服务器A测:tcp_tw_recycle与tcp_timestamps均是开启的。
通过wireshark抓包可以看到:异常的云服务器,一直在重传syn,而对端收到了syn,却不响应ack,syn。
对比正常的报文与异常的报文,发现异常的报文timestamp值非常小,而正常的值大很多。
异常的服务器上:

[root@iZm5e936hzsu4ygadc0vw1Z ~]# sysctl -a | grep times
kernel.sched_rr_timeslice_ms = 100
net.ipv4.tcp_timestamps = 1

参数:/proc/sys/net/ipv4/tcp_timestamps - 控制timestamp选项开启/关闭
/proc/sys/net/ipv4/tcp_tw_recycle - 减少timewait socket释放的超时时间

根据tcp_timestamps选项的特性,

server端当tcp_tw_recycle和tcp_timestamps都是1的时候,会检查收到数据包TCP选项字段中的的timestamp(TS Value),当来自同一个IP地址(任意源端口号)后来的数据包中TCP选项字段如果有timestamp且比前面的数据包中的timestamp小,
则server不做ACK响应。

可行的处理方法如下:

1.服务器端不要将tcp_tw_recycle字段和tcp_timestamps字段同时设为1
2.客户端把tcp_timestamps字段设0,这样不会发送TCP选项字段中的timestamps选项

net.ipv4.tcp_timestamps = 0后能够正常访问。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 你所不知道的TIME_WAIT和CLOSE_WAIT 你遇到过TIME_WAIT的问题吗? 我相信很多都遇到过这个...
    meng_philip123阅读 7,366评论 0 14
  • Linux(centos 7)文件数限制 内核参数fs.file-max /proc/sys/fs/file-ma...
    散装咖啡阅读 5,594评论 0 1
  • Transmission Control Protocol,传输控制协议,是一种面向连接的、可靠的、基于字节流的传...
    PennyWong阅读 8,449评论 1 15
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 10,502评论 0 8
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 14,500评论 6 174

友情链接更多精彩内容