Passa al contenuto principale

3. Specifica del protocollo

Le sezioni precedenti che descrivono il funzionamento di LDP hanno discusso scenari che comportano lo scambio di messaggi tra peer LDP. La presente sezione specifica le codifiche dei messaggi e le procedure per l'elaborazione dei messaggi.

Gli scambi di messaggi LDP sono realizzati inviando unità di dati di protocollo (Protocol Data Unit, PDU) LDP sulle connessioni TCP delle sessioni LDP.

Ciascuna PDU LDP può trasportare uno o più messaggi LDP. Si noti che i messaggi in una PDU LDP non devono essere necessariamente correlati tra loro. Ad esempio, una singola PDU potrebbe trasportare un messaggio che pubblicizza associazioni FEC-etichetta per diverse FEC, un altro messaggio che richiede associazioni di etichette per diverse altre FEC, e un terzo messaggio di notifica che segnala qualche evento.

3.1. PDU LDP​

Ciascuna PDU LDP è un'intestazione LDP seguita da uno o più messaggi LDP. L'intestazione LDP è:

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Version | PDU Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LDP Identifier |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Version Intero senza segno di due ottetti contenente il numero di versione del protocollo. Questa versione della specifica specifica la versione 1 del protocollo LDP.

PDU Length Intero di due ottetti che specifica la lunghezza totale di questa PDU in ottetti, escludendo i campi Version e PDU Length.

La lunghezza massima consentita della PDU è negoziabile al momento dell'inizializzazione di una sessione LDP. Prima del completamento della negoziazione, la lunghezza massima consentita è di 4096 byte.

LDP Identifier Campo di sei ottetti che identifica in modo univoco lo spazio di etichette dell'LSR mittente a cui si applica questa PDU. I primi quattro ottetti identificano l'LSR e DEVONO (MUST) essere un valore globalmente univoco. DOVREBBE (SHOULD) essere un router Id a 32 bit assegnato all'LSR e usato anche per identificarlo nei Path Vector del rilevamento di loop. Gli ultimi due ottetti identificano uno spazio di etichette all'interno dell'LSR. Per uno spazio di etichette valido per l'intera piattaforma, questi DOVREBBERO (SHOULD) essere entrambi zero.

Si noti che non vi è alcun requisito di allineamento per il primo ottetto di una PDU LDP.

3.2. Procedure LDP​

LDP definisce messaggi, TLV e procedure nelle seguenti aree:

  • Scoperta dei peer
  • Gestione delle sessioni
  • Distribuzione delle etichette
  • Notifica di errori e informazioni indicative

Le sezioni che seguono descrivono le codifiche dei messaggi e dei TLV per queste aree e le procedure a esse applicabili.

Le procedure di distribuzione delle etichette sono complesse ed è difficile descriverle in modo completo, coerente e non ambiguo come una raccolta di specifiche separate di messaggi e TLV.

L'Appendice A, "LDP Label Distribution Procedures", descrive le procedure di distribuzione delle etichette in termini di eventi di distribuzione delle etichette che possono verificarsi presso un LSR e di come l'LSR deve rispondervi. L'Appendice A è la specifica delle procedure di distribuzione delle etichette LDP. Se una procedura descritta altrove nel presente documento è in conflitto con l'Appendice A, è l'Appendice A a specificare il comportamento di LDP.

3.3. Codifica Type-Length-Value​

LDP usa uno schema di codifica Type-Length-Value (TLV) per codificare gran parte delle informazioni trasportate nei messaggi LDP.

Un TLV LDP è codificato come un campo di 2 ottetti che usa 14 bit per specificare un Type e 2 bit per specificare il comportamento quando un LSR non riconosce il Type, seguito da un campo Length di 2 ottetti, seguito da un campo Value di lunghezza variabile.

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|U|F| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Value |
~ ~
| |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

U-bit Bit del TLV sconosciuto (Unknown TLV bit). Alla ricezione di un TLV sconosciuto, se U è azzerato (=0), DEVE (MUST) essere restituita una notifica all'originatore del messaggio e l'intero messaggio DEVE (MUST) essere ignorato; se U è posto (=1), il TLV sconosciuto DEVE (MUST) essere ignorato silenziosamente e il resto del messaggio elaborato come se il TLV sconosciuto non esistesse. Le sezioni seguenti che definiscono i TLV specificano un valore per il bit U.

F-bit Bit di inoltro del TLV sconosciuto (Forward unknown TLV bit). Questo bit si applica solo quando il bit U è posto e il messaggio LDP contenente il TLV sconosciuto deve essere inoltrato. Se F è azzerato (=0), il TLV sconosciuto non viene inoltrato con il messaggio che lo contiene; se F è posto (=1), il TLV sconosciuto viene inoltrato con il messaggio che lo contiene. Le sezioni seguenti che definiscono i TLV specificano un valore per il bit F. Ponendo sia il bit U sia il bit F, un TLV può essere propagato come dato opaco attraverso nodi che non riconoscono il TLV.

Type Codifica come deve essere interpretato il campo Value.

Length Specifica la lunghezza del campo Value in ottetti.

Value Stringa di ottetti di lunghezza pari a Length che codifica le informazioni da interpretare come specificato dal campo Type.

Si noti che non vi è alcun requisito di allineamento per il primo ottetto di un TLV.

Si noti che il campo Value stesso può contenere codifiche TLV. Vale a dire, i TLV possono essere annidati.

Lo schema di codifica TLV è molto generale. In linea di principio, tutto ciò che compare in una PDU LDP potrebbe essere codificato come TLV. La presente specifica non usa lo schema TLV in tutta la sua generalità. Esso non viene usato dove la sua generalità è superflua e il suo uso sprecherebbe spazio inutilmente. Si tratta di solito di casi in cui il tipo di un valore da codificare è noto, ad esempio dalla sua posizione in un messaggio o in un TLV che lo racchiude, e la lunghezza del valore è fissa o facilmente derivabile dalla codifica del valore stesso.

Alcuni dei TLV definiti per LDP sono simili tra loro. Ad esempio, esistono un TLV Generic Label, un TLV ATM Label e un TLV Frame Relay; vedere le sezioni "Generic Label TLV", "ATM Label TLV" e "Frame Relay TLV".

Sebbene sia possibile pensare ai TLV correlati in questo modo in termini di un tipo di TLV che specifica una classe di TLV e un sottotipo di TLV che specifica un particolare tipo di TLV all'interno di quella classe, la presente specifica non formalizza la nozione di sottotipo di TLV.

La specifica assegna valori di tipo ai TLV correlati, come i TLV delle etichette, da un blocco contiguo nello spazio dei numeri di tipo TLV a 16 bit.

La sezione "TLV Summary" elenca i TLV definiti in questa versione del protocollo e la sezione del presente documento che descrive ciascuno.