
我最近一直在尝试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
问题:
主机 n 的数据包丢失率是否 = 专门发送到主机 n 的数据包的数据包丢失率总和?假设发送到主机 7 的数据包具有相同的先前跳数,这种假设有多安全?
在示例 1 中,在主机 3 和 4 上,数据包丢失率相同(10%)。是否可以安全地假设所有数据包丢失都发生在节点 3 上?
在示例 1 中。当主机 4 的数据包丢失率为 10% 时,下一跳的性能是否也会受到影响?如果我在其中一个中间节点中发生 10% 的数据包丢失,那么它之后的节点也应该会经历一些数据包丢失,对吗?
在示例 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 等工具可用于确定您正在使用的路径。它们对于确定该路径的性能没有用。我在回答中更详细地介绍了这一点美国东西海岸的“典型”网络延迟是多少?