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

MPLS での traceroute コマンド

2015 年 11 月 26 日 - 機械翻訳について
その他のバージョン: PDFpdf | ライター翻訳版 (2004 年 3 月 22 日) | 英語版 (2015 年 8 月 22 日) | フィードバック


目次


概要

このドキュメントでは、マルチプロトコル ラベル スイッチング(MPLS)環境で、traceroute コマンドがどのように動作するかについて説明します。

前提条件

要件

次の項目に関する知識があることが推奨されます。

  • MPLS の基礎知識

詳細については、『初心者向けの MPLS の FAQ』を参照してください。

使用するコンポーネント

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

表記法

ドキュメント表記の詳細は、『シスコ テクニカル ティップスの表記法』を参照してください。

通常の traceroute コマンド

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

/image/gif/paws/26585/mpls_traceroute1.gif

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

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

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

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

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

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

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

  5. R1 は ICMP メッセージを受信し、TTL 値に 3 を設定した別の IP パケットを、その 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 はパケットをドロップし、通常の IP パケットと同様に、TTL 期限切れ ICMP メッセージを作成します。 この場合、ICMP メッセージ パケットは MPLS の ICMP 拡張ごとに生成されます。

  3. R2 は、ICMP メッセージにラベル 47(期限が切れた受信ラベル)を付加します。 R2 は、R1 に直接パケットを送信しません。 代わりに、ラベル転送情報ベース(LFIB)を参照し、ラベル 47 で受信したパケットにラベル 45 を使用する必要があることを認識します。 R2 は、パケットにラベル 45 を設定し、TTL 期限切れ ICMP メッセージを R3 に送信します。

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

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

    /image/gif/paws/26585/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 によって受信される最初のパケットは、R2(元のパケットを受信したインターフェイスである 10.13.2.33)から R1(10.13.2.34)への TTL 期限切れ ICMP メッセージです。 ICMP メッセージのデータ部分の、バイト 0x89 と 0x8A の最初のニブルで、MPLS ラベル(20 バイト)が期限切れになっており、その値は 0x02F(47)です。 これは、TTL が 1 であるパケットの受信ラベルです。R2 はこのラベルを ICMP エラー メッセージに追加します。

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

  6. R1 は ICMP メッセージを受信すると、次のパケットをラベル 47、TTL 2 で R2 に送信します。 R2 はラベルを置き換えて、TTL を(2 から 1 に)減分し、R3 に転送します。 手順 2 で、R3 は、期限切れとなった受信ラベルを追加した TTL 期限切れ 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. R1 は、ICMP メッセージを受信すると、ラベルが 47、TTL が 3 の別のパケットを送信します。 途中で、R2 と R3 が TTL を減分し、R4 にパケットを転送します。 R4 は、R4 自体が対象受信者であることを識別し、UDP データグラム ポートが到達不能であることを確認します。 R4 は、R3 と R2 を介して、ICMP の port unreachable メッセージを 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 は、ICMP タイプ destination unreachable とコード 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 で、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-exceeded メッセージが送信元に送信されます。

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

  3. Router B は MPLS ヘッダー内の TTL 値を減分して、パケットをドロップし、ICMP TTL-exceeded メッセージを送信元に送信します。 これはドロップされた MPLS パケットであるため、ICMP メッセージの返信アドレスは MPLS パケット内部の IP ヘッダーにある送信元アドレスから取得する必要があります。 ただし、実際には Router B がその IP アドレスを知らない可能性があるため、Router B は、ドロップされるパケットが辿ったのと同じラベル スイッチド パス(LSP)に沿って(Router C に向かう方向に)、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 が調べられます。

IP TTL プロパゲーションが、グローバル コンフィギュレーション モードで no mpls ip propagate-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 をコピーしません。 その結果、次の動作が発生します。

  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 に減分し、MPLS ラベルを削除し、MPLS ヘッダーの TTL 値を IP ヘッダーの TTL フィールドにコピーします。

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

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

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


関連情報


Document ID: 26585