LDPとは
**LDP(ラベル配布プロトコル)**は、、MPLS(Multi-Protocol Label Switching)ネットワークにおいて、ラベルの自動配布と管理を行うプロトコルです。LDPは、MPLSルーター間でラベル情報を交換し、パケットをラベルベースで転送するためのラベルスイッチパス(LSP: Label Switched Path)を確立します。これにより、従来のIPネットワークがラベルに基づいた高速な転送を実現します。
LDPの役割
LDPは、IGP(Interior Gateway Protocol)によって学習されたルーティング情報に基づいて、各経路に対応するラベルを生成し、隣接するルーターとラベルを交換します。このラベルを使用して、MPLSネットワーク内でパケットがスイッチングされ、転送されます。
具体的な役割は以下の通りです。
- ラベルの生成と配布: 各MPLS対応ルーターは、IPルーティングテーブルのエントリに対してラベルを生成します。LDPはそのラベルを隣接するルーターに対して配布します。
- LSP(Label Switched Path)の確立: LDPは、隣接するルーター同士がラベル情報を交換することで、ラベルスイッチパス(LSP)を自動的に確立します。このLSPを経由して、パケットが効率的に転送されます。
- 対称的なラベル交換: LDPでは、隣接ルーター間で双方向にラベルが交換されます。これにより、送信と受信の両方の経路に対してラベルスイッチングが機能します。
- シンプルな構成: LDPは、RSVP-TE(Resource Reservation Protocol with Traffic Engineering)のようなトラフィックエンジニアリング機能を持たないため、構成が比較的シンプルです。基本的なラベルスイッチングを実現するためのプロトコルとして広く使用されています。
LDPの動作手順
LDPは、次のような手順で動作します。
- LDPセッションの確立: 隣接するルーター間でTCPセッション(デフォルトでポート646)を確立し、LDPセッションを開始します。
- ラベル情報の交換: 各ルーターが自身のルーティングテーブルに基づいてラベルを生成し、そのラベルをLDPを使って隣接するルーターに配布します。隣接ルーターも同様にラベルを配布します。
- ラベルスイッチパス(LSP)の確立: 隣接するLDPピア間でラベルが交換され、ネットワーク全体にわたってパケットを転送するためのLSPが確立されます。
- ラベルスイッチングによるパケット転送: LDPで確立されたLSPを使用して、パケットはラベル情報に基づいてスイッチングされ、宛先に向けて転送されます。
LDPの設定方法
基本構文
MPLS ホップバイホップ転送をグローバルに設定します。
mpls ipコマンドはデフォルトで有効になっているため、このコマンドを指定する必要はありません。
Device(config)#mpls ip
MPLSネットワークにおいて使用するラベル配布プロトコルを指定します。
Device(config)#mpls label protocol [ldp | tdp | both]
コマンド 内容 ldp LDP(Label Distribution Protocol)を使用します。LDPは、MPLSネットワークにおいて最も一般的に使用されるラベル配布プロトコルです。 tdp TDP(Tag Distribution Protocol)は、かつてCiscoが使用していたMPLSのための独自のプロトコルですが、現在はほとんど使用されていません。 both LDPとTDPの両方を使用します。TDPがまだ存在するレガシー環境において、互換性を維持するために使用することがあります。
インターフェイス上で MPLS ホップバイホップ転送を設定します。インターフェイスとデバイスの両方で MPLS 転送を有効にする必要があります。
Device(config)#interface type number
Device(config-if)#mpls ip
LDPルータIDの指定
mpls ldp router-id コマンドを使用すると、インターフェイスの IP アドレスを LDP ルータ ID として設定できます。
通常のLDPルータID決定プロセス:
- すべての動作インターフェイスの IP アドレスを考慮。
- ループバックインターフェイスのアドレスが含まれている場合、最大のループバックアドレスを選択。ループバックアドレスは安定しているため、LDP ID も安定。
- ループバックインターフェイスがシャットダウンされている場合や、他のインターフェイスが指定されている場合は、それらを選択。
- ループバックアドレスがない場合は、最大のインターフェイスアドレスを選択。
LDP ルータ ID を決定するための優先インターフェイスを指定します。
Device(config)#mpls ldp router-id interface [force]
MPLS LDP 明示的ヌルによる QoS 設定の保持
通常、MPLSでは最終ホップのルーターが「Implicit Null(暗黙的なNull)」ラベルを使い、ラベルが手前のホップでポップされ、宛先に到達する前にラベルが削除されます。この動作を「Penultimate Hop Popping (PHP)」と呼びます。Implicit Nullラベルを使うことで、宛先のルーターはラベルを処理せずにパケットを処理します。
一方、mpls ldp explicit-null コマンドを使用すると、最終ホップに「Explicit Null」ラベル(値0または値2)が送信されます。Explicit Nullを使用することで、最終ホップのルーターが受け取ったパケットにラベルが存在し、QoSなどのラベルベースの情報を使ってパケットを処理することが可能になります。
通常は暗黙的な Null ラベルをアドバタイズする状況で、明示的な Null ラベルをアドバタイズします。
Device(config)#mpls ldp explicit-null [for prefix-acl | to peer-acl | for prefix-acl to peer-acl]
MD5 認証による LDP ピア間のデータ保護
LDPピア間の認証を有効にすることで、TCP接続で送信される各セグメントを検証できます。認証には両方のLDPピアで同じパスワードを設定する必要があり、異なるパスワードではピアセッションが確立されません。
認証にはMD5アルゴリズムが使用され、通信の整合性とメッセージの送信元を検証します。認証を有効にするには、mpls ldp neighbor passwordコマンドを使用します。
ネイバーパスワードが設定されると、デバイスは既存のLDPセッションを切断し、新しいセッションを確立します。片方のデバイスにのみパスワードが設定されている場合や、異なるパスワードが設定されている場合、LDPセッションは確立されず、エラーメッセージが表示されます。
2 つの LDP ピア間の認証を指定します。
Device(config)#mpls ldp neighbor [vrf vpn-name] ip-address [password [0-7] password-string]
MPLS LDP 動作確認

MPLS LDPの設定をします。
Router1(config)#int Gi0/2
Router1(config-if)#mpls ip
Router1(config-if)#exit
Router1(config)#mpls ldp router-id Loopback1 force
Router2(config)#int range Gi0/1,Gi0/3
Router2(config-if-range)#mpls ip
Router2(config-if-range)#exit
Router2(config)#mpls ldp router-id Loopback2 force
Router3(config)#int range Gi0/2,Gi0/4
Router3(config-if-range)#mpls ip
Router3(config-if-range)#exit
Router3(config)#mpls ldp router-id Loopback3 force
Router4(config)#int Gi0/3
Router4(config-if)#mpls ip
Router4(config-if)#exit
Router4(config)#mpls ldp router-id Loopback4 force
LDPネイバーが確立していることを確認できます。

MPLS pingを実行します。問題なく疎通ができます。

MPLS tracerouteを実行します。

ラベル18が付与されていることが確認できます。
192.168.23.3のルータ(Router3)で暗黙的なNullラベルが付与されています。これは最後のホップの直前で、ラベルが削除される(ポップされる)動作を表していて、この場合、ラベルが次のホップに渡されないため、次のルーターは通常のIP転送としてパケットを処理します。