使用mtr探测网络质量

ping一个节点延迟很大,这极有可能是中间链路出现问题,该怎么排查问题呢?

这时候我们可以使用 mtr 工具。

mtr的全称是 my traceroute,结合了ping,traceroute,nslookup 的相关特性,让我们能够更直观地查看分析网络状态,是一款强大的网络诊断工具。

mtr 使用示例

笔者对 www.iq.com 进行测试,这是位于新加坡的服务,并使用 Akamai 使用dns cname的方式 进行了动态加速。 笔者本地的网络环境为:上海移动网。

使用命令查看 MTR报告 (mtr默认使用ICMP进行网络探测)

mtr -z www.iq.com

图: MTR

具体输出的列参数含义为:

  • 跳数
  • AS号
  • 路由IP地址
  • 丢包率 Loss
  • 已发送包数 Snt
  • 最后一个包延迟 Last
  • 平均延迟 Avg
  • 最低延迟 Best
  • 最差延迟 Wrst
  • 稳定性 StDev

mtr 报告分析

在MTR报告中查看除了两个服务器之间的路径、AS外,在它的结果中也提供了很多有价值的数据统计报告。

Last, Avg, Best 和 Wrst 列都标识数据包往返的时间,使用的是毫秒( ms )单位表示。

在大多数情况下,平均时间Avg列需要我们特别注意。

最后一列 StDev 提供了数据包在每个主机的标准偏差。如果标准偏差越高,说明数据包在这个节点的延时越不相同。标准偏差会让您了解到平均延时是否是真的延时时间的中心点,或者测量数据受到某些问题的干扰。

如果标准偏差很大,说明数据包的延迟是不确定的。

一些数据包延迟很小(例如:25ms),另一些数据包延迟很大(例如:350ms), 当10个数据包全部发出后,得到的平均延迟可能是正常的,但是平均延迟是不能很好的反应实际情况的。如果标准偏差很高,使用最好和最坏的延迟来确定平均延迟是一个较好的方案。

在大多数情况下,我们可以把 MTR 的输出分成三大块:

  • 根据配置,第二或第三跳一般都是您的本地 ISP
  • 倒数第二或第三跳一般为您目的主机的ISP
  • 中间的节点是数据包经过的路由器。

根据 AS 判断路由途径

通过AS号可以获知途径的自治网络,笔者上面的测试路径是这样的:

  1. AS24400(上海移动
  2. AS9808(广东移动)
  3. 移动的CMI境外骨干网(AS58453)
  4. AS20940 (Akamai自治系统 )

AS20940有众多分叉,路由选择为 23.200.74.0/24 (香港)

我了解爱奇艺的内部配置,注意到一个问题: iq.com的机房位于新加坡。如果iq.com的服务未使用Akamai动态加速,中国大陆的移动用户会由AS58453路由到AS749(美国),兜了一个大圈才到新加坡。

上面的案例路径也说明了一个事实:各ISP之间的网络途径很多情况下不是最优解,而是费用最低的选择策略。

丢包率的排查

MTR的报告有两个核心指标: loss 丢包率latency 延迟

loss 丢包率

如果在任何一跳上看到 loss 的百分比,这就说明这一跳上可能有问题了。(当然很多服务提供商人为限制 ICMP 发送的速率,这也会导致此问题)

通过查看下一跳的丢包率,我们可以大概的判断出是人为的限制 ICMP 传输还是确定有丢包的现象。

如上图中 第四跳 出现90%的丢包率,而第五跳则没有任何丢包,可以得出第四跳路由节点人为限制了ICMP传输。

在9、10、11跳中,有连续出现丢包的情况,结合所处环境(移动境外骨干网),出现丢包的可能性很大。(ICMP 包速率限制和丢包存在同时发生的概率)。

latency 延迟

延迟通常取决于节点之间的物理距离和线路质量,因为各个路由中间节点所处在不同位置以及不同的自治网络,延迟通常会随着跳数以及跨自治网络而增加。

在上图中,可以看到在经过第九跳时,延迟增大至37ms。再具体分析AS58453属于移动的出海国际线路,必定存在较高的延迟率。

在多数情况下,延迟产生的原因是物理距离太长、网络高峰产生的拥堵,尤其在跨国网络(穿越大西洋、太平洋)。

随着互联网的发展, 这类的时延带宽积很大的链路应用越来越多,也促使更多的优化算法如 TCP CUBIC、BBR、边缘节点加速应运而生。在后续的章节中,也将重点讲解这些应用的实践。

Last Updated:
Contributors: isno