# Multiprotocol Label Switching

Dans les réseaux informatiques et les télécommunications, Multiprotocol Label Switching (MPLS) est un mécanisme de transport de données basé sur la commutation de labels (des « étiquettes »), qui sont insérés à l'entrée du réseau MPLS et retirés à sa sortie.
À l'origine, cette insertion s'opère entre la couche de liaison de données (niveau 2) et la couche réseau (niveau 3) afin de transporter des protocoles comme IP. C'est pourquoi MPLS est qualifié de protocole de couche « 2,5 » ou « 2 / 3 ».
Ce protocole a évolué pour fournir un service unifié de transport de données pour les clients en utilisant une technique de commutation de paquets. MPLS peut être utilisé pour transporter pratiquement tout type de trafic, par exemple la voix ou des paquets IPv4, IPv6 et même des trames Ethernet ou ATM. Ainsi, MPLS permet d'acheminer sur une unique infrastructure différents types de trafic tout en les isolant.
L'utilisation de labels dits de transport permet au routeur de départ, pour chaque paquet, de déterminer à la source le routeur de sortie du réseau, sans que les routeurs intermédiaires aient besoin de consulter une table de routage volumineuse lors de la transmission du paquet.
Le fonctionnement de MPLS est notamment défini dans la RFC 3031.

## Historique

* 1994 : Toshiba présente des idées de routeur de commutation de cellules (Cell Switch Router) à l'IETF BOFF
* 1996 : Ipsilon, Cisco et IBM annoncent leur plan de label switching
* 1997 : Création du groupe de travail IETF MPLS
* 1999 : Premiers déploiements MPLS VPN (L3VPN) et TE.
* 2000 : Ingénierie du trafic MPLS
* 2001 : Publication de la première demande de commentaires (Request for Comments) pour MPLS.
* 2002 : AToM (L2VPN)
* 2004 : GMPLS ; grande échelle L3VPN
* 2006 : TE "Harsh" à grande échelle
* 2007 : Grande échelle L2VPN
* 2009 : Label Switching Multicast
* 2011 : Profil de transport MPLS
L'idée de MPLS est apparue en 1996 d'un groupe d'ingénieurs de Ipsilon Networks. À l'origine, la technologie n'était prévue pour fonctionner que sur ATM, ce qui limita sa place sur le marché. Cisco Systems proposa ensuite l'idée de ne pas limiter MPLS à l'ATM et créa le Tag Switching (et un protocole TDP de distribution des tags [étiquettes]), qui sera ensuite renommé en Label Switching pour la standardisation par l'IETF en tant que MPLS (et son protocole de distribution des labels : LDP).

## Introduction

Deux groupes de travail ont été désignés par l'IETF pour combler les lacunes d'IP : un groupe consacré à la sécurité travaillant sur l'IPSec et l'autre consacré au routage travaillant sur MPLS. Comme son sigle (MPLS) l'indique, ses caractéristiques sont :
* multiprotocol (multi-protocoles) : il est capable de supporter les différents protocoles de niveau inférieur, au sens OSI (ATM, Frame relay…)
* label switching (commutation par label) : il se base sur un label ou identifiant pour la commutation des paquets. Ce label est attribué aux paquets par l'équipement PE (Provider Edge) lors de leur entrée dans l'infrastructure MPLS.

## Fonctionnement
### Commutation de labels
#### Labels

Un en-tête MPLS est composé d'un ou plusieurs éléments de 4 octets chacun, les labels. Ce ou ces labels forment un empilement ou « pile » de labels, le Label Stack. Le nombre de labels dans le Stack dépendra des services MPLS utilisés.
Cet en-tête MPLS est inséré dans un paquet juste après l'en-tête de couche 2 (par exemple Ethernet, dont le champ Ethertype indiquera alors un contenu de type MPLS), et donc avant le protocole de couche 3 (au sens du modèle OSI) comme par exemple IP.

##### Format

Un label comporte 32 bits (4 octets), divisés en :
* valeur du label (20 bits)
* Traffic Class (classe de trafic) pour la gestion de la QoS (qualité de service) (3 bits)
* 1 bit S «Bottom of Stack», indiquant s'il s'agit du dernier label dans le paquet (sinon, ce label est lui-même suivi d'un autre label)
* TTL (Time to Live), valeur positionnée selon le champ TTL du paquet IP ou à une valeur par défaut par le routeur d'entrée du nuage MPLS, et décrémentée à chaque saut, permettant ainsi lorsque le TTL arrive à 0 de détruire les paquets qui seraient victimes d'une boucle de routage (8 bits)
MPLS Label :
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| Label | Label | Label | Label | Label | Label | Label | Label | Label | Label | Label | Label | Label | Label | Label | Label | Label | Label | Label | Label | TC: Traffic Class (QoS) | TC: Traffic Class (QoS) | TC: Traffic Class (QoS) | S: Bottom-of-Stack | TTL: Time-to-Live | TTL: Time-to-Live | TTL: Time-to-Live | TTL: Time-to-Live | TTL: Time-to-Live | TTL: Time-to-Live | TTL: Time-to-Live | TTL: Time-to-Live |

##### Valeurs

Les labels de 0 à 15 sont réservés à des usages spécifiques (RFC 3032 et RFC 7274). On trouvera notamment :
* 0: IPv4 Explicit Null Label : utilisé notamment dans le cadre de l'« Ultimate Hop Popping » (UHP) – voir plus bas
* 2: IPv6 Explicit Null Label : utilisé notamment dans le cadre de l'« Ultimate Hop Popping » (UHP) – voir plus bas
* 3: Implicit Null Label : utilisé dans le cadre de la signalisation du « Penultimate Hop Popping » (PHP) – mais jamais visible dans un label (ce label correspond en réalité à une absence de label) – voir plus bas

#### Principes

MPLS fonctionne par commutation de labels. Des chemins entre PE (Provider Edge) sont établis de façon manuelle (action d'un administrateur dans le plan d'administration) ou automatique (via un protocole de signalisation comme LDP — Label Distribution Protocol — dans le plan de contrôle). Ces chemins sont appelés des LSP (Label Switched Paths).
Les routeurs MPLS sont les LSR (Label Switch Router), et sont de type PE (Provider Edge) ou P (Provider). Par extension, les routers CE (Customer Edge) sont les routeurs du client avant que son trafic ne pénètre dans le « nuage » MPLS du fournisseur par les routeurs PE.
Un chemin MPLS étant toujours unidirectionnel, on fait la différence en MPLS entre les routeurs d'entrée (PE ou iLSR — ingress Label Switch Router), de transit (P-router pour Provider router), et de sortie (PE ou eLSR — egress Label Switch Router).

##### Routeur PE d'entrée

Le routeur PE d'entrée a pour rôle d'encapsuler le trafic reçu sur ses interfaces « clients ». Il applique (au moins) un label au paquet reçu (« imposition » de label, ou push) et l'envoie vers une de ses interfaces sortantes.
Pour créer le label, le routeur utilise les FEC (Forwarding Equivalence Class), qui sont des tables de correspondances dont les clefs sont un élément du paquet (adresse MAC, adresse IP, Class of Service, port TCP/UDP, etc.). Une FEC est donc un groupe de paquets transférés vers la même interface de sortie et avec les mêmes critères de transmission (donc un type de flux vers un LSP).

##### Routeurs P

Le paquet atteint ensuite des commutateurs de transit (P-router) ou de sortie (PE-router). Ceux-ci possèdent une table de commutation (la Label Information Base$^,$) comportant quatre entrées :
* Deux clefs :
** label MPLS en entrée
** bit S (Bottom of Stack) à 0 ou 1 (pour savoir dans quel contexte la valeur du label est applicable)
* Deux valeurs :
** label MPLS :
*** de sortie : dans ce cas le routeur remplace le label (swap), ou
*** retrait du label : dans ce cas le routeur retire le label (« disposition » du label, ou pop)
** adjacence de sortie du paquet (interface, routeur suivant...)

##### Routeur PE de sortie

Le dernier routeur PE reçoit (d'un P-router, ou du premier PE-routeur, selon la topologie du réseau MPLS) :
* un paquet IPv4 ou IPv6 non labellisé (qui est dans ce cas simplement routé), ou
* un paquet labellisé, qu'il décapsule pour la dernière fois conformément à sa Label Information Base.

#### Intérêt initial

L'opération de commutation est donc extrêmement simple, puisqu'il suffit d'analyser le label MPLS qui se trouve directement après l'en-tête de la trame de niveau 2 (Ethernet), ou dans l'équivalent de la cellule/trame de niveau 2 (VPI/VCI de l'ATM, DLCI du Frame Relay, etc.). Il n'est donc pas nécessaire d'extraire le paquet IP et de parcourir l'ensemble de la table de routage. Toutefois, si cet argument était à l'origine de la création de MPLS, il a perdu beaucoup de poids, car l'augmentation de la puissance des routeurs et l'avènement de nouvelles puces dédiées permettent largement de parcourir la table de routage IP à chaque nouveau paquet. Ce sont donc les autres possibilités attribuées à MPLS qui en font une technique de plus en plus utilisée, et notamment les services qu'il peut apporter.

#### PHP / UHP

Dans le cadre des spécifications initiales de MPLS, pour le transport d'IPv4 sans VPN, le principe de disposition du label à l'avant dernier saut « Penultimate Hop Popping » (PHP) a été retenu. Ainsi l'avant-dernier routeur est censé supprimer le label et envoyer le paquet « nu » au PE de sortie, afin d'économiser à celui-ci un examen non-seulement de l'adresse IP de destination (ce qu'il doit faire de toute façon), mais aussi de traitement du label. Dans ce mécanisme, la valeur de label annoncée entre les routeurs (mais non-utilisée réellement, car le label est en fait supprimé) est la valeur 3 « implicit-null ».
L'utilité de cette optimisation n'est plus vraiment d'actualité (de la même façon que les arguments initiaux pour MPLS – traitement facilité pour les routeurs). Certains services MPLS (notamment traitement de bout-en-bout de la QoS et 6PE) peuvent amener à décider le maintien d'un label y compris entre l'avant-dernier et le dernier routeur MPLS de sortie, dans le cadre d'un mécanisme de disposition du paquet au dernier saut « Ultimate Hop Popping » (UHP)$^,$. Certaines valeurs de labels ont notamment été réservées à cet effet (« explicit-null »).

### Distribution des labels et protocoles

Si la configuration manuelle des chemins MPLS (les LSP – Label Switched Path) est toujours possible, elle s'avère très fastidieuse pour l'administrateur, c'est pourquoi la plupart du temps un protocole de signalisation est utilisé pour établir ces LSP et distribuer les labels au sein du nuage MPLS entre les routeurs. On trouvera notamment les protocoles suivants :
* Label Distribution Protocol (LDP) est le protocole classiquement utilisé
* Dans le cadre des services MPLS de traffic engineering (création de tunnels virtuels entre routeurs MPLS, dont le parcours entre les routeurs est décidé à l'avance et/ou selon des critères autres que ceux du routage classique) :
** Resource Reservation Protocol - Traffic Engineering (RSVP-TE) : des extensions spécifiques sont rajoutées au protocole existant RSVP (initialement conçu pour la réservation de bande passante)
** Extensions Traffic Engineering pour les protocoles de routage interne (IGP) :
*** OSPF-TE
*** IS-IS-TE
* Extensions au protocole de routage externe BGP / MP-BGP$^,$, notamment dans le cadre de la mise en œuvre de services de VPN MPLS.
Contrairement à la pile TCP/IP, MPLS n'est pas un protocole de bout en bout. Il définit seulement une façon d'encapsuler des protocoles de couche 3 (IPv4 comme IPv6), de couche 2 (Ethernet, PPP, ATM, Frame Relay entre autres), et même de couche 1 (PDH, SDH). Cette notion d'encapsulation explique qu'un même type de protocole (exemple : Ethernet) puisse à la fois être transporté sur MPLS (dans le cadre d'un VPN de niveau 2), et servir au transport de ce même MPLS.

### Utilisation des labels

Un paquet peut avoir un ou plusieurs labels à la fois. Les labels :
* entre les routeurs MPLS adjacents et servant à commuter les paquets d'un routeur à un autre sont des labels de transit ;
* entre des routeurs MPLS PE servant à identifier des services MPLS (des VPN de niveau 2 ou 3 par exemple) sont des labels de service.
On pourra trouver par exemple, dans le cadre d'un VPNv4 (VPRN) un paquet IPv4 avec un label de service identifiant le VPN (positionné par le PE d'entrée suivant une valeur reçue depuis le PE de sortie, par exemple en MP-BGP), et un label de transit changé entre chaque routeur.
Dans certains cas, on peut avoir encore plus de labels sur un même paquet (labels liés au raccordement entre deux nuages MPLS, ou transport tunnelisé en MPLS de paquet eux-mêmes MPLS dans le cadre de service « Carrier over Carrier »).

## Déploiement

MPLS est actuellement utilisé dans de grands réseaux. En pratique, MPLS est principalement utilisé pour transporter des datagrammes IP et du trafic Ethernet.

## Services MPLS

MPLS peut notamment être utilisé pour mettre en œuvre des services (notamment de type VPN) dans le nuage MPLS :
* VPN de niveau 3 (L3VPN / VPRF), permettant de créer des réseaux IPv4 et/ou IPv6 (technologie 6VPE) étanches entre-eux sur le même réseau MPLS (et donc les mêmes routeurs), en permettant l'extension et la propagation de VRF (Virtual routing and forwarding – tables de routage virtuelles) sur l'ensemble du réseau MPLS
* VPN de niveau 2 (L2VPN), permettant de fournir des liens privés virtuels point à point (Pseudo-wires$^,$) ou des LAN virtuels (VPLS$^,$, EVPN...) transportant des trames de niveau 2 (par exemple Ethernet)
* Transport de paquets IPv6 à travers un nuage MPLS IPv4 (technologie 6PE)
* Gestion de qualité de service (QoS)$^,$ dans le nuage MPLS, indépendamment du marquage QoS des paquets ou trames des clients. La valeur de classe de service est transportée par un champ Traffic Class de 3 bits (anciennement EXPerimental) dans le ou les labels MPLS. Dans ce contexte, l'utilisation de l'Ultimate Hop Popping (UHP) est nécessaire.
Note : on oppose parfois les VPN MPLS qui permettent de garantir un niveau de qualité de service et les VPN via Internet qui assurent confidentialité et intégrité des données transportées par un mécanisme de chiffrement :
* MPLS est une technique de commutation sur un réseau donné : il peut assurer l'étanchéité des VPN sur le nuage MPLS, et la qualité de service peut être garantie car l'opérateur du réseau MPLS le maîtrise de bout en bout.
* Le VPN sur Internet est une technique de tunnel IP. Aucune QoS ni confidentialité ne peuvent être garanties sur Internet ; toutefois le chiffrement rend ces données indéchiffrables par un observateur et garantit leur intégrité, et ce VPN n'est pas limité à un nuage MPLS donné.

## Techniques complémentaires (applications réseaux opérateurs & grandes entreprises)

La majorité des grands opérateurs utilise aujourd’hui MPLS dans la partie centrale de leur réseau pour assurer l’ingénierie de trafic et la qualité de service. En revanche, l’extension de MPLS à l’accès et dans la partie métropolitaine du réseau est moins avancée. Cette solution, si elle est techniquement viable, introduit dans de nombreux cas un ensemble de difficultés liées à la gestion et à l'évolutivité du réseau, qui en fin de compte augmentent le coût et la complexité d'exploitation mais dégradent aussi la fiabilité. Plusieurs solutions alternatives ont été proposées parmi lesquelles :
* Transport MPLS (T-MPLS) : Le principe est de définir un sous-ensemble de MPLS en masquant certaines de ses complexités, et donc ses problèmes de coûts et de scalabilité.
* Provider VLAN Transport (PVT), également appelé « brassage de VLAN », VLAN cross connect ou VLAN-xc
* Provider Backbone Bridging Traffic Engineering (PBB-TE), également connu sous le nom de Provider Backbone Transport (PBT).
Pour éviter des redites, voir les articles détaillés correspondants.

## Concurrents

Dans le cadre des VPN, L2TPv3 et Provider Backbone Bridge apparaissent en tant que technologies concurrentes à MPLS, particulièrement dans les réseaux IP.
On peut aussi noter l'existence de la technologie IEEE 1355 qui est également de la commutation de label mais de façon matérielle.