2. RSVP-TE
Nel capitolo precedente abbiamo parlato di due protocolli, RSVP-TE e CR-LDP, che estendono le capacità dei protocolli per la distribuzione delle label nell’ottica del setup dei forwarding state lungo un path esplicito.
I due protocolli sono stati proposti all’interno del working group MPLS, e dopo lunghe discussioni sui vantaggi di uno rispetto all’altro si è deciso di standardizzarli entrambi.
In questo capitolo ci occuperemo di RSVP-TE (RSVP-Tunnel Extension), che estende le funzionalità di RSVP e permette di sviluppare varie applicazioni nell’ambito del Traffic Engineering e della Quality of Service.
Inizieremo con una breve descrizione di RSVP, passando poi
ad RSVP-TE e a tutto ciò che di nuovo è stato introdotto, e
concludendo infine con le applicazioni rese possibili da questo
protocollo.
2.1. RSVP
Il protocollo RSVP (Resource reSerVation Protocol) nasce intorno al 1996 nell’ambito delle architetture per la qualità del servizio, e in particolare per gli Integrated Services, per permettere ad un’applicazione di effettuare la prenotazione di risorse prima di iniziare la trasmissione dei dati.
Il protocollo è utilizzato dagli host per comunicare alla rete richieste di servizio e dai router all’interno della rete per stabilire un reservation state lungo il percorso. Più precisamente, RSVP è utilizzato per la prenotazione di risorse tra un sender e un receiver, in modalità simplex (unidirezionale).
2.1.1. Caratteristiche di RSVP
RSVP [6] è receiver-oriented: sono i ricevitori, e non i mittenti, a decidere l’ammontare delle risorse da richiedere e ad iniziare la prenotazione; ciò favorisce il multicast, la gestione dinamica dei gruppi e l’eterogeneità dei ricevitori.
RSVP è anche indipendente dai protocolli di routing, e ciò permette di utilizzarlo con un’ampia gamma di protocolli.
Inoltre è soft-state: gli stati di prenotazione all’interno dei
router hanno dei timer alla scadenza dei quali vengono
cancellati, a meno che non siano inviati precedentemente dei
messaggi di refresh; anche questa caratteristica favorisce una gestione rapida e dinamica dei gruppi multicast, nonché la possibilità di variare facilmente l’ammontare delle risorse riservate.
Infine RSVP mette a disposizione diversi stili di prenotazione, che permettono per esempio di condividere una prenotazione tra flussi di diversi mittenti o di scegliere un particolare mittente al quale il ricevitore è interessato; questi stili sono il Fixed-Filter (FF), che prevede una prenotazione distinta per ogni specifico mittente, lo Shared Explicit (SE), che prevede una prenotazione condivisa da una lista esplicita di mittenti, e il Wild-card-Filter (WF), che prevede una singola prenotazione per ricevitore che può essere condivisa da qualsiasi mittente.
2.1.2. Funzionamento base di RSVP
Mostriamo ora il funzionamento base di RSVP, grazie al semplice esempio mostrato in figura 2.1, con un trasmettitore (S) e due ricevitori (R
1e R
2).
Supponiamo che il mittente S abbia del traffico da inviare ai
ricevitori R
1e R
2: egli invia un Path Message verso ognuno dei
due ricevitori, che viene inoltrato secondo il normale
forwarding di livello 3 (figura 2.2).
Questo messaggio contiene sempre il nodo precedentemente attraversato nel campo Previous Hop, una descrizione del traffico che il mittente vorrebbe inviare nel campo Sender T- Spec, le “coordinate” per il traffico (indirizzo IP del sender e
R1
Figura 2.2: inoltro del Path Message S
R2 R1
Figura 2.1: topologia d’esempio S
R2
porta del processo) nel Sender Template ed eventualmente alcune informazioni opzionali.
Alla ricezione del Path Message, ogni router si costruisce un path state in cui memorizza tutte le informazioni suddette, in particolare il Previous Hop.
Una volta che i messaggi arrivano ai destinatari, ciascuno di loro può decidere indipendentemente se effettuare una prenotazione e stabilisce l’ammontare della stessa, inviando un Resv Message verso il mittente (nel nostro esempio, solo il ricevitore R
2effettua la richiesta, come mostra la figura 2.3).
Questo messaggio viene inoltrato dai router verso il mittente
attraverso il percorso inverso rispetto a quello che ha compiuto
il Path Message (e che compiranno poi i pacchetti di traffico),
grazie al Previous Hop memorizzato nei path state, che in
questo caso diventa il next hop per il pacchetto di richiesta. Il
Resv Message contiene informazioni sullo stile della
prenotazione, le “coordinate” del traffico nel Filter Spec
(analogo al Sender Template) e le caratteristiche del servizio
richiesto nel Flow Spec, in particolare la QoS desiderata nel
Reservation Spec (RSpec) e la descrizione del traffico nel
Traffic Spec (TSpec). Ogni router lungo il percorso analizza la
richiesta di prenotazione di risorse, e se può soddisfarla manda
avanti nel percorso inverso il Resv Message e memorizza le sue informazioni in un reservation state.
Nel caso in cui invece un router non riesca a soddisfare la richiesta, manda indietro al ricevitore un messaggio di ResvError, in cui comunica questa impossibilità.
Se tutto il processo è stato effettuato correttamente, la prenotazione viene registrata in ognuno dei router che collegano il destinatario al mittente: ora il mittente può iniziare ad inviare i suoi pacchetti verso il ricevitore con la certezza che ci sono risorse sufficienti a far sì che essi arrivino (figura 2.4).
Il ricevitore deve spedire lo stesso Resv Message ogni 30 secondi (il valore abituale dei timer) fino a quando vuole
R1
Figura 2.3: inoltro del Resv Message S
R2
usufruire della prenotazione di risorse, in modo da aggiornare gli state nei router (e lo stesso per il Path Message del sender).
Oltre ai messaggi già descritti (Path, Resv, ResvErr), abbiamo altri tipi di messaggi:
PathErr: per l’indicazione di un errore in risposta ad un Path Message (dai router al mittente);
PathTear: per abbattere i path state di una prenotazione (dal mittente ai router);
ResvTear: per abbattere i reservation state di una prenotazione (dal destinatario ai router);
ResvConf: per la conferma dell’avvenuta prenotazione (dal mittente al destinatario).
R1
Figura 2.4: inoltro dei pacchetti di traffico e del messaggio di refresh S
R2
2.2.RSVP-TE
Passiamo ora alla descrizione accurata del protocollo RSVP- TE, che, come detto, estende le funzionalità di RSVP per la creazione di LSP, con o senza prenotazione delle risorse, nelle reti MPLS.
Poiché il traffico che transita lungo un percorso label-switched è definito dalla label applicata al nodo d’ingresso dell’LSP, questi path possono essere trattati come tunnel, nascosti sotto il normale routing IP e i meccanismi di filtering: si parla allora di tunnel LSP.
I tunnel LSP permettono tutta una serie di applicazioni, in particolare riguardo all’ottimizzazione dell’utilizzazione delle risorse della rete, ma anche riguardo al fast rerouting, alla preemption e alla rivelazione dei loop.
Il grande vantaggio di RSVP-TE è che, grazie alla
combinazione di MPLS e RSVP, la definizione di un flusso è
molto flessibile: una volta che un LSP è stato definito, il
traffico che passa attraverso quel path è identificato
semplicemente dalla label applicata al nodo d’ingresso
dell’LSP, e il mapping di questa label con un particolare
traffico può essere effettuato a vari livelli di granularità. Tutti i
pacchetti ai quali viene assegnata la stessa label si dicono
appartenenti alla stessa FEC, e definiscono effettivamente il flusso RSVP-TE.
Nel classico RSVP invece le prenotazioni vengono fatte esclusivamente per singoli microflussi, flussi cioè identificati dai tipici 5 campi dell’header del pacchetto (indirizzi IP del mittente e del destinatario, porte del mittente e del destinatario e identificativo del protocollo), rendendo molto difficile la scalabilità del sistema.
Inoltre con RSVP-TE, poiché le label sono associate ai flussi di traffico, i router hanno la possibilità di identificare il giusto reservation state per un pacchetto basandosi solo sul valore della sua label, e ciò semplifica in maniera netta tutte le varie operazioni.
2.2.1. Funzionamento generale
Analizziamo ora il funzionamento generale del protocollo RSVP-TE, lasciando alla sezione successiva la descrizione particolareggiata dei nuovi oggetti introdotti.
Facciamo riferimento alla figura 2.5, dove l’LSR A vuole
creare un LSP esplicito verso l’LSR C. Dapprima egli crea un
Path Message con un session-type LSP_Tunnel, quindi include
nel messaggio un oggetto Label_Request, che indica la
richiesta di un label binding, e un oggetto Explicit_Route (in
parentesi nel disegno), che indica il percorso prestabilito.
L’LSR può aggiungere eventualmente un oggetto Record- Route, che come vedremo in seguito permette di registrare il percorso effettuato (per successive operazioni di notifica, rilevazioni di loop, ecc.), e un oggetto Session_Attribute per informazioni addizionali quali preemption, priorità, protezione e diagnostica.
Una volta costruito il Path Message, l’LSR A lo invia al next hop indicato dall’Explicit_Route (se questo oggetto non è presente, il next hop è fornito dal classico routing hop-by-hop).
Il nodo intermedio B che riceve il Path Message modifica l’oggetto Explicit_Route (eliminando il suo nome) e inoltra il pacchetto verso il nodo di uscita C.
Il nodo C riceve il Path Message e riconosce di essere l’egress node dell’LSP, quindi alloca una nuova label (15), la inserisce nel Label object e pone questo oggetto nel Resv Message che
C A
ResvMsg (15) ResvMsg (12)
PathMsg (C) PathMsg (B,C)
Figura 2.5: funzionamento di RSVP-TE
B
invia verso il sender; il Resv Message seguirà il percorso inverso, grazie ai path state creati dal Path Message, come avviene nel classico RSVP.
Quando B riceve il messaggio, prende la label nel Label object e la usa come outgoing label per l’LSP; quindi alloca una nuova label (12) e la pone nel Label object del Resv Message che manderà al Previous Hop memorizzato nel path state.
Infine aggiunge la nuova coppia di label (12,15) alla tabella di label switching, insieme all’interfaccia di uscita (C in questo caso). Quando il Resv Message raggiunge A, l’LSP è costruito.
Per quanto riguarda la prenotazione delle risorse, essa non è obbligatoria, quindi un LSP può essere costruito con o senza risorse. Nel caso ci sia la prenotazione, essa viene effettuata contestualmente ai label binding, con le modalità classiche previste da RSVP.
2.2.2. Nuovi oggetti
Abbiamo fatto riferimento a diversi nuovi oggetti introdotti da
RSVP-TE [7]: andiamo ad analizzarli nel dettaglio, mostrando
dapprima la loro posizione nelle nuove versioni del Path
Message e del Resv Message (figure 2.6-a e 2.7-b); i campi in
blu sono opzionali e nel Resv Message non abbiamo ripetuto
l’intera struttura per gli oggetti già presenti nel Path Message.
Ver: 1 Flags Msg Type: 1 RSVP Checksum
Send_TTL (Reserved) RSVP Length
SESSION obj. length Class-num: 1 C-Type: 7 Ipv4 Egress Node Address
0 Tunnel ID
Extended Tunnel ID
RSVP_HOP obj. length Class-num: 3 C-Type: 1 Last Hop Address
Logical Interface Handle for Last Hop
TIME_VALUES obj. length Class-num: 5 C-Type: 1 Refresh Period
Max Refresh Period
ERO length Class-num: 20 C-Type: 1
L Type Length IPv4 Address
IPv4 Address (continued) Prefix length Reserved LABEL_REQUEST obj. length Class-num: 19 C-Type: 1
Reserved L3PID
SESSION ATTRIBUTE obj. length Class-num: 207 C-Type: 7 Setup Priorità Holding Priority Flags Name length
Session Name
POLICY DATA obj. (Class-num: 14; C-Type: 1)
SENDER TEMPLATE obj. length Class-num: 11 C-Type: 7 IPv4 Tunnel Sender Address
0 LSP ID
SENDER TSPEC obj. (Class-num: 12; C-Type: 2) ADSPEC obj. (Class-num: 13; C-Type: 2)
RRO length Class-num: 21 C-Type: 1
L Type Length IPv4 Address
IPv4 Address (continued) Prefix length Flags
Type Length Flags C-Type: 1
Contents of label obj.
Figura 2.6-a: formato del Path Message in RSVP-TE
Ver: 1 Flags Msg Type: 2 RSVP Checksum
Send_TTL (Reserved) RSVP Length
SESSION Obj.
RSVP_HOP Obj.
TIME_VALUES Obj.
SCOPE Obj. (Class-num: 7, C-Type: 1) POLICY_DATA Obj.
STYLE Obj. length Class-num: 8 C-Type: 1
Flags Option vector
FLOW SPEC Obj. (Class-num: 9, C-Type: 1)
FILTER_SPEC Obj. length Class-num: 10 C-Type: 1 IPv4 Source Address
Reserved LSP ID
LABEL Obj. length Class-num: 16 C-Type: 1
0 Label Value
RRO