[TCP Retransmission]连接问题

这两天遇到一个奇怪的TCP连接超时问题:
org.apache.http.conn.ConnectTimeoutException: Connect to xxxxxx.com:80 [xxxxxxx.com/122.2.334.233] failed: connect timed out

咋一看,这就是网络不通呀!但是ping测试和Telnet测试都没问题,而且time out是偶发的,这就奇怪了,难道是网络抖动?
又看了眼网络监控,出口没有任何丢包,那就只能在服务器上面抓包分析了:
[TCP Retransmission]连接问题
通过上面抓出来包,发现出现连接超时的时候有大量的[TCP Retransmission]连接,说明是服务端没有回包呀!为什么没有回包呢?遂上网查了一下,发现有一种情况跟我们很类似,我们使用的是阿里云的VPC网络,客户端有三台都是走的同一个IP的NAT网关出公网,数据包通过NAT网关后源IP会变成NAT地址,如果服务端开启了net.ipv4.tcp_tw_recycle=1(tcp快速回收),数据包到达服务端后发出的TPC/IP时间戳不连续,服务端就会识别错乱丢弃连接;
之后询问了服务端的人员,果然是这个原因!修改后就好了。

猜你喜欢

转载自blog.51cto.com/8596219/2578314