云服务器网络延迟怎么测?ping、traceroute、mtr 实操对比
测云服务器网络延迟,最直接的办法是在你本地电脑和服务器之间互相执行 ping,看往返时间(RTT)和丢包率。
如果延迟偏高或丢包,再用 traceroute 或 mtr 逐跳定位问题节点。
测试前要明确方向:是从本地到服务器,还是从服务器到外网,两个方向的延迟可能完全不同。
测试前先确认两件事
第一,确认服务器能正常响应 ICMP。
部分云厂商默认关闭安全组或防火墙的 ICMP 规则,此时本机 ping 服务器会超时,但不代表网络不通。
你可以在云控制台的安全组里临时放行 ICMP,或者改用 curl 测试 HTTP 端口延迟(见后文)。
第二,确认测试工具已安装。
Linux 服务器通常自带 ping 和 traceroute,mtr 可能需要手动安装:
# Debian/Ubuntu
apt install mtr -y
# CentOS/RHEL
yum install mtr -y
Windows 本机自带 ping 和 tracert,无需额外安装,但 mtr 需要借助 WSL 或第三方工具。
用 ping 测基础延迟和丢包
在本地电脑打开终端,执行:
ping -c 20 你的服务器公网IP
Windows 下使用 ping -n 20 你的服务器公网IP。-c 20 表示发送 20 个包,样本太少容易误判,建议至少 20 个。
结果重点看两行:time= 后面的毫秒数是单次往返延迟,末尾的 min/avg/max/mdev 是统计值。
判断标准因线路而异:同城同运营商通常 5ms 以内,跨省 20-50ms 属正常,跨境(如香港到大陆)60-120ms 常见。丢包率超过 1% 就需要关注,持续丢包可能是线路拥塞或中间节点限制 ICMP。
反向测试同样重要。
登录服务器执行 ping -c 20 你的本地公网IP,对比两个方向的平均延迟。
如果去程和回程差距很大,说明线路可能不对称。
traceroute 和 mtr:定位延迟出在哪一跳
ping 只能告诉你“延迟高”,不能告诉你“哪里高”。
用 traceroute 查看数据包经过的每一跳:
traceroute 你的服务器公网IP
Windows 使用 tracert。
输出中每一行是一个中间路由器,* * * 表示该节点不响应 ICMP,不一定是故障。
重点看延迟从哪一跳开始明显跳升,比如前几跳都在 10ms 内,某一跳突然变成 150ms,问题就出在那附近。
mtr 是 ping 和 traceroute 的结合,能持续统计每一跳的丢包和延迟:
mtr -rwc 50 你的服务器公网IP
-r 输出报告,-w 宽屏显示,-c 50 发送 50 个包。
报告里 Loss% 列是丢包率,Avg 是平均延迟。注意:中间某跳显示 100% 丢包但后续跳正常,通常只是该节点禁 ping,不是真实故障。
只有当最终目标节点出现丢包,或某一跳之后所有节点都丢包,才说明问题在该段。
避开三个常见误判
只看一次 ping 结果。
网络延迟有波动,单次 100ms 可能只是瞬时抖动。
至少测 20 个包,并在不同时段(如晚高峰)重复测试。
把中间节点丢包当成故障。
如上所述,很多骨干路由器对 ICMP 限速,mtr 中间跳丢包但终点正常,不用处理。
忽略服务器负载。
服务器 CPU 或带宽跑满时,ping 延迟也会升高。
测试前用 top 和 iftop 确认服务器本身没有过载,否则测的是服务器处理延迟,不是网络延迟。
验证测试结果是否可信
完成上述测试后,用两个方法交叉验证。
一是换一个网络环境(如手机热点)再 ping 一次,如果延迟特征一致,说明问题在服务器侧或目标线路;
如果差异很大,问题可能在本地网络。
二是用 curl 测试 TCP 握手延迟,绕过 ICMP 限制:
curl -o /dev/null -s -w '连接时间: %{time_connect}s\n总时间: %{time_total}s\n' http://你的服务器IP
time_connect 反映 TCP 建连耗时,通常与 ping 的 RTT 接近。
如果 ping 不通但 curl 能连上,说明只是 ICMP 被拦截,网络本身正常。
测试延迟不是目的,判断“当前延迟是否影响业务”才是。
对网页服务,100ms 以内用户基本无感;
对实时游戏或语音,超过 50ms 就可能感知卡顿。
先明确业务容忍度,再决定是否需要换线路或加 CDN。