Traceroute-すべてのパケットのTTL == 1


17

私はコンピューターネットワーキングでWireshark lab-IPに取り組んでいます-トップダウンアプローチであり、通常有効期限が切れたすべてのパケットのTTLが1である理由がわかりません。

これが私のWiresharkキャプチャファイルです。 https://www.dropbox.com/s/rr5wgze9j20gzvu/traceroute-56.pcapng?dl=0

tracerouteLinux でのプログラムの実行(56バイトのオプションを使用)をキャプチャし、次のコマンドで実行しました。

traceroute http://gaia.cs.umass.edu 56

パケットのTTL == 1のほとんどがわかります。後続のすべてのホップのTTLが+1(またはそれ以上)であることがわかったので、その理由はわかりません。

PS:

  • ホストへのブリッジネットワークでVMwareでLubuntuを使用しています。
  • ホストマシン上のWiresharkでキャプチャしました(Windows)
  • NATプロトコルの上で独自のDHCPサーバーを使用してワイヤレスAPに接続しています

回答:


14

これに答えてましょう。最初は少し複雑に見えるからです。

あなたはすでに基本的な操作を知っているようtracerouteですが、ここで他のことをする前に非常に小さな要約があります:

tracerouteホストから宛先ホストまでのすべての中間ステップ、またはホストから宛先ホストまでの距離、つまりホップ数を決定しようとします。そのために、「ランダムな」宛先ポート番号と、1から始まり増加し続けるTTLを持つ宛先ホストへのパケット送信を開始します。
アイデアは、間にある各ルーターがTTLを1ずつ減らすということです。したがって、TTLが0に達すると(実際には、0に減らそうとしているルーターがその前にエラーを生成するので、TTLはゼロになります)、ルーターはICMPを返します「存続可能時間を超えました」エラーメッセージ。キャプチャファイルのパケット番号24など。それから得られるのは、目的地がさらに離れていることであり、これがTTLを増加させ続ける理由です。
パケットの宛先に到達するのに十分なTTLがある場合、別のICMPエラーメッセージが表示されます:「宛先に到達できません(ポートに到達できません」、たとえばキャプチャファイルのパケット番号208。それから得られるのは、最後に使用されたTTLが実際にあなたと宛先ノードの間のホップ数であるということです。エラーが発生する理由は、単に、宛先ノードが(できれば)待機していない「ランダム」ポートにメッセージを送信しているためです。

次に、キャプチャファイルの
traceroute詳細を 説明します。マニュアルページから、各TTLが3回使用され(オプション '-q')、デフォルトのプロトコルがUDP(オプション '-P')であることがわかります。最初の3つのUDPパケット、つまりパケット8-9-10を調べることで、実際にTTLが1であることがわかります。次の3、つまり11-12-13にはTTL 2などがあります。したがって、ソースの観点からは、すべてがうまくいくようです。

次に、ネットワークの遅延に応じてしばらくすると、予想されるエラーメッセージの取得を開始します。したがって、パケット24-25-25-26は「存続可能時間を超えました」エラーパケットであり、宛先がさらに離れていることを意味します。

この試行とエラーの往復は、最終的にパケット208以降で、宛先に到達したことを意味する「ポート到達不能」エラーメッセージが表示されるまで続きます。

送信したパケットと応答をカウントすることにより、TTLが実際に機能したトレースからでも実際に見つけることができますが、それは退屈なタスクです:)

お役に立てば幸いです


スーパーの説明
ksp0422

14

クライアントは、TTLが1の最初の3つのパケットのみを送信しています。次の3つは、TTLが2で送信されます。次の3つは、TTLが3で送信されます。

これを表示する簡単な方法は、WiresharkでIP TTLフィールドを独自の列として設定することです。パケット内のTTL値を右クリックし、「列として適用」を選択します。 WiresharkでTTLを列として設定する

そこから、パケット8,9,10のTTLが1であり、パケット11,12,13のTTLが2であることがわかります。以降も同様です。 TracerouteのTTL

これがTracerouteの動作方法だからです。TTLを0に減らしたときにルーターが行うことを利用します。パケットの転送を続けるのではなく、元のクライアントに「ICMP TTL Expired in Transitメッセージ」を返します(キャプチャのパケット#24を参照)

したがって、クライアントとして、TTLが1の最初のパケットセットを送信すると、パス内の最初のルーターがTTL Expiredメッセージで応答します。次に、最初のメッセージを送信したときにTTL Expiredメッセージを受信するのにかかった時間を測定します。これにより、Traceroute出力の最初の3つの値がわかります。

次に、TTLが2の別の3つのパケットセットを送信します。パスの最初のルーターはこれを1に減らし、次にパスの次のルーターに転送します。受信時に、その2番目のルーターがTTLを取得すると、TTLを0にデクリメントします。これにより、パケットをドロップし、転送中にTTL Expiredを送信するように求められます。

このプロセスは、クライアントが、あなたとtracerouteを実行している最終宛先との間を通過するすべてのルーターから(まあ、3つ)TTL Expiredメッセージを受信するまで続きます。


視覚的に最も
わかりやすい

@エディ、これはこの質問に関係ないかもしれませんが、これはコメントで尋ねると思った非常に小さな詳細です。ホスト(ルーターではない)がTTLフィールド1のデータグラムを受信した場合の動作を指定できますか?
Vimal Patel

1
@VimalPatelパケットがホスト宛ての場合、ホストは単にパケットを受け入れます。TTLが0に達した場合のパケットのドロップは、ルーター機能です。
エディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.