更新时间:2017-06-30 11:31html
当客户端访问目标服务器出现 ping 丢包或 ping 不通时,能够经过 tracert 或 mtr 等工具进行链路测试来判断问题来源。本文先介绍了进行链路测试的相关工具,而后对测试结果分析及测试步骤进行了说明。linux
根据操做系统类型的不一样,链路测试所使用的工具也有所不一样。分别简要介绍以下。centos
traceroute 是几乎全部 Linux 发行版本预装的网络测试工具,用于跟踪 Internet 协议(IP)数据包传送到目标地址时通过的路径。ide
traceroute 先发送具备小的最大存活时间值(Max_TTL)的 UDP 探测数据包,而后侦遵从网关开始的整个链路上的 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 ]
示例输出:
[root@centos ~]# traceroute -I 223.5.5.5traceroute to 223.5.5.5 (223.5.5.5), 30 hops max, 60 byte packets 1 2 192.168.17.20 (192.168.17.20) 3.965 ms 4.252 ms 4.531 ms 3 111.1.20.41 (111.1.20.41) 6.109 ms 6.574 ms 6.996 ms 4 111.1.34.197 (111.1.34.197) 2.407 ms 2.451 ms 2.533 ms 5 211.138.114.25 (211.138.114.25) 1.321 ms 1.285 ms 1.304 ms 6 211.138.114.70 (211.138.114.70) 2.417 ms 211.138.114.66 (211.138.114.66) 1.857 ms 211.138.114.70 (211.138.114.70) 2.002 ms 7 42.120.244.194 (42.120.244.194) 2.570 ms 2.536 ms 42.120.244.186 (42.120.244.186) 1.585 ms 8 42.120.244.246 (42.120.244.246) 2.706 ms 2.666 ms 2.437 ms 9 10 public1.alidns.com (223.5.5.5) 2.817 ms 2.676 ms 2.401 ms
常见可选参数说明:
-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 开启或关闭数据包的正确性检验。
mtr (My traceroute)也是几乎全部 Linux 发行版本预装的网络测试工具。他把 ping和 traceroute 的功能并入了同一个工具中,因此功能更强大。
mtr 默认发送 ICMP 数据包进行链路探测。能够经过 -u 参数来指定使用 UDP 数据包用于探测。
相对于 traceroute 只会作一次链路跟踪测试,mtr 会对链路上的相关节点作持续探测并给出相应的统计信息。因此,mtr能避免节点波动对测试结果的影响,因此其测试结果更正确,建议优先使用。
用法说明:
mtr [-hvrctglspni46] [—help] [—version] [—report] [—report-cycles=COUNT] [—curses] [—gtk] [—raw] [—split] [—no-dns] [—address interface] [—psize=bytes/-s bytes] [—interval=SECONDS] HOSTNAME [PACKETSIZE]
示例输出:
[root@centos ~]# mtr 223.5.5.5 My traceroute [v0.75]mycentos6.6 (0.0.0.0) Wed Jun 15 23:16:27 2016Keys: Help Display mode Restart statistics Order of fields quit Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. ??? 2. 192.168.17.20 0.0% 7 13.1 5.6 2.1 14.7 5.7 3. 111.1.20.41 0.0% 7 3.0 99.2 2.7 632.1 235.4 4. 111.1.34.197 0.0% 7 1.8 2.0 1.2 2.9 0.6 5. 211.138.114.25 0.0% 6 0.9 4.7 0.9 13.9 5.8 6. 211.138.114.70 0.0% 6 1.8 22.8 1.8 50.8 23.6 211.138.128.134 211.138.114.2 211.138.114.66 7. 42.120.244.186 0.0% 6 1.4 1.6 1.3 1.8 0.2 42.120.244.198 8. 42.120.244.246 0.0% 6 2.8 2.9 2.6 3.2 0.2 42.120.244.242 9. ???10. 223.5.5.5 0.0% 6 2.7 2.7 2.5 3.2 0.3
常见可选参数说明:
-r 或 —report:以报告模式显示输出。
-p 或 —split:将每次追踪的结果分别列出来,而非如 —report统计整个结果。
-s 或 —psize:指定ping数据包的大小。
-n 或 —no-dns:不对IP地址作域名反解析。
-a 或 —address:设置发送数据包的IP地址。用于主机有多个IP时。
-4:只使用 IPv4 协议。
-6:只使用 IPv6 协议。
另外,也能够在 mtr 运行过程当中,输入相应字母来快速切换模式,好比:
?或 h:显示帮助菜单。
d:切换显示模式。
n:切换启用或禁用 DNS 域名解析。
u:切换使用 ICMP或 UDP 数据包进行探测。
返回结果说明:
默认配置下,返回结果中各数据列的说明:
第一列(Host):节点IP地址和域名。如前面所示,按n键能够切换显示。
第二列(Loss%):节点丢包率。
第三列(Snt):每秒发送数据包数。默认值是10,能够经过参数 -c 指定。
第四列(Last):最近一次的探测延迟值。
第5、6、七列(Avg、Best、Wrst):分别是探测延迟的平均值、最小值和最大值。
第八列(StDev):标准误差。越大说明相应节点越不稳定。
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
示例输出:
C:\> tracert -d 223.5.5.5经过最多 30 个跃点跟踪到 223.5.5.5 的路由 1 请求超时。 2 9 ms 3 ms 12 ms 192.168.17.20 3 4 ms 9 ms 2 ms 111.1.20.41 4 9 ms 2 ms 1 ms 111.1.34.197 5 11 ms 211.140.0.57 6 3 ms 2 ms 2 ms 211.138.114.62 7 2 ms 2 ms 1 ms 42.120.244.190 8 32 ms 4 ms 3 ms 42.120.244.238 9 请求超时。 10 3 ms 2 ms 2 ms 223.5.5.5跟踪完成。
常见可选参数说明:
-d:指定不将地址解析为主机名(禁用 DNS 反解)。
-h:maximum_hops,指定搜索目标地址时的最大跃点数。
-j: host-list,指定沿主机列表的松散源路由。
-w:timeout,由每一个回复的 timeout 指定的等待毫秒数。
-R:跟踪往返行程路径(仅适用于 IPv6)。
-S:srcaddr,要使用的源地址(仅适用于 IPv6)。
-4:强制使用 IPv4。
-6:强制使用 IPv6。
target_host:目标主机域名或 IP 地址。
WinMTR 是 mtr 工具在 Windows 环境下的图形化实现,但进行了功能简化,只支持 mtr部分参数的调整设置。WinMTR 默认发送ICMP 数据包进行探测,没法切换。
WinMTR 能够从其官方网站下载获取。
和 mtr 同样,相比 tracert,WinMTR 能避免节点波动对测试结果的影响,因此测试结果更正确。因此,在 WinMTR 可用的状况下,建议优先使用 WinMTR 进行链路测试。
用法说明:
WinMTR 无需安装,直接解压运行便可。操做方法很是简单,说明以下:
以下图所示,运行程序后,在 Host 字段输入目标服务器域名或 IP(注意前面不要包含空格)。
点击 Start 开始测试(开始测试后,相应按钮变成了 Stop)。
运行一段时间后,点击 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 以域名显示相关节点。
返回结果说明:
默认配置下,返回结果中各数据列的说明:
第一列(Hostname):节点 IP 或域名。
第二列(Nr):节点编号。
第三列(Loss%):节点丢包率。
第四列(Sent):已发送的数据包数量。
第五列(Recv):已成功接收的数据包数量。
第6、7、8、九列(Best 、Avg、Worst、Last):分别是到相应节点延迟的最小值、平均值、最大值和最后一次值。
第八列(StDev):标准误差。越大说明相应节点越不稳定。
因为 mtr(WinMTR)有更高的准确性。本文以其测试结果为例,对链路测试结果的分析进行简要说明。
后续说明,以以下链路测试结果示例图为基础进行阐述:
对链路测试结果进行分析时,须要关注以下要点:
正常状况下,从客户端到目标服务器的整个链路,会显著的包含以下区域:
客户端本地网络(本地局域网和本地网络提供商网络):如前文链路测试结果示例图中的区域 A。若是该区域出现异常,若是是客户端本地网络相关节点出现异常,则须要对本地网络进行相应排查分析。不然,若是是本地网络提供商网络相关节点出现异常,则须要向当地运营商反馈问题。
运营商骨干网络:如前文链路测试结果示例图中的区域 B。若是该区域出现异常,能够根据异常节点 IP 查询归属运营商,而后直接或经过阿里云售后技术支持,向相应运营商反馈问题。
目标服务器本地网络(目标主机归属网络提供商网络): 如前文链路测试结果示例图中的区域 C。若是该区域出现异常,则须要向目标主机归属网络提供商反馈问题。
如前文链路测试结果示例图中的区域 D 所示。若是中间链路某些部分启用了链路负载均衡,则 mtr 只会对首尾节点进行编号和探测统计。中间节点只会显示相应的 IP 或域名信息。
因为链路抖动或其它因素的影响,节点的 Best 和 Worst 值可能相差很大。而 Avg(平均值) 统计了自链路测试以来全部探测的平均值,因此能更好的反应出相应节点的网络质量。
而 StDev(标准误差值)越高,则说明数据包在相应节点的延时值越不相同(越离散)。因此,标准误差值可用于协助判断Avg 是否真实反应了相应节点的网络质量。例如,若是标准误差很大,说明数据包的延迟是不肯定的。可能某些数据包延迟很小(例如:25ms),而另外一些延迟却很大(例如:350ms),但最终获得的平均延迟反而多是正常的。因此,此时 Avg 并不能很好的反应出实际的网络质量状况。
综上,建议的分析标准是:
若是 StDev 很高,则同步观察相应节点的 Best 和 Wrst,来判断相应节点是否存在异常。
若是 StDev 不高,则经过 Avg来判断相应节点是否存在异常。
注:上述 StDev “高”或者“不高”,并无具体的时间范围标准。而须要根据同一节点其它列的延迟值大小来进行相对评估。好比,若是 Avg 为 30ms,那么,当 StDev 为 25ms,则认为是很高的误差。而若是 Avg 为 325ms,则一样的StDev(25ms),反而认为是不高的误差。
任一节点的 Loss%(丢包率)若是不为零,则说明这一跳网络可能存在问题。致使相应节点丢包的缘由一般有两种:
运营商基于安全或性能需求,人为限制了节点的 ICMP 发送速率,致使丢包。
节点确实存在异常,致使丢包。
能够结合异常节点及其后续节点的丢包状况,来断定丢包缘由:
若是随后节点均没有丢包,则一般说明异常节点丢包是因为运营商策略限制所致。能够忽略相关丢包。如前文链路测试结果示例图中的第 2 跳所示。
若是随后节点也出现丢包,则一般说明异常节点确实存在网络异常,致使丢包。如前文链路测试结果示例图中的第 5 跳所示。
另外,须要说明的是,前述两种状况可能同时发生。即相应节点既存在策略限速,又存在网络异常。对于这种状况,若是异常节点及其后续节点连续出现丢包,并且各节点的丢包率不一样,则一般以最后几跳的丢包率为准。如前文链路测试结果示例图所示,在第 五、6、7跳均出现了丢包。因此,最终丢包状况,以第 7 跳的 40% 做为参考。
若是在某一跳以后延迟明显陡增,则一般判断该节点存在网络异常。如前文链路测试结果示例图所示,从第 5 跳以后的后续节点延迟明显陡增,则推断是第 5 跳节点出现了网络异常。
不过,高延迟并不必定彻底意味着相应节点存在异常。如前文链路测试结果示例图所示,第 5 跳以后,虽而后续节点延迟明显陡增,但测试数据最终仍然正常到达了目的主机。因此,延迟大也有多是在数据回包链路中引起的。因此,最好结合反向链路测试一并分析。
ICMP 策略限速也可能会致使相应节点的延迟陡增,但后续节点一般会恢复正常。如前文链路测试结果示例图所示,第 3 跳有 100% 的丢包率,同时延迟也明显陡增。但随后节点的延迟立刻恢复了正常。因此判断该节点的延迟陡增及丢包是因为策略限速所致。
常见的链路异常场景及测试报告实例以下所示:
示例数据:
t@mycentos6 ~]# mtr —no-dns www.google.comMy traceroute [v0.75]mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016Keys: Help Display mode Restart statistics Order of fields quit Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. ??? 2. ??? 3. 111.1.20.41 0.0% 10 521.3 90.1 2.7 521.3 211.3 4. 111.1.34.209 0.0% 10 2.9 4.7 1.6 10.6 3.9 5. 211.138.126.29 80.0% 10 3.0 3.0 3.0 3.0 0.0 6. 221.183.14.85 0.0% 10 1.7 7.2 1.6 34.9 13.6 7. 221.183.10.5 0.0% 10 5.2 5.2 5.1 5.2 0.0 221.183.11.5 8. 221.183.23.26 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 所致,致使目的主机没法发送任何应答。
因此,该场景须要排查目标服务器的安全策略配置。
示例数据:
[root@mycentos6 ~]# mtr —no-dns www.google.comMy traceroute [v0.75]mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016Keys: Help Display mode Restart statistics Order of fields quit Packets Pings Host Loss% Snt Last Avg Best Wrst StDev1. 63.247.74.43 0.0% 10 0.3 0.6 0.3 1.2 0.32. 63.247.64.157 0.0% 10 0.4 1.0 0.4 6.1 1.83. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.74. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.15. 72.14.233.56 60.0% 10 27.2 25.3 23.1 26.4 2.96. 209.85.254.247 0.0% 10 39.1 39.4 39.1 39.7 0.27. 64.233.174.46 0.0% 10 39.6 40.4 39.4 46.9 2.38. 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.comMy traceroute [v0.75]mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016Keys: Help Display mode Restart statistics Order of fields quit Packets Pings Host Loss% Snt Last Avg Best Wrst StDev1. 63.247.74.43 0.0% 10 0.3 0.6 0.3 1.2 0.32. 63.247.64.157 0.0% 10 0.4 1.0 0.4 6.1 1.83. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.74. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.15. 72.14.233.56 0.0% 10 0.0 0.0 0.0 0.0 0.06. 72.14.233.57 0.0% 10 0.0 0.0 0.0 0.0 0.07. 72.14.233.56 0.0% 10 0.0 0.0 0.0 0.0 0.08. 72.14.233.57 0.0% 10 0.0 0.0 0.0 0.0 0.09 ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0
在该示例中,数据包在第 5 跳以后出现了循环跳转,致使最终没法到达目标服务器。这一般是因为运营商相关节点路由配置异常所致。
因此,该场景须要联系相应节点归属运营商处理。
示例数据:
t@mycentos6 ~]# mtr —no-dns www.google.comMy traceroute [v0.75]mycentos6.6 (0.0.0.0) Wed Jun 15 19:06:29 2016Keys: Help Display mode Restart statistics Order of fields quit Packets Pings Host Loss% Snt Last Avg Best Wrst StDev1. 63.247.74.43 0.0% 10 0.3 0.6 0.3 1.2 0.32. 63.247.64.157 0.0% 10 0.4 1.0 0.4 6.1 1.83. 209.51.130.213 0.0% 10 0.8 2.7 0.8 19.0 5.74. aix.pr1.atl.google.com 0.0% 10 6.7 6.8 6.7 6.9 0.15. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.06. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.07. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.08. ??? 0.0% 10 0.0 0.0 0.0 0.0 0.09 ??? 0.0% 10 0.0 0.0 0.0 0.0 0.0
在该示例中,数据包在第 4 跳以后就没法收到任何反馈。这一般是因为相应节点中断所致。建议结合反向链路测试作进一步确认。
该场景须要联系相应节点归属运营商处理。
一般状况下,链路测试流程以下链路测试流程图所示:
相关步骤详细说明以下:
在客户端本地网络访问 ip.taobao.com 等网站,以下图,获取本地网络对应的公网 IP。
从客户端向目标服务器作 ping 和 mtr 链路测试:
从客户端向目标服务器域名或 IP 作持续的 ping 测试(建议至少 ping 100 个数据包),记录测试结果。
根据客户端操做系统环境的不一样,使用 WinMTR 或 mtr,设置测试目的地址为目标服务器域名或IP,而后进行链路测试,记录测试结果。
进入目标服务器系统内部,作反向 ping 和 mtr 链路测试
从目标服务器向前述步骤 1 获取的客户端 IP作持续的 ping 测试(建议至少 ping 100 个数据包),记录测试结果。
根据目标服务器操做系统环境的不一样,使用 WinMTR 或 mtr,设置测试目的地址为前述步骤 1 获取的客户端 IP,而后进行链路测试,记录测试结果。
参阅前述说明,对测试结果进行分析。确认异常节点后,访问 ip.taobao.com 等网站查询、获取相应节点归属运营商及网络。
若是是客户端本地网络相关节点出现异常,则须要对本地网络进行相应排查分析。若是是运营商相关节点出现异常,则须要直接或联系阿里云售后技术支持向相应运营商反馈问题。
traceroute(8) - Linux man page: traceroute 工具的 man 帮助。
What is MTR:bitwizard 上关于 mtr 工具的说明。
WinMTR:WinMTR官方网站。
原文连接地址:https://help.aliyun.com/knowledge_detail/40573.html#mtr