mtr 如何工作/使用 mtr 解释痛点

mtr 如何工作/使用 mtr 解释痛点

我最近一直在尝试mtr获取网络拥塞痛点。以下是示例mtr请求

示例 1

$ mtr --report -c 10 my.example.com 

HOST: ansh0l-Lenovo               Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 192.168.0.1                0.0%    10    1.3   5.2   1.3  22.4   8.0
  2.|-- 10.10.20.1                 0.0%    10    3.9   2.5   1.6   4.6   1.2
  3.|-- NSG-Static-*.*.*.*        10.0%    10    7.7   6.7   5.1  10.1   1.5
  4.|-- AES-Static-*.*.*.*        10.0%    10   46.3  48.5  46.2  53.8   2.6
  5.|-- s38895.sgw.equinix.com     0.0%    10   50.3  47.9  46.1  50.3   1.5
  6.|-- 203.83.223.2               0.0%    10   49.0  48.7  47.0  51.1   1.2
  7.|-- 203.83.223.23              0.0%    10   47.8  48.1  46.9  50.0   1.0
  8.|-- ec2-175-*-*-*.ap-sou       0.0%    10   47.7  49.0  47.6  55.8   2.5
  9.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0

示例 2

$ mtr --report -c 100 my.example.com 
HOST: ansh0l-Lenovo               Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 192.168.0.1                2.0%   100    5.5   3.2   1.2  94.6   9.8
  2.|-- 10.10.20.1                 3.0%   100    4.3   3.9   1.5 160.5  16.3
  3.|-- NSG-Static-*.*.*.*         3.0%   100    9.9   8.1   4.3  99.0   9.8
  4.|-- AES-Static-*.*.*.*         3.0%   100   48.6  48.9  45.9 137.0   9.4
  5.|-- s38895.sgw.equinix.com     5.0%   100   46.7  49.6  45.5 155.6  11.5
  6.|-- 203.83.223.2               2.0%   100   52.4  53.0  46.5 213.3  20.8
  7.|-- 203.83.223.23              4.0%   100   49.1  50.0  46.2 145.6  11.5
  8.|-- ec2-175-*-*-*.ap-sou       5.0%   100   49.3  50.8  46.4 169.6  12.8
  9.|-- ???                       100.0   100    0.0   0.0   0.0   0.0   0.0

问题:

  1. 主机 n 的数据包丢失率是否 = 专门发送到主机 n 的数据包的数据包丢失率总和?假设发送到主机 7 的数据包具有相同的先前跳数,这种假设有多安全?

  2. 在示例 1 中,在主机 3 和 4 上,数据包丢失率相同(10%)。是否可以安全地假设所有数据包丢失都发生在节点 3 上?

  3. 在示例 1 中。当主机 4 的数据包丢失率为 10% 时,下一跳的性能是否也会受到影响?如果我在其中一个中间节点中发生 10% 的数据包丢失,那么它之后的节点也应该会经历一些数据包丢失,对吗?

  4. 在示例 2 中,一些节点具有更高的标准差。这些应该被解释为不可靠的点吗?

答案1

1) 主机 n 处的数据包丢失率 = 专门向主机 n 发送的数据包的数据包丢失率总和吗?

是的,它们是专门针对该主机的。MTR 依赖于发送固定 TTL 的数据包,并期望收到其最初发送的 ICMP 回显的“超时”ICMP 响应,该响应将来自 TTL 超出的路由器。

假设发送到主机 7 的数据包会具有相同的先前跳数,这样安全吗?

它非常安全,我不能代表所有网络发言,但在跨跳路由中期望流量被路由到多条路径是非常不寻常的——它有可能发生,但它更多的是例外而不是常态。

2) 在示例 1 中,在主机 3 和 4 上,数据包丢失率相同 (10%)。是否可以安全地假设所有数据包丢失都发生在节点 3 上?

不,可能不是。如果节点 3 确实丢弃了转发的数据包,那么此后所有其他跳数都会出现衍生损失(因此第 5、6、7、8 和 9 跳的损失约为 10%)。

3) 在示例 1 中。当主机 4 的数据包丢失率为 10% 时,下一跳的性能是否也会受到影响?如果我在其中一个中间节点中发生 10% 的数据包丢失,那么它之后的节点也应该会经历一些数据包丢失,对吗?

是的,如果你确实收到数据包丢失。不幸的是,事情比这复杂得多。

4) 在示例 2 中,某些节点的标准差较高。这些是否应解释为不可靠点?

mtr 只能给你一个大概的数字。许多路由器会丢弃 ICMP 数据包作为服务质量机制的一部分(icmp 对它来说不如 tcp/udp 流量重要)。其他路由器可能会延迟流量,或同时延迟两者。

您真正可以说的是,发送路由器应该响应的 ICMP 流量可能会导致不可靠的性能,但您不能说对于 TCP 等其他类型的流量也同样如此。

总而言之,如果由于路由器中跳而导致到特定目的地的数据包真正丢失,则您将在未来的跳跃中看到<=丢失%。

如果您的目标跳跃响应为 0% 丢失,则表示您没有丢弃数据包。

一些路由器会故意丢弃它们负责响应的 ICMP 流量,因此您可能会得到仅限于该跳的“额外损失”。如果该跳既执行某种形式的流量整形,又真正丢失流量,事情就会变得非常混乱,因为您无法判断您到底有多少损失。相反,您能做的最好的事情是从未来的跳中取出最低的损失百分比,并说明它可能在您看到的损失百分比左右。

答案2

简而言之,路由器处理流量的优先级高于响应 0 ttl 的数据包。mtr 和 traceroute 等工具可用于确定您正在使用的路径。它们对于确定该路径的性能没有用。我在回答中更详细地介绍了这一点美国东西海岸的“典型”网络延迟是多少?

相关内容