web-dev-qa-db-ja.com

mtrがtracerouteよりもはるかに高速なのはなぜですか?

mtrのmanページでは、次のようになっています。

mtrはtracerouteとpingプログラムの機能を単一のネットワーク診断ツールに統合します

私はmtrをたくさん使用しており、tracerouteよりもはるかに高速であることがわかりました。本能的に、mtrは私に半端な答えを与え、tracerouteは各IPアドレスを毎秒リストします。自分のコンピューターではtime mtr www.google.comおよびtime traceroute www.google.com、結果は21.9秒VS 6.1秒です。

問題はなぜですか? mtr = ping + traceroute、それが遅い、または少なくともtracerouteと同じという意味ではありません。

誰かが合理的かつ詳細な答えをくれますか?

12
cizixs

並列処理は、これらのツールの速度が変動する主な理由です。もう1つの要因は、ホップが応答していないと見なされるまでに応答を待つ時間です。リバースDNSが実行された場合、それも待機する必要があります。単純なtracerouteコマンドは、逆引きDNSを無効にすると、はるかに速くなります。

私が言及しなかったもう1つの重要な違いは、2つのツールが出力をレンダリングする方法です。 Tracerouteは、トップダウンで出力を生成します。 Mtrは別の方法で出力をレンダリングします。mtrは前の行に戻って出力を更新できます。

これは、mtrが出力を使用できるようになるとすぐに表示できることを意味します。それは、後で応答が原因で出力が正確でなくなった場合、mtrが戻って更新できるためです。 tracerouteは戻って出力を更新できないため、最終的に何を表示するかを決定するまで待つ必要があります。

たとえば、ホップ番号2が応答しない場合(これは複数のISPで見られた症状です)、tracerouteはホップ番号1を表示し、しばらく待ってからホップ番号2および3を表示します。 tracerouteがホップ番号2からの応答をまだ待っているため、3が到着しましたが表示されていません。Mtrにはその制限がなく、ホップ番号3からの応答を表示でき、ホップ番号2からの応答を表示するために戻ることができます。それは後で到着します。

並列処理が多すぎると、出力が不正確になる可能性があります。一部のシナリオでは、応答を取得できるパケットの数に制限があります。これらのケースでより多くのパケットを送信してもプロセスの速度は向上しませんが、より多くのパケットが送信されて同じ数の応答が返されるため、パケットの損失が増加します。

この1つの例は、ルート上のホップがARP要求に応答しない場合です。通常、最初のパケットがARP要求をトリガーし、ARP要求がタイムアウトする前にさらにパケットが到着した場合、それらのパケットの最後のパケットのみがバッファーに入れられ、応答を受け取ります。

別の違いは、ツールがそれ以上のホップの表示を停止する前に、応答のないホップの数が表示されることです。 tracerouteコマンドは要求された数のホップ(デフォルトでは30)の間継続するのを見てきましたが、mtrコマンドは応答なしで5つのホップを通過するとすぐに停止します。

21
kasperd

Tracerouteコマンドは、1つのプローブに制限すると、ホップごとに3つのプローブを送信します-q 1その後、結果は同等になります

time mtr -r -c 1 google.com
.
.
.
real    0m2.640s
user    0m0.003s
sys     0m0.018s


time traceroute6 -q 1 google.com
.
.
.
real    0m0.445s
user    0m0.006s
sys     0m0.007s

比較可能なテスト間の主な違いは、DNSクエリ時間とパスの違いに関連していると思います。私のtracerouteはmtrよりも高速ですが、常にそうであるとは限りません。

3
user9517

これは、ルートトレースの実装方法に由来すると思います。 tracerouteは、宛先へのルート内のホップごとに少なくとも3つのパケットを順番に送信しました。

mtr最初にルートのホップを検出し、次に各ノードにパケットを並行して送信します。

mtrがping /プローブに応答しないホップを処理する方法に違いがあるようにも思えます。最初の試みが応答を得られなかったとしても、常に3つのパケットを送信するように見えるtracerouteよりも速く無視します。

2
Benoit

主な理由は、tracerouteの実行方法です。最初のホストにTTL 1のUDP(またはWindowsのICMP)パケットを送信し、タイムアウト応答を受信する(または内部タイムアウトを渡す)と、 TTL 2の次のホストの次のパケット、以下同様です(TTLに1を追加します)。したがって、tracerouteの合計時間には、各ホストのパケットの送受信を順番に行います。

mtrは、パケットの経路を決定した後、すべてのICMP ECHOパケットを並行して送信します。

1
NickW