Centos6的TCP Retransmission问题

  1. 现象
  2. 解决方法:
  3. timestamp扩展:

环境:

CentOS release 6.8 (Final)

现象

通过本地访问生产网页或者ssh时 有时可以有时不行
通过在生产机与本地抓包得到下列信息:

tcp_retransmission.png

通过百度了下(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问题/

转载请保留原文链接及作者。

目录