windows-winmtr与pathping命令-网络丢包排查

WinMTR

说明

WinMTR是 Linux mtr的Windows 移植简化版(GUI 工具),命令参数不如Linux mtr丰富,它把 ping 和 tracert 合二为一:像tracert一样逐跳追踪路径,同时像ping一样对每一跳持续探测,实时刷新丢包率、延迟统计。

用途与 Linux mtr 完全相同:定位丢包/延迟发生在路径上的哪一跳。

  • 下载:White-Tiger/WinMTR(维护中的 fork,修复了中文编码/高 DPI 问题),解压即用,32/64位两个 exe
  • 探测协议为 ICMP Echo;对不回包的沉默跳只标注不中断,继续探测后续跳,这正是它比pathping实用的关键。

基操

  • Host 填目标(IP 或域名)→ Start → 表格实时滚动累计统计 → Stop 停止;
  • 运行没有自动结束,人工 Stop;建议跑 2~5 分钟、每跳几百个包后再下结论(样本太少丢包率没意义);
  • Copy HTML to clipboard 导出 HTML 表格。
  • Copy Text to clipboard:导出纯文本报告(mtr 风格),贴工单/笔记用;

Copy HTML to clipboard效果:

复制代码
|------------------------------------------------------------------------------------------|
|                                      WinMTR statistics                                   |
|                       Host              -   %  | Sent | Recv | Best | Avrg | Wrst | Last |
|------------------------------------------------|------|------|------|------|------|------|
|                   No response from host -  100 |    3 |    0 |    0 |    0 |    0 |    0 |
|                            192.168.16.3 -    0 |   10 |   10 |    0 |    0 |    0 |    0 |
|                            110.80.172.1 -    0 |   10 |   10 |    2 |    5 |   11 |    2 |
|                   No response from host -  100 |    3 |    0 |    0 |    0 |    0 |    0 |
|                   No response from host -  100 |    3 |    0 |    0 |    0 |    0 |    0 |
|                   No response from host -  100 |    3 |    0 |    0 |    0 |    0 |    0 |
|                   No response from host -  100 |    3 |    0 |    0 |    0 |    0 |    0 |
|                   No response from host -  100 |    3 |    0 |    0 |    0 |    0 |    0 |
|                           202.97.111.62 -    0 |   10 |   10 |   33 |   35 |   40 |   36 |
|                          203.22.178.189 -    0 |   10 |   10 |   47 |   50 |   57 |   51 |
|                           203.22.178.22 -    0 |   10 |   10 |  190 |  194 |  206 |  190 |
|                          108.170.231.21 -   15 |    7 |    6 |    0 |  194 |  203 |  201 |
|                         142.251.253.113 -    0 |   10 |   10 |  174 |  177 |  182 |  178 |
|                                 8.8.8.8 -    0 |   10 |   10 |  180 |  186 |  192 |  180 |
|________________________________________________|______|______|______|______|______|______|
   WinMTR v0.92 GPL V2 by Appnor MSP - Fully Managed Hosting & Cloud Provider

参数

四个参数

选项 说明
Interval (sec) 探测间隔,默认 1 秒(可调小加快采样,如 0.3)
Ping size (bytes) 探测包大小,默认 64(调到 1472 可测满包/MTU 问题)
Max hosts in LRU list 目标历史记录缓存上限(默认 100),一般不用改
Resolve names 是否解析主机名;取消勾选只显示 IP(等价 mtr 的 -n)

输出 & 怎么读结果

列 说明
Hostname 节点主机名/IP(取决于 Resolve names 勾选)
Nr 跳数(Number),从 1 开始。WinMTR 不显示本机行。 Nr 从 1 起算(第 1 跳 = 网关),本机只出现在表头;Linux mtr 同样从 1 起算、不列本机。"0 = 本机" 是 pathping 的行为(跃点 0 即源机)
Loss % 该跳丢包率;文本导出无此独立列,拼在 Host 后面(如 192.168.16.3 - 0)
Sent / Recv 已发送 / 已收到回复的探测包数
Best / Avrg / Wrst / Last 最低/平均/最高/最近一次延迟(ms);GUI中Wrst拼写为Worst,文本导出为 Wrst

判断逻辑与 mtr 类似

  • 沉默跳 No response from host(全超时)
    • 延迟列全 0,是占位数据,读表时忽略;
    • 只是该设备不回 ICMP,只要后续跳正常显示,链路就是通的------WinMTR 会越过它继续探测,不影响整体;
  • 真假丢包
    • 中间跳丢包高、后续跳恢复正常:该路由器 ICMP 限速,属于假丢包;
    • 某一跳起持续丢包一直到目标:该跳之后的链路存在真实丢包;
  • 网络质量
    • 重点看最后几跳和目标的 Loss%,那才反映端到端真实质量。
    • WinMTR 没有Linux mtr 的 StDev(标准差)列,判断抖动只能对比 Best 和 Wrst 的差值。

局限

  • 仅 ICMP 探测,不能像Linux mtr 那样换 TCP/UDP(-T/-u)模拟业务流量;
  • 只有 GUI + 剪贴板导出,无命令行/JSON,不便脚本化(脚本化需求用 WSL2 里的原生 mtr,注意路径从 WSL 虚拟网卡起算,前几跳与宿主机不同);
  • 参数比Linux mtr 少(无 AS 号 -z、MPLS -e 等高级功能)。

Pathping(现代网络不合适)

说明

Windows自带的tracert+ping二合一,但与mtr思路不同,是两阶段静态报告:(阶段1)先整段发现路径,(阶段2)再对已发现节点逐跳ping统计,默认100包/跳、250ms间隔 ≈ 25 秒/跳),最后一次性输出文本报告。慢是它的固有特点。

基操

参数

参数 说明
-n 不解析主机名(建议始终加)
-h 跳数 最大跃点数(默认 30)
-q 次数 每跳探测包数(默认 100)
-p 毫秒 探测间隔(默认 250)
-w 毫秒 回复超时(默认 3000)
-i 地址 指定本机源地址;-4/-6 强制 IPv4/IPv6

官网示例:正常情况

我本机就测试没成功过,这是来自官网的示例:

复制代码
D:\>pathping /n contoso1
Tracing route to contoso1 [10.54.1.196]
over a maximum of 30 hops:
  0  172.16.87.35
  1  172.16.87.218
  2  192.168.52.1
  3  192.168.80.1
  4  10.54.247.14
  5  10.54.1.196
computing statistics for 125 seconds...
            Source to Here   This Node/Link
Hop  RTT    Lost/Sent = Pct  Lost/Sent = Pct  address
  0                                           172.16.87.35
                                0/ 100 =  0%   |
  1   41ms     0/ 100 =  0%     0/ 100 =  0%  172.16.87.218
                               13/ 100 = 13%   |
  2   22ms    16/ 100 = 16%     3/ 100 =  3%  192.168.52.1
                                0/ 100 =  0%   |
  3   24ms    13/ 100 = 13%     0/ 100 =  0%  192.168.80.1
                                0/ 100 =  0%   |
  4   21ms    14/ 100 = 14%     1/ 100 =  1%  10.54.247.14
                                0/ 100 =  0%   |
  5   24ms    13/ 100 = 13%     0/ 100 =  0%  10.54.1.196
Trace complete.

分析

复制代码
  0  172.16.87.35
  1  172.16.87.218
  2  192.168.52.1
  3  192.168.80.1
  4  10.54.247.14
  5  10.54.1.196
computing statistics for 125 seconds...
  • 第一阶段得到6条,其中第0条是自己。

  • 第二阶段逐跳进行:先对Hop1发100个探测(默认 -q 100、-p 250ms ≈ 25 秒),测完再测Hop2 ...

  • 5跳 × 25秒 = 125秒,和输出的computing statistics for 125 seconds 正好吻合。

    Hop RTT Source to Here This Node/Link 地址
    1 41ms 0/100 = 0% 0/100 = 0% 172.16.87.218 ← 节点行(路由器本身)
    13/100 = 13% | ← 链路行(1→2 之间的链路)
    2 22ms 16/100 = 16% 3/100 = 3% 192.168.52.1 ← 节点行
    0/100 = 0% | ← 链路行(2→3)
    ...

  • 节点行(带 RTT 和地址)的This Node/Link: 这个路由器本身的丢包率;

  • 链路行(只有数字 + |)的This Node/Link: 上一跳地址到下一跳地址之间那条链路的丢包率(| 就是表示"链路"的示意);

  • Source to Here:从源主机到该节点为止的累计丢包率。

    Hop: 1 2 3 4 5
    S2H: 0% → 16% → 13% → 14% → 13%
    ↑
    唯一一次抬升

  • Hop1 下面那行 13/100 = 13% |:172.16.87.218 → 192.168.52.1 这条链路丢了13%

  • Hop2 节点3%:192.168.52.1 这个路由器自己丢3%;

  • Hop2 的 Source to Here = 16% ≈ 13%(前面链路)+ 3%(本节点),就是"从源到这里累计丢了多少";

  • 再往后:链路行全是 0%,Source to Here 在 13%~14% 徘徊------没有新增丢包,到目标(Hop 5)仍是 13%。

说明:端到端真实丢包 ≈ 13%,全部发生在链路 1→2这一段。

致命弱点:对沉默跳零容忍(实测)

本机示例1:异常情况

shell 复制代码
pathping -n 8.8.8.8 # -n 不解析主机名

通过最多 30 个跃点跟踪到 8.8.8.8 的路由

  0  192.168.52.28
  1     *        *        *
正在计算统计信息,已耗时 0 秒...
            指向此处的源   此节点/链接
跃点  RTT    已丢失/已发送 = Pct  已丢失/已发送 = Pct  地址
  0                                           192.168.52.28

跟踪完成。

本机示例2:tracert

同一环境下tracert能一路探到目标,WinMTR也能越过沉默跳正常统计(前面WinMTR截图就是在同一环境下测试的)。

复制代码
tracert -d 8.8.8.8

通过最多 30 个跃点跟踪到 8.8.8.8 的路由

  1     *        *        *     请求超时。
  2    <1 毫秒   <1 毫秒   <1 毫秒 192.168.16.3
  3     3 ms     3 ms     3 ms  110.80.172.1
  4     *        *        2 ms  220.160.92.57
  5     *        *        *     请求超时。
  6    21 ms     *        *     202.97.28.221
  7     *        *        *     请求超时。
  8     *        *        *     请求超时。
  9    34 ms    33 ms    33 ms  202.97.111.62
 10    48 ms    48 ms    47 ms  203.22.178.189
 11   193 ms   267 ms   195 ms  203.22.178.22
 12   184 ms   193 ms   192 ms  108.170.231.21
 13   177 ms   176 ms   176 ms  142.251.253.113
 14   180 ms   180 ms   182 ms  8.8.8.8

跟踪完成。

差异

tracert和pathping两者的路径发现机制相同:TTL递增 + 中间路由器返回 ICMP Time Exceeded,逐跳发现路径(Windows tracert 默认以 ICMP Echo 作探测包)。差异在于对单跳无响应的容错性:

  • pathping:第一阶段先建立路径,第二阶段对这条路径做统计;当某跳拿不到 hop 信息时,路径可能无法继续建立,后续节点不会进入统计阶段(示例1第1跳 * * * 后即终止)
  • tracert:某跳全部超时(显示 *)只是该跳信息缺失,不影响继续递增TTL探测后续跳,路由表仍然完整(示例2第 1/5/7/8 跳 *,仍一路探到第 14 跳目标)

实际公网中间路由沉默/限速非常普遍,所以pathping对公网目标大概率显示不完整。尤其在公司网关禁用 ICMP 时甚至只剩一行。

为什么这样

这个差异是历史产物:pathping 是 NT 时代工具,面向当年 ICMP 相对开放的企业内网,"先建拓扑再统计"在那种环境合理;现代公网路由器的主职是转发业务包,回应 ICMP Time Exceeded 是次要工作(普遍限速/丢弃/不生成),中间路由沉默是常态而非异常,两阶段架构因此水土不服。

结论

pathping

  • 追求"先把拓扑搞清楚,再做统计"。它的核心卖点是丢包归因(节点 vs 链路),必须先有一份完整明确的路径模型;拓扑发现失败 → 统计基础不存在 → 后面全部无法进行。
  • 系统自带、无需安装;在网关友好环境(如内网排查、网关开了 ICMP)能用它独有的链路级丢包分析(同时给出节点丢包和链路丢包,这点 mtr 也没有);

Linux mtr/WinMTR/tracert

  • 追求"只要最终目标可达,就尽量继续递增 TTL"。沉默跳标记 ?(或 *)跳过,后面的路径照常探出。天然适应沉默跳普遍的公网。
  • WinMTR自动越过沉默跳,实时刷新,逐跳丢包统计;

ICMP本身弱可靠,测试可以依赖业务流量

路由器对各类ICMP(Echo / Time Exceeded / Unreachable)都可能限速,而TCP 443、UDP 等业务流量正常转发。所以ICMP探测工具测的是"路径上设备对 ICMP 探测的响应行为",不等于"业务流量的实际质量"。判断线路质量不能只凭 tracert/pathping,

  • 在windows中,可以组合:WinMTR长时间统计 + 长时间ping + 实际业务流量(如 scp)。
  • 在linux中,可以用mtr,换探测协议模拟业务:mtr -T -P 443 8.8.8.8(TCP SYN)或 mtr -u(UDP)。
    注意:探测包变了,但中间跳的响应仍是ICMP Time Exceeded(TTL 耗尽的路由器行为,与探测协议无关),中间跳照旧受 ICMP 限速影响;换协议的意义在于让目标端探测与业务同类,目标丢包/可达性的测量更有业务参考价值,还能发现中间防火墙对特定端口的拦截。

参考

相关推荐
xuxigifxfh1 小时前
牛客:BISHI2 【模板】栈的操作
java·开发语言·windows·算法
m0_547486662 小时前
《网络与信息安全》全套PPT课件2026
网络·网络安全
星云低代码开发平台2 小时前
AI 连接器运行健康度:指标、异常恢复和联调清单
大数据·运维·网络·数据库·人工智能·mcp
花间相见2 小时前
【计算基础|网络12】TCP 抓包与经典边界问题
网络·tcp/ip·策略模式
zoyation3 小时前
jrp 1.2.0 重磅发布|P2P打洞直连 · 端口自动分配 · 一端口多服务,这次全齐了!
网络·网络协议·p2p
励志师code3 小时前
RoCE 网络实战:从 NCCL 调优到 RDMA 硬件计数器排障
linux·运维·网络·云计算
砚凝霜3 小时前
【软考信息安全】第二十一章 网络设备安全增强技术与漏洞防护
网络·安全·web安全
Alinket3 小时前
毫米波雷达 vs 摄像头 vs 手环:养老跌倒监测三类方案怎么选
网络·数据库·健康医疗·信息与通信·iot
企业解惑小助手3 小时前
大型企业终端如何统一管理排障实录:批量终端策略不生效问题排查
运维·服务器·网络·域智盾软件