4. Message Formats (Formati dei messaggi)
-
Message Formats (Formati dei messaggi)
Questa sezione descrive i formati dei messaggi utilizzati da BGP.
I messaggi BGP vengono inviati tramite connessioni TCP. Un messaggio viene elaborato solo dopo essere stato ricevuto completamente. La dimensione massima del messaggio è di 4096 ottetti. Tutte le implementazioni devono (REQUIRED) supportare questa dimensione massima del messaggio. Il messaggio più piccolo che può essere inviato consiste in un'intestazione BGP senza una parte di dati (19 ottetti).
Tutti i campi multi-ottetto sono in ordine di byte di rete (network byte order).
4.1. Message Header Format (Formato dell'intestazione del messaggio)
Ogni messaggio ha un'intestazione di dimensione fissa. Può esserci o meno una parte di dati che segue l'intestazione, a seconda del tipo di messaggio. Il layout di questi campi è mostrato di seguito:
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
- + | |
-
| Marker |
- + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length | Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Marker:
Questo campo di 16 ottetti è incluso per compatibilità; deve (MUST) essere impostato su tutti uno.
Length:
Questo intero senza segno di 2 ottetti indica la lunghezza totale del messaggio, inclusa l'intestazione in ottetti. Pertanto, consente di individuare il (campo Marker del) messaggio successivo nel flusso TCP. Il valore del campo Length deve (MUST) essere sempre almeno 19 e non superiore a 4096, e può (MAY) essere ulteriormente vincolato, a seconda del tipo di messaggio. Il "riempimento" (padding) di dati extra dopo il messaggio non è consentito. Pertanto, il campo Length deve (MUST) avere il valore più piccolo richiesto, dato il resto del messaggio.
Type:
Questo intero senza segno di 1 ottetto indica il codice del tipo di messaggio. Questo documento definisce i seguenti codici di tipo:
1 - OPEN 2 - UPDATE 3 - NOTIFICATION 4 - KEEPALIVE
[RFC2918] definisce un ulteriore codice di tipo.
4.2. OPEN Message Format (Formato del messaggio OPEN)
Dopo che una connessione TCP è stata stabilita, il primo messaggio inviato da ciascuna parte è un messaggio OPEN. Se il messaggio OPEN è accettabile, viene inviato in risposta un messaggio KEEPALIVE che conferma l'OPEN.
Oltre all'intestazione BGP di dimensione fissa, il messaggio OPEN contiene i seguenti campi:
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 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | My Autonomous System | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hold Time | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BGP Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Opt Parm Len | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Optional Parameters (variable) | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Version:
Questo intero senza segno di 1 ottetto indica il numero di versione del protocollo del messaggio. L'attuale numero di versione BGP è 4.
My Autonomous System:
Questo intero senza segno di 2 ottetti indica il numero del sistema autonomo (Autonomous System number) del mittente.
Hold Time:
Questo intero senza segno di 2 ottetti indica il numero di secondi che il mittente propone per il valore del Hold Timer. Alla ricezione di un messaggio OPEN, un BGP speaker deve (MUST) calcolare il valore del Hold Timer utilizzando il minore tra il suo Hold Time configurato e l'Hold Time ricevuto nel messaggio OPEN. L'Hold Time deve (MUST) essere zero o almeno tre secondi. Un'implementazione può (MAY) rifiutare le connessioni in base all'Hold Time.
Il valore calcolato indica il numero massimo di secondi che può trascorrere tra la ricezione di messaggi KEEPALIVE e/o UPDATE successivi dal mittente.
BGP Identifier:
Questo intero senza segno di 4 ottetti indica l'identificatore BGP (BGP Identifier) del mittente. Un dato BGP speaker imposta il valore del suo identificatore BGP su un indirizzo IP assegnato a quel BGP speaker. Il valore dell'identificatore BGP è determinato all'avvio ed è lo stesso per ogni interfaccia locale e peer BGP.
Optional Parameters Length:
Questo intero senza segno di 1 ottetto indica la lunghezza totale del campo Optional Parameters in ottetti. Se il valore di questo campo è zero, non sono presenti parametri opzionali.
Optional Parameters:
Questo campo contiene un elenco di parametri opzionali, in cui ciascun parametro è codificato come una tripla <Parameter Type, Parameter Length, Parameter Value>.
0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... | Parm. Type | Parm. Length | Parameter Value (variable) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
Parameter Type è un campo di un ottetto che identifica univocamente i singoli parametri. Parameter Length è un campo di un ottetto che contiene la lunghezza del campo Parameter Value in ottetti. Parameter Value è un campo di lunghezza variabile che viene interpretato in base al valore del campo Parameter Type.
[RFC3392] definisce il parametro opzionale Capabilities.
La lunghezza minima del messaggio OPEN è di 29 ottetti (inclusa l'intestazione del messaggio).
4.3. UPDATE Message Format (Formato del messaggio UPDATE)
I messaggi UPDATE vengono utilizzati per trasferire informazioni di routing tra peer BGP. Le informazioni nel messaggio UPDATE possono essere utilizzate per costruire un grafo che descrive le relazioni tra i vari sistemi autonomi. Applicando regole da discutere, i loop di informazioni di routing e alcune altre anomalie possono essere rilevati e rimossi dal routing inter-AS.
Un messaggio UPDATE viene utilizzato per annunciare rotte praticabili che condividono attributi di percorso comuni a un peer, o per ritirare più rotte non praticabili dal servizio (vedi 3.1). Un messaggio UPDATE può (MAY) simultaneamente annunciare una rotta praticabile e ritirare più rotte non praticabili dal servizio. Il messaggio UPDATE include sempre l'intestazione BGP di dimensione fissa, e include anche gli altri campi, come mostrato di seguito (si noti che alcuni dei campi mostrati potrebbero non essere presenti in ogni messaggio UPDATE):
+-----------------------------------------------------+ | Withdrawn Routes Length (2 octets) | +-----------------------------------------------------+ | Withdrawn Routes (variable) | +-----------------------------------------------------+ | Total Path Attribute Length (2 octets) | +-----------------------------------------------------+ | Path Attributes (variable) | +-----------------------------------------------------+ | Network Layer Reachability Information (variable) | +-----------------------------------------------------+
Withdrawn Routes Length:
Questo intero senza segno di 2 ottetti indica la lunghezza totale del campo Withdrawn Routes in ottetti. Il suo valore consente di determinare la lunghezza del campo Network Layer Reachability Information, come specificato di seguito.
Un valore di 0 indica che nessuna rotta viene ritirata dal servizio e che il campo WITHDRAWN ROUTES non è presente in questo messaggio UPDATE.
Withdrawn Routes:
Questo è un campo di lunghezza variabile che contiene un elenco di prefissi di indirizzi IP per le rotte che vengono ritirate dal servizio. Ogni prefisso di indirizzo IP è codificato come una tupla a 2 elementi della forma <length, prefix>, i cui campi sono descritti di seguito:
+---------------------------+ | Length (1 octet) | +---------------------------+ | Prefix (variable) | +---------------------------+
L'uso e il significato di questi campi sono i seguenti:
a) Length:
Il campo Length indica la lunghezza in bit del prefisso dell'indirizzo IP. Una lunghezza di zero indica un prefisso che corrisponde a tutti gli indirizzi IP (con il prefisso stesso di zero ottetti).
b) Prefix:
Il campo Prefix contiene un prefisso di indirizzo IP, seguito dal numero minimo di bit finali necessari per far cadere la fine del campo su un limite di ottetto. Si noti che il valore dei bit finali è irrilevante.
Total Path Attribute Length:
Questo intero senza segno di 2 ottetti indica la lunghezza totale del campo Path Attributes in ottetti. Il suo valore consente di determinare la lunghezza del campo Network Layer Reachability come specificato di seguito.
Un valore di 0 indica che né il campo Network Layer Reachability Information né il campo Path Attribute sono presenti in questo messaggio UPDATE.
Path Attributes:
Una sequenza di lunghezza variabile di attributi di percorso è presente in ogni messaggio UPDATE, ad eccezione di un messaggio UPDATE che contiene solo le rotte ritirate. Ogni attributo di percorso è una tripla <attribute type, attribute length, attribute value> di lunghezza variabile.
Attribute Type è un campo di due ottetti composto dall'ottetto Attribute Flags, seguito dall'ottetto Attribute Type Code.
0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Attr. Flags |Attr. Type Code| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Il bit di ordine superiore (bit 0) dell'ottetto Attribute Flags è il bit Optional. Definisce se l'attributo è opzionale (se impostato su 1) o ben noto (se impostato su 0).
Il secondo bit di ordine superiore (bit 1) dell'ottetto Attribute Flags è il bit Transitive. Definisce se un attributo opzionale è transitivo (se impostato su 1) o non transitivo (se impostato su 0).
Per gli attributi ben noti, il bit Transitive deve (MUST) essere impostato su 1. (Vedere la Sezione 5 per una discussione sugli attributi transitivi.)
Il terzo bit di ordine superiore (bit 2) dell'ottetto Attribute Flags è il bit Partial. Definisce se le informazioni contenute nell'attributo transitivo opzionale sono parziali (se impostato su 1) o complete (se impostato su 0). Per gli attributi ben noti e per gli attributi opzionali non transitivi, il bit Partial deve (MUST) essere impostato su 0.
Il quarto bit di ordine superiore (bit 3) dell'ottetto Attribute Flags è il bit Extended Length. Definisce se l'Attribute Length è di un ottetto (se impostato su 0) o di due ottetti (se impostato su 1).
I quattro bit di ordine inferiore dell'ottetto Attribute Flags non sono utilizzati. Devono (MUST) essere zero quando inviati e devono (MUST) essere ignorati quando ricevuti.
L'ottetto Attribute Type Code contiene il codice del tipo di attributo. I codici del tipo di attributo attualmente definiti sono discussi nella Sezione 5.
Se il bit Extended Length dell'ottetto Attribute Flags è impostato su 0, il terzo ottetto dell'attributo di percorso contiene la lunghezza del valore dell'attributo in ottetti.
Se il bit Extended Length dell'ottetto Attribute Flags è impostato su 1, il terzo e quarto ottetto dell'attributo di percorso contengono la lunghezza del valore dell'attributo in ottetti.
Gli ottetti di lunghezza rimanenti contengono il valore dell'attributo specifico per il particolare tipo di attributo.
Network Layer Reachability Information (NLRI):
Un campo di lunghezza variabile contiene un elenco di prefissi di indirizzi IP per le rotte annunciate. Ogni prefisso di indirizzo IP è codificato come una tupla a 2 elementi <length, prefix> nello stesso formato descritto per Withdrawn Routes.
La lunghezza minima di un messaggio UPDATE è di 23 ottetti -- 19 ottetti di intestazione fissa + 2 ottetti di Withdrawn Routes Length + 2 ottetti di Total Path Attribute Length.
4.4. KEEPALIVE Message Format (Formato del messaggio KEEPALIVE)
BGP invia messaggi KEEPALIVE per confermare che i peer sono raggiungibili. BGP utilizza anche i messaggi UPDATE per confermare che i peer sono vivi. L'invio di un messaggio UPDATE reimposta l'Hold Timer.
Un messaggio KEEPALIVE consiste solo in un'intestazione di 19 ottetti.
4.5. NOTIFICATION Message Format (Formato del messaggio NOTIFICATION)
Un messaggio NOTIFICATION viene inviato quando viene rilevata una condizione di errore. La connessione BGP viene chiusa immediatamente dopo l'invio del messaggio NOTIFICATION.
Oltre all'intestazione BGP di dimensione fissa, il messaggio NOTIFICATION contiene i seguenti campi:
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Error code | Error subcode | Data (variable) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Error Code:
Questo intero senza segno di 1 ottetto indica il tipo di errore segnalato. Sono definiti i seguenti codici di errore:
1 - Message Header Error (Errore nell'intestazione del messaggio) 2 - OPEN Message Error (Errore del messaggio OPEN) 3 - UPDATE Message Error (Errore del messaggio UPDATE) 4 - Hold Timer Expired (Timer di attesa scaduto) 5 - Finite State Machine Error (Errore della macchina a stati finiti) 6 - Cease (Cessazione)
Error Subcode:
Questo intero senza segno di 1 ottetto fornisce informazioni di errore più specifiche. Ogni codice di errore può avere il proprio insieme di valori per il sottocodice di errore. Se non è specificato alcun sottocodice di errore, deve (MUST) essere utilizzato un valore di 0.
Message Header Error Subcodes:
1 - Connection Not Synchronized (Connessione non sincronizzata) 2 - Bad Message Length (Lunghezza messaggio errata) 3 - Bad Message Type (Tipo di messaggio errato)
OPEN Message Error Subcodes:
1 - Unsupported Version Number (Numero di versione non supportato) 2 - Bad Peer AS (AS del peer errato) 3 - Bad BGP Identifier (Identificatore BGP errato) 4 - Unsupported Optional Parameter (Parametro opzionale non supportato) 5 - [Deprecated] - [Deprecato] 6 - Unacceptable Hold Time (Hold Time inaccettabile)
UPDATE Message Error Subcodes:
1 - Malformed Attribute List (Elenco di attributi malformato) 2 - Unrecognized Well-known Attribute (Attributo ben noto non riconosciuto) 3 - Missing Well-known Attribute (Attributo ben noto mancante) 4 - Attribute Flags Error (Errore dei flag di attributo) 5 - Attribute Length Error (Errore di lunghezza dell'attributo) 6 - Invalid ORIGIN Attribute (Attributo ORIGIN non valido) 7 - [Deprecated] - [Deprecato] 8 - Invalid NEXT_HOP Attribute (Attributo NEXT_HOP non valido) 9 - Optional Attribute Error (Errore di attributo opzionale) 10 - Invalid Network Field (Campo di rete non valido) 11 - Malformed AS_PATH (AS_PATH malformato)
Data:
Questo campo di lunghezza variabile viene utilizzato per diagnosticare la condizione di errore determinata dai campi Error Code ed Error Subcode. La lunghezza di questo campo può essere calcolata dal campo Length del messaggio NOTIFICATION. Il contenuto di questo campo dipende dal codice di errore e dal sottocodice di errore.
La lunghezza minima di un messaggio NOTIFICATION è di 21 ottetti (senza dati).