#  Windows实例网络访问丢包延时高的排查方法

最近更新时间: 2020-08-13 19:17:22

# 概述

当网站访问很慢或无法访问时，若已经排除显著的问题，而使用ping命令检测到有明显丢包时，建议您做链路测试。在Windows环境中，推荐优先使用WinMTR工具，或者tracert命令行进行链路测试以判断问题来源。通常情况下，链路测试步骤如下。

  1. 利用链路测试工具探测网络状况和服务器状态。
  2. 根据链路测试结果分析处理。

# 详细信息

> 七牛云提醒您：
>
>   * 如果您对实例或数据有修改、变更等风险操作，务必注意实例的容灾、容错能力，确保数据安全。
>   * 如果您对实例（包括但不限于QVM、RDS）等进行配置与数据修改，建议提前创建快照或开启RDS日志备份等功能。
>   * 如果您在七牛云平台授权或者提交过登录账号、密码等安全信息，建议您及时修改。
>

## WinMTR工具

mtr（My
traceroute）作为一款网络测试工具，集成了tracert与ping这两个命令的图形界面。ping与tracert通常被用于检测网络状况和服务器状态，具体说明如下。

命令名称| 具体说明  
---|---  
ping| 送出封包到指定的服务器。如果服务器有回应就会传送回封包，并附带返回封包来回的时间  
tracert| 返回从用户的电脑到指定的服务器中间经过的所有节点（路由）以及每个节点的回应速度。  
  
WinMTR是mtr工具在Windows环境下的图形化实现，适合Windows下做路由追踪及ping测试。WinMTR默认发送ICMP数据包进行探测，无法切换。

相比tracert命令行工具，WinMTR能避免节点波动对测试结果的影响，测试结果更正确。Windows环境下，建议优先使用WinMTR进行链路测试。下载[WinMTR工具](https://sourceforge.net/projects/winmtr/files/latest/download)。

  1. 下载WinMTR工具后，直接解压运行。运行程序后，在 **Host** 字段输入目标服务器域名或IP。  
![1](http://qey2kbifv.hn-bkt.clouddn.com/2020-08-13/qoLt9zeWwfXRYprj7BVc.png)

  2. 单击 **Start** 开始测试。开始测试后，相应按钮变成了 **Stop** 。
  3. 运行一段时间后，单击 **Stop** 停止测试。

> **说明：** 您可以多测试几分钟，测试结束后，将结果导出。

### 常见可选参数说明

  * Copy Text to clipboard：将测试结果以文本格式复制到粘贴板。
  * Copy HTML to clipboard：将测试结果以HTML格式复制到粘贴板。
  * Export TEXT：将测试结果以文本格式导出到指定文件。
  * Export HTML：将测试结果以HTML格式导出到指定文件。
  * Options：为可选参数。具体包括以下参数。
    * Interval（sec）：每次探测的间隔（过期）时间，默认为1秒。
    * Ping size（bytes）：ping 探测所使用的数据包大小，默认为64字节。
    * Max hosts in LRU list：LRU列表支持的最大主机数，默认值为128。
    * Resolve names：通过反查IP以域名显示相关节点。

### WinMTR运行后的返回结果说明

默认配置下，WinMTR测试结果说明如下。

  * 第一列（Hostname）：到目标服务器要经过的每个节点主机IP或域名。
  * 第二列（Nr）：节点编号。
  * 第三列（Loss%）：节点丢包率。ping数据包回复失败的百分比，由此可判断哪个节点（线路）出现故障，是服务器所在机房还是国际路由干路。
  * 第四列（Sent）：已发送的数据包数量。
  * 第五列（Recv）：已成功接收的数据包数量。
  * 第六、七、八、九列（Best 、Avg、Worst、Last）：分别是回应时间的最小值、平均值、最大值和最后一个数据包的回应时间。

## tracert命令行工具

tracert (Trace Route)
是Windows自带的网络诊断命令行实用程序，用于跟踪Internet协议（IP）数据包传送到目标地址时经过的路径。

tracert通过向目标地址发送ICMP数据包来确定到目标地址的路由。在这些数据包中，tracert使用了不同的IP生存期 (TTL)
值。由于要求沿途的路由器在转发数据包前至少必须将TTL减少1，因此TTL实际上相当于一个跃点计数器 (hop
counter)。当某个数据包的TTL达到零时，相应节点就会向源计算机发送一个ICMP超时的消息。tracert第一次发送TTL为1的数据包，并在每次后续传输时将TTL增加1，直到目标地址响应或达到TTL的最大值。中间路由器发送回来的ICMP超时消息中包含了相应节点的信息。

  1. 在桌面底部单击 **开始** 菜单，选择 **运行** 。
  2. 打开运行框后，在框中输入 **cmd** ，并单击 **确定** 。
  3. 在命令运行界面中，输入 **tracert** ，按回车键后，界面将显示tracert的用法说明。

![2](http://qey2kbifv.hn-bkt.clouddn.com/2020-08-13/D7QZL1Bi8hf6qImEVTr2.png)

  4. 根据具体用法，输入待跟踪的目标地址，示例如下。
    
        C:\> tracert -d 223.5.5.5  
     通过最多 30 个跃点跟踪到 223.5.5.5 的路由  
       1     __        _请求超时。  
       2    9 ms     3 ms    12 ms   192.X.X.20  
       3    4 ms     9 ms     2 ms   111.X.X.41  
       4    9 ms     2 ms     1 ms   111.X.X.197  
       5   11 ms     _        _211.X.X.57  
       6    3 ms     2 ms     2 ms   211.X.X.62  
       7    2 ms     2 ms     1 ms   42.X.X.190  
       8   32 ms     4 ms     3 ms   42.X.X.238  
       9     _        __     请求超时。  
       10   3 ms     2 ms     2 ms   223.5.5.5

## 分析链路测试结果

以如下链路测试结果示例图为基础进行阐述。

![](http://qey2kbifv.hn-bkt.clouddn.com/2020-08-13/sFo59axhrj6Zi7W3gGuf.png)

  1. 判断各区域是否存在异常，并根据各区域的情况分别处理。
     * 区域A：客户端本地网络，即本地局域网和本地网络提供商网络。针对该区域异常，客户端本地网络相关节点问题，请对本地网络进行排查分析；本地网络提供商网络相关节点问题，请向当地运营商反馈。

     * 区域B：运营商骨干网络。针对该区域异常，可根据异常节点IP查询归属运营商，然后直接或通过七牛云售后技术支持，向相应运营商反馈问题。

     * 区域C：目标服务器本地网络，即目标主机归属网络提供商网络。针对该区域异常，需要向目标主机归属网络提供商反馈问题。

  2. 结合Avg（平均值）和StDev（标准偏差），判断各节点是否存在异常。

     * 若StDev很高，则同步观察相应节点的Best和Worst，来判断相应节点是否存在异常。
     * 若StDev不高，则通过Avg来判断相应节点是否存在异常。

> **注意：**
> 上述StDev高或者不高，并没有具体的时间范围标准。而需要根据同一节点其它列的延迟值大小来进行相对评估。比如，如果Avg为30ms，那么，当StDev为25ms，则认为是很高的偏差。而如果Avg为325ms，则同样的StDev为25ms，反而认为是不高的偏差。

  3. 查看节点丢包率，若“Loss%”不为零，则说明这一跳路由的网络可能存在问题。导致节点丢包的原因通常有两种。

     * 人为限制了节点的ICMP发送速率，导致丢包。
     * 节点确实存在异常，导致丢包。
  4. 确定当前异常节点的丢包原因。

     * 若随后节点均没有丢包，说明当前节点丢包是由于运营商策略限制所致，可以忽略。如前文链路测试结果示例图中的第2跳路由的网络所示。

     * 若随后节点也出现丢包，说明当前节点存在网络异常，导致丢包。如前文链路测试结果示例图中的第5跳路由的网络所示。

> **说明：**
> 前述两种情况可能同时发生，即相应节点既存在策略限速，又存在网络异常。对于这种情况，若当前节点及其后续节点连续出现丢包，而且各节点的丢包率不同，则通常以最后几跳路由的网络的丢包率为准。如前文链路测试结果示例图所示，在第5、6、7跳路由的网络均出现了丢包。所以，最终丢包情况，以第7跳的40%作为参考。

  5. 通过查看是否有明显的延迟，来确认节点是否存在异常。通过如下两个方面进行分析。

     * 若某一跳路由的网络之后延迟明显陡增，则通常判断该节点存在网络异常。如前文链路测试结果示例图所示，从第5跳路由的网络之后的后续节点延迟明显陡增，则推断是第5跳路由的网络节点出现了网络异常。

> 注：高延迟并不一定完全意味着相应节点存在异常，延迟大也有可能是在数据回包链路中引发的，建议结合反向链路测试一并分析。

     * ICMP策略限速也可能会导致相应节点的延迟陡增，但后续节点通常会恢复正常。如前文链路测试结果示例图所示，第3跳路由的网络有100%的丢包率，同时延迟也明显陡增。但随后节点的延迟马上恢复了正常。所以判断该节点的延迟陡增及丢包是由于策略限速所致。

## 操作建议

  * 若数据包在目标地址出现了100%的丢包，建议对目标服务器的安全策略配置进行排查。
  * 若数据包出现循环跳转，导致无法到达目标服务器，建议联系相应节点归属运营商处理。
  * 若数据包在跳转后无法收到任何反馈，建议结合反向链路测试作进一步确认，并联系相应节点归属运营商进行处理。
  * 七牛云中国内地机房和其他国家或地区有网络通信的专线，为降低通信时候的丢包率，推荐使用高速通道。
  * 若主机掉包和延迟非常高，建议做WinMTR双向测试，即本地到服务器的和服务器到本地的测试。无法远程登录时，请通过管理终端进行登录。

# 适用于

  * 云服务器 QVM