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
と同じという意味ではありません。
誰かが合理的かつ詳細な答えをくれますか?
並列処理は、これらのツールの速度が変動する主な理由です。もう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つのホップを通過するとすぐに停止します。
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よりも高速ですが、常にそうであるとは限りません。
これは、ルートトレースの実装方法に由来すると思います。 traceroute
は、宛先へのルート内のホップごとに少なくとも3つのパケットを順番に送信しました。
mtr
最初にルートのホップを検出し、次に各ノードにパケットを並行して送信します。
mtr
がping /プローブに応答しないホップを処理する方法に違いがあるようにも思えます。最初の試みが応答を得られなかったとしても、常に3つのパケットを送信するように見えるtraceroute
よりも速く無視します。
主な理由は、tracerouteの実行方法です。最初のホストにTTL 1のUDP(またはWindowsのICMP)パケットを送信し、タイムアウト応答を受信する(または内部タイムアウトを渡す)と、 TTL 2の次のホストの次のパケット、以下同様です(TTLに1を追加します)。したがって、tracerouteの合計時間には、各ホストのパケットの送受信を順番に行います。
mtrは、パケットの経路を決定した後、すべてのICMP ECHOパケットを並行して送信します。