如何使用Traceroute和MTR诊断网络问题
介绍
管理服务器的一个重要部分是监控网络连接。
有一些工具易于使用,但值得了解。 在本指南中,我们将讨论如何使用名为 traceroute
的工具来诊断可能发生网络问题的位置。
我们还将研究一个名为 mtr
的实用程序,它将 ping 和 traceroute 的大部分功能组合到一个接口中。
如何使用跟踪路由
traceroute
是一个显示远程服务器路径的简单工具。 这可以是从您尝试访问的网站到本地网络上的打印机的任何内容。
traceroute
程序默认安装在几乎每个 Linux 发行版上,因此您不需要安装它。
要调用它,我们只需要提供一个我们想要探索的网站或 IP 地址:
traceroute google.com
您将收到类似于以下内容的输出:
Outputtraceroute to google.com (173.194.38.137), 30 hops max, 60 byte packets 1 192.241.160.253 (192.241.160.253) 0.564 ms 0.539 ms 0.525 ms 2 192.241.164.241 (192.241.164.241) 0.487 ms 0.435 ms 0.461 ms 3 xe-3-0-6.ar2.nyc3.us.nlayer.net (69.31.95.133) 1.801 ms 1.802 ms 1.762 ms 4 144.223.28.73 (144.223.28.73) 0.583 ms 0.562 ms 0.550 ms 5 144.232.1.21 (144.232.1.21) 1.044 ms 1.048 ms 1.036 ms 6 74.125.49.212 (74.125.49.212) 0.494 ms 0.688 ms 0.643 ms 7 209.85.248.180 (209.85.248.180) 0.650 ms 209.85.248.178 (209.85.248.178) 0.621 ms 0.625 ms 8 72.14.236.208 (72.14.236.208) 0.618 ms 72.14.236.206 (72.14.236.206) 0.898 ms 72.14.236.208 (72.14.236.208) 0.872 ms 9 72.14.239.93 (72.14.239.93) 7.478 ms 7.989 ms 7.466 ms 10 72.14.232.73 (72.14.232.73) 20.002 ms 19.969 ms 19.975 ms 11 209.85.248.228 (209.85.248.228) 30.490 ms 72.14.238.106 (72.14.238.106) 34.463 ms 209.85.248.228 (209.85.248.228) 30.707 ms 12 216.239.46.54 (216.239.46.54) 42.502 ms 42.507 ms 42.487 ms 13 216.239.46.159 (216.239.46.159) 76.578 ms 74.585 ms 74.617 ms 14 209.85.250.126 (209.85.250.126) 80.625 ms 80.584 ms 78.514 ms 15 72.14.238.131 (72.14.238.131) 80.287 ms 80.560 ms 78.842 ms 16 209.85.250.228 (209.85.250.228) 171.997 ms 173.668 ms 170.068 ms 17 66.249.94.93 (66.249.94.93) 238.133 ms 235.851 ms 235.479 ms 18 72.14.233.79 (72.14.233.79) 233.639 ms 239.147 ms 233.707 ms 19 sin04s01-in-f9.1e100.net (173.194.38.137) 236.241 ms 235.608 ms 236.843 ms
第一行告诉我们traceroute运行的条件:
Outputtraceroute to google.com (173.194.38.137), 30 hops max, 60 byte packets
它给出了指定的主机、DNS 为该域返回的 IP 地址、要检查的最大跃点数以及将使用的数据包的大小。
可以使用 -m
标志调整最大跳数。 如果您尝试路由到的主机距离超过 30 个跃点,您可能需要在此处指定更大的值。 您可以设置的最大值为 255。
traceroute -m 255 obiwan.scrye.net
您可以通过在主机名后面给出整数来调整发送到每个跃点的数据包的大小:
traceroute google.com 70
你会看到这样的输出:
Outputtraceroute to google.com (173.194.38.128), 30 hops max, 70 byte packets 1 192.241.160.254 (192.241.160.254) 0.364 ms 0.330 ms 0.319 ms 2 192.241.164.237 (192.241.164.237) 0.284 ms 0.343 ms 0.321 ms
在第一行之后,随后的每一行代表一个“跃点”或中间主机,您的流量必须通过它才能到达您指定的主机所代表的计算机。
每行具有以下格式:
Outputhop_number host_name (IP_address) packet_round_trip_times
这是您可能会看到的跳跃示例:
Output3 nyk-b6-link.telia.net (62.115.35.101) 0.311 ms 0.302 ms 0.293 ms
以下是每个字段的含义:
- hop_number:主机与您的计算机的分离度数的连续计数。 来自数量较多的主机的流量必须通过更多的计算机才能被路由。
- host_name:此字段包含对主机 IP 地址的反向 DNS 查找的结果(如果可用)。 如果反向 DNS 查询没有返回任何信息,则给出 IP 地址本身。
- IP_address:此字段包含此网络跃点的 IP 地址。
- packet_round_trip_times:该行的其余部分给出了数据包到主机并再次返回的往返时间。 默认情况下,向每个主机发送三个数据包,并且每次尝试都附加到行尾。
如果您想更改针对每个主机测试的数据包数量,可以使用 -q
选项指定一个数字,如下所示:
traceroute -q1 google.com
如果您想放弃反向 DNS 查找以加快跟踪速度,您可以传递 -n
标志:
traceroute -n google.com
你会得到这样的输出:
Outputtraceroute to google.com (74.125.235.7), 30 hops max, 60 byte packets 1 192.241.160.253 0.626 ms 0.598 ms 0.588 ms 2 192.241.164.241 2.821 ms 2.743 ms 2.819 ms 3 69.31.95.133 1.470 ms 1.473 ms 1.525 ms
如果您的 traceroute 分解为一些星号 (*),则说明到主机的路由存在问题。
Output... 15 209.85.248.220 (209.85.248.220) 121.809 ms 72.14.239.12 (72.14.239.12) 76.941 ms 209.85.248.220 (209.85.248.220) 78.946 ms 16 72.14.239.247 (72.14.239.247) 101.001 ms 92.478 ms 92.448 ms 17 * * 209.85.250.124 (209.85.250.124) 175.083 ms 18 * * * 19 * * *
路由问题是什么意思?
如果您的 traceroute 尝试在特定的跃点或节点处停止并且找不到到主机的路由,那么您就有问题了。
虽然路由无法返回的跃点可能是网络问题的位置,但诊断并不总是那么容易。
由于每个 ping 代表一个往返数据包,以及数据包经常在任一方向使用不同路径的情况,这可能表明在完全不同的、可能更近的路由中存在问题。
也可能是问题出在您看到的最后一个跃点之后的跃点上。 除非您可以从该特定跃点获得返回跟踪路由,否则很难诊断问题的确切位置。 这通常在您自己的网络之外是不可能的。
如何使用港铁
traceroute 程序的动态替代方案是 mtr
。 结合 ping 和 traceroute 的功能,mtr 允许您不断轮询远程服务器并查看延迟和性能如何随时间变化。
与 traceroute 不同的是,大多数系统默认不安装 mtr。 您可以通过键入以下命令来获取它。
Ubuntu/Debian:
sudo apt-get install mtr
CentOS/Fedora:
yum install mtr
拱:
pacman -S mtr
安装后,您可以通过键入以下命令调用它:
mtr google.com
您将收到如下输出:
Output My traceroute [v0.80] traceroute (0.0.0.0) Tue Oct 22 20:39:42 2013 Resolver: Received error response 2. (server failure)er of fields q uit Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. 192.241.160.253 0.0% 371 0.4 0.6 0.1 14.3 1.0 2. 192.241.164.241 0.0% 371 7.4 2.5 0.1 37.5 4.8 3. xe-3-0-6.ar2.nyc3.us. 2.7% 371 3.6 2.6 1.1 5.5 1.1 4. sl-gw50-nyc-.sprintli 0.0% 371 0.7 5.0 0.1 82.3 13.1
虽然输出可能看起来相似,但与 traceroute 相比,最大的优势在于输出会不断更新。 这使您可以累积趋势和平均值,还可以让您查看网络性能如何随时间变化。
如果您运行跟踪路由,则发送到每个跃点的数据包可能会顺利通过,即使在路由遭受间歇性数据包丢失的情况下也是如此。 mtr 实用程序允许您通过在更广泛的时间范围内收集数据来监控这种情况。
也可以使用 --report
选项运行 mtr,它返回向每一跳发送 10 个数据包的结果。
mtr --report google.com
报告如下所示:
OutputHOST: traceroute Loss% Snt Last Avg Best Wrst StDev 1.|-- 192.241.160.254 0.0% 10 1.5 0.9 0.4 1.5 0.4 2.|-- 192.241.164.237 0.0% 10 0.6 0.9 0.4 2.7 0.7 3.|-- nyk-b6-link.telia.net 0.0% 10 0.5 0.5 0.2 0.7 0.2 4.|-- nyk-bb2-link.telia.net 0.0% 10 67.5 18.5 0.8 87.3 31.8
当您不一定要实时测量,但您需要比 traceroute 提供的更大范围的数据时,这可能很有用。
结论
使用 traceroute
和 mtr
,您可以了解在前往特定域或地址的途中哪些服务器导致了问题。 这在对内部网络进行故障排除以及在遇到网络问题时尝试提供信息以支持成员或 ISP 时非常有用。