背景:
A到B网络通畅,偶尔出现A连接B的80服务出现连接超时。B端口开通。两端防火墙与端口无关,排除服务器防火墙干扰。
排查思路和方法:
0.首先确认是否网络丢包,或者两端服务器网卡跑满,服务器负载较高。
1.mtr 需要mtr 0.85版本及以上版本。
mtr --first-ttl 5 --tcp --port 80 3.3.3.3 或者 mtr -n --tcp --port=80 --first-ttl=5 3.3.3.3
跳过前4跳路由器信息,从第5跳开始进行mtr测试。 tcp模式 tcp端口是80 持续访问,查看丢包情况。 有些较高的丢包率路由器可能是路由器策略的丢失,并非真正故障。
2.https://github.com/huigher/tcpping2 工具连接
python tcpping2.py -i 1 3.3.3.3 80 间隔1秒 发起向3.3.3.3的80 端口发起TCP连接测试。查看是否有出现如下情况
如上图出现源地址A到的43704 43720 端口到 B的80端口出现连接超时5秒。通过如下命令执行A的地址和端口持续进行测试:
python tcpping2.py -i 1 -H A -P 43704 B 80 -R 看是否持续tcp连接超时。
同时可以再服务器两端进行tshark -i lo -n -t ad >/tmp/111 进行抓包,看是哪端没有正常处理 TCP三次握手的请求。
总结:最终通过测试发现,是公网某条对等链路上的一个硬件的某个端口故障,导致hash到这个端口上的流量会转发失败。导致特定端口请求失败。