tcp协议timestamp字段导致问题分析

1.现象
不同主机C1,C2上的相同模块(开启timestamp),通过NAT网关(1个出口ip)访问同一服务S,主机C1connect成功,而主机C2connect失败

2.分析
根据现象上述问题明显和tcptimestmap有关;查看linux2.6.32内核源码,发现tcp_tw_recycle/tcp_timestamps都开启的条件下,60s(timewai时间)内同一源ip主机的socketconnect请求中的timestamp必须是递增的。
3.验证
server端当tcp_tw_recycle和tcp_timestamps都是1的时候,会检查收到数据包TCP选项字段中的的timestamp(TSValue),当来自同一个IP地址(任意源端口号)后来的数据包中TCP选项字段如果有timestamp且比前面的数据包中的timestamp小,则server不做ACK响应

4.解决方法
1.服务器端不要将tcp_tw_recycle字段和tcp_timestamps字段同时设为1
2.客户端把tcp_timestamps字段设0,这样不会发送TCP选项字段中的timestamps选项
对于服务提供方1较适合
个人建议关闭tcp_tw_recycle选项,而不是timestamp;因为在tcptimestamp关闭的条件下,开启tcp_tw_recycle是不起作用的;而tcptimestamp可以独立开启并起作用。
-------------------
/proc/sys/net/ipv4/在该目录下进行修改,重启后会失效。
添加进/etc/rc.local
echo 1 >/proc/sys/net/ipv4/tcptimestamp


你可能感兴趣的:(timestamp字段,CTNET,CTWAP)