使用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号可以获知途径的自治网络,笔者上面的测试路径是这样的:
- AS24400(上海移动
- AS9808(广东移动)
- 移动的CMI境外骨干网(AS58453)
- 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、边缘节点加速应运而生。在后续的章节中,也将重点讲解这些应用的实践。