Centos6的TCP Retransmission问题
环境:
CentOS release 6.8 (Final)
现象
通过本地访问生产网页或者ssh时 有时可以有时不行
通过在生产机与本地抓包得到下列信息:
通过百度了下(TCP Retransmission),原因是net.ipv4.tcp_tw_recycle 内核参数引起的。
当多个客户端使用同一个外网IP通过NAT访问内网服务器的时候,服务器如果在内核参数中打开了net.ipv4.tcp_tw_recycle = 1
就有可能导致服务器收到SYN但是不会向客户端发送SYN+ACK包。因为打开recyle参数后会识别这些包的时间戳(net.ipv4.tcp_timestamps = 1),但是nat过来的数据包又因为时间戳有可能不是顺序的,导致服务器认为包不可信而丢弃。
解决方法:
vi /etc/systcl.conf
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_timestamps=0
最后执行生效命令:
sysctl -p
timestamp扩展:
同时开启timestamp(时间戳)和tw_recycle(快速回收),会导致在一个MSL时间内只响应timestamp递增的请求,对于时间戳较小的请求都抛弃了(不响应ack)
MSL扩展: RFC793中规定MSL为2分钟,也就是说2分钟内同一个ip的请求的时间戳要求递增,不是递增的话服务器不予响应。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:Centos6的TCP Retransmission问题
本文作者:wangzhirui
发布时间:2019-12-25, 17:09:16
最后更新:2025-02-27, 02:04:08
原始链接:https://wangzhirui.com/2019/12/25/Centos6的TCP-Retransmission问题/转载请保留原文链接及作者。