1

ping 丢包或不通时链路测试说明_ping 丢包或不通时链路测试说明_故障处理_云服务器 EC...

 7 years ago
source link: https://help.aliyun.com/knowledge_detail/40573.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

当客户端访问目标服务器出现ping丢包或ping不通时,可以通过tracertmtr等工具进行链路测试来判断问题根源。本文主要介绍如何通过工具进行链路测试和分析。

阿里云提醒您:

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

使用ping命令丢包或者网络不通时,可参见以下操作步骤进行链路测试并进行处理,想了解链路测试中所使用工具的更多介绍请参见更多信息

链路测试步骤

通常情况下,链路测试步骤如下:

66d1df5c-c587-4ac8-8fe2-d5237dc2c9d6.png

步骤一:获取本地网络对应的公网IP

在客户端本地网络内访问淘宝IP地址库,获取本地网络对应的公网IP地址。

600b5138-42d8-41f9-ac92-d8e51d22719e.png

步骤二:正向链路测试(ping和mtr)

从客户端向目标服务器做以下测试:

  • 从客户端向目标服务器域名或IP做持续的ping测试,建议至少ping 100个数据包,记录测试结果。
  • 根据客户端操作系统的不同,使用WinMTR或mtr,设置测试目的地址为目标服务器域名或IP,然后进行链路测试,记录测试结果。

步骤三:反向链路测试(ping和mtr)

进入目标服务器系统内部做以下测试:

  • 从目标服务器向步骤一获取的客户端IP做持续的ping测试,建议至少ping 100个数据包,记录测试结果。
  • 根据目标服务器操作系统的不同,使用WinMTR或mtr,设置测试目的地址为客户端的IP地址,然后进行链路测试,记录测试结果。

步骤四:测试结果分析

参见测试结果的简要分析,对测试结果进行分析。确认异常节点后,访问如下链接或其他可以查询IP归属地的网站,获取该异常节点的归属运营商信息。如果是客户端本地网络相关节点出现异常,则需要对本地网络进行相应排查分析。如果是运营商相关节点出现异常,则需要向运营商反馈问题。查询结果类似如下。

c2de82d4-177e-4538-9a1d-b07e4024f374.png

测试结果的简要分析

由于mtr(WinMTR)有更高的准确性,本文以其测试结果为例,参见以下要点进行分析。此处分析时以如下示例图为基础。

17fc8b0c-276e-4373-87eb-814342c16edf.png

要点一:网络区域

正常情况下,从客户端到目标服务器的整个链路中会包含以下网络区域:

  • 客户端本地网络:即本地局域网和本地网络提供商网络。如上图中的区域A。如果该区域出现异常,并且是客户端本地网络中的节点出现异常,则需要对本地网络进行相应的排查分析。如果是本地网络提供商网络出现异常,则需要向当地运营商反馈问题。
  • 运营商骨干网络:如上图中的区域B。如果该区域出现异常,可以根据异常节点的IP查询其所属的运营商,直接向对应运营商进行反馈,或者通过阿里云技术支持,向运营商进行反馈。
  • 目标服务器本地网络:即目标服务器所属提供商的网络。如上图中的区域C。如果该区域出现异常,需要向目标服务器所属的网络运营商反馈问题。

要点二:链路负载均衡

如上图中的区域D。如果中间链路某些部分启用了链路负载均衡,则mtr只会对首尾节点进行编号和探测统计。中间节点只会显示相应的IP或域名信息。

要点三:结合Avg(平均值)和StDev(标准偏差)综合判断

由于链路抖动或其它因素的影响,节点的Best和Worst值可能相差很大。Avg统计了自链路测试以来所有探测的平均值,所以能更好的反应出相应节点的网络质量。而StDev越高,则说明数据包在相应节点的延时值越不相同,即越离散。所以标准偏差值可用于协助判断Avg是否真实反应了相应节点的网络质量。例如,如果标准偏差很大,说明数据包的延迟是不确定的。可能某些数据包延迟很小,例如25ms,而另一些延迟却很大,例如350ms,但最终得到的平均延迟反而可能是正常的。所以,此时Avg并不能很好的反应出实际的网络质量情况。

综上所属,建议的分析标准如下:

  • 如果StDev很高,则同步观察相应节点的Best和Worst,来判断相应节点是否存在异常。
  • 如果StDev不高,则通过Avg来判断相应节点是否存在异常。
    注意:上述StDev高或者不高,并没有具体的时间范围标准。而需要根据同一节点其它列的延迟值大小来进行相对评估。比如,如果Avg为30ms,那么,当StDev为25ms,则认为是很高的偏差。而如果Avg为325ms,则StDev同样为25ms,反而认为是不高的偏差。

要点四:Loss%(丢包率)的判断

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

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

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

  • 如果随后节点均没有丢包,则通常表示异常节点丢包是由于运营商策略限制所致。可以忽略相关丢包。如上图中的第2跳所示。
  • 如果随后节点也出现丢包,则通常说明异常节点确实存在网络异常,导致丢包。如上图中的第5跳所示。

另外,上述两种情况可能同时发生,即相应节点既存在策略限速,又存在网络异常。对于这种情况,如果异常节点及其后续节点连续出现丢包,而且各节点的丢包率不同,则通常以最后几跳的丢包率为准。如上图所示,在第 5、6、7跳均出现了丢包。所以,最终丢包情况,以第7跳的40%作为参考。

要点五:关于延迟

关于延迟,有以下两种场景:

场景一:延迟跳变

如果在某一跳之后延迟明显陡增,则通常判断该节点存在网络异常。如上图所示,从第5跳之后的后续节点延迟明显陡增,则推断是第5跳节点出现了网络异常。不过,高延迟并不一定完全意味着相应节点存在异常。如上图所示,第5跳之后,虽然后续节点延迟明显陡增,但测试数据最终仍然正常到达了目的主机。所以,延迟大也有可能是在数据回包链路中引发的。所以,需要结合反向链路测试一并分析。

场景二:ICMP限速导致延迟增加

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

测试完成后的解决方法

常见的链路异常场景

常见的链路异常场景及测试报告如下:

场景一:目标主机网络配置不当

示例数据如下。

[root@mycentos6 ~]# mtr —no-dns www.google.com
My traceroute [v0.75]
mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016
Keys: Help Display mode Packets Pings
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. 173.194.200.105 100.0% 10 0.0 0.0 0.0 0.0 0.0

在该示例中,数据包在目标地址出现了100%的丢包。从数据上看是数据包没有到达,其实很有可能是目标服务器相关安全策略(比如防火墙、iptables 等)禁用了ICMP所致,导致目的主机无法发送任何应答。所以,该场景需要排查目标服务器的安全策略配置。

场景二:ICMP限速

示例数据如下。

[root@mycentos6 ~]# mtr --no-dns www.google.com
My traceroute [v0.75]
mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016
Keys: Help Display mode Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. 63.247.X.X 0.0% 10 0.3 0.6 0.3 1.2 0.3
2. 63.247.X.XX 0.0% 10 0.4 1.0 0.4 6.1 1.8
3. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.7
4. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.1
5. 72.14.233.56 60.0% 10 27.2 25.3 23.1 26.4 2.9
6. 209.85.254.247 0.0% 10 39.1 39.4 39.1 39.7 0.2
7. 64.233.174.46 0.0% 10 39.6 40.4 39.4 46.9 2.3
8. gw-in-f147.1e100.net 0.0% 10 39.6 40.5 39.5 46.7 2.2

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

场景三:环路

示例数据如下。

[root@mycentos6 ~]# mtr —no-dns www.google.com
My traceroute [v0.75]
mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016
Keys: Help Display mode Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. 63.247.7X.X 0.0% 10 0.3 0.6 0.3 1.2 0.3
2. 63.247.6X.X 0.0% 10 0.4 1.0 0.4 6.1 1.8
3. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.7
4. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.1
5. 72.14.233.56 0.0% 10 0.0 0.0 0.0 0.0 0.0
6. 72.14.233.57 0.0% 10 0.0 0.0 0.0 0.0 0.0
7. 72.14.233.56 0.0% 10 0.0 0.0 0.0 0.0 0.0
8. 72.14.233.57 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

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

场景四:链路中断

示例数据如下。

[root@mycentos6 ~]# mtr —no-dns www.google.com
My traceroute [v0.75]
mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016
Keys: Help Display mode Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. 63.247.7X.X 0.0% 10 0.3 0.6 0.3 1.2 0.3
2. 63.247.6X.X 0.0% 10 0.4 1.0 0.4 6.1 1.8
3. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.7
4. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.1
5. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0
6. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0
7. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0
8. ??? 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跳之后就无法收到任何反馈。这通常是由于相应节点中断所致。建议结合反向链路测试做进一步确认。该场景需要联系相应节点归属运营商处理。

操作系统类型不同,链路测试所使用的工具也有所不同,简要介绍如下:

Linux系统

此处简单介绍两个链路测试工具:

工具一:mtr命令

mtr(My traceroute)几乎是所有Linux发行版本预装的网络测试工具。其将pingtraceroute的功能合并,所以功能更强大。mtr默认发送ICMP数据包进行链路探测。您也可以通过-u参数来指定使用UDP数据包进行探测。相对于traceroute只会做一次链路跟踪测试,mtr会对链路上的相关节点做持续探测并给出相应的统计信息。所以,mtr能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。

用法说明

mtr [-BfhvrwctglxspQomniuT46] [--help] [--version] [--report]
[--report-wide] [--report-cycles=COUNT] [--curses] [--gtk]
[--csv|-C] [--raw] [--xml] [--split] [--mpls] [--no-dns] [--show-ips]
[--address interface] [--filename=FILE|-F]
[--ipinfo=item_no|-y item_no]
[--aslookup|-z]
[--psize=bytes/-s bytes] [--order fields]
[--report-wide|-w] [--inet] [--inet6] [--max-ttl=NUM] [--first-ttl=NUM]
[--bitpattern=NUM] [--tos=NUM] [--udp] [--tcp] [--port=PORT] [--timeout=SECONDS]
[--interval=SECONDS] HOSTNAME

常见可选参数说明

  • --report:以报告模式显示输出。
  • --split:将每次追踪的结果分别列出来,而非统计整个结果。
  • --psize:指定ping数据包的大小。
  • --no-dns:不对IP地址做域名反解析。
  • --address:主机有多个IP地址时,设置发送数据包的IP地址。
  • -4:只使用IPv4协议。
  • -6:只使用IPv6协议。

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

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

命令输出示例

5aa45796-7859-416d-97cb-42c41d5e6b49.png

返回结果说明

默认配置下,返回结果中各数据列的说明如下:

  • 第一列(Host):节点IP地址和域名。按n键可切换显示。
  • 第二列(Loss%):节点丢包率。
  • 第三列(Snt):每秒发送数据包数。默认值是10,可以通过-c参数指定。
  • 第四列(Last):最近一次的探测延迟。
  • 第五、六、七列(Avg、Best、Worst):分别是探测延迟的平均值、最小值和最大值。
  • 第八列(StDev):标准偏差,越大说明相应节点越不稳定。

工具二:traceroute命令

traceroute也是几乎所有Linux发行版本预装的网络测试工具,用于跟踪Internet协议(IP)数据包传送到目标地址时经过的路径。

  1. 首先,traceroute先发送小的具有最大存活时间值(Max_TTL)的UDP探测数据包。
  2. 然后,侦听从网关开始的整个链路上的ICMP TIME_EXCEEDED响应。探测从TTL=1开始,TTL值逐步增加,直至接收到ICMP PORT_UNREACHABLE消息。
    说明
    • ICMP PORT_UNREACHABLE消息用于标识目标主机已经被定位,或命令已经达到允许跟踪的最大TTL值。
    • traceroute默认发送UDP数据包进行链路探测,可以通过-I参数来指定使用ICMP数据包进行探测。

用法说明

traceroute [-I] [ -m Max_ttl ] [ -n ] [ -p Port ] [ -q Nqueries ] [ -r ] [ -s SRC_Addr ] [ -t TypeOfService ] [ -f flow ] [ -v ] [ -w WaitTime ] Host [ PacketSize ]

常见可选参数说明

  • -d:使用Socket层级的排错功能。
  • -f:设置第一个检测数据包的存活数值TTL的大小。
  • -F:设置不要分段标识。
  • -g:设置来源路由网关,最多可设置8个。
  • -i:主机有多个网卡时,使用指定的网卡发送数据包。
  • -I:使用ICMP数据包替代UDP数据包进行探测。
  • -m:设置检测数据包的最大存活数值TTL的大小。
  • -n:直接使用IP地址而非主机名称(禁用DNS反查)。
  • -p:设置UDP传输协议的通信端口。
  • -r:忽略普通的Routing Table,直接将数据包发送到目标主机上。
  • -s:设置本地主机发送数据包的IP地址。
  • -t:设置检测数据包的TOS数值。
  • -v:详细显示指令的执行过程。
  • -w:设置等待远端主机回包时间。
  • -x:开启或关闭数据包的正确性检验。

命令输出示例

308dfc1d-cb8c-4dd9-9dc7-01b4ad9374a5.png

308dfc1d-cb8c-4dd9-9dc7-01b4ad9374a5.png

traceroute工具的更多用法请参见traceroute工具的man帮助

Windows系统

此处简单介绍两个链路测试工具:

工具一:WinMTR(建议优先使用)

WinMTR是mtr工具在Windows环境下的图形化实现,但进行了功能简化,只支持部分mtr的参数。WinMTR默认发送ICMP数据包进行探测,无法切换,和mtr一样。相比tracert,WinMTR能避免节点波动对测试结果的影响,所以测试结果更正确。所以在WinMTR可用的情况下,建议优先使用WinMTR进行链路测试。

用法说明

WinMTR无需安装,直接解压运行即可。操作方法非常简单,说明如下:

  1. 如下图所示,运行程序后,在Host字段输入目标服务器域名或IP,注意不要包含空格。
    81e3ded2-3ff8-461f-aa66-049733f28bbe.png
  2. 单击Start开始测试。开始测试后,相应按钮变成了Stop
  3. 运行一段时间后,单击Stop停止测试。
  4. 其它选项说明如下。
    • 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地址,以域名显示相关节点。

返回结果说明

默认配置下,返回结果中各数据列的说明如下:

  • 第一列(Hostname):节点的IP或域名。
  • 第二列(Nr):节点编号。
  • 第三列(Loss%):节点丢包率。
  • 第四列(Sent):已发送的数据包数量。
  • 第五列(Recv):已成功接收的数据包数量。
  • 第六、七、八、九列(Best 、Avg、Worst、Last):分别是到相应节点延迟的最小值、平均值、最大值和最后一次值。

工具二:tracert命令行工具

tracert(Trace Route)是Windows自带的网络诊断命令行程序,用于跟踪Internet协议(IP)数据包传送到目标地址时经过的路径。 tracert通过向目标地址发送ICMP数据包来确定到目标地址的路由。在这些数据包中,tracert使用了不同的IP生存期,即TTL值。由于要求沿途的路由器在转发数据包前必须至少将TTL减少1,因此TTL实际上相当于一个跃点计数器(hop counter)。当某个数据包的TTL达到0时,相应节点就会向源计算机发送一个ICMP超时的消息。 

tracert第一次发送TTL为1的数据包,并在每次后续传输时将TTL增加1,直到目标地址响应或达到TTL的最大值。中间路由器发送回来的ICMP超时消息中包含了相应节点的信息。

用法说明

tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name

常见可选参数说明

  • -d:不要将地址解析为主机名(禁用DNS反解)。
  • -h:maximum_hops,指定搜索目标地址时的最大跃点数。
  • -j: host-list,指定沿主机列表的松散源路由。
  • -w:timeout,等待每个回复的超时时间(以毫秒为单位)。
  • -R:跟踪往返行程路径(仅适用于IPv6)。
  • -S:srcaddr,要使用的源地址(仅适用于IPv6)。
  • -4:强制使用IPv4。
  • -6:强制使用IPv6。
  • target_host:目标主机域名或IP地址。

命令输出示例

C:\> tracert -d 223.5.5.5
通过最多 30 个跃点跟踪到 223.5.5.5 的路由
1 请求超时。
2 9 ms 3 ms 12 ms 192.168.X.X
3 4 ms 9 ms 2 ms X.X.X.X
4 9 ms 2 ms 1 ms XX.XX.XX.XX
5 11 ms 211.XX.X.XX
6 3 ms 2 ms 2 ms 2XX.XX.1XX.XX
7 2 ms 2 ms 1 ms 42.XX.2XX.1XX
8 32 ms 4 ms 3 ms 42.XX.2XX.2XX
9 请求超时。
10 3 ms 2 ms 2 ms 223.5.5.5
跟踪完成。
  • 云服务器 ECS

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK