マルチプロトコル ラベル スイッチング(MPLS) : MPLS

MPLS での traceroute コマンド

2004 年 3 月 22 日 - ライター翻訳版
その他のバージョン: PDFpdf | 機械翻訳版 (2013 年 8 月 21 日) | 英語版 (2005 年 12 月 29 日) | フィードバック

目次

概要
前提条件
     要件
     使用するコンポーネント
     表記法
通常の traceroute コマンド
MPLS traceroute コマンド
no mpls ip propagate-ttl コマンド
関連するシスコ サポート コミュニティ ディスカッション
関連情報

概要

この文書では、Multiprotocol Label Switching(MPLS)環境で、どのように traceroute コマンドが動作するかを説明します。

前提条件

要件

この文書の読者は、次のことについて理解している必要があります。

  • MPLS の基礎的な知識

詳細については、『ビギナーのためのQ&A:MPLS』を参照してください。

使用するコンポーネント

この文書は、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。

表記法

文書表記の詳細については、『シスコ テクニカル ティップスの表記法』を参照してください。

通常の traceroute コマンド

このセクションでは、従来の traceroute コマンドがどのように動作するかを説明します。 次に示すサービス プロバイダーの設定では、Router 1(R1)と Router 4(R4)がプロバイダー エッジ(PE)ルータで、Router 2(R2)と Router 3(R3)がプロバイダー(P)ルータです。

mpls_traceroute1.gif

この例では、R1 から R4 ループバック 14 に traceroute を実行しています。 R1 は、32000 より大きい値の任意の宛先ポートの値で User Datagram Protocol(UDP)データグラムを使用しています。ポート番号にこのように大きい値を選択すると、対象の受信側には、確実にこのポートは存在していないはずです。 ここで、このデータグラムは IP パケットに置かれます。

注:この文書で IP パケットについて言及する場合は、常に UDP データグラムを格納した IP パケットを意味します。

次は、通常の traceroute コマンドの一連のイベントです。

  1. R1 は宛先アドレスが 14 で Time to Live(TTL; 存続可能時間)が 1 の IP パケットを R1 の eth1 インターフェイスから送信します。

  2. R2 でこのパケットが受信されると、R2 自体が対象受信者ではないことと、パケットの TTL が 1 であることが識別されます。R2 はこのパケットをドロップし、TTL-expired Internet Control Message Protocol(ICMP)メッセージを R1 に送信します。 この ICMP メッセージの送信元アドレスは、R2 eth0 の IP アドレスです(オリジナルのパケットを受信したインターフェイスのアドレス)。

  3. ICMP メッセージを受信すると、R1 は宛先が 14 で TTL が 2 である別の IP パケットを R1 の eth1 インターフェイスから送信します。

  4. R2 はパケットを受信して R2 自体が対象受信者ではないことと、対象受信者には R3 経由で到達できることを識別します。 R2 は TTL を(2 から 1 に)減分して、パケットを R3 に転送します。 R3 はパケットを受信して、R3 自体が対象受信者ではないことを認識します。 この TTL は 1 です。R3 はパケットをドロップし、TTL-expired ICMP メッセージを送信元アドレスを eth0 として R1 に送信します。

  5. R1 は、この ICMP メッセージを受信すると、次の IP パケットを TTL 値 3 で eth1 インターフェイスから宛先 14 に送信します。途中、R2 と R3 は、TTL を減分して R4 に渡します。 R4 はパケットを受信して、R4 が対象受信者であることを確認し、UDP データグラムにあるポート値に接続を試行します。 R4 はこのポートが存在しないことを確認して、ICMP port unreachable エラー メッセージを R1 に送信します。

    以前と同様に、この ICMP メッセージの送信元アドレスは R4 の eth0 です。 これで、この traceroute プログラムは、対応する送信元アドレスが含まれたすべての ICMP エラー メッセージと、宛先への完全なルートを取得できました。

MPLS traceroute コマンド

前述の「通常の traceroute コマンド」セクションで説明したシナリオと同じシナリオで、R1 から R4 のすべてのルータが IP 転送ではなくラベル スイッチングを実行している場合を取り上げます。 テスト ベッド設定を次に示します。 テスト ベッドのすべてのインターフェイスは、10.13.0.0 ネットワーク内にあります。

mpls_traceroute2.gif

この文書の目的に合わせて、次のような前提になっています。

  • R1 は R4 に到達するために 47 のラベルを使用し、パケットを R2 に転送します。

  • R2 は R4 に到達するために 45 のラベルを使用し、パケットを R3 に転送します。

  • R3 はラベルを取り去り、R4 にパケットを転送します。

  • R4 は R1 に到達するために 28 のラベルを使用し、パケットを R3 に転送します。

  • R3 は R1 に到達するために 26 のラベルを使用し、パケットを R2 に転送します。

  • R2 はラベルを取り去り、R1 にパケットを転送します。

次の手順では、R1 から R4 ループバック 10.13.1.51 に traceroute を実行した場合の一連のイベントを示します。

  1. R1 はラベルが 47 で TTL が 1 のラベル スイッチングされたパケットを R2 に送信します。 この IP パケットの TTL フィールドは、ラベル ヘッダーの TTL フィールドにコピーされます。

  2. R2 はこのパケットを受信すると、R2 自体が対象受信者ではないことと、パケットの TTL が 1 であることを認識します。R2 はパケットをドロップし、TTL-expired の ICMP メッセージを通常の IP パケットに対するのと同様に作成します。 このケースでは、MPLS の ICMP 拡張ごとに ICMP メッセージ パケットが生成されます。

  3. R2 は、ICMP メッセージにラベル 47(期限が切れた受信ラベル)を付加します。 R2 は、直接には R1 へパケットを送信しません。 その代わり、このパケットのラベル転送情報ベース(Label Forwarding Information Base; LFIB)を参照して、47 のラベルで受信されたパケットには 45 のラベルを使用する必要があることを確認します。次にこのパケットに 45 のラベルを付けて、TTL-expired の ICMP メッセージを R3 に送信します。

  4. R3 はラベルを取り去り、パケットを R4 に転送します。 R4 は宛先が R1 であることを確認し、メッセージに 28 のラベルを付けて R3 と R2 経由で R1 に送信します。

  5. ICMP エラー メッセージは、もう一方の端までのすべての経路を通過してから R1 に送り返されます。 この例を次に図示します。

    mpls_traceroute3.gif

    R4 のイーサネット インターフェイス上にあるスニファ パケットで、上記の手順 1 〜 5 を確認します。 次のスニファ出力では、Frame 1 が受信パケットで、Frame 2 が R4 からの発信パケットです。 出力は、この説明を反映した形式になっており、注意する点は太字で示されています。

     Frame 1 (182 on wire, 182 captured)
     Ethernet II 
     Destination: 00:04:4e:7a:74:00 (Cisco_7a:74:00)
     Source: 00:03:fd:1c:86:84 (Cisco_1c:86:84)
     Type: IP (0x0800)
     Internet Protocol 
     Version: 4 
     Header length: 20 bytes 
     Time to live: 254 
     Protocol: ICMP (0x01) 
     Header checksum: 0x1b8e (correct)
     Source: 10.13.2.33 (10.13.2.33)
     Destination: 10.13.2.34 (10.13.2.34) 
     Internet Control Message Protocol
     Type: 11 (Time-to-live exceeded) 
     Code: 0 (TTL equals 0 during transit)
     Checksum: 0x0c88 (correct) 
     Data (140 bytes) 
     04500 001c 9e19 0000 0111 044a 0a0d 0222E..........J..."
     100a0d 0133 989d 829a 0008 cd37 0000 0000...3.......7....  
     200000 0000 0000 0000 0000 0000 0000 0000................  
     300000 0000 0000 0000 0000 0000 0000 0000................ 
     400000 0000 0000 0000 0000 0000 0000 0000................ 
     500000 0000 0000 0000 0000 0000 0000 0000................
     600000 0000 0000 0000 0000 0000 0000 0000................ 
     700000 0000 0000 0000 0000 0000 0000 0000................ 
     802000 edf2 0008 0101 0002 f101........... 
     Frame 2 (186 on wire, 186 captured) 
     Ethernet II 
     Destination: 00:03:fd:1c:86:84 (Cisco_1c:86:84)
     Source: 00:04:4e:7a:74:00 (Cisco_7a:74:00) 
     Type: MPLS label switched packet (0x8847)
     MultiProtocol Label Switching Header 
     MPLS Label: Unknown (28) 
     MPLS Experimental Bits: 6 
     MPLS Bottom Of Label Stack: 1 
     MPLS TTL: 253 
     Internet Protocol 
     Version: 4 
     Header length: 20 bytes 
     Time to live: 253 
     Protocol: ICMP (0x01)
     Header checksum: 0x1c8e (correct)
     Source: 10.13.2.33 (10.13.2.33) 
     Destination: 10.13.2.34 (10.13.2.34) 
     Internet Control Message Protocol 
     Type: 11 (Time-to-live exceeded) 
     Code: 0 (TTL equals 0 during transit)
     Checksum: 0x0c88 (correct) 
     Data (140 bytes) 
     04500 001c 9e19 0000 0111 044a 0a0d 0222E..........J..." 
     100a0d 0133 989d 829a 0008 cd37 0000 0000...3.......7.... 
     200000 0000 0000 0000 0000 0000 0000 0000................ 
     300000 0000 0000 0000 0000 0000 0000 0000................ 
     400000 0000 0000 0000 0000 0000 0000 0000................ 
     500000 0000 0000 0000 0000 0000 0000 0000................ 
     600000 0000 0000 0000 0000 0000 0000 0000................ 
     700000 0000 0000 0000 0000 0000 0000 0000................ 
     802000 edf2 0008 0101 0002 f101........... 
     

    上記の出力の Frame 1 では、R4 が受信した最初のパケットは、TTL-expired の ICMP メッセージで、R2(10.13.2.33、元のパケットが受信されたインターフェイス)から R1(10.13.2.34)に送信されたものです。 ICMP メッセージのデータ部分(0x89 のバイトと 0x8A の先頭ニブル)では、MPLS ラベル(20 バイト)が期限切れで、値は 0x02F または 47 です。これは、パケットの入ラベルで TTL は 1 です。R2 は、このラベルを ICMP エラー メッセージに付加します。

    上記の出力の Frame 2 では、typeMPLS label switched packet として示されていますが、これは MPLS パケットであることを意味します。 R4 は 28 のラベルを Frame 1 に付加し、これをラベルスイッチド パス経由で R1 に転送します。 フレーム内の MPLS ヘッダーは太字で示されています。 また、パケットの TTL 部分を見ると、この値は Frame 1 では 254 であり、Frame 2 では 253 です。R4 により、1 つ減分されています。

  6. R1 は ICMP メッセージを受信すると、次のパケットをラベル 47、TTL 2 で R2 に送信します。 R2 はラベルを置き換えて、TTL を(2 から 1 に)減分し、R3 に転送します。 手順 2 のように、R3 は TTL-expired の ICMP メッセージに期限切れの入ラベルを付けて R4 に送信し、R4 はこれを R1 に送り返します。

    次に示す R4 のスニファ出力で手順 6 を確認します。

     Frame 3 (182 on wire, 182 captured)
     Ethernet II 
     Destination: 00:04:4e:7a:74:00 (Cisco_7a:74:00) 
     Source: 00:03:fd:1c:86:84 (Cisco_1c:86:84) 
     Type: IP (0x0800) 
     Internet Protocol 
     Version: 4 
     Header length: 20 bytes 
     Time to live: 255 
     Protocol: ICMP (0x01) 
     Header checksum: 0x146f (correct) 
     Source: 10.13.3.134 (10.13.3.134) 
     Destination: 10.13.2.34 (10.13.2.34) 
     Internet Control Message Protocol 
     Type: 11 (Time-to-live exceeded) 
     Code: 0 (TTL equals 0 during transit)
     Checksum: 0x0c88 (correct) 
     Data (140 bytes) 
     04500 001c 9e1b 0000 0211 0348 0a0d 0222E..........H..."  
     100a0d 0133 9292 829b 0008 d341 0000 0000...3.......A.... 
     200000 0000 0000 0000 0000 0000 0000 0000................ 
     300000 0000 0000 0000 0000 0000 0000 0000................ 
     400000 0000 0000 0000 0000 0000 0000 0000................ 
     500000 0000 0000 0000 0000 0000 0000 0000................ 
     600000 0000 0000 0000 0000 0000 0000 0000................ 
     700000 0000 0000 0000 0000 0000 0000 0000................
     802000 0df3 0008 0101 0002 d101........... 
     Frame 4 (186 on wire, 186 captured) 
     Ethernet II 
     Destination: 00:03:fd:1c:86:84 (Cisco_1c:86:84) 
     Source: 00:04:4e:7a:74:00 (Cisco_7a:74:00) 
     Type: MPLS label switched packet (0x8847) 
     MultiProtocol Label Switching Header 
     MPLS Label: Unknown (28) 
     MPLS Experimental Bits: 6 
     MPLS Bottom Of Label Stack: 1 
     MPLS TTL: 254 
     Internet Protocol 
     Version: 4 
     Header length: 20 bytes 
     Time to live: 254 
     Protocol: ICMP (0x01) 
     Header checksum: 0x156f (correct) 
     Source: 10.13.3.134 (10.13.3.134) 
     Destination: 10.13.2.34 (10.13.2.34) 
     Internet Control Message Protocol 
     Type: 11 (Time-to-live exceeded) 
     Code: 0 (TTL equals 0 during transit) 
     Checksum: 0x0c88 (correct) 
     Data (140 bytes) 
     04500 001c 9e1b 0000 0211 0348 0a0d 0222E..........H..."
     100a0d 0133 9292 829b 0008 d341 0000 0000...3.......A....  
     200000 0000 0000 0000 0000 0000 0000 0000................ 
     300000 0000 0000 0000 0000 0000 0000 0000................ 
     400000 0000 0000 0000 0000 0000 0000 0000................  
     500000 0000 0000 0000 0000 0000 0000 0000................ 
     600000 0000 0000 0000 0000 0000 0000 0000................ 
     700000 0000 0000 0000 0000 0000 0000 0000................ 
     802000 0df3 0008 0101 0002 d101........... 
     

    上記の Frame 3 出力から、Frame 3 は R3 から R1 への ICMP パケットであることがわかります。 送信元アドレス(10.13.3.134)は、元のパケットが受信されたアドレスです。 ICMP エラー メッセージには、データ部分の末尾に期限切れラベルの情報が含まれています。 この値は 0x02d、つまり 45 です。Frame 4 は、R4 から R1 に送信された MPLS パケットです。

  7. ICMP メッセージを受信すると、R1 は次のパケットをラベル 47、TTL 値 3 で送信します。途中、R2 と R3 は TTL を減分して、R4 にパケットを転送します。 R4 は、R4 自体が対象受信者であることを識別し、UDP データグラム ポートが到達不能であることを確認します。 R4 は ICMP port unreachable メッセージを R3 および R2 経由で R1 に送信します。

    このスニファ出力では、重要な点は太字で示されています。

     Frame 5 (60 on wire, 60 captured)
     Ethernet II 
     Destination: 00:04:4e:7a:74:00 (Cisco_7a:74:00)
     Source: 00:03:fd:1c:86:84 (Cisco_1c:86:84) 
     Type: IP (0x0800) 
     Trailer: 00000000000000000000000000000000... 
     Internet Protocol 
     Version: 4 
     Header length: 20 bytes 
     Time to live: 1 
     Protocol: UDP (0x11) 
     Header checksum: 0x0446 (correct) 
     Source: 10.13.2.34 (10.13.2.34)
     Destination: 10.13.1.51 (10.13.1.51) 
     User Datagram Protocol 
     Source port: 37647 (37647) 
     Destination port: 33436 (33436) 
     Length: 8 
     Checksum: 0xd2c3 (correct) 
     Frame 6 (74 on wire, 74 captured) 
     Ethernet II 
     Destination: 00:03:fd:1c:86:84 (Cisco_1c:86:84) 
     Source: 00:04:4e:7a:74:00 (Cisco_7a:74:00)
     Type: MPLS label switched packet (0x8847) 
     MultiProtocol Label Switching Header 
     MPLS Label: Unknown (28) 
     MPLS Experimental Bits: 6 
     MPLS Bottom Of Label Stack: 1 
     MPLS TTL: 255 
     Internet Protocol 
     Version: 4 
     Header length: 20 bytes 
     Time to live: 255 
     Protocol: ICMP (0x01) 
     Header checksum: 0x5694 (correct) 
     Source: 10.13.5.10 (10.13.5.10) 
     Destination: 10.13.2.34 (10.13.2.34) 
     Internet Control Message Protocol 
     Type: 3 (Destination unreachable) 
     Code: 3 (Port unreachable) 
     Checksum: 0x1485 (correct)
     Data (28 bytes) 
     04500 001c 9e1d 0000 0111 0446 0a0d 0222E..........F..." 
     100a0d 0133 930f 829c 0008 d2c3...3........ 
     

    Frame 5 には、UDP データグラムが R1 から R4 に送信されたことが示されています。 「通常の traceroute コマンド」セクションで説明されているように、UDP データグラム内の宛先ポートの値は 33436(32000 より大きい)です。

    Frame 6 では、R4 は destination unreachable ICMP タイプと port unreachable コードを R1 に送信します。 最初の方での R2 から R3 への ICMP メッセージでは、すべて、time-to-live exceeded に設定されたタイプ フィールドがありました。 拡張 traceroute コマンドの出力を次に示します。

    R1#traceroute 
     Protocol [ip]:  
     Target IP address: 10.13.1.51 
     Source address: 10.13.2.34 
     Numeric display [n]:  
     Timeout in seconds [3]:
     Probe count [3]: 1 
     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.13.1.51
     1 10.13.2.33 [MPLS: Label 47 Exp 0] 0 msec 
     2 10.13.3.134 [MPLS: Label 45 Exp 0] 0 msec
     3 10.13.5.10 4 msec 
     R1# 
     

    デフォルトでは、traceroute コマンドでは各 TTL 値について 3 つのプローブが使用されます。 TTL 1 で 3 つのパケットを送信し、TTL 2 で 3 つのパケットを送信するというように続きます。 この traceroute コマンドは単一のプローブで発行されるので、トレースやデバッグが容易です。 上記の出力に示されているように、traceroute コマンドでは、期限切れラベルの値も表示されます。

no mpls ip propagate-ttl コマンド

MPLS の設定時には、IP パケットが MPLS ドメインに転送される際に、ラベル スイッチ ルータ(LSR)によってラベルが付加されます。 このラベルは、TTL フィールドに値が含まれている必要があります。 デフォルトでは、LSR は着信パケットの IP ヘッダーの TTL フィールドを読み取って 1 減分し、残りの値を MPLS ヘッダーの TTL フィールドにコピーします。 コア LSR が確認するのは、最上位のラベルだけです。 TTL の値が 0 に達していない場合、このパケットは転送されます。 ラベルを取り去る出力エッジ LSR は、ラベルの TTL フィールドに残った値を IP ヘッダーの TTL フィールドにコピーし、この IP パケットを MPLS ドメインの外部に転送します。

no mpls ip propagate-ttl 設定コマンドを発行すると、この動作を変更できます。 入力エッジ LSR では、ラベルの TTL 値として 255 が付加されます。 出力エッジ LSR では、ラベルを取り去る際に、ラベルの TTL 値は IP ヘッダーにコピーされません。 最終結果では、IP ヘッダーの TTL には MPLS コアを通過時のホップは反映されないため、ネットワークの片側からもう一方の側に traceroute コマンドを実行しても、MPLS コア ネットワーク内のルータは、traceroute 情報には表示されません。 入力エッジの LSR と出力エッジの LSR の両方で、TTL 伝搬を無効にしておくことが重要です。 このようにしないと、IP ヘッダーの値は、MPLS ドメインに入ったときより出るときの方が大きくなる可能性があります。

この例を次に示します。

mpls_traceroute4.gif

C1 は、C2 への traceroute を実行します。 デフォルトの IP TTL 伝搬オペレーションでは、C1 の traceroute は次のようになります。

C1#traceroute C2.cust.com
 Tracing the route to C2.cust.com
   1 A.provider.net       44 msec  36 msec  32 msec
   2 B provider.net      164 msec  132 msec  128 msec
   3 C.provider.net	148 msec  156 msec  152 msec
   4 C2.cust.com         180 msec  *  181 msec

この出力は、MPLS ネットワークでの通常の traceroute の動作を示しています。 ラベル付きパケットのラベル ヘッダーには、元の IP パケットからの TTL 値が含まれており、TTL を超過したパケットは経路内のルータでドロップされます。 したがって、traceroute によってパス内のすべてのルータが表示されます。 動作は次のようになります。

  1. 最初のパケットは TTL 1 の IP パケットです。Router A で TTL が減分され、0 に到達したためにパケットがドロップされます。ICMP TTL 超過メッセージが送信元に送信されます。

  2. 2 番目に送信されたパケットは TTL 2 の IP パケットです。Router A で TTL が減分され、パケットにラベルが付加されて Router B に転送されます。

  3. Router B は MPLS ヘッダー内の TTL 値を減分して、パケットをドロップし、ICMP TTL-exceeded メッセージを送信元に送信します。 これはドロップされた MPLS パケットであるため、ICMP メッセージの返信アドレスは MPLS パケット内部の IP ヘッダーにある送信元アドレスから取得する必要があります。 しかし、この IP アドレスは実際には Router B には知られていない可能性があり、Router B では、ドロップされたパケットが(Router C へ向かって)移動したラベル スイッチド パス(LSP)と同じパスを経由するように ICMP メッセージを転送します。 LSP の最後で、ラベルが削除されて、ICMP メッセージは IP ヘッダー内の宛先アドレスに従って(Router C1 に向けて)転送されます。

  4. 3 番目のパケット(TTL は 3)についても前のパケットに類似した処理が行われますが、この時点の Router C は IP ヘッダー内の TTL に基づいてパケットをドロップしているところが異なっています。 Router B では最後から 2 番目のホップでのポッピングであるため、それ以前にラベルが削除されており、TTL は IP ヘッダーにコピーされています。

  5. 4 番目のパケット(TTL は 4)は、最終的な宛先に到達し、IP ヘッダーの TTL が調べられます。

グローバル設定モードで no mpls ip propagate-ttl コマンドにより IP TTL 伝搬が無効にされる場合は、TTL 値は IP ヘッダーにコピーされず、C1 から C2 への traceroute は次のようになります。

C1#traceroute C2.cust.com
 Tracing the route to C2.cust.com
   1 A.provider.net   44 msec  36 msec  32 msec
   2 C2.cust.com     180 msec  *  181 msec

この状況で traceroute コマンドを使用すると、ICMP 応答は IP ヘッダーに格納された実際の TTL を確認可能なルータだけから受信されます。 この状況では、(上記のように)Router C1 は traceroute コマンドを実行していますが、コア ルータはラベルから TTL をコピーしたり、ラベルに TTL をコピーしたりすることはありません。 この結果は、次のような動作になります。

  1. 最初のパケットは TTL が 1 の IP パケットです。Router A は TTL を減分してパケットをドロップし、ICMP TTL-exceeded メッセージを送信元に送信します。

  2. 2 番目に送信されたパケットは TTL が 2 の IP パケットです。Router A は TTL を減分し、パケットにラベルを付加して MPLS ヘッダーの TTL を 255 に設定します。

  3. Router B は MPLS ヘッダーの TTL を減分して 254 とし、TTL を 254 に設定したラベル付きのパケットを転送します。

  4. Router C はラベルを削除して IP TTL を減分し、このパケットをネクスト ホップである Router C2 に送信します。 このパケットは最終的な宛先に到達しました。


関連するシスコ サポート コミュニティ ディスカッション

シスコ サポート コミュニティは、どなたでも投稿や回答ができる情報交換スペースです。


関連情報


Document ID: 26585