回答:
送信されるパケットのタイプは、実装によって異なります。デフォルトでは、Windows tracert
はICMPを使用し、Mac OS XとLinux traceroute
はUDPを使用します。BSDやSolarisのマシン、その他のOSをチェックする必要はありませんが、Mac OS Xバージョンのマニュアルページには、その起源がBSD 4.3であると記載されています。
私が持っているMacおよびLinuxバージョンは、ICMP、TCP、UDP、およびGREパケットを含むさまざまな異なるプロトコルを選択する機能を提供しています。他のプロトコルは名前または番号で指定できますが、tracerouteは他のプロトコルの動作については何も知りません。盲目的に送信するだけです。
また、ファイアウォールを回避したり、パス上のどのルーターが特定のサイズのパケットをドロップしているかを発見したりするために、ペイロードと送信元ポートおよび宛先ポートの両方を変更できます。
tracerouteのすべてのバージョンは、ルートに沿った各ホップからのICMPタイプ11(時間超過)応答に依存しています。ICMPタイプ11の応答がファイアウォールによってブロックされている場合、tracerouteは機能しません。これらのパケットはインバウンドであり、アウトバウンドではありません。
ICMPタイプ30は、特にtracerouteに指定されており、「情報要求」としてラベル付けされています。これが実際に使用されている場所を見つけることができませんでした。Mac OS XおよびLinuxバージョンのmanページには、ICMPタイプ8(エコー要求)-I
が送信されると書かれています。ウィキペディアによると、Windows tracert
はICMPエコー要求も使用します。ICMPタイプ30またはタイプ8はアウトバウンドパケットであり、インバウンドではありません。
TTLがホップ数と正確に等しい場合、ICMPタイプ0(エコー応答)が最後のパケットとして返される場合があります。Tracerouteは、これらのいずれかを受信すると終了したことを認識します。これは着信パケットです。
TCP SYNパケットは、宛先に到達すると、RST
パケットまたはSYN ACK
パケットの応答を引き起こします。SYN ACK
パケットを受信した場合RST
、サーバー上でハーフオープン接続を残さないように、パケットをフォローアップすることは丁寧です。
得ることが可能であるICMPタイプ3コード4つの 11応答の代わりにICMPタイプのバック応答をあなたは「ドフラグメントではない」フラグが設定された大規模なパケットを送信する場合、しかし、これが唯一の最小のMTUを使用すると、ホップを見つけることができるようにする可能性があります。通常、この種の応答は、ルートに沿った1つのホップからのみ取得されます。すべてではありません。
従来のtracerouteは、ホップごとにポートを増やすときにUDPを使用します。
ICMP、TCP SYNなど、あらゆる種類のパケットを使用して実装できます。必要なのは、IPパケットが期限切れになり、黄金色になることだけです。
MacOSなどのさまざまな実装では、ファイアウォールの制限をバイパスするために、ポートなどを増加させないモードだけでなく、複数の種類のtracerouteをサポートしています。