web-dev-qa-db-ja.com

tracerouteはUDPまたはICMP、あるいはその両方を使用しますか?

ラップトップからwww.google.comドメインでトレースを実行すると、icmpまたはudpを使用していますか?
icmpタイプ11だと思っていましたが、別のものを検索しているときに、icmpタイプ30が使用されているルールに遭遇し、udpが使用されているルールを見ました。
それがどのように機能するかを誰かに説明できますか?
仮想専用サーバーのファイアウォール(iptables)に取り組んでいます。

24
Kris

送信されるパケットのタイプは、実装によって異なります。デフォルトでは、Windows tracertはICMPを使用し、Mac OS XとLinux tracerouteはどちらもUDPを使用します。 BSDやSolarisマシン、その他のOSを確認する必要はありませんが、Mac OS Xバージョンのmanページには、その起源がBSD 4.3であると記載されています。

私が持っているMacとLinuxのバージョンは、ICMP、TCP、UDP、GREパケットを含むさまざまな異なるプロトコルを選択する機能を提供します。他のプロトコルは名前または番号で指定できますが、tracerouteは他のプロトコルの動作について何も知りません。盲目的にそれらを送信します。

ファイアウォールを回避したり、パス上のどのルーターが特定のサイズのパケットをドロップしているかを発見したりするために、ペイロードと送信元ポートと宛先ポートの両方を変更することもできます。

Tracerouteのすべてのバージョンは、ルート上の各ホップからのICMPタイプ11(時間超過)応答に依存しています。 ICMPタイプ11応答がファイアウォールによってブロックされている場合、tracerouteは機能しません。これらのパケットは、アウトバウンドではなくインバウンドです。

ICMPタイプはtraceroute専用に指定されており、「情報要求」というラベルが付いています。これが実際に使用されている場所を見つけることができませんでした。 Mac OS XおよびLinuxバージョンのマニュアルページには、-IICMPタイプ8(エコー要求)を送信することが記載されています。ウィキペディアによると、Windows tracertもICMPエコー要求を使用します。 ICMPタイプ30またはタイプ8は、インバウンドではなく、アウトバウンドパケットです。

ICMPタイプ(エコー応答)は、TTLがホップの数と正確に等しい場合、最後のパケットとして戻ってくることがあります。Tracerouteは、受信時に終了したことを認識します。これは着信パケットです。

TCP SYNパケットは、宛先に到達したときに応答としてRSTパケットまたはSYN ACKパケットを発生させます。 SYN ACKパケットを受信した場合、サーバー上でハーフオープン接続を残さないように、RSTパケットでフォローアップするのは丁寧です。

「断片化しない」フラグが設定された大きなパケットを送信すると、ICMPタイプ11応答の代わりにICMPタイプ3コード4応答が返される可能性がありますが、これはおそらく、 MTUが最小のホップを見つけます。通常、ルートに沿った1つのホップからのみこの種の応答が返されます。それらのすべてではありません。

28
Ladadadada

従来のtracerouteは、ホップごとに増分ポートでUDPを使用します。

ICMP、TCP SYNなど)は、あらゆる種類のパケットを使用して実装できます。必要なのは、IPパケットの有効期限が切れることだけです。

MacOSのようなさまざまな実装は、ファイアウォールの制限を回避するために、複数のタイプのtraceroute、およびポートをインクリメントしないモードなどをサポートしています。

8
Daniel Pittman