web-dev-qa-db-ja.com

ターゲットへの実際のパスに関してtracerouteの出力は正しいですか

man page for tracerouteは、「tracerouteは、IPネットワークから特定のホストに向かう途中で取得したルートパケットを追跡します」と述べています。 、しかし、トピックの調査を行っている間、表示されたルートが実際に取られたルートであるかどうか(おそらく異なるパケットが完全に異なるルートを使用するかどうか)およびエラーが実際にどれほど正確であるかに関する統計データ/科学的研究を見つけることができませんでしたマージンはであり、可能かどうかにかかわらず、ルーティングプロトコルが異なるため、Traceroute pingは、後続のTCP要求、または実際のpingパケットが取るものとは完全に異なるパスを表示する場合があります。

私が見つけた唯一の作業は、Pingトレースが完全ではない可能性があることを示唆しており、 スカンパーに関するドキュメント 「pingはエンドツーエンドの遅延と損失を測定し、応答するIPアドレスを検索するのに役立ちます。ホストがプローブにどのように応答するかを調べることで、ホストの動作を分類します。」そして(私が理解している限り)パス検出にMDAtracerouteを使用します。したがって、PINGを使用しても望ましい結果が得られない可能性があることを意味します。

したがって、私の質問は次のとおりです:Tracerouteを使用したパス検出の信頼性(理由も)?そのトピックの詳細にリンクを張っていただければ幸いですが、理由または理由の一般的な説明も十分です。

3
Sim

覚えておくべき最も重要なことはルートは静的ではありませんです。設計上、パブリックインターネット上のルートは常に変化しています。負荷分散のためにルートが変更されることがあります。ノードがダウンしたために変更されることがあります。ルーターがルーティングルールを変更することを文字通りランダムに決定するために、それらが変更されることがあります(単に物事を揺るがすため)。

パケットの発信元と宛先の間のすべての中間ルーターとインターネットハブへのシステム管理者レベルのアクセス権を持たないエンドユーザーの観点からは、それをハイゼンベルグの不確定性原理のように扱う必要があります。

考慮事項:

  1. パケットで宣言されたIP「宛先」に基づいて、中間ルーターは別の方法でルーティングすることを決定する場合があります。したがって、tracerouteが送信元と宛先の間でルーターを順次マップしようとする場合、到達しようとしているノードに応じてルートに異なるパスを使用させることで、tracerouteをコースから外すことができます。

  2. すべてのルーターがICMPまたはUDPpingをリッスンするわけではありません。彼らはこのトラフィックを黙って無視し、NIC(多くの場合DDoSとの戦いに役立つ)にドロップすることを選択するかもしれません。これはルートをマッピングする試みを苛立たせる可能性があります。

  3. ルートのマッピングに成功し、すべての中間ノードがpingに応答し、マッピングの試行を試みなかった場合でも、「実際の」プロトコルを使用して送信する次のパケットのルートが変更される可能性があります(または試行した場合でも)もう一度traceroute)。

  4. QoSにより、正常に動作しているネットワークがトラフィックを異なる方法でルーティングする可能性があります。たとえば、VoIPまたはストリーミングビデオは1つのパスをたどり、通常のWebブラウジングは別のパスをたどる場合があります。

  5. トラフィックのtypeにより、ルーティングが異なる場合があります。たとえば、QoSを考慮しなくても、FTPのパスはSSHのパスとは異なる場合があります。中間ノードは、任意の裁量(完全にランダムなルートの選択から、トラフィックを遅くする悪意のある試み、正直な試みまで)を行使できます。各ホップからトラフィックをルーティングする場所を決定するときに、負荷が最小のノードにルーティングすることで接続を高速化します。

  6. 理論的には、中間ルーターは、必要に応じて、tracerouteの試行を無限サイクルに変えることもできます。ノードAはノードBを指し、ノードBはノードCを指し、ノードCはノードAを指します。 「traceroute」(ICMPまたはUDP ping)として検出されたパケットに対して、ルーターがこれを実行しないようにします(なぜ選択するのかはわかりませんが、可能性はあります)。それはあなたの努力を失敗させようとするために、または他の理由でこれを行うことができます。

マルチパス検出アルゴリズムは便利ですが、これらの理論上の制限を克服することはできません。

基本的に、パスを決定するには、1つ以上のパケットを送信する必要があります。これらのパケットは、中間ノードが適切と考える方法でルーティングできます。ただし、別のパケットを送信するとすぐに、ルーターがパスを変更するのを妨げるものはまったくありません。これは、ハイゼンベルクの不確定性原理のネットワークのアナロジーのようなものです。

パスはephemeralおよびtransientです。 tracerouteから受信した情報に依存して重要なことを行うべきではありません。ただし、トポロジに関する深い知識がすでにあり(たとえば、複雑な企業LAN上で)、ネットワークの接続の問題を診断し、その動作を制御できる場合を除きます。参加ノード。参加しているノードのいずれかが「自分のもの」でない場合(システム管理者権限でそれらにログインできない場合)、tracerouteの結果は事実上任意です。

一方、参加しているすべてのノードのものである場合は、管理者として、各ノードの正確な動作を制御できます。たとえば、ICMPを有効にして、staticルート(変更されないルート)を設定できます。これにより、tracerouteが正確であると確信できます。ただし、ロードバランサーを中央に配置する場合は、ロードバランサーの動作と、必要に応じてルートを切り替える方法に注意する必要があります(ただし、通常はランダムではなく、通常はそうしようとはしません)。わざとあなたをだまします)。

3
allquixotic