在mtr手册页中,它写道:
mtr 在单个网络诊断工具中结合了 traceroute 和 ping 程序的功能
我用mtr了很多,发现它比traceroute. 本能地,立即mtr给我答案,同时每秒钟traceroute列出每个IP地址。在我自己的电脑上,我使用time mtr www.google.com和time traceroute www.google.com,结果是 21.9s VS 6.1s。
问题是为什么?因为mtr = ping + traceroute, 这并不意味着它更慢或至少与traceroute.
谁能给我一个合理而详细的答案?
kas*_*erd 22
并行性是这些工具速度变化的主要原因。另一个影响因素是在认为跃点没有响应之前等待回复的时间。如果执行反向 DNS,您也必须等待。如果禁用反向 DNS,普通 traceroute 命令会变得更快。
我没有看到提到的另一个重要区别是这两个工具如何呈现输出。Traceroute 按自上而下的顺序生成输出。Mtr 以不同的方式呈现输出,其中 mtr 可以返回并更新前几行的输出。
这意味着 mtr 可以在输出可用时立即显示输出,因为如果稍后的回复导致该输出不准确,则 mtr 可以返回并更新它。由于 traceroute 无法返回并更新输出,因此它必须等到最终决定要显示的内容。
例如,如果跳数 2 没有响应(这是我在多个 ISP 上看到的症状),traceroute 将显示跳数 1,然后等待一段时间后才显示跳数 2 和 3。即使来自跳数的回复3 has到达它没有被显示,因为traceroute仍在等待来自跳数2的回复。 Mtr没有那个限制并且可以显示来自跳数3的回复并且仍然返回显示来自跳数2的回复,如果它稍后到达。
太多的并行性会导致输出变得不准确。在某些情况下,您可以获得回复的数据包数量是有限的。在这些情况下发送更多数据包不会加快进程,但是会导致更多数据包丢失,因为发送更多数据包会得到相同数量的回复。
一个例子是路由上的一跳不回复 ARP 请求。通常第一个数据包会触发 ARP 请求,如果更多数据包在 ARP 请求超时之前到达,则只有最后一个数据包将被缓冲并得到回复。
另一个区别是在工具停止显示更多跃点之前将显示多少跃点而没有响应。我已经看到 traceroute 命令根据请求继续执行尽可能多的跃点(默认情况下为 30),而 mtr 命令会在经过 5 个跃点而没有响应时立即停止。