この製品のドキュメントセットは、偏向のない言語を使用するように配慮されています。このドキュメントセットでの偏向のない言語とは、年齢、障害、性別、人種的アイデンティティ、民族的アイデンティティ、性的指向、社会経済的地位、およびインターセクショナリティに基づく差別を意味しない言語として定義されています。製品ソフトウェアのユーザインターフェイスにハードコードされている言語、RFP のドキュメントに基づいて使用されている言語、または参照されているサードパーティ製品で使用されている言語によりドキュメントに例外が存在する場合があります。シスコのインクルーシブ ランゲージの取り組みの詳細は、こちらをご覧ください。
シスコは世界中のユーザにそれぞれの言語でサポート コンテンツを提供するために、機械と人による翻訳を組み合わせて、本ドキュメントを翻訳しています。ただし、最高度の機械翻訳であっても、専門家による翻訳のような正確性は確保されません。シスコは、これら翻訳の正確性について法的責任を負いません。原典である英語版(リンクからアクセス可能)もあわせて参照することを推奨します。
このドキュメントでは、さまざまなシステムで traceroute コマンドがどのように動作するかについて説明します。
前提条件
要件
このドキュメントの読者は、次のいずれかのオペレーティングシステムに関する基本的な知識を持っている必要があります。
-
Cisco IOS(R) ソフトウェア
-
Linux
-
Microsoft Windows
使用するコンポーネント
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに適用されます。
-
Cisco IOSソフトウェアリリース12が稼働するCiscoルータ
-
Red Hat Linuxが稼働するPC
-
MS Windowsが稼働するPC
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
表記法
表記法の詳細については、『シスコ テクニカル ティップスの表記法』を参照してください。
背景説明
traceroute コマンドを使用すると、パケットが通過した一連のホップを取得し、特定の送信元から宛先までパケットが辿ったパスを確認できます。このユーティリティは、ホストオペレーティングシステム(LinuxやMicrosoft(MS)Windowsなど)、およびCisco IOSソフトウェアに付属しています。
一般的な操作
を実行すると、
traceroute ip-address コマンドを使用して、送信元デバイス(ホスト、またはホストとして動作しているルータなど)から宛先にIPパケットを送信する際に、指定された最大ホップカウントまで増分される存続可能時間(TTL)値を使用します。デフォルトは 30 です。通常、パケットを転送すると、そのパケットが宛先までのパスに存在するルータを通るたびに、TTL フィールド値が 1 ずつ減っていきます。パスの途中にあるルータで TTL が 1 であるパケットが見つかった場合、Internet Control Message Protocol(ICMP)の「time exceeded」メッセージが送信元に送信されます。このメッセージによって、パケットが特定のルータ(ホップ)を通ったことが送信先に通知されます。
このドキュメントで説明する各種オペレーティングシステムでの
traceroute コマンドの実装方法は、いくつかの違いがあります。
Cisco IOS と Linux
最初のUser Datagram Protocol(UDP;ユーザデータグラムプロトコル)データグラムプローブのTTLは1(またはユーザが拡張
traceroute コマンドで指定した最小TTL)に設定されます。最初のデータグラムプローブ(UDP)の宛先UDPポートは33434(または拡張
traceroute コマンドの出力で指定された)に設定されます。extended
traceroute コマンドは、通常の
traceroute
traceroute
コマンドのバリエーションです。このコマンドを使用すると、TTLや宛先ポート番号などの操作で使用されるパラメータのデフォルト値を変更できます。拡張
traceroute コマンドの使用方法の詳細については、『拡張pingおよび拡張tracerouteコマンドについて』を参照してください。初期状態のデータグラム プローブのソース UDP ポートはランダムに設定され、0x8000 と論理演算子 OR になります(送信元ポートの最小値は 0x8000)。UDP データグラムが起動する際の動作を確認するには、次の手順を実行します。
注:パラメータは設定可能です。この例では、n = 1 から開始し、n = 3 で終了しています。
-
UDP データグラムは、TTL = 1、宛先 UDP ポート = 33434、および送信元ポート:ランダム値で送信されます。
-
UDP 宛先ポートは増分し、送信元 UDP ポートはランダムに設定され、2 つ目のデータグラムが送信されます。
-
ステップ2が最大3つのプローブ(または拡張 traceroute コマンドの出力で要求された回数のプローブ)に繰り返されます。送信された各プローブについて、「TTL exceeded」メッセージが返されます。これは、宛先ホストへのパスを構築する際に使用します。
-
ICMP「time exceeded」メッセージを受信すると、TTLが増分され、このサイクルが増分された宛先ポート番号で繰り返されます。また、次のいずれかのメッセージを受け取ることもあります。
-
ICMPタイプ3、コード3(宛先到達不能、ポート到達不能)メッセージ。ホストに到達したことを示します。
-
host unreachable、net unreachable、maximum TTL exceeded、またはtimeoutタイプのメッセージ。プローブが再送信されたことを意味します。
プローブを区別するために、Cisco のルータは、送信元ポートをランダムに設定し、宛先ポートを増分して UDP プローブ パケットを送信します。Ciscoルータは、UDP/ICMPパケットを受信した送信元にICMPメッセージ「time exceeded」を返信します。
Linuxの
traceroute コマンドは、Ciscoルータの実装に似ています。ただし、Linux の traceroute コマンドでは、送信先ポートが固定されています。「
-n
traceroute コマンドのオプションは、ネームサーバへの要求を回避するために使用されます。
Microsoft Windows
MS Windowsの
tracert コマンドは、UDPデータグラムの代わりに、ICMPエコー要求データグラムをプローブとして使用します。ICMP エコー要求は、TTL を増分しながら送信されます。また、「Cisco IOS と Linux」で説明したものと同じ動作が行われます。ICMPエコー要求データグラムを使用することの重要な点は、最終ホップが宛先ホストからのICMP到達不能メッセージの応答に依存しないことです。代わりに、最後のホップは ICMP エコーの応答メッセージに依存します。
コマンドの構文は次のとおりです。
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
次の表では、コマンドのパラメータについて説明します。
パラメータ | 説明 |
---|---|
-d | アドレスをコンピュータ名に解決しないことを指定します。 |
-h maximum_hops | 宛先を検索する際のホップの最大数を指定します。 |
-j computer-list | computer-list を使用して、Loose Source Route を指定します。 |
-w timeout | 各応答のタイムアウトに指定された期間(ms 単位)待機します。 |
target_name | 宛先コンピュータ名。 |
ICMP 到達不能レートの制限
Cisco ルータでは、Denial of Service(DoS)攻撃から保護するため、ICMP 到達不能が 500 ms あたり 1 つのパケットに制限されています。Cisco IOS ソフトウェア リリース 12.1 以降、このレート値は設定可能になりました。導入されたコマンドは次のとおりです。
Router(config)#ip icmp rate-limit unreachable ?
<1-4294967295> Once per milliseconds
DF code 4, fragmentation needed and DF set
この制限は、出力に示されているように、すべての ICMP 到達不能の集約レートに適用されます。詳細については、RFC 792 を参照してください。
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時間超過メッセージなどの他のパケットには影響しません。
例
次のネットワーク トポロジを例に説明します。
ここで紹介する 3 つの例では、それぞれ異なるデバイス A が使用されています。デバイスAからデバイス7Cに対して
traceroute 10.1.4.2 コマンドが実行されます。
それぞれの例では、
debug ip packet detail コマンドはデバイス11Aで実行されます。
Cisco IOS ソフトウェアが稼働する Cisco ルータ
次の拡張
traceroute コマンドの例は、Ciscoルータから
traceroute コマンドを実行する際に変更できるオプションを示しています。この例では、デフォルトから変更された値はありません。
rp-10c-2611#traceroute
Protocol [ip]:
Target IP address: 10.1.4.2
Source address: 10.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 10.1.4.2
1 10.1.1.2 4 msec 0 msec 4 msec
2 10.1.2.2 4 msec 4 msec 0 msec
3 10.1.3.2 0 msec 0 msec 4 msec
4 10.1.4.2 4 msec * 0 msec
rp-11a-7204#
*Dec 29 13:13:57.060: IP: s=10.1.1.2 (local), d=10.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=10.1.1.2 (local), d=10.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=10.1.1.2 (local), d=10.1.1.1 (Ethernet4/0),
len 56, sending
*Dec 29 13:13:57.068: ICMP type=11, code=0
このデバッグ出力では、デバイス11Aがプローブの送信元(10.1.1.1)にICMP「time exceeded」メッセージを送信しています。これらの ICMP メッセージは、TTL が 1 である最初のプローブに対する応答です。デバイス11AはTTLを0に設定し、「time exceeded」メッセージで応答します。
注:次の2つの理由により、このdebugコマンドの出力にはUDPプローブが表示されていません。
-
デバイス 11A が UDP プローブの宛先ではない。
-
TTL が 0 に設定されたため、パケットがこれ以上ルーティングされない。このため、デバッグではパケットが認識されない。
*Dec 29 13:13:57.068: IP: s=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.2.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.2.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.2.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.1.1.1, len 56, forward
*Dec 29 13:13:57.076: ICMP type=11, code=0
この debug コマンドの出力には、送信元 10.1.1.1 から宛先 10.1.4.2 までの UDP プローブが示されています。
注:これらのプローブでは、TTL=2です(これはdebugでは確認できません)。デバイス 11A は TTL を 1 に設定し、UDP パケットをデバイス 7A に転送します。デバイス7AはTTLを0に設定し、ICMPの「time exceeded」メッセージで応答します。
*Dec 29 13:13:57.080: IP: s=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.3.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.3.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.3.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.1.1.1, len 56, forward
*Dec 29 13:13:57.088: ICMP type=11, code=0
この debug コマンドの出力には、次の 3 つの UDP プローブがあります。これらのプローブの TTL は 3 です。デバイス 11A は TTL を 2 に設定し、デバイス 7A に転送します。デバイス7AはTTLを1に設定し、パケットをデバイス7Bに転送します。デバイス7BはTTLを0に設定し、ICMP「time exceeded」メッセージで応答します。
*Dec 29 13:13:57.088: IP: s=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.4.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.4.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.1.1.1, len 56, forward
*Dec 29 13:14:00.092: ICMP type=3, code=3
この debug コマンドの出力には、最後の 3 つの UDP プローブが含まれています。これらのプローブの元の TTL は 4 でした。TTL は、デバイス 11A によって 3 に設定され、次にデバイス 7A によって 2 に、さらにデバイス 7B によって 1 に設定されました。デバイス7Cは、プローブの宛先であるため、ICMP「port unreachable」メッセージで応答します。
注:デバイス7Cは、レートの制限により、2つのICMP「port unreachable」メッセージのみを送信します。
Linux がインストールされた PC
[root#linux-pc]#traceroute -n 10.1.4.2
traceroute to 10.1.4.2 (10.1.4.2), 30 hops max, 40 byte packets
1. 10.1.1.2 1.140 ms 0.793 ms 0.778 ms
2. 10.1.2.2 2.213 ms 2.105 ms 3.491 ms
1. 10.1.3.2 3.146 ms 2.314 ms 2.347 ms
1. 10.1.4.2 3.579 ms * 2.954 ms
rp-11a-7204#
*Jan 2 07:17:27.894: IP: s=10.1.1.2 (local), d=10.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=10.1.1.2 (local), d=10.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=10.1.1.2 (local), d=10.1.1.1 (Ethernet4/0),
len 56, sending
*Jan 2 07:17:27.894: ICMP type=11, code=0
このデバッグ出力では、デバイス11Aがプローブの送信元(10.1.1.1)にICMP「time exceeded」メッセージを送信しています。これらの ICMP メッセージは、TTL が 1 である最初のプローブに対する応答です。デバイス11AはTTLを0に設定し、「time exceeded」メッセージで応答します。
次の 2 つの理由により、この debug コマンドの出力には UDP が表示されていません。
-
デバイス 11A が UDP プローブの宛先ではない。
-
TTL が 0 に設定されたため、パケットがこれ以上ルーティングされない。このため、デバッグではパケットが認識されない。
*Jan 2 07:17:27.894: IP: s=10.1.1.1 (Ethernet4/0), d=10.1.4.2(FastEthernet0/0),
g=10.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=10.1.2.2 (FastEthernet0/0), d=10.1.1.1(Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2(FastEthernet0/0),
g=10.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=10.1.2.2 (FastEthernet0/0), d=10.1.1.1(Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2(FastEthernet0/0),
g=10.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=10.1.2.2 (FastEthernet0/0), d=10.1.1.1(Ethernet4/0),
g=10.1.1.1, len 56, forward
*Jan 2 07:17:27.902: ICMP type=11, code=0
注:このデバッグ出力には、送信元10.1.1.1から宛先10.1.4.2までのUDPプローブが示されています。
注:これらのプローブでは、TTL=2です(これはdebugでは確認できません)。デバイス 11A は TTL を 1 に設定し、UDP パケットをデバイス 7A に転送します。デバイス7AはTTLを0に設定し、ICMPの「time exceeded」メッセージで応答します。
*Jan 2 07:17:27.902: IP: s=10.1.1.1 (Ethernet4/0), d=10.1.4.2(FastEthernet0/0),
g=10.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=10.1.3.2 (FastEthernet0/0), d=10.1.1.1(Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2(FastEthernet0/0),
g=10.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=10.1.3.2 (FastEthernet0/0), d=10.1.1.1(Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2(FastEthernet0/0),
g=10.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=10.1.3.2 (FastEthernet0/0), d=10.1.1.1(Ethernet4/0),
g=10.1.1.1, len 56, forward
*Jan 2 07:17:27.910: ICMP type=11, code=0
この debug コマンドの出力には、次の 3 つの UDP プローブが表示されます。これらのプローブの TTL は 3 です。デバイス 11A は TTL を 2 に設定し、デバイス 7A に転送します。デバイス7AはTTLを1に設定し、パケットをデバイス7Bに転送します。デバイス7BはTTLを0に設定し、ICMP「time exceeded」メッセージで応答します。
*Jan 2 07:17:27.910: IP: s=10.1.1.1 (Ethernet4/0), d=10.1.4.2(FastEthernet0/0),
g=10.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=10.1.4.2 (FastEthernet0/0), d=10.1.1.1(Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2(FastEthernet0/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2(FastEthernet0/0),
g=10.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=10.1.4.2 (FastEthernet0/0), d=10.1.1.1(Ethernet4/0),
g=10.1.1.1, len 56, forward
*Jan 2 07:17:32.914: ICMP type=3, code=3
この debug コマンドの出力には、最後の 3 つの UDP プローブが表示されます。これらのプローブの元の TTL は 4 でした。TTL は、デバイス 11A によって 3 に設定され、次にデバイス 7A によって 2 に、さらにデバイス 7B によって 1 に設定されました。
デバイス7Cはプローブの宛先であるため、ICMP「port unreachable」メッセージで応答します。
注:デバイス7Cは、レート制限により、2つのICMP「port unreachable」メッセージのみを送信します。
MS Windowsが稼働しているPC
C:\>tracert 10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.4.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.4.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.4.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.2 (local), d=10.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=10.1.1.2 (local), d=10.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=10.1.1.2 (local), d=10.1.1.1 (Ethernet4/0),
len 56, sending
*Dec 29 14:02:26.752: ICMP type=11, code=0
このデバッグ出力では、デバイス11Aがプローブの送信元(10.1.1.1)にICMP「time exceeded」メッセージを送信しています。これらの ICMP メッセージは、最初のプローブ、つまり TTL が 1 である ICMP エコー要求パケットに対する応答です。デバイス 11A は TTL を 0 に設定し、ICMP メッセージを返します。
注:上部にNETBIOS名の要求が表示されます。これらの要求は、送信元と宛先のポートが 137 である UDP パケットとして表示されています。分かりやすくするために、以降の debug コマンドの出力では、NETBIOS パケットが削除されています。NETBIOSの動作を無効にするには、 -d コマンドの tracert オプションを使用します。
次の 2 つの理由により、この debug コマンドの出力には ICMP が表示されていません。
-
デバイス 11A が ICMP プローブの宛先ではない。
-
TTL が 0 に設定されたため、パケットがこれ以上ルーティングされない。このため、デバッグではパケットが認識されない。
*Dec 29 14:02:32.256: IP: s=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.2.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.2.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.2.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.1.1.1, len 56, forward
*Dec 29 14:02:32.264: ICMP type=11, code=0
この debug コマンドの出力には、送信元 10.1.1.1 から宛先 10.1.4.2 までの ICMP プローブが示されています。
注:これらのプローブでは、TTL=2(これはdebugでは確認できません)です。デバイス11AはTTLを1に設定し、UDPパケットをデバイス7Aに転送します。デバイス7AはTTLを0に設定し、ICMPの「time exceeded」メッセージで応答します。
*Dec 29 14:02:37.776: IP: s=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.3.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.3.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.3.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.1.1.1, len 56, forward
*Dec 29 14:02:37.784: ICMP type=11, code=0
この debug コマンドの出力には、次の 3 つの ICMP プローブがあります。これらのプローブの TTL は 3 です。デバイス 11A は TTL を 2 に設定し、デバイス 7A に転送します。デバイス7AはTTLを1に設定し、パケットをデバイス7Bに転送します。デバイス7BはTTLを0に設定し、ICMP「time exceeded」メッセージで応答します。
*Dec 29 14:02:43.292: IP: s=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.4.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.4.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.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=10.1.1.1 (Ethernet4/0), d=10.1.4.2 (FastEthernet0/0),
g=10.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=10.1.4.2 (FastEthernet0/0), d=10.1.1.1 (Ethernet4/0),
g=10.1.1.1, len 92, forward
*Dec 29 14:02:43.304: ICMP type=0, code=0
この debug コマンドの出力には、最後の 3 つの ICMP プローブが表示されます。これらのプローブの元の TTL は 4 でした。TTL は、デバイス 11A によって 3 に設定され、次にデバイス 7A によって 2 に、さらにデバイス 7B によって 1 に設定されました。次に、デバイス 7C はプローブの宛先であるため、ICMP エコー応答メッセージ(タイプ = 0、コード = 0)を返しています。
注:ICMPエコー応答メッセージは、ICMP「port unreachable」メッセージとは異なり、レート制限されません。この場合、送信された 3 つの ICMP エコー応答メッセージはすべて表示されます。
追加情報
Ciscoルータでは、
traceroute コマンド応答
のコードは次のとおりです。
! -- success
* -- time out
N -- network unreachable
H -- host unreachable
P -- protocol unreachable
A -- admin denied
Q -- source quench received (congestion)
? -- unknown (any other ICMP message)
UNIXから
traceroute コマンド
を実行する場合は、次の点に注意してください。
-
次の情報を受信できます traceroute: icmp socket: Permission denied というメッセージが表示されます。
-
この traceroute プログラムは、Network Interface Tap(NIT)に依存してネットワーク内をスヌープしています。このデバイスにアクセスできるのはルートだけです。プログラムをルートとして実行するか、ユーザ ID にルートを設定する必要があります。
要約
このドキュメントでは、
traceroute コマンドを使用して、特定の送信元から宛先までパケットが辿るパスを確認する方法を、UDPパケットとICMPパケットを使用して説明しました。出力には、次のタイプの ICMP メッセージが含まれることがあります。
-
type = 11、code = 0 - 転送中に TTL が 0 になった場合。プローブ パケットが宛先に到着する前に、その TTL が 0 になった場合は、転送ルータによってパケットが返送されます。
-
type = 3、code =3 - ポートに到達できなかった場合。UDP プローブ パケットが宛先に到達すると、その UDP プローブ パケットに応答してパケットが返送されます(UDP アプリケーションが定義されていない場合)。このパケット数は、500 ms につき 1 つに制限されています。このパケットには、宛先からの応答(Cisco ルータと Linux での出力を参照)が失敗した理由が示されています。デバイス7CはICMPメッセージを生成せず、 traceroute 各デバイスのコマンド出力は、1秒以上待機します。MS Windowsの場合 tracert コマンドの出力では、UDPポート137がシスコルータに存在しないため、ICMPメッセージが生成されます。
-
type=8、code=0 - エコーがある場合。エコー プローブ パケットは、MS Windows PC によって送信されます。
-
type=0、code=0 - エコー応答がある場合。宛先に到達すると、前のパケットに対する応答が送信されます。これは、MS Windowsにのみ適用されます tracert コマンドを使用して、アップグレードを実行します。
関連情報
改定 | 発行日 | コメント |
---|---|---|
2.0 |
16-Oct-2023 |
再認定 |
1.0 |
11-Apr-2002 |
初版 |