常见原因包括网络链路拥塞、路由绕行或BGP问题、机房出口带宽限制、服务器端CPU/网络负载过高、丢包导致重传以及中间防火墙或安全组限速。要判断原因需同时关注延迟、丢包和抖动(jitter),单纯的ping值高只能说明延迟异常,但不能定位根因。
先从外部和内部分别发起测试:外部从多个节点ping/trace到目标,从目标向外ping回客户端或公共节点(如8.8.8.8)。记录延迟和丢包率,若外部普遍高,则是链路或机房问题;若仅个别源高,可能是源ISP或跨国链路问题。
ping -c 10 目标IP
traceroute -n 目标IP 或 tracepath 目标IP
traceroute用于查看路由跳数和每一跳RTT,适合快速定位延迟激增的跳点;mtr结合了traceroute和ping的功能,可以长期运行以观测丢包和延迟变化,是判断哪里出现稳定丢包或间歇抖动的利器。
mtr -rwzbc100 目标IP 可以统计100次数据并显示丢包率和平均延迟。
如果某一跳开始出现高丢包但后续跳正常,可能是该设备对ICMP有策略性限制;如果高丢包/高延迟在该跳并持续到后续跳,说明真实的链路问题在那一段,需要记录该跳的IP并反馈给运营商或云供应商。
在服务器端要检查CPU、内存、网络接口统计、队列丢包以及防火墙/安全组规则。常用工具:top/htop、ss/netstat、iftop/nethogs、ethtool、tcpdump。
1) 查看CPU/IO负载:top 或 sar;2) 网络接口错误:ethtool -S eth0 或 cat /proc/net/dev;3) 当前连接数与端口占用:ss -tunap;4) 实时流量:iftop -i eth0;5) 抓包定位:tcpdump -nn -i eth0 host 目标IP。
MTU不匹配、MSS问题或网络队列(txqueuelen)设置不当也会导致高延迟或分段重传,使用 ip link, ethtool 和 tc 查看并调整。
tcpdump -nn -i eth0 icmp 或 tcpdump -nn -i eth0 host 客户IP and port 80
使用iperf3进行带宽测试可判断是否存在链路饱和;使用mtr和ping检测丢包;检查安全组、云防火墙和机房出口是否对ICMP/TCP有策略或进行流量整形。
1) 本地和服务器上用 iperf3 -s / iperf3 -c 测试带宽;2) 在不影响生产的窗口做并发压测,观察丢包与延迟;3) 检查并临时放开防火墙规则以排除规则限速;4) 如为带宽瓶颈,考虑升级带宽或调整流量调度。
当怀疑机房出口或跨AS链路问题时,记录traceroute/mtr日志、时间戳与丢包统计,提交给云厂商或上游ISP排查BGP或链路拥塞。
按顺序排查可快速定位问题并节省沟通成本。下面给出一个实战清单与工具表。
1) 多源ping与traceroute(本地、海外节点、云监控)记录结果;2) 在服务器端查看资源使用与网络接口错误;3) 使用mtr持续观测丢包与抖动;4) 用iperf3测试吞吐量;5) 抓包(tcpdump)看TCP三次握手与重传情况;6) 检查防火墙/安全组与流量整形策略;7) 收集证据(日志、命令输出)提交给云厂商或ISP。
本地/服务器端命令:ping, traceroute/tracepath, mtr, iperf3, tcpdump, ss/netstat, iftop, ethtool, tc, sar/top。
在线与第三方:ping.pe, speedtest.net(选香港节点), RIPE Atlas, bgp.he.net, 各大云的Looking Glass或控制台网络监控,Grafana/Prometheus/Zabbix/Datadog用于长期监控。
时间段、源IP/目标IP、traceroute/mtr输出、ping丢包率与平均RTT、服务器top与ifconfig/ethtool输出、tcpdump抓包片段、是否有近期配置变更或升级记录。