MPLS(Multiprotocol Label Switching)は、通信事業者のネットワークで広く使われている転送技術です。パケットに「ラベル」という短い番号を付け、ルーターはそのラベルを見て転送します。CCNP ENARSIのVPN分野で、MPLSの動きとL3VPNの基本が問われます。
先に結論から
- MPLSでは、パケットの先頭に付けたラベルを見て転送します。
- ラベルは、ネットワークの入口で付け(プッシュ)、途中で付け替え(スワップ)、出口の手前で外します(ポップ)。
- ラベルの情報は、主にLDPというプロトコルでルーター同士が交換します。
- MPLS L3VPNでは、VRF・RD・RTを使って、お客さまごとのネットワークを分けます。
MPLSのラベル
ラベルは、レイヤー2のヘッダーとIPヘッダーの間に入る32ビットの情報です。
| 項目 | 長さ | 役割 |
|---|---|---|
| ラベル | 20ビット | 転送先を決める番号 |
| TC(Traffic Class) | 3ビット | QoSに使う |
| S(Bottom of Stack) | 1ビット | いちばん下のラベルかどうか |
| TTL | 8ビット | ループを防ぐ |
ラベルは重ねて付けられます(ラベルスタック)。L3VPNでは、転送用のラベルとVPN用のラベルの2枚を重ねて使います。
ルーターの役割

| 役割 | 説明 |
|---|---|
| CE(Customer Edge) | お客さま側のルーター。MPLSは使わない |
| PE(Provider Edge) | 事業者ネットワークの入口・出口。ラベルを付けたり外したりする |
| P(Provider) | 事業者ネットワークの内部。ラベルを付け替えて転送する |
ラベルの付け外しの流れ

- プッシュ:入口のPEが、IPパケットにラベルを付けます。
- スワップ:途中のPが、ラベルを次のルーター用の番号に付け替えて転送します。
- ポップ:ラベルを外します。多くの場合、出口のPEの1つ手前のルーターが外します(PHP:Penultimate Hop Popping)。
PHPを使うと、出口のPEはラベルを外す作業をせずにIPパケットとして処理できるので、負荷が減ります。出口のPEは、手前のルーターに「ラベルを外して送って」と伝えるために、特別なラベル(implicit null、値は3)を広告します。
ラベルを交換するLDP
LDP(Label Distribution Protocol)は、ルーター同士で「この宛先にはこのラベルを使って」という情報を交換するプロトコルです。隣のルーターの発見にはUDP、情報の交換にはTCPを使い、どちらもポート646です。
interface GigabitEthernet0/1
mpls ip
インターフェースでmpls ipを設定すると、LDPが動き始めます。確認にはshow mpls ldp neighborやshow mpls forwarding-tableを使います。
MPLS L3VPNの基本
| 用語 | 役割 |
|---|---|
| VRF | PEの中で、お客さまごとに経路表を分ける |
| RD(Route Distinguisher) | 同じIPアドレスでも区別できるように、経路に付ける識別子 |
| RT(Route Target) | どのVRFに経路を取り込むかを決めるタグ |
| MP-BGP | PE同士で、お客さまの経路(VPNv4経路)を交換する |
VRFそのものの仕組みは、VRF-Liteの記事で解説しています。
よくある質問
MPLSのラベルは何ビットですか?
ラベルの番号は20ビットです。TC、S、TTLを含めたラベル全体(シム)は32ビットです。
PHPとは何ですか?
Penultimate Hop Poppingの略で、出口のPEの1つ手前のルーターがラベルを外す動きです。出口のPEの負荷を減らせます。
RDとRTの違いは何ですか?
RDは同じアドレスの経路を区別するための識別子、RTはどのVRFに経路を取り込むかを決めるタグです。
