买了一台香港或美西的服务器,销售说"回国优化线路",可自己一测,晚上八点以后 SSH 就开始卡顿,网页加载要转好几秒。这时候最需要的是一套可复现、能拿得出证据的测试方法,而不是凭感觉争吵。海外服务器回国线路的测试有个天然难点:它是双向的、分段的、随时段变化的,只测一次、只测一个方向、只测一个时段,都不足以说明问题。本文给出完整的实操流程:从基础 Ping 采样,到 MTR 逐跳定位,到双向路由追踪,再到晚高峰对比与长期基线建立,全部附上可直接复制的命令和明确的判断标准。
一、测试前的准备:明确测什么
在敲命令之前,先明确要采集的四个维度,缺一个结论就可能跑偏:
- 延迟(RTT):往返时间,反映距离与路径长短
- 抖动(mdev / jitter):延迟的波动幅度,反映链路稳定性,往往比平均延迟更影响体感
- 丢包率(packet loss):反映链路拥塞或质量问题
- 路径(path):反映是否绕路、走的是哪家运营商、跨境段是哪一段
另外要固定三个测试条件:测试源网络(电信/联通/移动,办公网/家庭网)、测试时段(闲时/晚高峰)、测试目标(服务器 IP)。条件不固定,数据就无法对比。
二、Ping:拿到延迟与抖动的基线
2.1 为什么默认 ping 不够用
直接执行 ping 203.0.113.10 在 Linux 上会一直跑下去,在 Windows 上默认只发 4 个包。样本太少时,偶然一个慢包就能把平均值拉高,无法反映真实水平。正确做法是加大样本数、固定间隔:
# 发 100 个包,间隔 0.2 秒,约 20 秒完成 ping -c 100 -i 0.2 203.0.113.10 # 输出关键行示例 # 100 packets transmitted, 98 received, 2% packet loss, time 20145ms # rtt min/avg/max/mdev = 152.301/168.772/289.441/21.556 ms # Windows 对应写法 ping -n 100 203.0.113.10
2.2 怎么读这几个数字
| 指标 | 含义 | 判断参考 |
|---|---|---|
| min | 最好情况下的往返时间 | 接近该路径的"物理下限 + 设备转发"水平 |
| avg | 平均往返时间 | 用于横向对比不同机房/线路 |
| max | 最差值 | max 远大于 avg 说明存在瞬时拥塞或重传 |
| mdev | 延迟标准差(抖动) | 超过 avg 的 15% 需关注;超过 30% 说明严重不稳 |
| packet loss | 丢包率 | >1% 需关注;>3% 基本可判定链路有问题 |
这里最容易踩的坑是只看平均延迟。一条 avg 160ms、mdev 5ms 的线路,和一条 avg 160ms、mdev 45ms 的线路,实际体验天差地别:后者在 SSH 打字时会明显感到一顿一顿,视频会议会频繁卡顿,而平均值看起来完全一样。
三、MTR:逐跳定位问题出在哪
ping 告诉你结果,mtr 告诉你过程。它把 traceroute 的路径发现和 ping 的统计结合,逐跳显示丢包与延迟,是定位"哪一段出问题"最核心的工具。
3.1 基础用法
# 报告模式:跑完 100 个周期输出统计表,适合存档与对比 mtr --report --report-cycles 100 203.0.113.10 # 交互模式:实时观察变化,q 退出 mtr 203.0.113.10 # 不做 DNS 反向解析,输出更快更干净 mtr -n --report --report-cycles 100 203.0.113.10
3.2 用 TCP 模式绕过 ICMP 限速
很多机房和网络设备会对 ICMP 做速率限制(ICMP rate limit),导致 MTR 显示中间某跳大量丢包,但业务其实完全正常。为了贴近真实业务,应使用 TCP 或 UDP 模式探测:
# TCP 模式探测 80 端口 mtr -T -P 80 --report --report-cycles 100 203.0.113.10 # TCP 模式探测 443 端口(HTTPS 业务) mtr -T -P 443 --report --report-cycles 100 203.0.113.10 # UDP 模式 mtr -u --report --report-cycles 100 203.0.113.10
3.3 怎么读 MTR 结果
看 MTR 输出时注意三条经验规则:
- 中间某跳丢包但后续跳不丢:通常是该设备限制 ICMP 响应,不是真实故障,可以忽略
- 从某跳开始,其后所有跳持续丢包或延迟陡增:该起始跳就是分界点,问题出在它之后的那段链路
- 最后一跳延迟高但前面都正常:问题在服务器自身,可能是负载高、连接队列满或防火墙策略
输出的每一列含义:Loss% 是该跳丢包率,Snt 是发送数,Last/Avg/Best/Wrst 分别是最近/平均/最好/最差延迟,StDev 是标准差。判断时以 Avg 与 StDev 为主,Last 波动大属于正常现象。
四、Traceroute:看路径是否绕路
延迟高的一大原因是绕路。从广州访问香港服务器本应直连,若实际绕道美国再回来,RTT 会凭空多出一百多毫秒。这类问题只有看路径才能发现。
4.1 实用命令
# TCP SYN 模式,指定 80 端口,避免 ICMP 被过滤 traceroute -T -p 80 203.0.113.10 # 不做反向解析,加快输出 traceroute -n -T -p 443 203.0.113.10 # 指定最大跳数与每跳探测包数 traceroute -n -T -p 80 -m 30 -q 3 203.0.113.10 # Windows 对应 tracert -d 203.0.113.10
4.2 怎么判断路径是否合理
逐跳看 IP,重点关注两件事:
- 地理合理性:是否出现了不该经过的国家/地区。例如亚洲到亚洲却经由美国节点
- 节点特征:国内常见的骨干网节点有可识别的 IP 段特征,例如
202.97.开头的节点通常属于 163 骨干网方向,59.43.开头的节点通常属于 CN2 网络方向。观察跨境前后出现的是哪一类,可以大致判断走的是普通国际线路还是优化线路
需要提醒:这些特征只是经验性的辅助判断,运营商网络会调整,且不同产品形态(如 CN2 GT 与 CN2 GIA)在路径上表现不同——有的全程走优化网络,有的只在部分路径或单向走优化网络。不要仅凭一个节点就下结论,要结合双向测试与时段对比。
五、双向测试:去程和回程必须都测
这是海外服务器测试中最容易遗漏、也最容易误判的一步。数据从国内到服务器是去程,从服务器返回国内是回程,二者走的路径常常不对称。只测去程,等于只检查了一半的路。
5.1 去程:从本地或国内探测点发起
# 在自己所在网络执行 mtr -T -P 80 --report --report-cycles 100 203.0.113.10 ping -c 100 -i 0.2 203.0.113.10
5.2 回程:登录服务器反向探测
# 登录海外服务器后,反向追踪到国内目标 mtr -n --report --report-cycles 100 1.2.4.8 # 或用 TCP 模式 traceroute -n -T -p 80 1.2.4.8 # 反向 ping 国内地址(若对端允许 ICMP) ping -c 100 -i 0.2 1.2.4.8
对比两条路径:如果去程走优化网络、回程走普通骨干网,那么晚高峰依然会卡——因为响应数据回来时堵住了。只有两个方向都表现良好,才算真正优质的回国线路。
六、晚高峰对比:线路成色的试金石
线路质量的差距往往在闲时被掩盖,在忙时集中爆发。国内访问境外资源的高峰通常在 20:00-23:00,节假日与重大活动期间更明显,此时国际出口容易排队拥塞。
6.1 建议的固定采样时段
| 时段 | 代表场景 | 观察重点 |
|---|---|---|
| 上午 10:00 | 工作日闲时 | 基线延迟,接近该线路的最好水平 |
| 晚间 21:00 | 晚高峰 | 延迟增幅、丢包率、mdev 变化 |
| 凌晨 02:00 | 深度闲时 | 国际出口空闲时的理论最优水平 |
| 周末晚间 | 节假日高峰 | 极端情况下的服务水平 |
6.2 一个简单的自动化采样脚本思路
把测试固化成定时任务,长期积累比临时测一次有用得多:
# 每天 10 点与 21 点各跑一次 MTR,结果按日期存档 0 10,21 * * * mtr -T -P 80 --report --report-cycles 100 203.0.113.10 >> /var/log/mtr-probe.log 2>&1 # 每天同一时刻记录 ping 统计 0 10,21 * * * ping -c 100 -i 0.2 203.0.113.10 | tail -2 >> /var/log/ping-probe.log 2>&1
注意在 crontab 中 % 需要转义,且建议用完整路径 /usr/bin/mtr、/bin/ping 避免环境变量问题。
七、业务层验证:从网络指标到用户体验
网络指标好不代表业务快。还需要从应用层面验证:
7.1 分段计时
curl -o /dev/null -s -w 'DNS:%{time_namelookup} TCP:%{time_connect} TLS:%{time_appconnect} TTFB:%{time_starttransfer} TOTAL:%{time_total}\n' https://example.com/
四个阶段对应四个责任方:time_namelookup 大是 DNS 问题;time_connect 大是链路或防火墙;time_appconnect 减去 time_connect 是 TLS 握手(受延迟放大,一次跨洋 TLS 握手可能要两三个 RTT);time_starttransfer 减去 time_appconnect 是服务器处理时间,与线路无关。
7.2 吞吐验证
# 服务端 iperf3 -s # 客户端,4 并发测 30 秒 iperf3 -c 203.0.113.10 -t 30 -P 4 # 反向测(验证服务器出方向) iperf3 -c 203.0.113.10 -t 30 -P 4 -R
若单线程跑不满而多线程可以,属于长肥管道问题,可考虑开启 BBR 或调大 tcp_rmem/tcp_wmem;若多线程也远低于标称值,则要怀疑带宽限制或严重丢包。
7.3 服务器自身排查
# 网卡协商状态,确认速率与双工正常 ethtool eth0 # 网卡错包与丢帧统计 cat /proc/net/dev # 每条连接的 RTT 与重传数 ss -i # 实时流量,确认是否跑满 sar -n DEV 1
如果 ss -i 中 retrans 持续增长且 rtt 偏高,说明存在真实丢包;ethtool 显示速率未协商到预期值或双工为 Half,则要先解决链路层问题再谈线路。
八、延迟参考区间
以下为常见机房到中国大陆的 RTT 经验区间,仅为参考值,实际随线路类型、运营商、时段、目标地址大幅波动,请以自身实测数据为准:
| 机房地区 | RTT 参考区间 | 测试关注点 |
|---|---|---|
| 香港 | 30-60ms | 是否直连,跨境段是否稳定 |
| 新加坡 | 40-80ms | 海缆方向,是否绕行 |
| 日本 | 60-100ms | 是否绕美 |
| 美国西海岸 | 150-200ms | 晚高峰丢包与抖动,绝对延迟已接近物理下限 |
| 欧洲 | 200-300ms | 中转跳数,适合非实时业务 |
九、标准测试流程清单
- 固定测试条件:记录测试源网络(运营商、地区)、测试时间、目标 IP
- 基础采样:
ping -c 100 -i 0.2,记录 min/avg/max/mdev 与丢包率 - 去程 MTR:
mtr -T -P 80 --report --report-cycles 100,保存完整输出 - 路径检查:
traceroute -n -T -p 80,核对地理合理性与节点特征 - 回程测试:登录服务器反向
mtr到国内地址,与去程对比 - 晚高峰复测:在 21 点前后重跑第 2-4 步,与闲时数据对比
- 业务层验证:
curl -w分段计时 +iperf3吞吐测试 - 排除服务器自身:
ethtool、cat /proc/net/dev、ss -i、sar -n DEV 1 - 多网络交叉验证:换电信/联通/移动、办公网/家庭网各测一次
- 建立长期基线:把每日固定时段数据存档,形成可对比的时间序列
小结
海外服务器回国线路的测试,核心是"四固定、两方向、多时段"。四固定指固定测试源网络、时段、目标、工具参数;两方向指去程与回程都要测,缺一不可;多时段指至少覆盖闲时与晚高峰,否则看不到线路的真实成色。工具层面,ping -c 100 -i 0.2 提供延迟与抖动基线,mtr --report --report-cycles 100 提供逐跳定位,traceroute -T -p 80 揭示绕路,curl -w 与 iperf3 把网络指标翻译成业务体感。避坑要点:不要只看平均延迟,mdev 和丢包率往往才是卡顿的真凶;不要看到中间跳丢包就报障,先确认是否是 ICMP 限速且后续跳正常;不要用默认参数跑几个包就下结论,样本量决定可信度;不要把 ICMP 结果当作业务表现,TCP 模式更贴近真实;不要忘记晚高峰,那是线路质量的真正考场。把每次测试的条件和结果记录下来,几周之后你会发现,这份基线数据比任何一次临时测速都更有决策价值。
本文延迟区间与节点特征均为经验参考,实际表现随运营商策略、时段与网络状况变化,不保证任何具体线路的实际表现。
企业QQ咨询




