白天正常、晚八点变慢,海外物理机路由中间跳丢包就是故障点吗?
白天正常、晚八点变慢时,路由追踪中某个中间跳出现丢包,并不能直接证明这一跳就是故障点。它首先只能说明:该路由器没有及时回应用于探测的报文。只有当丢包从某一跳开始持续传递到目标地址,并且与业务请求变慢、端到端丢包等现象在同一时间出现,才适合把该段路径列为重点怀疑对象。
更准确的判断方式是区分“中间设备对探测报文的回复异常”和“实际业务报文经过该处发生丢失”。如果中间跳显示丢包,但后续各跳和目标服务器均为 0% 丢包,通常不能据此判定线路故障;如果目标地址也出现相近比例的丢包,且 TCP 建连、接口流量和服务器侧指标同步恶化,才具备较强的故障关联性。
“中间跳丢包”究竟测到了什么
traceroute 和 mtr 并不是在读取运营商链路的内部状态,而是在向目标地址发送带有不同 TTL 值的探测报文。
当 TTL 递减到 0 时,中间路由器通常会返回一条 ICMP 超时报文。通过这些回复,工具可以推断出路径上的设备地址和往返时间。到达目标后,工具再根据目标返回的响应,确认探测是否走完整条路径。
因此,路由追踪结果中的某一跳,至少包含两层含义:
- 这可能是实际转发路径上的一个三层设备接口;
- 这也可能只是一个负责生成 ICMP 响应的控制面地址。
路由器转发业务报文和生成诊断响应,未必使用相同的处理优先级。很多设备会对 ICMP 超时报文设置限速,甚至在控制面繁忙时主动丢弃一部分探测请求,但仍然正常转发后续业务流量。

例如,下面这样的结果并不罕见:
| 跳数 | 地址 | 丢包率 | 平均延迟 |
|---|---|---|---|
| 5 | 203.0.113.10 | 0% | 42 ms |
| 6 | 203.0.113.11 | 48% | 45 ms |
| 7 | 203.0.113.12 | 0% | 46 ms |
| 目标地址 | 198.51.100.20 | 0% | 47 ms |
这里第 6 跳回复不完整,但第 7 跳和目标地址均未出现丢包。业务报文仍然可以穿过第 6 跳,问题更可能是第 6 跳对探测报文限速,而不是它真的丢弃了 48% 的业务数据。
这也是判断中间跳丢包时最容易忽略的地方:不能只看某一行的 Loss%,还要看它后面的所有跳以及最终目标。
常见结论在什么条件下才成立
“从某一跳开始丢包,所以故障就在这一跳”并非完全错误,只是成立条件比较严格。
通常需要同时满足以下几项:
- 丢包从某一跳开始出现,并且后续每一跳都保持相近比例。
- 目标地址本身也显示丢包,而不是只有中间设备丢响应。
- 目标丢包和业务变慢发生在同一时间段。
- 使用多轮探测后仍能复现,而不是一次偶发结果。
- 更换探测方式或观测点后,现象仍然指向同一段路径。
- 服务器侧没有同时出现网卡错误、带宽打满、CPU 等待或应用排队等本地因素。
例如,某次晚高峰测试得到以下示例结果:
| 跳数 | 丢包率 | 平均延迟 |
|---|---|---|
| 4 | 0% | 38 ms |
| 5 | 16% | 61 ms |
| 6 | 17% | 64 ms |
| 7 | 16% | 65 ms |
| 目标地址 | 16% | 66 ms |
如果目标服务器的 HTTPS 建连失败率也从平时的 0% 上升到约 15%,并且服务器网卡没有错误计数,多个来源地都在同一时间观察到类似结果,那么第 5 跳附近开始的路径拥塞就具有较高的可疑度。
但即便如此,也不宜直接把某个显示出来的 IP 地址认定为“出故障的路由器”。这个地址可能只是该段链路的一侧接口,也可能处在多路径转发中的某条分支上。更稳妥的表达是:故障可能从该跳附近的路径段开始,需要线路或上游网络继续核实。
晚八点出现反例的几种原因
1. 路由器只限制了诊断回复
这是最典型的反例。
路由器在正常转发业务包的同时,对 TTL 超时、ICMP Echo 等诊断类报文进行限速。白天探测报文较少,回复率看起来正常;晚间其他网络设备的诊断请求增多,回复限速被触发,于是 mtr 中某一跳的丢包率上升。
这种情况下常见的表现是:
- 中间某一跳丢包明显;
- 后续跳的丢包率恢复为 0% 或明显低于该跳;
- 目标地址能够稳定响应;
- 业务请求并没有出现同等比例的失败。
如果只有中间跳异常,不要把它当作链路故障证据。它最多说明该设备不适合用这一类探测结果直接判断健康状态。
2. 前向路径和回程路径并不相同
从客户端到物理机的报文走一条路径,物理机返回客户端的报文可能走另一条路径。traceroute 显示的每一跳地址,很多时候是路由器返回诊断消息时使用的地址,不等于业务响应的完整回程路径。
于是可能出现以下组合:
- 去程某一段拥塞,但回来的 ICMP 回复没有经过同一段;
- 中间设备的诊断回复走了另一条出口;
- 目标服务器业务包正常,但探测响应在回程途中丢失;
- 只有某个运营商或某个地区的来源受到影响。
这类场景下,单从一台客户端执行一次 mtr,很难定位到具体设备。尤其是跨境或跨运营商路径,晚高峰可能触发路由调整、互联链路拥塞或多路径分流,路径中的部分地址也可能随时间变化。

3. 真正拥塞发生在中间跳之后
也可能出现相反的情况:前面几跳都正常,但某个后续链路、目标机房入口或服务端口发生拥塞。
例如:
| 跳数 | 丢包率 | 平均延迟 |
|---|---|---|
| 1~8 | 0% | 20~80 ms |
| 9 | 0% | 82 ms |
| 10 | 0% | 85 ms |
| 目标地址 | 8% | 190 ms |
如果只观察前 8 跳,无法看出异常。问题可能在目标机房接入侧、最后一段国际出口、目标服务器所在网络的共享上联,或者返回方向的链路上。
因此,“前几跳没有丢包”不能排除网络问题;“某一跳显示丢包”也不能直接确认网络问题。必须把目标地址的端到端结果放在判断中心。
4. 服务器本身在晚间进入高负载
海外物理机是独享计算资源,并不意味着它拥有独享的所有网络资源。物理机所在机架可能共享上联,机房出口可能按端口或带宽规格限制,服务器自身也可能在晚间运行备份、批处理、日志压缩或数据库任务。
如果是服务器侧资源导致变慢,常见特征包括:
ping到目标地址基本稳定;mtr没有从某一跳开始持续丢包;- TCP 可以正常建连,但首字节时间明显上升;
- CPU 使用率、磁盘等待、连接数或网卡发送队列在晚间同步升高;
- 服务器内部接口出现丢包、错误或队列溢出。
这时把问题归因于某个中间路由器,会把排查方向带偏。
5. 用户侧出口在晚间拥塞
“晚八点”通常是业务所在时区、服务器所在时区和访问者所在时区中的某一个。若只有某个办公室、某个家庭宽带或某个地区访问变慢,可能是访问端本地出口、运营商国际出口或区域互联拥塞。
可以用另一个来源地进行对照:
- 甲地区访问慢,乙地区正常:优先排查甲地区到目标的路径;
- 所有来源都慢:再重点看目标网络、服务器资源或共同上游;
- 只有 IPv4 慢、IPv6 正常,或相反:两套地址族路径可能不同;
- 只有一个业务域名慢:还要检查 DNS 解析结果、目标端口和应用层处理。
先把“探测异常”和“业务异常”分开
在晚高峰场景中,至少要同时观察三层指标,而不是只保存一份路由追踪结果。
| 观察层级 | 主要指标 | 能回答的问题 |
|---|---|---|
| 路径层 | 每一跳响应率、延迟、路径变化 | 探测报文在哪一段出现异常 |
| 端到端层 | 目标 IP 的丢包率、往返延迟 | 实际到达目标的连通性是否变差 |
| 业务层 | TCP 建连、TLS、首字节、总响应时间 | 用户请求具体慢在哪个阶段 |
| 服务器层 | CPU、内存、磁盘、网卡、连接数 | 目标主机是否自身过载或丢包 |
其中,业务层数据最接近用户感知。例如网页打开慢,可能是 TCP 建连慢,也可能是连接很快但应用迟迟不返回数据。两者在 ping 结果上可能完全一样。
可以把一次请求拆成几个时间段:
- DNS 解析时间;
- TCP 建连时间;
- TLS 握手时间;
- 等待服务端首字节时间;
- 接收完整响应的总时间。
如果 TCP 建连时间明显增加,并且目标 IP 的端到端丢包同时上升,更像网络路径或端口拥塞。如果建连正常、首字节时间升高,则应查看服务器进程、数据库、磁盘和应用队列。
一套更可靠的验证流程
第一步:固定时间、来源和目标
先确定记录中的时间属于哪个时区。不要只写“晚上 8 点”,而要记录类似以下信息:
- 访问端所在地区和时区;
- 服务器所在地区和时区;
- 测试机器的本地时间;
- 目标 IP、目标端口和业务域名;
- IPv4 或 IPv6;
- 测试开始和结束时间。
建议在正常时段先采集一组基线,再在晚高峰持续采集。比如正常时段记录 10 分钟,晚间 19:30 至 21:00 每 5~10 分钟记录一次。单次测试即使出现 50% 的中间跳丢包,也不足以判断周期性故障。
第二步:先测目标地址,而不是先盯着中间跳
在 Linux 测试机上,可以先对目标 IP 做端到端探测:
ping -c 100 -i 0.2 -W 1 <目标IP>
该命令发送 100 个探测包。若最终显示 0% 丢包,不能证明业务绝对正常,但可以说明此时基础 ICMP 连通性没有表现出明显丢包。
接着执行多轮路由追踪:
mtr -n -r -w -c 100 <目标IP>
常见字段含义如下:
Loss%:该跳对探测包的回复丢失比例;Snt:发送的探测数量;Last:最近一次延迟;Avg:平均延迟;Wrst:最大延迟;StDev:延迟波动程度。
不同发行版或软件版本的参数可能略有差异。如果命令提示参数不存在,应先执行:
mtr --help
不要因为参数不兼容而直接套用网上的完整命令。
也可以使用 traceroute 对路径进行一次性观察:
traceroute -n -q 10 -w 1 <目标IP>
这里通常使用 UDP 探测,和实际 HTTPS 业务使用的 TCP 报文并不完全相同。若目标服务监听 443 端口,且当前系统的 traceroute 支持 TCP 探测,可以增加一组对照:
traceroute -n -T -p 443 -q 10 -w 1 <目标IP>
TCP 探测结果更接近目标端口的可达性,但也不能等同于完整业务请求。
第三步:使用业务请求验证用户感知
如果服务器提供健康检查地址,可以用 curl 记录分阶段耗时:
curl -sS -o /dev/null \
-w 'dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} start=%{time_starttransfer} total=%{time_total}\n' \
--connect-timeout 5 \
--max-time 15 \
https://业务域名/health
测试地址需要替换为实际可用的健康检查路径,不要把不存在的路径响应当成业务故障。
可以连续执行多次,记录正常时段与晚高峰的变化。例如下面的数据是用于说明判断方法的示例,并非特定线路的实测结果:
| 时间 | 目标丢包 | TCP 建连 | 首字节 | 总耗时 |
|---|---|---|---|---|
| 14:00 | 0% | 42 ms | 85 ms | 110 ms |
| 19:50 | 0% | 45 ms | 620 ms | 680 ms |
| 20:10 | 3% | 160 ms | 910 ms | 980 ms |
19:50 时基础连通性尚可,但首字节时间已经明显变长,说明问题可能首先出现在服务器处理、应用依赖或目标网络排队,而不是单纯的中间跳丢包。20:10 后端到端丢包和建连耗时同时上升,才需要进一步怀疑线路或服务器出口的拥塞。
第四步:从多个来源地做对照
至少选择两个网络条件不同的测试来源:
- 同一地区的另一台云主机;
- 不同运营商的办公网络;
- 不同国家或地区的测试机;
- 服务器所在机房附近的一台测试主机。
对照的重点不是谁的延迟更低,而是异常是否同步、路径是否相同。
| 来源 | 中间跳异常 | 目标丢包 | 业务耗时 | 初步方向 |
|---|---|---|---|---|
| 来源 A | 第 6 跳 40% | 0% | 正常 | 可能为探测回复限速 |
| 来源 B | 无明显丢包 | 0% | 正常 | A 的本地或区域路径异常 |
| 来源 C | 第 6 跳 30% | 25% | 明显升高 | 该方向存在路径拥塞嫌疑 |
如果只有一个来源观察到中间跳丢包,不能据此判定目标服务器或该路由器对所有用户都有问题。
第五步:同步检查服务器侧指标
在目标物理机上,应在正常时段和晚高峰分别记录资源状态。以下命令适用于常见 Linux 环境,具体工具是否已安装取决于发行版:
ip -s link
ss -s
vmstat 1 5
iostat -xz 1 5
sar -n DEV 1 5
重点关注:
- 网卡
RX errors、TX errors、dropped是否随晚高峰增加; - 网卡接收和发送速率是否接近端口或套餐上限;
- CPU 是否长期满载,是否出现较高的
wa; - 磁盘
await、利用率和队列是否突然上升; - TCP 连接数、重传和监听队列是否异常;
- 单个进程是否在固定时间启动备份、压缩或批处理任务。
如果网卡流量接近上限但接口没有硬件错误,可能是带宽容量或上游端口限制;如果网卡本身出现错误和丢弃,则要进一步检查虚拟网卡、驱动、宿主机或机房侧端口。
如何阅读几种典型结果
结果一:中间跳丢包,目标地址不丢包
示例:
| 位置 | 丢包率 | 延迟 |
|---|---|---|
| 第 5 跳 | 60% | 50 ms |
| 第 6 跳 | 0% | 51 ms |
| 第 7 跳 | 0% | 52 ms |
| 目标地址 | 0% | 53 ms |
这种结果通常不支持“第 5 跳是故障点”的判断。第 5 跳更可能限制了诊断响应,或者它的回复走了不同回程路径。除非业务请求也出现失败,否则不应仅凭这一行申请线路切换。
结果二:从某跳开始,后续和目标都出现相近丢包
示例:
| 位置 | 丢包率 | 延迟 |
|---|---|---|
| 第 4 跳 | 0% | 35 ms |
| 第 5 跳 | 18% | 72 ms |
| 第 6 跳 | 17% | 75 ms |
| 目标地址 | 18% | 76 ms |
如果该结果在多轮测试中稳定出现,并且业务端到端请求也有约 18% 的失败或重传,那么第 5 跳附近确实值得优先调查。此时仍然应使用“第 5 跳附近的路径段”这一表述,而不是直接指责某台设备。
结果三:全路径不丢包,但业务请求很慢
示例:
ping丢包率为 0%;mtr目标平均延迟变化不大;- TCP 建连正常;
- 首字节从 100 ms 上升到 2 秒;
- 服务器磁盘等待和数据库连接池使用率同时升高。
这种情况与中间路由器故障关系较小,更像应用处理或服务器内部资源瓶颈。继续反复执行路由追踪,通常不会得到有价值的新证据。
结果四:目标丢包,但中间每一跳都显示正常
这并不矛盾。目标地址可能限制 ICMP,也可能故障发生在最后一段路径、目标入口、服务器网卡或返回方向。可以使用目标业务端口的 TCP 测试、业务请求计时和服务器侧连接统计进行交叉验证。
物理机的“独享”不等于整条路径独享
海外物理机通常意味着计算资源不与其他虚拟机共享,但网络路径仍然包含多个可能共享的环节:
- 服务器网卡到交换设备的端口;
- 机架或集群的上联;
- 数据中心到运营商的接入链路;
- 国际出口和跨运营商互联;
- 目标地区的最后一段接入;
- 访问端本地网络。
因此,“物理机白天快、晚间慢”不能自动推出“物理机硬件故障”,也不能自动推出“国际线路某一跳故障”。需要先判断异常覆盖范围:
- 只有一个业务端口慢:检查应用监听、连接队列和端口侧策略;
- 同一服务器的多个端口都慢:检查主机负载、网卡和出口容量;
- 多台服务器同一机房都慢:关注机房上联或共同出口;
- 只有某个地区访问慢:关注该地区到机房的路径;
- 所有地区同时慢:关注目标网络、服务器资源或共同上游。
如何形成可交付的故障证据
如果需要向机房或线路服务商反馈,不要只发送一张标有红色丢包的截图。更有用的材料应包含同一时间窗口内的多类数据:
- 测试来源的地区、运营商和公网地址。
- 目标 IP、业务端口以及使用的 IPv4 或 IPv6。
- 正常时段和晚高峰的时间戳,明确时区。
- 至少两轮
ping、mtr或traceroute结果。 - 业务请求的 TCP 建连、首字节和总耗时。
- 服务器侧网卡、CPU、磁盘和连接数指标。
- 是否有其他来源地同步出现相同问题。
- 路径是否在故障前后发生变化。
其中,mtr 的目标地址最好直接使用实际业务解析到的 IP。若域名存在多个地址,应分别测试不同解析结果,避免把某个后端地址的异常误认为整个服务都不可用。
这个判断方法的适用边界
中间跳丢包可以作为线索,但它不是独立的故障证明。只有在以下条件同时较充分时,它才适合被提升为主要调查方向:
- 丢包从某一段开始,并持续影响后续跳和目标;
- 端到端探测与真实业务请求同时恶化;
- 多轮测试能够复现,而不是一次性抖动;
- 不同探测方式的结果基本一致;
- 多个来源地或多个业务连接能够相互印证;
- 服务器自身没有足以解释现象的资源和网卡异常。
反过来,如果只有某一中间跳丢包、目标地址正常、业务没有同步变慢,那么更合理的判断是“该跳的诊断回复不稳定”,而不是“该跳就是故障点”。
晚八点这个时间规律确实值得重视,它可能指向访问侧高峰、国际出口拥塞、机房共享上联、定时任务或周期性资源竞争。但时间相关性只能帮助缩小范围,不能替代端到端证据。将中间跳的表现与目标丢包、业务耗时、服务器指标放在同一条时间线上对照,才能判断卡顿究竟发生在路径、目标网络,还是物理机自身。


