如何用MTR诊断网络问题
MTR 是一个强大的网络诊断工具,管理员能够用它诊断和隔离网络错误,并向上游提供商提供有关网络状态的有用报告。MTR 通过更大的采样来跟踪路由,就像 traceroute + ping 命令的组合。本文详细介绍了 MTR,其产生的数据,以及如何根据其提供的数据正确解释和得出结论。
背景
网络诊断工具包括 ping,traceroute 和 mtr,使用“ICMP”数据包来测试互联网上两点之间的节点和流量。当用户在互联网上 ping 主机时,会向主机发送一系列 ICMP 报文,主机通过发送报文进行响应。用户的客户端能够计算互联网上两点之间的往返时间。
相比之下,诸如 traceroute 和 MTR 之类的工具会以递增增加的 TTL 发送 ICMP 数据包,以便查看数据包在源和目的地之间进行的路由或一系列跳数。 TTL 或生存时间控制数据包在“死亡”并返回主机之前将产生多少“跳”。通过发送一系列数据包,使它们在一跳之后死亡并返回,然后两个,然后三个,客户端机器能够组合在因特网上的主机之间的流量所占用的路由。
MTR 收集关于中间主机的状态,连接和响应性的其他信息,而不是简单地概述流量跨越 Internet 的路由。由于这些附加信息,建议您尽可能使用 MTR 提供 Internet 上两台主机之间的连接的最完整的概述。以下部分概述如何安装 MTR 软件以及如何解释此工具提供的结果。
安装 MTR
在 CentOS 和 Fedora 系统中,使用如下命令更新系统,并安装 MTR:
生成 MTR 报告
因为 MTR 提供了从一个主机到另一个主机的路由流量的映像,您可以将其视为定向工具。此外,在因特网上两点之间采取的路由可能会根据位置和位于您上游的路由器而有很大变化。因此,通常建议您在遇到连接问题的所有主机或尽可能多的主机时双向收集 MTR 报告。
为了清楚起见,当引用 MTR 报告时,本文件将运行 mtr 作为源主机的主机和查询所针对的主机作为目标主机。
基于类Unix的系统上使用MTR
例如,要测试到目标主机 example.com 的流量的路由和连接质量,请从所需的源主机运行以下命令:
如果没有丢包丢失,可以使用更快的间隔时间运行:
我们上面使用的标志(rwc [x] -i [y])在很有用。
-
r 选项标志生成报告(缩写为–report)
-
w 选项标志使用长版本的主机名,您可以看到每个跳的完整主机名(–report-wide的缩写)
-
c 选项标志设置报告中发送和记录的数据包数量。当不使用时,默认值通常为 10,但是对于更快的间隔,您可能希望将其设置为 50 或 100.报告可能需要较长时间才能完成
-
i 选项标志以更快的速率运行报告,以显示只能在网络拥塞期间发生的数据包丢失。该标志指示 MTR 每n秒发送一个数据包。默认值为1秒,因此将其设置为十分之一秒(0.1,0.2等)通常是有帮助的
刚才我们了解了什么是 MTR,以及如何生成一份报告等知识。这里,我们深入分析一下 MTR 报告的含义,以及常见的 MTR 结果分析。
分析 MTR 报告
验证数据包丢失
在分析 MTR 输出时,您正在寻找两件事情:丢包和延迟。首先让我们来谈谈丢包。如果您在任何特定跳点看到一定百分比的丢失,这可能表明该特定路由器存在问题。然而,一些服务提供商通常的做法是限制 MTR 使用的ICMP流量。这实际上没有损失可以给出丢包的错觉。要确定您看到的损失是真实的还是由于速率限制,请查看随后的一跳,如果该跳丢包率是0.0%,那么您可以确定您看到 ICMP 速率限制,而不是实际丢包。参见下面的例子:
在这种情况下,第10跳和第11跳之间报告的丢包可能是由于第11跳速率限制。虽然剩下的跳数的流量都触及第11跳,但是没有丢包。如果丢失持续多于一个跳,则可能存在一些丢包或路由问题。请记住,速率限制和丢失可能同时发生。在这种情况下,将序列中的最低损失百分比作为实际损失。例如,考虑以下输出:
在这种情况下,您会看到跳数17和18之间的损失为10%,18和19跳之间的损失为20%。您可以假设第18跳和第19跳可能会丢失一定数量的流量,因为后续的主机报告零损失。然而,一些损失是由于速率限制,因为几个最终的跳数只有10%的损失。报告不同数量的损失时,请始终信任来自后期的报告。
一些损失也可以通过返回路线中的问题来解释。数据包将无错误地到达目的地,但很难做出回程。这在报告中很明显,但可能难以从 MTR 的输出中推断出来。因此,当您遇到问题时,通常最好双向收集 MTR 报告。
另外,抵制调查或报告您的连接中所有丢包发生的诱惑。互联网协议被设计为对一些网络退化具有弹性,并且数据跨 Internet 的路由可以响应于负载,简短的维护事件和其他路由问题而波动。如果您的 MTR 报告显示10%附近的少量损失,则没有任何理由引起真正的关注,因为应用层将补偿可能短暂的丢包。
了解网络延迟
除了帮助您评估数据包丢失之外,MTR 还将帮助您评估主机与目标主机之间的连接延迟。由于物理限制,延迟总是随着路由中的跳数而增加。但是,增幅应该是一致和线性的。不幸的是,延迟通常是相对的,并且非常依赖于主机连接的质量和它们的物理距离。在评估可能存在问题的连接的地铁报告时,除了在给定区域内的其他主机之间的已知连接速度之外,还可以将早期的全功能报告视为上下文。
连接质量也可能会影响特定路由的延迟时间。可以预见的是,拨号连接将比同一目的地的电缆调制解调器连接具有更高的延迟。考虑以下MTR报告显示高延迟:
跳数在跳数10和11之间显着跳跃,并保持高电平。这可能指向网络延迟问题,因为在第11跳之后的往返时间保持较高。从这个报告来看,不可能确定原因,尽管饱和的对等会话,配置不良的路由器、拥塞的链路是比较频繁或物理链路过长的原因。
不幸的是,高延迟并不总是意味着当前路由的问题。像上面这样的报告意味着,尽管第11跳有某种问题,但流量仍然到达目的地主机并返回到源主机。延迟可能是由于返回路线的问题引起的。您的 MTR 报告中不会显示返回路由,并且数据包可以采取与特定目的地完全不同的路由。
在上面的例子中,虽然主机10和11之间的延迟有很大的跳跃,但延迟在任何后续跳都不会异常增加。从这一点来说,假设第四个路由器有一些问题是合乎逻辑的。
ICMP 速率限制还可以产生类似延迟的现象,类似于它可以产生类似丢包的现象。请考虑以下示例:
乍看之下,跳数6和7之间的延迟引起了关注。然而,在第7跳之后,潜伏期急剧下降。这里测量的实际延迟约为3.6ms。在这种情况下,中期审查提请注意不影响服务的问题。在评估 MTR 报告时,考虑到最后一跳的延迟。
MTR 通用报告
一些网络问题是新颖的,需要升级到上游网络的运营商。然而,有一些常见的地铁报告描述了常见的网络问题。如果您遇到某种网络问题,并想要诊断您的问题,请考虑以下示例。
目的主机网络配置不正确
在下一个示例中,由于配置不正确的路由器,目标主机似乎有100%的损失。乍看之下,数据包似乎没有到达主机,但情况并非如此。
然而,流量确实到达目的主机,MTR 报告显示丢失,因为目的地主机没有发送回复。这可能是导致主机丢弃ICMP数据包的不正确配置的网络或防火墙(iptables)规则的结果。
你可以告诉这个失败是由于一个配置错误的主机造成的,是看看100%损失的跳数。从以前的报告可以看出,这是最后一次跳跃,MTR不会尝试额外的跳数。虽然在没有基线测量的情况下难以分离这个问题,但这些错误是很常见的。
住宅或商业路由器
通常,住宅网关将使mtr报告看起来有点误导。
不要因报告的100%损失而感到震惊。这并不表示有问题。你可以看到后续的跳数没有损失。
ISP路由器配置不正确
有时,您的数据包路由器上的路由器配置错误,您的数据包可能永远不会到达目的地。请考虑以下示例:
当没有其他路线信息时会出现问号。以下报告显示相同的问题:
有时,配置不佳的路由器会以循环的形式发送数据包。您可以在以下示例中看到:
所有这些报告显示,第4跳的路由器未正确配置。当这些情况发生时,解决问题的唯一方法是联系来自主机的网络管理员的运营商团队。
ICMP速率限制
ICMP速率限制可能会导致明显的丢包,如下所述。当丢包到一跳不持续到后续跳数时,丢失是由ICMP限制引起的。请参阅以下示例:
在这样的情况下,不用担心。速率限制是一种常见的做法,它可以减少拥塞以优先考虑更重要的流量。
超时
超时可能由于各种原因而发生。一些路由器将丢弃ICMP,并且输出中没有回应将作为超时显示(???)。或者,返回路线可能有问题:
超时不一定表示丢包。数据包仍然到达目的地,而不会显着丢包或延迟。超时可能因为路由器丢弃用于QoS(服务质量)的分组,或者可能存在导致超时的返回路由的某些问题。
新版 MTR 技术
mtr现在保存在github中的git仓库中
与默认使用ICMP(ping)协议相比,更新版本的MTR现在能够在TCP模式下以指定的TCP端口运行。在某些情况下,网络劣化只会影响某些端口,或者路由器上错误配置的防火墙规则可能会阻塞一定的协议。在某个端口上运行MTR可能会显示丢包,默认的ICMP报告可能没有。
__EOF__

本文链接:https://www.cnblogs.com/xzkzzz/p/7413177.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类