网络延迟排查手册:从ping到traceroute的诊断方法

什么是网络延迟?

网络延迟(Latency)是数据从源到目的地所需的时间,通常以毫秒(ms)为单位。影响延迟的因素:物理距离、网络设备处理时间、链路带宽、数据包丢失导致的重传。

延迟参考标准:

  • <20ms:优秀,适合游戏、实时通话
  • 20-100ms:良好,普通上网无感知
  • 100-300ms:一般,视频通话可能卡顿
  • >300ms:较差,影响用户体验

基本诊断工具

1. ping —— 基础连通性测试

ping通过发送ICMP报文测量往返时间(RTT)。

# 基本用法
ping google.com

# 指定次数(Windows)
ping -n 10 google.com

# 指定次数(Linux/Mac)
ping -c 10 google.com

# 持续ping并记录统计(Linux)
ping -i 0.5 -c 100 google.com | tail -2

读取结果:

  • time=:单次往返延迟
  • packet loss:丢包率,超过1%需关注
  • min/avg/max/mdev:最小/平均/最大/抖动

2. traceroute/tracert —— 路由路径追踪

traceroute显示数据包经过的每一跳路由器和延迟,帮助定位延迟发生在哪个节点。

# Windows
tracert google.com

# Linux/Mac
traceroute google.com

# Linux使用TCP(穿透防火墙)
traceroute -T -p 80 google.com

# mtr(更强大的traceroute)
mtr --report --report-cycles 20 google.com

读取结果:

  • 每行代表一跳路由器
  • * * * 表示该节点不响应ICMP,不代表丢包
  • 延迟突然增大的那跳通常是瓶颈所在
  • 最后一跳是目标服务器

进阶工具

mtr(My TraceRoute)

mtr结合了ping和traceroute,实时显示每跳的丢包率和延迟,是最常用的网络诊断工具。

# 安装
sudo apt install mtr   # Ubuntu/Debian
brew install mtr       # macOS

# 使用
mtr google.com

# 生成报告
mtr --report google.com

iperf3 —— 带宽测试

# 服务端
iperf3 -s

# 客户端(测试到服务端的带宽)
iperf3 -c server_ip

# TCP双向测试
iperf3 -c server_ip --bidir

# UDP测试(模拟实时流量)
iperf3 -c server_ip -u -b 100M

curl —— HTTP延迟分解

curl -o /dev/null -s -w   "DNS解析: %{time_namelookup}s
TCP连接: %{time_connect}s
TLS握手: %{time_appconnect}s
首字节: %{time_starttransfer}s
总时间: %{time_total}s
"   https://example.com

常见延迟问题排查流程

步骤1:确认本地网络

ping网关(路由器IP)如192.168.1.1,延迟应<5ms。延迟高说明本地网络或路由器问题。

步骤2:确认ISP链路

ping运营商DNS(中国电信114.114.114.114,联通119.29.29.29),延迟应<30ms。

步骤3:追踪路径

traceroute目标地址,查看延迟在哪一跳突然增大,定位瓶颈节点。

步骤4:持续监测

用mtr持续监测,观察是否有规律性抖动(定时拥塞)或随机丢包(硬件故障)。

延迟优化建议

  • CDN加速:将静态资源分发到离用户更近的节点
  • 选择就近机房:服务器选在目标用户所在地区
  • 启用HTTP/2或HTTP/3:减少连接建立开销
  • 优化DNS:使用低延迟DNS(如腾讯DNSPod)
  • TCP调优:启用BBR拥塞控制算法

总结

网络延迟排查遵循从近到远的原则:先排查本地,再排查ISP,最后排查目标服务器。ping用于基础测试,traceroute/mtr用于路径分析,iperf3用于带宽测试,curl用于HTTP性能分解。掌握这几个工具,大多数网络延迟问题都能快速定位。