# Multiprotocol Label Switching

Nelle telecomunicazioni, Multiprotocol Label Switching (MPLS) è una tecnologia per reti IP che permette di instradare flussi di traffico multiprotocollo tra nodo di origine (Ingress Node) e nodo di destinazione (Egress Node) tramite l'utilizzo di identificativi (label) tra coppie di router adiacenti e semplici operazioni sulle etichette stesse. Le specifiche tecniche del protocollo sono state pubblicate dall'Internet Engineering Task Force nell'RFC 3031 e nell'RFC 3032.

## Storia

Nel 1996 una compagnia di Ipsilon Networks rilasciò un RFC chiamato 'flow management protocol' progettato esclusivamente per reti ATM, il quale però non riscontrò successo. L'azienda Cisco, dopo aver visionato il progetto, lo rese applicabile a tutti i protocolli e lo chiamò "Tag Switching", ridenominato poi "Label Switching". Il progetto fu consegnato all'Internet Engineering Task Force grazie al quale coinvolse molti venditori e proposte di altri sviluppatori per la realizzazione di un protocollo standardizzato che combinava le caratteristiche di ognuno.
La proposta originale consisteva nella creazione di switch ad alta velocità, poiché dopo un certo lasso di tempo il buffer di pacchetti IP inoltrabili via hardware si riempiva. Tuttavia i progressi dei VLSI resero possibile tutto ciò. Pertanto, i vantaggi di MPLS riguardano principalmente la capacità di supportare più protocolli ed eseguire la gestione del traffico.

## Descrizione

MPLS preserva la possibilità di instaurare una connessione tra nodi interni adiacenti della rete di trasporto, che contraddistingueva i protocolli Frame Relay e ATM su medesima rete, ma associa a questa possibilità di instradamento anche l'instradamento classico basato su IP tramite tabelle di routing cioè a commutazione di pacchetto (senza connessione), implementando questi due tipi di commutazione su apparati unici cioè Router IP/MPLS (anziché impiegare separatamente Router IP ai bordi e Switch ATM nel core) e con la conseguente possibilità di mantenere un controllo unico e diretto sull'instradamento scegliendo il più opportuno in base alla congestione della rete (operando cioè ingegneria del traffico in alternativa ai classici protocolli di routing), e garantendo così grande flessibilità alla rete. Infatti, con il protocollo ATM, su rete di trasporto, era possibile un'unica modalità di instradamento basata sulle connessioni o su percorsi virtuali.
Per creare connessioni nei nodi interni, MPLS aggiunge un'etichetta (label) ai pacchetti IP da instradare, e suddivide, in generale, l'instradamento complessivo prima con un instradamento IP ai bordi o frontiera della rete tramite router MPLS/IP che inseriscono l'etichetta sul pacchetto IP in transito inoltrandoli ai router interni e poi con un instradamento a commutazione di etichetta nei router MPLS all'interno della rete in maniera simile a quanto accadeva già nelle reti ATM. La commutazione interna basata su una tabella di associazione pacchetto/etichetta risulta essere computazionalmente più efficiente ovvero più veloce rispetto all'instradamento tramite tabelle di routing consentendo di ottenere throughput più elevati.
Preventivamente all'utilizzo delle label per inoltrare il traffico, MPLS prevede che il percorso, detto Label Switched Path, debba essere valido e instaurabile. Tutti i nodi interessati devono poter concordare la sequenza di identificativi da utilizzare hop-by-hop. Nella variante MPLS-TE (Traffic Engineering) viene inoltre controllata la congruità tra capacità disponibile tra origine e destinazione e la capacità richiesta.
MPLS è quindi in sostanza una tecnologia d'ausilio all'instradamento IP che, invece di richiedere a ciascun nodo di controllare la propria tabella di routing per stabilire l'interfaccia d'uscita del traffico, permette di stabilire, controllando la label d'ingresso, quali siano le label e l'interfaccia d'uscita per il traffico. Dato che MPLS aggiunge una nuova intestazione al traffico IP e lo invia al nodo adiacente, secondo il livello due della pila ISO/OSI viene spesso definito protocollo di livello 2,5.
Il comportamento di MPLS è analogo quindi a quello di tecnologie di rete come Frame Relay e ATM, ma non richiede un livello 2 dedicato: questo comporta quindi una rilevante semplificazione nella gestione della rete che è ora unica a livello 3 anziché distinta in due diverse reti, a livello 3 ai bordi e livello 2 all'interno, come accadeva invece con IP su ATM. Rispetto ad ATM inoltre, non impone una dimensione fissa e piccola in cui l'unità di informazione debba essere frammentata, ovvero i 48 byte utili che con l'header diventavano 53 byte di cella. Diversamente da ATM, però, non possiede classi a garanzia di servizio come il Constant Bit-Rate, che permette alle reti ATM di emulare circuiti trasmissivi su reti a celle.
MPLS è anche il protocollo su cui sono stati costruiti MPLS-TE (Traffic Engineering), VPLS (Virtual Private Lan Service), HVPLS (Hierarchical VPLS), VPWS (Virtual Private Wire Service, con l'utilizzo dell'incapsulamento Pseudo-wire), EoMPLS (Ethernet over MPLS) e le MP-BGP VPN.
L'idea di associare a un flusso origine-destinazione una rappresentazione più semplice, era già presente in proposte di Ipsilon Networks (ma per trasportare IP su reti ATM) e Cisco Systems (con il proprio Cisco Express Forwarding, ancora oggi prerequisito per MPLS, e il tag-switching).

### Requisiti di MPLS

Dovendo associare flussi a percorsi, MPLS richiede che esista un protocollo di routing interno che generi in modo unico il percorso, e che altresì fornisca la vista topologica della rete su cui opera.
All'interno dell'Autonomous System (AS) è necessaria e sufficiente l'adozione di un protocollo di routing interno e di un protocollo di distribuzione delle label. Nel caso di comunicazione da AS ad AS invece, vengono utilizzate speciali estensioni a BGP per segnalare oltre che blocchi IP anche label MPLS. Nel caso di protocolli interni di tipo link state, che seguono l'algoritmo di Dijkstra per i cammini minimi, è possibile scegliere le metriche d'arco che l'IGP utilizza normalmente, oppure aggiungere alle metriche esistenti, metriche specifiche per il calcolo degli shortest-path per MPLS.
La presenza di percorsi multipli di ugual peso (ECMP, Equal Cost MultiPath) è trattata in modo specifico dai vari fornitori di tecnologia, ma in generale si può supporre che venga utilizzato almeno un percorso tra quelli disponibili.
Affinché il router sorgente possa ottenere dal router di destinazione l'instaurazione “all'indietro” della sequenza di label sul percorso, è necessario che sia disponibile nell'AS il protocollo di distribuzione delle label (LDP) e per MPLS-TE il protocollo RSVP con le estensioni per Traffic-Engineering (RSVP-TE).

### Funzionamento

MPLS inserisce un nuovo header a 32 bit che viene anteposto all'header del datagramma IP che deve essere trasportato sul percorso. L'header (shim header) è composto da:
* 20 bit riservati per la label
* 3 bit di priorità di "Traffic Class": si tratta di un campo per il QoS (quality of service) e ECN (Explicit Congestion Notification). Prima del 2009, era noto come experimental bits
* 1 bit per indicare se oltre alla prima label ne esistano altre successive (bit di stack); in questo caso è settato a 0. Invece, se è stato raggiunto il fondo dello stack, questo campo è settato a 1
* 8-bit per il TTL, più conosciuto come "time to live".
Il router di ingresso al dominio MPLS (detto anche Label Egde Router, LER) impone questo header al traffico associabile al Label Switched Path e lo inoltra sulla interfaccia d'uscita che appartiene al percorso identificato. I nodi intermedi (detti anche Label Switching Router, LSR) ricevono la trama ed effettuano lo scambio di label (label swapping) transitando il traffico tra le loro interfacce d'ingresso e d'uscita. Il router di uscita dal dominio MPLS riceve il traffico con l'header MPLS imposto dal penultimo router e lo toglie, scegliendo quindi dalla propria tabella di routing IP la destinazione finale.
In breve, il router di ingresso inserisce (Push) l'header, i router intermedi scambiano (Swap) le label e il router di uscita toglie (Pop) l'header MPLS.
Dato che è possibile definire una gerarchia di header (tramite il bit di stack), esiste anche la possibilità che il penultimo hop possa rimuovere la label più esterna in alcuni casi specifici. Questo è chiamato Penultimate-Hop-Popping, PHP.

### Tipi di Label Switched Paths (LSP)

In generale, identificato il percorso tramite la selezione del percorso minimo tra origine e destinazione (tramite le normali metriche IGP o tramite metriche ad hoc), MPLS permette che il traffico a esso associato possa venire inoltrato lungo il cammino tramite labels.
È possibile avere maggior granularità sul controllo del percorso stesso tramite MPLS Traffic Engineering. In questo caso, i percorsi su cui costruire le classi di equivalenza sono fondamentalmente di due tipi: impliciti (con o senza nodi imposti in modo lasco, loose, o forte, strict) o espliciti (l'intero percorso è specificato hop by hop). Nel caso di percorsi impliciti vengono utilizzate le metriche fornite dalle estensioni per MPLS del protocollo di routing sottostante (come IS-IS o OSPF) che eventualmente possono essere specifiche per MPLS e quindi diverse dalle metriche d'arco impostate per il solo routing.
È data la facoltà all'operatore di rete di definire inoltre attraverso quali nodi comunque un percorso debba passare e la forza del vincolo imposto. È utile notare che in mancanza di tecniche di Operation, Administration and Maintenance (OAM) intrinseche in MPLS qualora un arco o un nodo fallisca, l'abbattimento dell'LSP sarà generato da un cambio della topologia fornita dall'IGP.
Per ovviare ai tempi di ri-convergenza dell'IGP e garantire la protezione del traffico è stata offerta la possibilità di garantire che un percorso principale possa essere protetto da un percorso secondario, preinstallato in rete alla creazione del primo definito di Fast-Reroute (FRR). MPLS-FRR garantisce che qualora il percorso principale fallisca il traffico venga portato sulla protezione con tempi paragonabili alla ri-convergenza di tecnologie come SDH, quindi sotto i 50 millisecondi.
Infine, nel calcolo dei percorsi di backup è stata aggiunta la possibilità di definire gruppi di rischio condivisi. Ad esempio qualora più link condividano la medesima tratta in fibra ottica il rischio che falliscano assieme è rappresentabile nel sistema di scelta dei percorsi alternativi.

## MPLS e DiffServ

Il vantaggio maggiore dell'utilizzo combinato di MPLS con Diffserv è la possibilità di avere una gestione dinamica della QoS. Requisiti fondamentali per fornire QoS è l'utilizzo di classi di servizio e un'adeguata allocazione della banda per ogni classe di servizio. Tuttavia ci sono diversi inconvenienti. Prima di tutto DiffServ è di livello 3 mentre MPLS è fondamentalmente un protocollo di livello 2; secondariamente c'è il problema dell'isolamento del traffico e della gestione fisica della banda disponibile. Per quanto concerne l'implementazione di DiffServ nell'header MPLS, la IETF ha proposto nell'RFC 3270 i due metodi spiegati di seguito.

### E-LSP

Con l'utilizzo dei 3 bit del campo EXP (experimental bits) per mappare i 6 bits del Differentiated Services Code Point (DSCP) (che codificano i possibili PHB (Per-Hop Behaviour)) è possibile una mappatura parziale che permette solo $2^{3}=8$ valori e quindi altrettante classi di servizio. Il nome E-LSP deriva dall'utilizzo del Label Switched Path e del campo EXP dell'header MPLS. È da notare che al momento per la mappatura tra PHB e EXP bits non ci sono regole definite.

### L-LSP

Chiaramente la soluzione alla restrizione a 8 possibili classi di priorità introdotte da E-LSP è l'utilizzo del campo Label dell'header. In questo modo particolari Label identificano non solo le path ma anche particolari PHB. Inoltre gli EXP bits possono essere utilizzati per altri scopi, come finanche l'utilizzo combinato di L-LSP con E-LSP. Il nome L-LSP è semplicemente l'acronimo di Label-inferred LSP.

## MPLS Traffic Engineering

Nell'RFC 3564 la IETF introduce il concetto di Class Type (CT) atto fondamentalmente a tradurre la banda riservata a ciascun PHB data l'implementazione di DiffServ in MPLS. Per semplicità si prenderà in considerazione l'utilizzo specifico di E-LSP in modo tale da avere 8 CT (numero ampiamente sufficiente nella maggioranza dei casi), quindi da CT0 che rappresenta il best effort a CT7 che rappresenta il massimo livello di garanzia di QoS per il traffico entro la nuvola MPLS (di solito Voip o applicazioni real-time).
La distribuzione della banda tra i vari CTx è espressa in percentuale sul totale disponibile e ogni valore di banda associato al singolo CTx è detto Bandwidth Constraint (BC). La relazione tra BC e CT può avere diverse politiche di attuazione, o più precisamente si può basare su diversi modelli di cui due sono i principali: il Maximum Allocation Model (MAM) e il Russian Dolls Model (RDM).

### Maximum Allocation Model (MAM)

In questo modello ogni BC è associato a un unico CT e quindi la banda totale è divisa strettamente tra i vari CTx. Questo modello favorisce l'isolamento del traffico e permette l'associazione di quantità di banda variabili a seconda del CT, ma proprio per l'isolamento perfetto, un CTx non potrà mai usare la banda libera di un CTy qualora ne abbia bisogno.

### Russian Dolls Model (RDM)

Il modello a matrioška permette una condivisione dinamica della banda disponibile tra i vari CT garantendo tuttavia la QoS per quei CTx a priorità via via più elevata. In questo tipo di approccio solo il CT7 (a massima priorità) ha un BC7 fissato e a uso esclusivo; tutti gli altri CT sono in comune e seguono lo schema per cui il BC6 può essere usato dal CT7 e dal CT6; il BC5 può essere usato dal CT7, dal CT6 e dal CT5; il BC4 può essere usato dal CT7, dal CT6, dal CT5 e dal CT4; ecc. I vantaggi in questo caso sono evidenti: c'è un uso più dinamico della rete e la QoS è garantita più facilmente pur tuttavia perdendo il perfetto isolamento del traffico evidenziato invece dal Maximum Allocation Model.

## Evoluzioni di MPLS

MPLS, nato principalmente per garantire alte performance di inoltro del traffico, sia IP sia di livello 2, è stato oggetto di estensioni per garantire la creazione di percorsi anche su reti non nativamente IP, come reti SDH e WDM. In questa forma è noto come Generalized MPLS o GMPLS. Il concetto di label è stato ampliato includendo anche identificativi di diverso tipo, come l'associazione a numero di timeslot in trama SDH oppure frequenze di wavelength per i sistemi WDM.
MPLS interagisce con la rete in modo forte, e non sempre le scelte da compiere per la creazione dei cammini sono semplici o rappresentabili semplicemente da metriche d'arco. Per questa ragione una estensione a MPLS è nella direzione del Path Computation Element, su cui sgravare l'onere del costo computazionale della ricerca e generazione dei percorsi migliori.
Sempre per applicazioni legate alle reti di telecomunicazioni (operatori telefonici), è in fase di standardizzazione congiunta presso ITU-T e IETF la variante T-MPLS (Transport MPLS) o MPLS/TP (MPLS/Transport Profile). Questo profilo si caratterizza per il supporto di una serie di funzionalità che sono standard obbligatorio per le telecomunicazioni: l'eliminazione di tutti gli aspetti di tipo connection-less, in modo da supportare solo circuiti di tipo connection-oriented; la persistenza nel tempo dei circuiti (non è prevista la cancellazione automatica in caso di inattività prolungata); il supporto di informazioni di servizio (OAM) specifiche per il monitoraggio e la rilevazione in tempo reale di guasti all'interno della rete e per la misurazione della qualità del servizio fornito; il supporto di meccanismi di protezione automatica dei circuiti con tempi di ripristino inferiori ai 50 millisecondi; la possibilità di interagire e di essere controllato tramite sistemi di gestione esterni (per esempio per trasferire informazioni di allarme o per creare circuiti senza usare i protocolli automatici); la possibilità di trasportare direttamente contenuto informativo di qualsiasi tipo, sia di tipo dati (come ad esempio Ethernet, ATM, IP, MPLS standard su T-MPLS) sia di telefonia tradizionale (tramite l'emulazione di circuito, Circuit Emulation Service (CES)); il supporto di meccanismi di controllo delle congestioni e di gestione differenziata delle priorità dei singoli flussi dati in base all'applicazione a cui sono destinati (Quality of Service).