[分享]如何用 MTR 诊断网络问题?

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
回复
fangyihang
帖子: 2
注册时间: 2017-05-05 19:00

[分享]如何用 MTR 诊断网络问题?

#1

帖子 fangyihang » 2017-06-13 21:36

MTR 是一个强大的网络诊断工具,管理员能够用它诊断和隔离网络错误,并向上游提供商提供有关网络状态的有用报告。MTR 通过更大的采样来跟踪路由,就像 traceroute + ping 命令的组合。本文详细介绍了 MTR,其产生的数据,以及如何根据其提供的数据正确解释和得出结论。

背景
网络诊断工具包括 ping,traceroute 和 mtr,使用“ICMP”数据包来测试互联网上两点之间的节点和流量。当用户在互联网上 ping 主机时,会向主机发送一系列 ICMP 报文,主机通过发送报文进行响应。用户的客户端能够计算互联网上两点之间的往返时间。

相比之下,诸如 traceroute 和 MTR 之类的工具会以递增增加的 TTL 发送 ICMP 数据包,以便查看数据包在源和目的地之间进行的路由或一系列跳数。 TTL 或生存时间控制数据包在“死亡”并返回主机之前将产生多少“跳”。通过发送一系列数据包,使它们在一跳之后死亡并返回,然后两个,然后三个,客户端机器能够组合在因特网上的主机之间的流量所占用的路由。

MTR 收集关于中间主机的状态,连接和响应性的其他信息,而不是简单地概述流量跨越 Internet 的路由。由于这些附加信息,建议您尽可能使用 MTR 提供 Internet 上两台主机之间的连接的最完整的概述。以下部分概述如何安装 MTR 软件以及如何解释此工具提供的结果。

安装 MTR

在 Linux 上安装

在 Debian 和 Ubuntu 系统上,发出以下命令:

apt-get install mtr-tiny
在 CentOS 和 Fedora 系统上,您将要发出以下命令安装 MTR 程序:

yum install mtr
在 Arch Linux 系统上,会发出以下命令来安装MTR:

pacman -S mtr
您也可以使用 MTR 诊断本地工作站的网络问题。如果您正在运行 Linux 系统,则可以使用上述命令来安装 MTR。

在 Windows 上安装

对于 Windows,有一个名为 “WinMTR” 的 MTR 版本。您可以从 WinMTR 上游下载此应用程序。

在 Mac OS X 上安装

如果您运行的是 Mac OS X 工作站,则可以使用 Homebrew 或 MacPorts 来安装 MTR。要使用 Homebrew 安装 MTR,请运行:

brew install mtr
要使用 MacPorts 安装 MTR,请运行:

port install mtr
生成 MTR 报告

因为 MTR 提供了从一个主机到另一个主机的路由流量的映像,您可以将其视为定向工具。此外,在因特网上两点之间采取的路由可能会根据位置和位于您上游的路由器而有很大变化。因此,通常建议您在遇到连接问题的所有主机或尽可能多的主机时双向收集 MTR 报告。

为了清楚起见,当引用 MTR 报告时,本文件将运行 mtr 作为源主机的主机和查询所针对的主机作为目标主机。

在基于 Unix 的系统上使用 MTR

一旦安装在 Linux 或 Mac OS X 系统上,您可以使用以下语法生成MTR报告:

mtr -rw [destination_host]
例如,要测试到目标主机 example.com 的流量的路由和连接质量,请从所需的源主机运行以下命令:

如果没有丢包丢失,可以使用更快的间隔时间运行:

mtr -rwc 50 -i 0.2 -rw 12.34.56.78
在某些系统上,使用此标志时可能需要管理权限才能运行:

sudo mtr -rwc 50 -i 0.2 -rw 12.34.56.78
我们上面使用的标志(rwc [x] -i [y])在很有用。

r 选项标志生成报告(缩写为–report)。

w 选项标志使用长版本的主机名,您可以看到每个跳的完整主机名(–report-wide的缩写)。

c 选项标志设置报告中发送和记录的数据包数量。当不使用时,默认值通常为 10,但是对于更快的间隔,您可能希望将其设置为 50 或 100.报告可能需要较长时间才能完成。

i 选项标志以更快的速率运行报告,以显示只能在网络拥塞期间发生的数据包丢失。该标志指示 MTR 每n秒发送一个数据包。默认值为1秒,因此将其设置为十分之一秒(0.1,0.2等)通常是有帮助的。

在 Windows 系统上使用 MTR

在 Windows 上运行 MTR 要使用 GUI。打开 WinMTR,在提示框中键入目标主机,并选择 start 选项开始生成报告数据。如果您需要使用 Linux 版本的 MTR 生成 MTR 报告。请参阅上面的 Linux 部分以获得帮助。

阅读 MTR 报告

由于 MTR 报告载有大量资料,起初可能难以解释。请考虑以下本地连接到 google.com 的示例:

$ mtr --report google.com
HOST: example Loss% Snt Last Avg Best Wrst StDev
1. inner-cake 0.0% 10 2.8 2.1 1.9 2.8 0.3
2. outer-cake 0.0% 10 3.2 2.6 2.4 3.2 0.3
3. 68.85.118.13 0.0% 10 9.8 12.2 8.7 18.2 3.0
4. po-20-ar01.absecon.nj.panjde 0.0% 10 10.2 10.4 8.9 14.2 1.6
5. be-30-crs01.audubon.nj.panjd 0.0% 10 10.8 12.2 10.1 16.6 1.7
6. pos-0-12-0-0-ar01.plainfield 0.0% 10 13.4 14.6 12.6 21.6 2.6
7. pos-0-6-0-0-cr01.newyork.ny. 0.0% 10 15.2 15.3 13.9 18.2 1.3
8. pos-0-4-0-0-pe01.111eighthav 0.0% 10 16.5 16.2 14.5 19.3 1.3
9. as15169-3.111eighthave.ny.ib 0.0% 10 16.0 17.1 14.2 27.7 3.9
10. 72.14.238.232 0.0% 10 19.1 22.0 13.9 43.3 11.1
11. 209.85.241.148 0.0% 10 15.1 16.2 14.8 20.2 1.6
12. lga15s02-in-f104.1e100.net 0.0% 10 15.6 16.9 15.2 20.6 1.7
生成报告的命令是 mtr –report google.com 。这使用报告选项,它向主机 google.com 发送10个数据包,并生成输出。没有 –report 选项,mtr 将在交互式环境中持续运行。交互模式反映了每个主机的当前往返时间。在大多数情况下,–report模式以有用的格式提供足够的数据。

按照命令,MTR 生成其输出。通常,MTR 报告需要几秒钟才能产生。不要惊慌,如果需要一些时间来完成报告。该报告由一系列跳组成(在这种情况下为12个)。 “Hops”是互联网上的数据包横向到达目的地的节点或路由器。在上述例子中,数据包通过“inner-cake”和“outer-cake”本地网络设备,然后到“68.85.118.13“,然后是一系列命名的主机。主机的名称由反向 DNS 查找确定。如果要省略 rDNS 查找,可以使用 –no-dns 选项,这将产生类似于以下内容的输出:

% mtr --no-dns --report google.com
HOST: deleuze Loss% Snt Last Avg Best Wrst StDev
1. 192.168.1.1 0.0% 10 2.2 2.2 2.0 2.7 0.2
2. 68.85.118.13 0.0% 10 8.6 11.0 8.4 17.8 3.0
3. 68.86.210.126 0.0% 10 9.1 12.1 8.5 24.3 5.2
4. 68.86.208.22 0.0% 10 12.2 15.1 11.7 23.4 4.4
5. 68.85.192.86 0.0% 10 17.2 14.8 13.2 17.2 1.3
6. 68.86.90.25 0.0% 10 14.2 16.4 14.2 20.3 1.9
7. 68.86.86.194 0.0% 10 17.6 16.8 15.5 18.1 0.9
8. 75.149.230.194 0.0% 10 15.0 20.1 15.0 33.8 5.6
9. 72.14.238.232 0.0% 10 15.6 18.7 14.1 32.8 5.9
10. 209.85.241.148 0.0% 10 16.3 16.9 14.7 21.2 2.2
11. 66.249.91.104 0.0% 10 22.2 18.6 14.2 36.0 6.5
在讨论报告时,最好是根据其跳数来提及任何问题。除了简单地看到数据包到达其主机的服务器之间的路径,MTR 提供了有关该连接在以下七列中的耐久性的有价值的统计信息。 Loss% 列显示每个跳数丢包的百分比。 Snt 列计数发送的数据包数。 –report 选项将发送10个数据包,除非用 –report-cycles = [number-of-packets] 指定,其中 [number-of-packets] 表示要发送到远程主机的数据包总数。

接下来的四列 Last,Avg,Best和Wrst都是以毫秒为单位的延迟测量(例如ms)。最后是发送的最后一个数据包的延迟,Avg 是所有数据包的平均延迟,而 Best 和 Wrst 显示了对该主机的数据包的最佳(最短)和最差(最长)往返时间。在大多数情况下,平均(Avg)列应该是您注意的焦点。

最后一列 StDev 提供每个主机的延迟的标准偏差。标准偏差越高,延迟测量之间的差异就越大。标准偏差允许您评估所提供的平均值(平均值)是否表示数据集的真实中心,或者已经被某种现象或测量误差所倾斜。例如,如果标准偏差较大,则延迟测量值不一致。虽然有些可能已经很低(即25ms),但是其他可能已经非常高(即350ms)。在发送的10个数据包的延迟平均后,平均值看起来正常,但实际上可能不能很好地表示数据。如果标准偏差较高,请查看最佳和最差的延迟测量值,以确保平均值是实际延迟的良好表示,而不是太大波动的结果。

在大多数情况下,您可能会在三个主要部分考虑 MTR 报告。根据配置,前2或3跳通常表示源主机的ISP,而最后的2或3跳代表目的主机的ISP。中间的跳数是分组穿越到达目的地的路由器。

例如,如果 MTR 从您的家庭PC运行到您的服务器,则前2或3跳属于您的ISP。最后3跳属于你的服务器所在的数据中心。中间的任何跳都是中间跳。当本地运行 MTR 时,如果在源附近的前几个跳点发现异常,请联系本地服务提供商或调查本地网络配置。相反,如果您在目的地附近看到异常,则可能需要联系目标服务器的运营商或该机器的网络支持。不幸的是,如果中间跳点有问题,要解决这些问题,两个服务提供商的能力都有限。
回复