文档中心 故障排查 ping不通或丢包时如何进行链路测试
在这篇文章中:

    ping不通或丢包时如何进行链路测试?

    问题描述

    在云主机上访问其他网络资源时,出现网络卡顿。执行ping命令,存在丢包或时延过高的问题。

    丢包或时延较高可能是链路拥塞、链路节点故障、服务器负载高、系统设置问题等原因引起。

    在排除云主机自身原因后,您可以使用Tracert或MTR工具进行进一步诊断。

    本节内容导航

    Windows操作系统Tracert介绍和使用

    Tracert是路由跟踪程序,Tracert命令用来显示数据包到达目标主机所经过的路径,并显示到达每个节点的时间。Tracert命令功能与Ping命令类似,但获得的信息要比Ping命令详细,它可以显示数据包所走的全部路径、节点的IP以及时间。

    1. 登录Windows云主机。

    2. 打开cmd命令窗,执行以下命令跟踪IP地址。

      1
      tracert IP地址/网站地址

      例如:tracert www.baidu.com

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      C:Userscindy>tracert www.baidu.com
      通过最多 30 个跃点跟踪
      到 www.a.shifen.com [112.80.248.75] 的路由:
      1 1 ms 1 ms 1 ms 202.120.2.64
      2 5 ms 2 ms 1 ms 202.120.2.97
      3 28 ms 6 ms 2 ms 10.32.73.253
      4 20 ms 3 ms 2 ms 10.32.31.241
      5 4 ms 11 ms 6 ms 10.255.38.58
      6 4 ms 4 ms 5 ms 10.255.38.1
      7 9 ms 10 ms 10 ms 10.255.38.254
      8 * 4 ms * 202.112.27.1
      9 5 ms 6 ms 4 ms 101.4.115.105
      10 25 ms 23 ms 23 ms 101.4.117.30

    对数据节点分析如下:

    • Tracert默认最大跳数30,第1列为起跳顺序号。
    • Tracert每次会发送三个数据包,第2、3、4列为对应三个数据包的返回时间。第5列为跳转的IP节点。
    • 假如某一层中出现了“ * request timed out”,那么则需要定位这层的问题,可能这里导致连接不到目标节点。

    Linux操作系统MTR介绍和使用

    MTR 是一款强大的网络诊断工具,它集成了 traceroute 和 ping 的功能,并且会收集更多的信息,比如连接状态、可用性等等,在排查网络问题中,非常有用。

    MTR默认发送ICMP数据包进行链路探测。您也可以通过-u参数来指定使用UDP数据包进行探测。相对于traceroute只会做一次链路跟踪测试,MTR会对链路上的相关节点做持续探测并给出相应的统计信息。所以,MTR能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。

    安装MTR

    MTR几乎是所有Linux发行版本预装的网络测试工具,如果您的Linux云主机没有安装MTR,则可以执行以下命令进行安装:

    • CentOS 操作系统:

      1
      yum install mtr
    • Ubuntu 操作系统:

      1
      sudo apt-get install mtr

    MTR命令用法

    MTR命令最基础的使用很简单,直接使用命令:mtr ip或域名即可

    常见可选参数说明

    • -r/–report:结果以报告形式输出。
    • -p/–split:与 –report相对,分别列出每次追踪的结果。
    • -c/–report-cycles:设置每秒发送的数据包数量,默认是10。
    • -s/–psize:设置数据包的大小。
    • -n/–no-dns:不对IP地址做域名解析。
    • -a/–address:用户设置发送数据包的IP地址,主要用户单一主机多个IP地址的场景。
    • -4:只使用IPv4协议。
    • -6:只使用IPv6协议。

    另外,也可以在mtr运行过程中,输入类似如下的字母用于快速切换模式:

    • ?或h:显示帮助菜单。
    • d:切换显示模式。
    • n:启用或禁用DNS域名解析。
    • u:切换使用ICMP或UDP数据包进行探测。

    示例

    以本机到IP为www.baidu.com的服务器为例。

    执行以下命令,以报告形式输出MTR的诊断报告。

    1
    mtr 119.xx.xx.xx -- report
    • 回显信息如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [root@dbnt1kZ ~]# mtr -rn www.baidu.com
    Start: Mon Jul 26 16:33:13 2021
    HOST: dbnt1kZ Loss% Snt Last Avg Best Wrst StDev
    1.|-- 10.12.208.110 0.0% 10 2.7 2.6 2.5 2.9 0.0
    2.|-- 10.12.208.73 10.0% 10 5.0 4.9 4.1 8.2 1.2
    3.|-- 10.255.101.109 0.0% 10 2.5 3.0 2.4 7.8 1.6
    4.|-- 103.41.142.162 0.0% 10 3.5 3.7 3.4 5.4 0.5
    5.|-- 10.102.46.61 0.0% 10 2.9 3.0 2.9 3.1 0.0
    6.|-- 115.238.21.14 0.0% 10 3.1 3.0 3.0 3.1 0.0
    7.|-- 220.191.199.73 0.0% 10 8.1 6.7 6.5 8.1 0.5
    8.|-- 202.97.33.145 30.0% 10 13.9 14.5 13.9 15.9 0.6
    9.|-- 58.213.95.98 80.0% 10 14.8 14.8 14.8 14.9 0.0
    10.|-- 58.213.95.130 90.0% 10 14.6 14.6 14.6 14.6 0.0
    11.|-- 58.213.96.78 0.0% 10 13.0 12.9 12.8 13.0 0.0
    12.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
    13.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
    14.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
    15.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
    16.|-- 180.101.49.12 0.0% 10 14.0 14.0 14.0 14.0 0.0
    • 返回结果说明:
      默认配置下,返回结果中各数据列的说明如下:
      • 第一列(Host):节点IP地址和域名。按n键可切换显示。
      • 第二列(Loss%):节点丢包率。
      • 第三列(Snt):每秒发送数据包数。默认值是10,可以通过-c参数指定。
      • 第四列(Last):最近一次的探测延迟。
      • 第五、六、七列(Avg、Best、Worst):分别是探测延迟的平均值、最小值和最大值。
      • 第八列(StDev):标准偏差,越大说明相应节点越不稳定。

    Loss%(丢包率)的判断:
    任一节点的Loss%(丢包率)如果不为零,则说明这一跳网络可能存在问题。导致相应节点丢包的原因通常有以下两种:

    • 运营商基于安全或性能需求,限制了节点的ICMP发送速率,导致丢包。
    • 节点确实存在异常,导致丢包。

    结合异常节点及其后续节点的丢包情况,并参见以下内容,判定丢包原因。

    • 如果随后节点均没有丢包,则通常表示异常节点丢包是由于运营商策略限制所致。可以忽略相关丢包。
    • 如果随后节点也出现丢包,则通常说明异常节点确实存在网络异常,导致丢包。
      另外,上述两种情况可能同时发生,即相应节点既存在策略限速,又存在网络异常。对于这种情况,如果异常节点及其后续节点连续出现丢包,而且各节点的丢包率不同,则通常以最后几跳的丢包率为准。

    关于Timeouts:

    • 有时可能看到mtr输出结果中有(???),这可能是一些路由器将ICMP丢弃和没有应答产生超时导致的,或者是返回线路有问题。
    • 超时不一定是丢包的指示。 数据包仍然可以到达它们的目的地,而没有明显的数据包丢失或延迟。 超时可能是由于路由器为了QoS(quality of service)的目的丢弃数据包,或者可能是由于返回路由的某些问题导致的超时。

    命令参考实例:

    • 使用-r参数显示报告,默认是动态显示的:

      1
      mtr -r www.badu.com
    • 使用-c参数设置每秒发送数据包数量:

      1
      mtr -r -c 30 www.baidu.com
    • 使用-s参数指定ping数据包的大小:

      1
      mtr -r -c 30 -s 1024 www.baidu.com

    报告分析处理

    以下图为例分析MTR的报告。

    点击放大

    • 服务器本地网络:即图中A区域,代表本地局域网和本地网络提供商网络。
      • 如果客户端本地网络中的节点出现异常,则需要对本地网络进行相应的排查分析。
      • 如果本地网络提供商网络出现异常,则需要向当地运营商反馈问题。
    • 运营商骨干网络:即图中B区域,如果该区域出现异常,可以根据异常节点的IP查询其所属的运营商,向对应运营商进行反馈。
    • 目标端本地网络:即图中C区域,即目标服务器所属提供商的网络。
      • 如果丢包发生在目的服务器,则可能是目的服务器的网络配置原因,请检查目的服务器的防火墙配置。
      • 如果丢包发生在接近目的服务器的几跳,则可能是目标服务器所属提供商的网络问题。

    常见的链路异常案例

    • 目标主机配置不当

      如下示例所示,数据包在目标地址出现了100%的丢包。从数据上看是数据包没有到达,其实很有可能是目标服务器网络配置原因,需检查目的服务器的防火墙配置。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      Host                      Loss%   Snt   Last   Avg  Best  Wrst StDev 
      1. ???
      2. ???
      3. 1XX.X.X.X 0.0% 10 521.3 90.1 2.7 521.3 211.3
      4. 11X.X.X.X 0.0% 10 2.9 4.7 1.6 10.6 3.9
      5. 2X.X.X.X 80.0% 10 3.0 3.0 3.0 3.0 0.0
      6. 2X.XX.XX.XX 0.0% 10 1.7 7.2 1.6 34.9 13.6
      7. 1XX.1XX.XX.X 0.0% 10 5.2 5.2 5.1 5.2 0.0
      8. 2XX.XX.XX.XX 0.0% 10 5.3 5.2 5.1 5.3 0.1
      9. 1XX.1XX.XX.X 100.0% 10 0.0 0.0 0.0 0.0 0.0
    • ICMP限速

      如下示例所示,在第5跳出现丢包,但后续节点均未见异常。所以推断是该节点ICMP限速所致。该场景对最终客户端到目标服务器的数据传输不会有影响,分析时可以忽略此种场景。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      Host                       Loss%   Snt   Last   Avg  Best  Wrst StDev 
      1. 1XX.XX.XX.XX 0.0% 10 0.3 0.6 0.3 1.2 0.3
      2. 1XX.XX.XX.XX 0.0% 10 0.4 1.0 0.4 6.1 1.8
      3. 1XX.XX.XX.XX 0.0% 10 0.8 2.7 0.8 19.0 5.7
      4. 1XX.XX.XX.XX 0.0% 10 6.7 6.8 6.7 6.9 0.1
      5. 1XX.XX.XX.XX 0.0% 10 27.2 25.3 23.1 26.4 2.9
      6. 1XX.XX.XX.XX 0.0% 10 39.1 39.4 39.1 39.7 0.2
      7. 1XX.XX.XX.XX 0.0% 10 39.6 40.4 39.4 46.9 2.3
      8. 1XX.XX.XX.XX 0.0% 10 39.6 40.5 39.5 46.7 2.2
    • 环路

      如下示例所示,数据包在第5跳之后出现了循环跳转,导致最终无法到达目标服务器。出现此场景是由于运营商相关节点路由配置异常所致,需联系相应节点归属运营商处理。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      Host                       Loss%   Snt   Last   Avg  Best  Wrst StDev 
      1. 1XX.XX.XX.XX 0.0% 10 0.3 0.6 0.3 1.2 0.3
      2. 1XX.XX.XX.XX 0.0% 10 0.4 1.0 0.4 6.1 1.8
      3. 1XX.XX.XX.XX 0.0% 10 0.8 2.7 0.8 19.0 5.7
      4. 1XX.XX.XX.XX 0.0% 10 6.7 6.8 6.7 6.9 0.1
      5. 1XX.XX.XX.65 0.0% 10 0.0 0.0 0.0 0.0 0.0
      6. 1XX.XX.XX.65 0.0% 10 0.0 0.0 0.0 0.0 0.0
      7. 1XX.XX.XX.65 0.0% 10 0.0 0.0 0.0 0.0 0.0
      8. 1XX.XX.XX.65 0.0% 10 0.0 0.0 0.0 0.0 0.0
      9. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0
    • 链路中断

      如下示例所示,数据包在第4跳之后就无法收到任何反馈。这通常是由于相应节点中断所致。建议结合反向链路测试做进一步确认。该场景需要联系相应节点归属运营商处理。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      Host                      Loss%   Snt   Last   Avg  Best  Wrst StDev 
      1. 1XX.XX.XX.XX 0.0% 10 0.3 0.6 0.3 1.2 0.3
      2. 1XX.XX.XX.XX 0.0% 10 0.4 1.0 0.4 6.1 1.8
      3. 1XX.XX.XX.XX 0.0% 10 0.8 2.7 0.8 19.0 5.7
      4. 1XX.XX.XX.XX 0.0% 10 6.7 6.8 6.7 6.9 0.1
      5. 1XX.XX.XX.XX 0.0% 10 0.0 0.0 0.0 0.0 0.0
      6. 1XX.XX.XX.XX 0.0% 10 0.0 0.0 0.0 0.0 0.0
      7. 1XX.XX.XX.XX 0.0% 10 0.0 0.0 0.0 0.0 0.0
      8. 1XX.XX.XX.XX 0.0% 10 0.0 0.0 0.0 0.0 0.0
      9 1XX.XX.XX.XX 0.0% 10 0.0 0.0 0.0 0.0 0.0