Guest

IP : IP ルーテッド プロトコル

各オペレーティング システムでの traceroute コマンドの使用方法

ライター翻訳版 - December 1, 2003
機械翻訳版 - August 10, 2005
英語版 - August 10, 2005
Document ID: 22826

目次


概要

traceroute コマンドを実行すると、パケットが通過したホップ数 を取得し、パケットが通過したソースから宛先までのパスを判別できます。このユーティリティは、ホスト オペレーティング システム(Linux、 Microsoft (MS) Windows など)と Cisco IOS® ソフトウェ アに含まれています。

ハードウェアとソフトウェアのバージョン

この文書の情報は、次のバージョンのハードウェアおよびソフト ウェアに適用されます。

  • Cisco IOS ソフトウェア リリース 12.1(5)
  • Linux バージョン 6.2
  • Windows NT を実行しているデバイス

一般的な操作

ホストまたはホストとして機能している発信元デバイスで traceroute ip-address [-m number-of-hops] コマン ドを実行すると、ホップ カウント、生存可能時間 (TTL)=n 付きの IP アドレスが宛先に送信されます。通常、ルータを通 過すると、TTL フィールドの値は 1 ずつ減っていきます。パスの中間にある ルータが TTL=1 のパケットを検出すると、インターネット制御メッセージ プロトコル (ICMP) の "time exceeded" メッセージを発信元に戻し、パケッ トが n 番目のホップを通過していることを通知します。

このコマンドの動作は、traceroute コマンドが実装されているオ ペレーティング システムによって異なります。

Cisco IOS および Linux

初期状態の User Datagram Protocol (UDP) データグラム プローブの TTL は 1 に設定されます。あるいは、ユーザが拡張トレースで指定した最小 TTL に設定されます。初期状態のデータグラム プローブの宛先 UDP ポート は 33434 か、拡張 traceroute コマンド で指定したポートに設定 されています。 拡張 traceroute コマンドは、traceroute コマンドの一 種です。初期状態のデータグラム プローブの発信元 UDP ポートは、ランダ ムに設定され、0x8000 との OR 値になります。発信元ポートの最小値は 0x8000 になります。 次では、UDP データグラムを送信したときのイベント について説明します。

注:これらのパラメータは構成可能です。この例では、n=1 で 開始し、n=3 で終了しています。

  1. UDP データグラムがTTL=1 で送信されます。

  2. UDP 宛先ポートが 1 増分し、発信元 UDP ポートがランダムに設定さ れ、2 番目のデータグラムが送信されます。

  3. 最大 3 つまでのプローブに対して(あるいは、拡張 traceroute コマンド出力で要求した回数だけ)手順 2 が実行されま す。送信されたプローブごとに、"TTL exceeded" メッセージが戻されます。 このメッセージにより、宛先ホストまでのパスを辿ることができます。

  4. ICMP "time exceeded" メッセージを受信すると、TTL が 1 つ大きく なり、手順 1 に戻ります。次のいずれかのメッセージを受信する場合もあり ます。

    1. ICMP type 3, code 3 ("destination unreachable"、"port unreachable") メッセージ。このメッセージはホストに到達したことを示し ます。

    2. "host unreachable"、"net unreachable"、"maximum TTL exceeded" 、または "timeout" メッセージ。プローブが再送されたことを示します。

異なるプローブを区別するために、Cisco ルータは、発信元ポートをラン ダムに設定し、宛先ポートを増分して UDP プローブ パケットを送信します。 Cisco ルータは、UDP/ICMP パケットの送信元ポートの発信元アドレスを付け て、"time to live exceeded in transit" という ICMP メッセージを送信し ます。

Linux の traceroute コマンドは Cisco ルータの実装に類似していますが、このコマンドが使用する発信元ポートは決められています。 traceroute コマンドに -n オプションを指定すると、ネーム サーバに対する要求を回避することができます。

Microsoft Windows

MS Windows 95/Windows 2000 の tracert コマンドは、プローブ として UDP データグラムではなく、ICMP エコー要求を使用します。ICMP エ コー要求 TTL を 1 つずつ増やしながら、 上の説明と同じ操作が行われます。ICMP エコー要求ダイアグラムでは、ICMP エコー要求を使用する利点は最終のホップが宛先ホストから送信された ICMP "unreachable" メッセージ の応答に依存しない点です。この代わりに、ICMP エコー応答メッセージに依存します。

このコマンドのシンタックスは次のとおりです。



  
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name

  

次の表では、このコマンド パラメータについて説明します。

パラメータ 説明
-d コンピュータ名をアドレスの参照で解決しないことを指定します。
-h maximum_hops 宛先の検索に使用するホップの最大数を指定します。
-j computer-list computer-list を使用して発信元のルートを指定します。
-w timeout 応答のタイムアウトを ms 単位で指定します。
target_name 宛先のコンピュータ名。

ICMP 到達不能パケット数の制限

Cisco ルータでは、サービス拒否攻撃 (DoS) から保護するために、ICMP 到達不能パケット数が 500 ms あたり 1 パケットに制限されています。 Cisco IOS バージョン 12.1 では、この制限を変更できます。次のコマンド を実行すると、この値が変更できます。

ip icmp rate-limit unreachable [DF] <1-4294967295 millisecond> 

  no ip icmp rate-limit unreachable [DF] (DF limits rate for code=4) 

  

登録ユーザとして ログインしている場合、 詳細については、バグ情報 CSCdp28161 を参照してください。

この制限は、すべての ICMP 到達不能パケット数を集約した割合に適用されます。 詳細については、 RFC 792leaving を参照してください。

type = 3, code 

  0 = net unreachable; 

  1 = host unreachable; 

  2 = protocol unreachable; 

  3 = port unreachable; 

  4 = fragmentation needed and DF set; 

  5 = source route failed.

  

この制約は、ICMP エコー要求や ICMP "time exceeded" メッセージなど の他のパケットには影響を及ぼしません。

ここでは、次のネットワーク トポロジを例に説明します。

ここで取りあげる 3 つの例では、それぞれ異なる Device A を使用して います。Device A から、traceroute 150.1.4.2 コマンドを Device 7C に実行しています。

また、どの例でも、debug ip packet detail コマンドを Device 11A で実行しています。それぞれの例で、このコマンドの出力結果を示しま す。

注: Device 11A で TTL = 1 になると、デバッグ出力にパケット は表示されません。

Cisco ルータで Cisco IOS ソフトウェア 12.1(5) を使用している場合

次の例では、拡張 traceroute コマンドを使用しています 。この例では、Cisco ルータから traceroute コマンドを実行すると きに変更できるオプションについても説明します。この例では、デフォルト の設定を変更していません。

rp-10c-2611#traceroute

  Protocol [ip]: 

  Target IP address: 150.1.4.2 

  Source address: 150.1.1.1 

  Numeric display [n]: 

  Timeout in seconds [3]: 

  Probe count [3]: 

  Minimum Time to Live [1]: 

  Maximum Time to Live [30]: 

  Port Number [33434]: 

  Loose, Strict, Record, Timestamp, Verbose[none]: 

  Type escape sequence to abort.

  Tracing the route to 150.1.4.2

  

  1 150.1.1.2 4 msec 0 msec 4 msec

  2 150.1.2.2 4 msec 4 msec 0 msec

  3 150.1.3.2 0 msec 0 msec 4 msec

  4 150.1.4.2 4 msec * 0 msec 

  

  

  rp-11a-7204#

  *Dec 29 13:13:57.060: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0),

   len 56, sending

  *Dec 29 13:13:57.060: ICMP type=11, code=0

  *Dec 29 13:13:57.064: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0),

   len 56, sending

  *Dec 29 13:13:57.064: ICMP type=11, code=0

  *Dec 29 13:13:57.064: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0),

   len 56, sending

  *Dec 29 13:13:57.068: ICMP type=11, code=0

  

このデバッグ出力では、Device 11A がプローブの発信元 (150.1.1.1) に ICMP "time exceeded" メッセージを送信しています。これらの ICMP メッセ ージは、TTL=1 の最初のプローブへの返信です。Device 11A は TTL を 0 に設定し、"time exceeded" メッセージを戻します。

注: この出力例では、次の 2 つの理由でデバッグ出力に UDP プローブが含まれていません。

  • Device 11A が UDP プローブの宛先でない。

  • TTL が 0 になり、パケットが破棄されたため、debug でパケットが認識できない。

    *Dec 29 13:13:57.068: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),
    
       g=150.1.2.2, len 28, forward
    
      *Dec 29 13:13:57.068: UDP src=40309, dst=33437
    
      *Dec 29 13:13:57.068: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),
    
       g=150.1.1.1, len 56, forward
    
      *Dec 29 13:13:57.068: ICMP type=11, code=0
    
      *Dec 29 13:13:57.072: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),
    
       g=150.1.2.2, len 28, forward
    
      *Dec 29 13:13:57.072: UDP src=37277, dst=33438
    
      *Dec 29 13:13:57.072: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),
    
       g=150.1.1.1, len 56, forward
    
      *Dec 29 13:13:57.072: ICMP type=11, code=0
    
      *Dec 29 13:13:57.076: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),
    
       g=150.1.2.2, len 28, forward
    
      *Dec 29 13:13:57.076: UDP src=36884, dst=33439
    
      *Dec 29 13:13:57.076: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),
    
       g=150.1.1.1, len 56, forward
    
      *Dec 29 13:13:57.076: ICMP type=11, code=0
    
      

このデバッグ出力では、150.1.1.1 から 150.1.4.2 への UDP プローブが 含まれています。

注: このプローブは TTL=2 です。これは、デバッグでは確認でき ません。Device 11A は TTL を 1 に設定し、UDP パケットを Device 7A に 送信します。Device 7A は TTL を 0 にして、ICMP "time exceeded" メッセ ージを戻します。

*Dec 29 13:13:57.080: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 28, forward

  *Dec 29 13:13:57.080: UDP src=37479, dst=33440

  *Dec 29 13:13:57.080: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Dec 29 13:13:57.080: ICMP type=11, code=0

  *Dec 29 13:13:57.084: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 28, forward

  *Dec 29 13:13:57.084: UDP src=40631, dst=33441

  *Dec 29 13:13:57.084: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Dec 29 13:13:57.084: ICMP type=11, code=0

  *Dec 29 13:13:57.084: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 28, forward

  *Dec 29 13:13:57.088: UDP src=39881, dst=33442

  *Dec 29 13:13:57.088: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Dec 29 13:13:57.088: ICMP type=11, code=0

  

このデバッグ出力には、後続の 3 つの UDP プローブが含まれています。 これらのプローブの TTL は 3 です。Device 11A は TTL を 2 に設定し、 Device 7A に転送します。Device 7A は TTL を 1 に設定し、パケットを Device 7B に転送します。Device 7B は TTL を 0 に設定し、 ICMP "time exceeded" メッセージを戻します。

*Dec 29 13:13:57.088: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 28, forward

  *Dec 29 13:13:57.088: UDP src=39217, dst=33443

  *Dec 29 13:13:57.092: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Dec 29 13:13:57.092: ICMP type=3, code=3

  *Dec 29 13:13:57.092: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 28, forward

  *Dec 29 13:13:57.096: UDP src=34357, dst=33444

  *Dec 29 13:14:00.092: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 28, forward

  *Dec 29 13:14:00.092: UDP src=39587, dst=33445

  *Dec 29 13:14:00.092: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Dec 29 13:14:00.092: ICMP type=3, code=3

  

このデバッグ出力では、最後の 3 つの UDP プローブが含まれています。 これらのプローブの最初の TTL は 4 でした。Device 11A が TTL を 3 にし 、Device 7A が 2 にし、Device 7B が 1 にして、Device 7C が 0 にしてい ます。Device 7C はプローブの宛先のため、ICMP "port unreachable" メッセージを戻しています。

注: Device 7C は、到達不能パケット数の制限から、2 つの ICMP "port unreachable" メッセージしか送信しません。

PC で Linux 6.2 を実行している場合

[root#linux-pc]#traceroute -n 150.1.4.2

  traceroute to 150.1.4.2 (150.1.4.2), 30 hops max, 40 byte packets

  1. 150.1.1.2 1.140 ms 0.793 ms 0.778 ms

  2. 150.1.2.2 2.213 ms 2.105 ms 3.491 ms

  1. 150.1.3.2 3.146 ms 2.314 ms 2.347 ms

  1. 150.1.4.2 3.579 ms * 2.954 ms 

  

  

  rp-11a-7204#

  *Jan 2 07:17:27.894: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0),

  len 56, sending

  *Jan 2 07:17:27.894: ICMP type=11, code=0

  *Jan 2 07:17:27.894: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0),

  len 56, sending

  *Jan 2 07:17:27.894: ICMP type=11, code=0

  *Jan 2 07:17:27.894: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0),

  len 56, sending

  *Jan 2 07:17:27.894: ICMP type=11, code=0

  

このデバッグ出力では、Device 11A がプローブの発信元 (150.1.1.1) に ICMP "time exceeded" メッセージを送信しています。これらの ICMP メッセ ージは、TTL=1 の最初のプローブを検出したときに戻されます。Device 11A は TTL を 0 に設定し、"time exceeded" メッセージを戻します。

注: この出力例では、次の 2 つの理由でデバッグ出力に UDP プ ローブが含まれていません。

  • Device 11A が UDP プローブの宛先でない。

  • TTL が 0 になり、パケットが破棄されたため、debug でパケットが認識できない。

    *Jan 2 07:17:27.894: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0),
    
       g=150.1.2.2, len 40, forward
    
      *Jan 2 07:17:27.894: UDP src=33302, dst=33438
    
      *Jan 2 07:17:27.898: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0),
    
       g=150.1.1.1, len 56, forward
    
      *Jan 2 07:17:27.898: ICMP type=11, code=0
    
      *Jan 2 07:17:27.898: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0),
    
       g=150.1.2.2, len 40, forward
    
      *Jan 2 07:17:27.898: UDP src=33302, dst=33439
    
      *Jan 2 07:17:27.898: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0),
    
       g=150.1.1.1, len 56, forward
    
      *Jan 2 07:17:27.898: ICMP type=11, code=0
    
      *Jan 2 07:17:27.898: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0),
    
       g=150.1.2.2, len 40, forward
    
      *Jan 2 07:17:27.898: UDP src=33302, dst=33440
    
      *Jan 2 07:17:27.902: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0),
    
       g=150.1.1.1, len 56, forward
    
      *Jan 2 07:17:27.902: ICMP type=11, code=0
    
      

このデバッグ出力では、150.1.1.1 から 150.1.4.2 への UDP プローブが 含まれています。

注: このプローブは TTL=2 です。これは、デバッグでは確認でき ません。Device 11A は TTL を 1 に設定し、UDP パケットを Device 7A に 送信します。Device 7A は TTL を 0 にして、ICMP "time exceeded" メッセージを戻します。

*Jan 2 07:17:27.902: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0),

   g=150.1.2.2, len 40, forward

  *Jan 2 07:17:27.902: UDP src=33302, dst=33441

  *Jan 2 07:17:27.906: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Jan 2 07:17:27.906: ICMP type=11, code=0

  *Jan 2 07:17:27.906: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0),

   g=150.1.2.2, len 40, forward

  *Jan 2 07:17:27.906: UDP src=33302, dst=33442

  *Jan 2 07:17:27.910: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Jan 2 07:17:27.910: ICMP type=11, code=0

  *Jan 2 07:17:27.910: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0),

   g=150.1.2.2, len 40, forward

  *Jan 2 07:17:27.910: UDP src=33302, dst=33443

  *Jan 2 07:17:27.910: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Jan 2 07:17:27.910: ICMP type=11, code=0

  

このデバッグ出力には、後続の 3 つの UDP プローブが含まれています。 これらのプローブの TTL は 3 です。Device 11A は TTL を 2 に設定し、 Device 7A に転送します。Device 7A は TTL を 1 に設定し、パケットを Device 7B に転送します。Device 7B は TTL を 0 に設定し、 ICMP "time exceeded" メッセージを戻します。

*Jan 2 07:17:27.910: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0),

   g=150.1.2.2, len 40, forward

  *Jan 2 07:17:27.910: UDP src=33302, dst=33444

  *Jan 2 07:17:27.914: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Jan 2 07:17:27.914: ICMP type=3, code=3

  *Jan 2 07:17:27.914: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0),

   g=150.1.2.2, len 40, forward

  *Jan 2 07:17:27.914: UDP src=33302, dst=33445

  *Jan 2 07:17:32.910: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0),

   g=150.1.2.2, len 40, forward

  *Jan 2 07:17:32.910: UDP src=33302, dst=33446

  *Jan 2 07:17:32.914: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Jan 2 07:17:32.914: ICMP type=3, code=3

  

このデバッグ出力では、最後の 3 つの UDP プローブが含まれています。 これらのプローブの最初の TTL は 4 でした。Device 11A が TTL を 3 にし 、Device 7A が 2 にし、Device 7B が 1 にして、Device 7C が 0 にしてい ます。Device 7C はプローブの宛先のため、ICMP "port unreachable" メッ セージを戻しています。

注: Device 7C は、到達不能パケット数の制限から、2 つの ICMP "port unreachable" メッセージしか送信しません。

PC で Windows NT を実行している場合

C:\>traceroute 150.1.4.2 

  

  1 <10 ms <10 ms <10 ms 10.1.1.2

  1 <10 ms <10 ms <10 ms 10.1.2.2

  1 <10 ms <10 ms <10 ms 10.1.3.2

  1 <10 ms 10 ms 10 ms 10.1.4.2

  

  Trace complete

  

  rp-11a-7204#

  *Dec 29 14:02:22.236: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 78, forward

  *Dec 29 14:02:22.236: UDP src=137, dst=137

  *Dec 29 14:02:22.240: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Dec 29 14:02:22.240: ICMP type=3, code=3

  *Dec 29 14:02:23.732: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 78, forward

  *Dec 29 14:02:23.732: UDP src=137, dst=137

  *Dec 29 14:02:23.736: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Dec 29 14:02:23.736: ICMP type=3, code=3

  *Dec 29 14:02:25.236: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 78, forward

  *Dec 29 14:02:25.236: UDP src=137, dst=137

  *Dec 29 14:02:25.236: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Dec 29 14:02:25.240: ICMP type=3, code=3

  

  *Dec 29 14:02:26.748: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0),

   len 56, sending

  *Dec 29 14:02:26.748: ICMP type=11, code=0

  *Dec 29 14:02:26.752: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0),

   len 56, sending

  *Dec 29 14:02:26.752: ICMP type=11, code=0

  *Dec 29 14:02:26.752: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0),

   len 56, sending

  *Dec 29 14:02:26.752: ICMP type=11, code=0

  

このデバッグ出力では、Device 11A がプローブの発信元 (150.1.1.1) に ICMP "time exceeded" メッセージを送信しています。これらの ICMP メッセ ージは、TTL=1 の ICMP エコー要求の最初のプローブを検出したときに戻さ れます。Device 11A は TTL を 0 に設定し、ICMP メッセージを戻します。

注: 出力の先頭に NETBIOS 名の要求があります。この要求は、発信元と宛先のポートがともに 137 に設定されている UDP パケットとして表 されています。説明を分かりやすくするために、以降のデバッグ出力では、 NETBIOS パケットを省略しています。traceroute コマンドで -d オプションを使用すると、NETBIOS の動作を無効にできます。

注: この出力例では、次の 2 つの理由でデバッグ出力に ICMP プ ローブが含まれていません。

  • Device 11A が ICMP プローブの宛先でない。

  • TTL が 0 になり、パケットが破棄されたため、debug でパケットが認識できない。

    *Dec 29 14:02:32.256: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),
    
       g=150.1.2.2, len 92, forward
    
      *Dec 29 14:02:32.256: ICMP type=8, code=0
    
      *Dec 29 14:02:32.260: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),
    
       g=150.1.1.1, len 56, forward
    
      *Dec 29 14:02:32.260: ICMP type=11, code=0
    
      *Dec 29 14:02:32.260: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),
    
       g=150.1.2.2, len 92, forward
    
      *Dec 29 14:02:32.260: ICMP type=8, code=0
    
      *Dec 29 14:02:32.260: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),
    
       g=150.1.1.1, len 56, forward
    
      *Dec 29 14:02:32.260: ICMP type=11, code=0
    
      *Dec 29 14:02:32.264: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),
    
       g=150.1.2.2, len 92, forward
    
      *Dec 29 14:02:32.264: ICMP type=8, code=0
    
      *Dec 29 14:02:32.264: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),
    
       g=150.1.1.1, len 56, forward
    
      *Dec 29 14:02:32.264: ICMP type=11, code=0
    
      

このデバッグ出力では、150.1.1.1 から 150.1.4.2 への ICMP プローブ が含まれています。

注: このプローブは TTL=2 です。これは、デバッグでは確認でき ません。Device 11A は TTL を 1 に設定し、UDP パケットを Device 7A に 送信します。Device 7A は TTL を 0 にして、ICMP "time exceeded" メッセ ージを戻します。

*Dec 29 14:02:37.776: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 92, forward

  *Dec 29 14:02:37.776: ICMP type=8, code=0

  *Dec 29 14:02:37.776: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Dec 29 14:02:37.776: ICMP type=11, code=0

  *Dec 29 14:02:37.780: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 92, forward

  *Dec 29 14:02:37.780: ICMP type=8, code=0

  *Dec 29 14:02:37.780: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Dec 29 14:02:37.780: ICMP type=11, code=0

  *Dec 29 14:02:37.780: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 92, forward

  *Dec 29 14:02:37.780: ICMP type=8, code=0

  *Dec 29 14:02:37.784: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 56, forward

  *Dec 29 14:02:37.784: ICMP type=11, code=0

  

このデバッグ出力には、後続の 3 つの ICMP プローブが含まれています。これ らのプローブの TTL は 3 です。Device 11A は TTL を 2 に設定し、 Device 7A に転送します。Device 7A は TTL を 1 に設定し、パケットを Device 7B に転送します。Device 7B は TTL を 0 に設定し、 ICMP "time exceeded" メッセージを戻します。

*Dec 29 14:02:43.292: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 92, forward

  *Dec 29 14:02:43.292: ICMP type=8, code=0

  *Dec 29 14:02:43.296: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 92, forward

  *Dec 29 14:02:43.296: ICMP type=0, code=0

  *Dec 29 14:02:43.296: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 92, forward

  *Dec 29 14:02:43.296: ICMP type=8, code=0

  *Dec 29 14:02:43.300: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 92, forward

  *Dec 29 14:02:43.300: ICMP type=0, code=0

  *Dec 29 14:02:43.300: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0),

   g=150.1.2.2, len 92, forward

  *Dec 29 14:02:43.300: ICMP type=8, code=0

  *Dec 29 14:02:43.304: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0),

   g=150.1.1.1, len 92, forward

  *Dec 29 14:02:43.304: ICMP type=0, code=0

  

このデバッグ出力では、最後の 3 つの ICMP プローブが含まれています。 これらのプローブの最初の TTL は 4 でした。Device 11A が TTL を 3 にし 、Device 7A が 2 にし、Device 7B が 1 にして、Device 7C が 0 にしてい ます。Device 7C はプローブの宛先のため、ICMP エコー応答メッセージ (type=0, code=0) を戻します。

注: ICMP エコー応答メッセージは、ICMP "port unreachable" メ ッセージのように、制約を受けません。この場合、送信された 3 つの ICMP エコー応答メッセージがすべて含まれています。

補足情報

Cisco ルータ での traceroute コマンドの応答コードは次の通りです。

! -- 成功

  * -- タイムアウト

  N -- ネットワークに到達不能

  H -- ホストに到達不能

  P -- プロトコルに到達不能

  A -- Admin による拒否

  Q -- Source Quench を受信(輻輳)

  ? -- 不明(他の ICMP メッセージ)

  

UNIX から traceroute コマンドを実行する場合には、次の点に注 意してください。

  • "traceroute: icmp socket: Permission denied" というメッセ ージを受信する可能性がある。

  • traceroute プログラムは、ネットワーク内をスヌープするときに、 Network Interface Tap (NIT) に依存する。このデバイスにアクセスでき るのは、root だけです。このプログラムを root で実行するか、ユーザ ID に root 権限を設定する必要があります。

要約

この文書では、 traceroute コマンドを実行し、UDP および ICMP パケットを使用し て特定の発信元から宛先までのパスを判別する方法について説明しました。 コマンドの出力には、次のような ICMP メッセージが含まれます。

  • type=11, code=0(TTL が転送中に 0 になった場合)。パケットが宛 先に到達する前にプローブ パケットの TTL が 0 になると、パケットは転送 元のルータに戻されます。

  • type=3, code=3(ポートに到達不能)。プローブ パケットが宛先に到 着したときに、UDP アプリケーションが定義されていないと、UDP プローブ パケットに応答して、パケットが戻されます。このパケット数は、500 ms あ たり 1 パケットに制限されています。このパケットには、宛先に到達できな かった理由が記述されています(Cisco ルータおよびLinux の出力例を参照)。Device 7C は ICMP メッセージを生成しません。また、 各デバイスの traceroute コマンド出力は 1 秒以上経過してから生 成されます。MS Windows で traceroute コマンドを実行すると、 UPD ポート 137 が Cisco ルータに存在しないため、ICMP メッセージが生成 されます。

  • type=8, code=0。エコー プローブ パケットが MS Windows PC から送 信されます。

  • type=0, code=0。宛先に到達したときに前のパケットが送信されます。 これは、MS Windows の traceroute コマンドにだけ適用されます。


関連情報