如何使用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 提供的更大范围的数据时,这可能很有用。

结论


使用 traceroutemtr,您可以了解在前往特定域或地址的途中哪些服务器导致了问题。 这在对内部网络进行故障排除以及在遇到网络问题时尝试提供信息以支持成员或 ISP 时非常有用。