什么是网络延迟?
网络延迟(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性能分解。掌握这几个工具,大多数网络延迟问题都能快速定位。