Passa al contenuto principale

8. BGP Finite State Machine (FSM) (Macchina a stati finiti BGP)

  1. BGP Finite State Machine (FSM) (Macchina a stati finiti BGP)

    Le strutture dati e la FSM descritte in questo documento sono concettuali e non devono essere implementate precisamente come descritto qui, purché le implementazioni supportino la funzionalità descritta e mostrino lo stesso comportamento visibile esternamente.

    Questa sezione specifica l'operazione BGP in termini di una macchina a stati finiti (Finite State Machine: FSM). La sezione si divide in due parti:

    1. Descrizione degli eventi per la macchina a stati (Sezione 8.1)
    2. Descrizione della FSM (Sezione 8.2)

    Gli attributi di sessione richiesti (obbligatori) per ogni connessione sono:

    1. State (Stato)
    2. ConnectRetryCounter (Contatore di tentativi di connessione)
    3. ConnectRetryTimer (Timer di tentativi di connessione)
    4. ConnectRetryTime (Tempo di tentativi di connessione)
    5. HoldTimer (Timer di mantenimento)
    6. HoldTime (Tempo di mantenimento)
    7. KeepaliveTimer (Timer Keepalive)
    8. KeepaliveTime (Tempo Keepalive)

    L'attributo di sessione di stato indica lo stato corrente della FSM BGP. Il ConnectRetryCounter indica il numero di volte in cui un peer BGP ha tentato di stabilire una sessione peer.

    Gli attributi obbligatori relativi ai timer sono descritti nella Sezione 10. Ogni timer ha un "timer" e un "time" (il valore iniziale).

    Gli attributi di sessione opzionali sono elencati di seguito. Questi attributi opzionali possono essere supportati, sia per connessione che per sistema locale:

    1. AcceptConnectionsUnconfiguredPeers (Accetta connessioni da peer non configurati)
    2. AllowAutomaticStart (Consenti avvio automatico)
    3. AllowAutomaticStop (Consenti arresto automatico)
    4. CollisionDetectEstablishedState (Rilevamento collisioni nello stato Established)
    5. DampPeerOscillations (Smorzamento oscillazioni peer)
    6. DelayOpen (Ritarda apertura)
    7. DelayOpenTime (Tempo di ritardo apertura)
    8. DelayOpenTimer (Timer di ritardo apertura)
    9. IdleHoldTime (Tempo di mantenimento inattivo)
    10. IdleHoldTimer (Timer di mantenimento inattivo)
    11. PassiveTcpEstablishment (Stabilimento TCP passivo)
    12. SendNOTIFICATIONwithoutOPEN (Invia NOTIFICATION senza OPEN)
    13. TrackTcpState (Traccia stato TCP)

    Gli attributi di sessione opzionali supportano diverse funzionalità della funzionalità BGP che hanno implicazioni per le transizioni di stato della FSM BGP. Due gruppi di attributi relativi ai timer sono:

    gruppo 1: DelayOpen, DelayOpenTime, DelayOpenTimer gruppo 2: DampPeerOscillations, IdleHoldTime, IdleHoldTimer

    Il primo parametro (DelayOpen, DampPeerOscillations) è un attributo opzionale che indica che la funzione timer è attiva. Il valore "Time" specifica il valore iniziale per il "Timer" (DelayOpenTime, IdleHoldTime). Il "Timer" specifica il timer effettivo.

    Si prega di fare riferimento alla Sezione 8.1.1 per una spiegazione dell'interazione tra questi attributi opzionali e gli eventi segnalati alla macchina a stati. La Sezione 8.2.1.3 fornisce anche una breve panoramica dei diversi tipi di attributi opzionali (flag o timer).

8.1. Events for the BGP FSM (Eventi per la FSM BGP)

8.1.1. Optional Events Linked to Optional Session Attributes (Eventi opzionali collegati agli attributi di sessione opzionali)

Gli input alla FSM BGP sono eventi. Gli eventi possono essere obbligatori o opzionali. Alcuni eventi opzionali sono collegati ad attributi di sessione opzionali. Gli attributi di sessione opzionali abilitano diversi gruppi di funzionalità FSM.

Il collegamento tra funzionalità FSM, eventi e gli attributi di sessione opzionali è descritto di seguito.

Gruppo 1: Eventi amministrativi automatici (Start/Stop)

Attributi di sessione opzionali: AllowAutomaticStart, AllowAutomaticStop, DampPeerOscillations, IdleHoldTime, IdleHoldTimer

Opzione 1: AllowAutomaticStart

Descrizione: Una connessione peer BGP può essere avviata e arrestata tramite controllo amministrativo. Questo controllo amministrativo può essere manuale, basato sull'intervento dell'operatore, o sotto il controllo di logica specifica per un'implementazione BGP. Il termine "automatico" si riferisce a un avvio emesso alla FSM di connessione peer BGP quando tale logica determina che la connessione peer BGP dovrebbe essere riavviata.

L'attributo AllowAutomaticStart specifica che questa connessione BGP supporta l'avvio automatico della connessione BGP.

Se l'implementazione BGP supporta AllowAutomaticStart, il peer può essere riavviato ripetutamente. Altre tre opzioni controllano la velocità con cui si verifica il riavvio automatico: DampPeerOscillations, IdleHoldTime e IdleHoldTimer.

L'opzione DampPeerOscillations specifica che l'implementazione impegna logica aggiuntiva per smorzare le oscillazioni dei peer BGP di fronte a sequenze di avvio e arresto automatici. IdleHoldTime specifica la durata del tempo in cui il peer BGP viene mantenuto nello stato Idle prima di consentire il successivo riavvio automatico. L'IdleHoldTimer è il timer che mantiene il peer nello stato Idle.

Un esempio di logica DampPeerOscillations è un aumento del valore IdleHoldTime se un peer BGP oscilla la connettività (connesso/disconnesso) ripetutamente entro un periodo di tempo. Per attivare questa logica, un peer potrebbe connettersi e disconnettersi 10 volte entro 5 minuti. Il valore IdleHoldTime verrebbe reimpostato da 0 a 120 secondi.

Valori: TRUE o FALSE

Opzione 2: AllowAutomaticStop

Descrizione: Questo attributo opzionale di sessione peer BGP indica che la connessione BGP consente l'arresto "automatico" della connessione BGP. Un arresto "automatico" è definito come un arresto sotto il controllo di logica specifica dell'implementazione. La logica specifica dell'implementazione è al di fuori dell'ambito di questa specifica.

Valori: TRUE o FALSE

Opzione 3: DampPeerOscillations

Descrizione: L'attributo di sessione opzionale DampPeerOscillations indica che la connessione BGP sta utilizzando logica che smorza le oscillazioni dei peer BGP nello stato Idle.

Valore: TRUE o FALSE

Opzione 4: IdleHoldTime

Descrizione: L'IdleHoldTime è il valore che viene impostato nell'IdleHoldTimer.

Valori: Tempo in secondi

Opzione 5: IdleHoldTimer

Descrizione: L'IdleHoldTimer aiuta a controllare l'oscillazione dei peer BGP. L'IdleHoldTimer viene utilizzato per mantenere il peer BGP in Idle per una durata particolare. L'evento IdleHoldTimer_Expires è descritto nella Sezione 8.1.3.

Valori: Tempo in secondi

Gruppo 2: Peer non configurati

Attributi di sessione opzionali: AcceptConnectionsUnconfiguredPeers

Opzione 1: AcceptConnectionsUnconfiguredPeers

Descrizione: La FSM BGP consente opzionalmente l'accettazione di connessioni peer BGP da vicini che non sono pre-configurati. L'attributo di sessione opzionale "AcceptConnectionsUnconfiguredPeers" consente alla FSM di supportare le transizioni di stato che permettono all'implementazione di accettare o rifiutare questi peer non configurati.

AcceptConnectionsUnconfiguredPeers ha implicazioni di sicurezza. Si prega di fare riferimento al documento sulle vulnerabilità BGP [RFC4272] per i dettagli.

Valore: True o False

Gruppo 3: Elaborazione TCP

Attributi di sessione opzionali: PassiveTcpEstablishment, TrackTcpState

Opzione 1: PassiveTcpEstablishment

Descrizione: Questa opzione indica che la FSM BGP attenderà passivamente che il peer BGP remoto stabilisca la connessione TCP BGP.

valore: TRUE o FALSE

Opzione 2: TrackTcpState

Descrizione: La FSM BGP normalmente traccia il risultato finale di un tentativo di connessione TCP piuttosto che i singoli messaggi TCP. Opzionalmente, la FSM BGP può supportare un'interazione aggiuntiva con la negoziazione della connessione TCP. L'interazione con gli eventi TCP può aumentare la quantità di registrazione che la connessione peer BGP richiede e il numero di cambiamenti FSM BGP.

Valore: TRUE o FALSE

Gruppo 4: Elaborazione messaggi BGP

Attributi di sessione opzionali: DelayOpen, DelayOpenTime, DelayOpenTimer, SendNOTIFICATIONwithoutOPEN, CollisionDetectEstablishedState

Opzione 1: DelayOpen

Descrizione: L'attributo di sessione opzionale DelayOpen consente alle implementazioni di essere configurate per ritardare l'invio di un messaggio OPEN per un periodo di tempo specifico (DelayOpenTime). Il ritardo consente al peer BGP remoto di avere tempo per inviare il primo messaggio OPEN.

Valore: TRUE o FALSE

Opzione 2: DelayOpenTime

Descrizione: Il DelayOpenTime è il valore iniziale impostato nel DelayOpenTimer.

Valore: Tempo in secondi

Opzione 3: DelayOpenTimer

Descrizione: L'attributo di sessione opzionale DelayOpenTimer viene utilizzato per ritardare l'invio di un messaggio OPEN su una connessione. L'evento DelayOpenTimer_Expires (Evento 12) è descritto nella Sezione 8.1.3.

Valore: Tempo in secondi

Opzione 4: SendNOTIFICATIONwithoutOPEN

Descrizione: Il SendNOTIFICATIONwithoutOPEN consente a un peer di inviare una NOTIFICATION senza prima inviare un messaggio OPEN. Senza questo attributo di sessione opzionale, la connessione BGP assume che un messaggio OPEN debba essere inviato da un peer prima che il peer invii un messaggio NOTIFICATION.

Valore: True o False

Opzione 5: CollisionDetectEstablishedState

Descrizione: Normalmente, un rilevamento di collisione (vedere Sezione 6.8) verrà ignorato nello stato Established. Questo attributo di sessione opzionale indica che questa connessione BGP elabora le collisioni nello stato Established.

Valore: True o False

Nota: Gli attributi di sessione opzionali chiariscono la descrizione della FSM BGP per le funzionalità esistenti delle implementazioni BGP. Gli attributi di sessione opzionali possono essere predefiniti per un'implementazione e non leggibili tramite interfacce di gestione per implementazioni corrette esistenti. Man mano che vengono supportate nuove MIB BGP (versione 2 e oltre), questi campi saranno accessibili tramite un'interfaccia di gestione.

8.1.2. Administrative Events (Eventi amministrativi)

Un evento amministrativo è un evento in cui l'interfaccia operatore e il motore di policy BGP segnalano alla macchina a stati finiti BGP di avviare o arrestare la macchina a stati BGP. Le indicazioni di avvio e arresto di base sono aumentate da attributi di connessione opzionali che segnalano un certo tipo di meccanismo di avvio o arresto alla FSM BGP. Un esempio di questa combinazione è l'Evento 5, AutomaticStart_with_PassiveTcpEstablishment. Con questo evento, l'implementazione BGP segnala alla FSM BGP che l'implementazione sta utilizzando un avvio automatico con l'opzione di utilizzare uno stabilimento TCP passivo. Lo stabilimento TCP passivo segnala che questa FSM BGP attenderà che il lato remoto avvii lo stabilimento TCP.

Si noti che solo l'Evento 1 (ManualStart) e l'Evento 2 (ManualStop) sono eventi amministrativi obbligatori. Tutti gli altri eventi amministrativi sono opzionali (Eventi 3-8). Ogni evento qui sotto ha un nome, una definizione, uno stato (obbligatorio o opzionale) e gli attributi di sessione opzionali che DOVREBBERO (SHOULD) essere impostati in ogni fase. Quando si generano gli Eventi da 1 a 8 per la FSM BGP, vengono verificate le condizioni specificate nella sezione "Stato attributo opzionale". Se una di queste condizioni non è soddisfatta, il sistema locale dovrebbe registrare un errore FSM.

Le impostazioni degli attributi di sessione opzionali possono essere implicite in alcune implementazioni e quindi potrebbero non essere impostate esplicitamente da un'azione dell'operatore esterno. La Sezione 8.2.1.5 descrive queste impostazioni implicite degli attributi di sessione opzionali. Gli stati amministrativi descritti di seguito possono anche essere impliciti in alcune implementazioni e non direttamente configurabili da un operatore esterno.

Evento 1: ManualStart (Avvio manuale)

Definizione: L'amministratore del sistema locale avvia manualmente la connessione peer.

Stato: Obbligatorio

Stato attributo opzionale: L'attributo PassiveTcpEstablishment DOVREBBE (SHOULD) essere impostato a FALSE.

Evento 2: ManualStop (Arresto manuale)

Definizione: L'amministratore del sistema locale arresta manualmente la connessione peer.

Stato: Obbligatorio

Stato attributo opzionale: Nessuna interazione con attributi opzionali.

Evento 3: AutomaticStart (Avvio automatico)

Definizione: Il sistema locale avvia automaticamente la connessione BGP.

Stato: Opzionale, a seconda del sistema locale

Stato attributo opzionale: 1) L'attributo AllowAutomaticStart DOVREBBE (SHOULD) essere impostato a TRUE se si verifica questo evento. 2) Se l'attributo di sessione opzionale PassiveTcpEstablishment è supportato, DOVREBBE (SHOULD) essere impostato a FALSE. 3) Se DampPeerOscillations è supportato, DOVREBBE (SHOULD) essere impostato a FALSE quando si verifica questo evento.

Evento 4: ManualStart_with_PassiveTcpEstablishment (Avvio manuale con stabilimento TCP passivo)

Definizione: L'amministratore del sistema locale avvia manualmente la connessione peer, ma ha abilitato PassiveTcpEstablishment. L'attributo opzionale PassiveTcpEstablishment indica che il peer ascolterà prima di stabilire la connessione.

Stato: Opzionale, a seconda del sistema locale

Stato attributo opzionale: 1) L'attributo PassiveTcpEstablishment DOVREBBE (SHOULD) essere impostato a TRUE se si verifica questo evento. 2) L'attributo DampPeerOscillations DOVREBBE (SHOULD) essere impostato a FALSE quando si verifica questo evento.

Evento 5: AutomaticStart_with_PassiveTcpEstablishment (Avvio automatico con stabilimento TCP passivo)

Definizione: Il sistema locale avvia automaticamente la connessione BGP con PassiveTcpEstablishment abilitato. L'attributo opzionale PassiveTcpEstablishment indica che il peer ascolterà prima di stabilire una connessione.

Stato: Opzionale, a seconda del sistema locale

Stato attributo opzionale: 1) L'attributo AllowAutomaticStart DOVREBBE (SHOULD) essere impostato a TRUE. 2) L'attributo PassiveTcpEstablishment DOVREBBE (SHOULD) essere impostato a TRUE. 3) Se l'attributo DampPeerOscillations è supportato, DampPeerOscillations DOVREBBE (SHOULD) essere impostato a FALSE.

Evento 6: AutomaticStart_with_DampPeerOscillations (Avvio automatico con smorzamento oscillazioni peer)

Definizione: Il sistema locale avvia automaticamente la connessione peer BGP con lo smorzamento delle oscillazioni peer abilitato. Il metodo esatto di smorzamento delle oscillazioni peer persistenti è determinato dall'implementazione ed è al di fuori dell'ambito di questo documento.

Stato: Opzionale, a seconda del sistema locale.

Stato attributo opzionale: 1) L'attributo AllowAutomaticStart DOVREBBE (SHOULD) essere impostato a TRUE. 2) L'attributo DampPeerOscillations DOVREBBE (SHOULD) essere impostato a TRUE. 3) L'attributo PassiveTcpEstablishment DOVREBBE (SHOULD) essere impostato a FALSE.

Evento 7: AutomaticStart_with_DampPeerOscillations_and_ PassiveTcpEstablishment (Avvio automatico con smorzamento oscillazioni peer e stabilimento TCP passivo)

Definizione: Il sistema locale avvia automaticamente la connessione peer BGP con lo smorzamento delle oscillazioni peer abilitato e PassiveTcpEstablishment abilitato. Il metodo esatto di smorzamento delle oscillazioni peer persistenti è determinato dall'implementazione ed è al di fuori dell'ambito di questo documento.

Stato: Opzionale, a seconda del sistema locale

Stato attributi opzionali: 1) L'attributo AllowAutomaticStart DOVREBBE (SHOULD) essere impostato a TRUE. 2) L'attributo DampPeerOscillations DOVREBBE (SHOULD) essere impostato a TRUE. 3) L'attributo PassiveTcpEstablishment DOVREBBE (SHOULD) essere impostato a TRUE.

Evento 8: AutomaticStop (Arresto automatico)

Definizione: Il sistema locale arresta automaticamente la connessione BGP.

Un esempio di evento di arresto automatico è il superamento del numero di prefissi per un determinato peer e il sistema locale disconnette automaticamente il peer.

Stato: Opzionale, a seconda del sistema locale

Stato attributo opzionale: 1) L'attributo AllowAutomaticStop DOVREBBE (SHOULD) essere TRUE.

8.1.3. Timer Events (Eventi timer)

Evento 9: ConnectRetryTimer_Expires (Scadenza timer tentativi connessione)

Definizione: Un evento generato quando il ConnectRetryTimer scade.

Stato: Obbligatorio

Evento 10: HoldTimer_Expires (Scadenza timer mantenimento)

Definizione: Un evento generato quando l'HoldTimer scade.

Stato: Obbligatorio

Evento 11: KeepaliveTimer_Expires (Scadenza timer Keepalive)

Definizione: Un evento generato quando il KeepaliveTimer scade.

Stato: Obbligatorio

Evento 12: DelayOpenTimer_Expires (Scadenza timer ritardo apertura)

Definizione: Un evento generato quando il DelayOpenTimer scade.

Stato: Opzionale

Stato attributo opzionale: Se si verifica questo evento,

  1. L'attributo DelayOpen DOVREBBE (SHOULD) essere impostato a TRUE,
  2. L'attributo DelayOpenTime DOVREBBE (SHOULD) essere supportato,
  3. Il DelayOpenTimer DOVREBBE (SHOULD) essere supportato.

Evento 13: IdleHoldTimer_Expires (Scadenza timer mantenimento inattivo)

Definizione: Un evento generato quando l'IdleHoldTimer scade, indicando che la connessione BGP ha completato l'attesa del periodo di back-off per prevenire l'oscillazione del peer BGP.

L'IdleHoldTimer viene utilizzato solo quando la funzione di smorzamento delle oscillazioni peer persistenti è abilitata impostando l'attributo opzionale DampPeerOscillations a TRUE.

Le implementazioni che non implementano la funzione di smorzamento delle oscillazioni peer persistenti potrebbero non avere l'IdleHoldTimer.

Stato: Opzionale

Stato attributo opzionale: Se si verifica questo evento:

  1. L'attributo DampPeerOscillations DOVREBBE (SHOULD) essere impostato a TRUE.
  2. L'IdleHoldTimer DOVREBBE (SHOULD) essere appena scaduto.

8.1.4. TCP Connection-Based Events (Eventi basati su connessione TCP)

Evento 14: TcpConnection_Valid (Connessione TCP valida)

Definizione: Evento che indica la ricezione da parte del sistema locale di una richiesta di connessione TCP con un indirizzo IP sorgente valido, porta TCP, indirizzo IP destinazione e porta TCP. La definizione di indirizzo IP sorgente invalido e indirizzo IP destinazione invalido è determinata dall'implementazione.

La porta di destinazione BGP DOVREBBE (SHOULD) essere la porta 179, come definito da IANA.

La richiesta di connessione TCP è indicata dal sistema locale che riceve un SYN TCP.

Stato: Opzionale

Stato attributo opzionale: 1) L'attributo TrackTcpState DOVREBBE (SHOULD) essere impostato a TRUE se si verifica questo evento.

Evento 15: Tcp_CR_Invalid (Richiesta connessione TCP invalida)

Definizione: Evento che indica la ricezione da parte del sistema locale di una richiesta di connessione TCP con un indirizzo sorgente o numero di porta invalido, o un indirizzo destinazione o numero di porta invalido.

Il numero di porta di destinazione BGP DOVREBBE (SHOULD) essere 179, come definito da IANA.

Una richiesta di connessione TCP si verifica quando il sistema locale riceve un SYN TCP.

Stato: Opzionale

Stato attributo opzionale: 1) L'attributo TrackTcpState dovrebbe essere impostato a TRUE se si verifica questo evento.

Evento 16: Tcp_CR_Acked (Richiesta connessione TCP riconosciuta)

Definizione: Evento che indica la richiesta del sistema locale di stabilire una connessione TCP al peer remoto.

La connessione TCP del sistema locale ha inviato un SYN TCP, ricevuto un messaggio SYN/ACK TCP e inviato un ACK TCP.

Stato: Obbligatorio

Evento 17: TcpConnectionConfirmed (Connessione TCP confermata)

Definizione: Evento che indica che il sistema locale ha ricevuto una conferma che la connessione TCP è stata stabilita dal sito remoto.

Il motore TCP del peer remoto ha inviato un SYN TCP. Il motore TCP del peer locale ha inviato un messaggio SYN, ACK e ora ha ricevuto un ACK finale.

Stato: Obbligatorio

Evento 18: TcpConnectionFails (Fallimento connessione TCP)

Definizione: Evento che indica che il sistema locale ha ricevuto una notifica di fallimento della connessione TCP.

La macchina TCP del peer BGP remoto potrebbe aver inviato un FIN. Il peer locale risponderebbe con un FIN-ACK. Un'altra possibilità è che il peer locale abbia indicato un timeout nella connessione TCP e abbia chiuso la connessione.

Stato: Obbligatorio

8.1.5. BGP Message-Based Events (Eventi basati su messaggi BGP)

Evento 19: BGPOpen

Definizione: Un evento viene generato quando è stato ricevuto un messaggio OPEN valido.

Stato: Obbligatorio

Stato attributo opzionale: 1) L'attributo opzionale DelayOpen DOVREBBE (SHOULD) essere impostato a FALSE. 2) Il DelayOpenTimer NON DOVREBBE (SHOULD) essere in esecuzione.

Evento 20: BGPOpen with DelayOpenTimer running (BGPOpen con DelayOpenTimer in esecuzione)

Definizione: Un evento viene generato quando è stato ricevuto un messaggio OPEN valido per un peer che ha una connessione di trasporto stabilita con successo e sta attualmente ritardando l'invio di un messaggio BGP open.

Stato: Opzionale

Stato attributo opzionale: 1) L'attributo DelayOpen DOVREBBE (SHOULD) essere impostato a TRUE. 2) Il DelayOpenTimer DOVREBBE (SHOULD) essere in esecuzione.

Evento 21: BGPHeaderErr (Errore intestazione BGP)

Definizione: Un evento viene generato quando un'intestazione di messaggio BGP ricevuto non è valida.

Stato: Obbligatorio

Evento 22: BGPOpenMsgErr (Errore messaggio OPEN BGP)

Definizione: Un evento viene generato quando è stato ricevuto un messaggio OPEN con errori.

Stato: Obbligatorio

Evento 23: OpenCollisionDump (Scarico collisione Open)

Definizione: Un evento generato amministrativamente quando è stata rilevata una collisione di connessione durante l'elaborazione di un messaggio OPEN in arrivo e questa connessione è stata selezionata per essere disconnessa. Vedere la Sezione 6.8 per maggiori informazioni sul rilevamento delle collisioni.

L'Evento 23 è un'azione amministrativa generata dalla logica di implementazione che determina se questa connessione deve essere abbandonata secondo le regole nella Sezione 6.8. Questo evento può verificarsi se la FSM è implementata come due macchine a stati collegate.

Stato: Opzionale

Stato attributo opzionale: Se la macchina a stati deve elaborare questo evento nello stato Established,

  1. L'attributo opzionale CollisionDetectEstablishedState DOVREBBE (SHOULD) essere impostato a TRUE.

Si prega di notare: L'evento OpenCollisionDump può verificarsi in Idle, Connect, Active, OpenSent e OpenConfirm senza che siano impostati attributi opzionali.

Evento 24: NotifMsgVerErr (Errore versione messaggio notifica)

Definizione: Un evento viene generato quando viene ricevuto un messaggio NOTIFICATION con "errore di versione".

Stato: Obbligatorio

Evento 25: NotifMsg (Messaggio notifica)

Definizione: Un evento viene generato quando viene ricevuto un messaggio NOTIFICATION e il codice di errore è qualsiasi cosa tranne "errore di versione".

Stato: Obbligatorio

Evento 26: KeepAliveMsg (Messaggio Keepalive)

Definizione: Un evento viene generato quando viene ricevuto un messaggio KEEPALIVE.

Stato: Obbligatorio

Evento 27: UpdateMsg (Messaggio aggiornamento)

Definizione: Un evento viene generato quando viene ricevuto un messaggio UPDATE valido.

Stato: Obbligatorio

Evento 28: UpdateMsgErr (Errore messaggio aggiornamento)

Definizione: Un evento viene generato quando viene ricevuto un messaggio UPDATE invalido.

Stato: Obbligatorio

8.2. Description of FSM (Descrizione della FSM)

8.2.1. FSM Definition (Definizione FSM)

BGP DEVE (MUST) mantenere una FSM separata per ogni peer configurato. Ogni peer BGP accoppiato in una connessione potenziale tenterà di connettersi all'altro, a meno che non sia configurato per rimanere nello stato idle o configurato per rimanere passivo. Ai fini di questa discussione, il lato attivo o connettente della connessione TCP (il lato di una connessione TCP che invia il primo pacchetto SYN TCP) è chiamato uscente. Il lato passivo o in ascolto (il mittente del primo SYN/ACK) è chiamato una connessione in ingresso. (Vedere la Sezione 8.2.1.1 per informazioni sui termini attivo e passivo utilizzati di seguito.)

Un'implementazione BGP DEVE (MUST) connettersi e ascoltare sulla porta TCP 179 per le connessioni in ingresso oltre a tentare di connettersi ai peer. Per ogni connessione in ingresso, una macchina a stati DEVE (MUST) essere istanziata. Esiste un periodo in cui l'identità del peer all'altro estremo di una connessione in ingresso è nota, ma l'identificatore BGP non è noto. Durante questo tempo, possono esistere sia una connessione in ingresso che una connessione uscente per lo stesso peering configurato. Questo è chiamato collisione di connessione (vedere Sezione 6.8).

Un'implementazione BGP avrà, al massimo, una FSM per ogni peering configurato, più una FSM per ogni connessione TCP in ingresso per la quale il peer non è stato ancora identificato. Ogni FSM corrisponde esattamente a una connessione TCP.

Ci può essere più di una connessione tra una coppia di peer se le connessioni sono configurate per utilizzare una coppia diversa di indirizzi IP. Questo è chiamato più "peering configurati" allo stesso peer.

8.2.1.1. Terms "active" and "passive" (Termini "attivo" e "passivo")

I termini attivo e passivo sono stati nel vocabolario degli operatori Internet per quasi un decennio e si sono dimostrati utili. Le parole attivo e passivo hanno significati leggermente diversi quando applicati a una connessione TCP o a un peer. C'è solo un lato attivo e un lato passivo per qualsiasi connessione TCP, secondo la definizione sopra e la macchina a stati sotto. Quando un altoparlante BGP è configurato come attivo, può finire sul lato attivo o passivo della connessione che alla fine viene stabilita. Una volta completata la connessione TCP, non importa quale estremità fosse attiva e quale fosse passiva. L'unica differenza è su quale lato della connessione TCP si trova il numero di porta 179.

8.2.1.2. FSM and Collision Detection (FSM e rilevamento collisioni)

C'è una FSM per connessione BGP. Quando la collisione di connessione si verifica prima di determinare a quale peer è associata una connessione, possono esistere due connessioni per un peer. Dopo che la collisione di connessione è risolta (vedere Sezione 6.8), la FSM per la connessione che è chiusa DOVREBBE (SHOULD) essere smaltita.

8.2.1.3. FSM and Optional Session Attributes (FSM e attributi di sessione opzionali)

Gli attributi di sessione opzionali specificano attributi che agiscono come flag (TRUE o FALSE) o timer opzionali. Per gli attributi opzionali che agiscono come flag, se l'attributo di sessione opzionale può essere impostato a TRUE sul sistema, le azioni FSM BGP corrispondenti devono essere supportate. Ad esempio, se le seguenti opzioni possono essere impostate in un'implementazione BGP: AutoStart e PassiveTcpEstablishment, allora gli Eventi 3, 4 e 5 devono essere supportati. Se un attributo di sessione opzionale non può essere impostato a TRUE, gli eventi che supportano quel set di opzioni non devono essere supportati.

Ognuno dei timer opzionali (DelayOpenTimer e IdleHoldTimer) ha un gruppo di attributi che sono:

  • flag che indica il supporto,
  • Tempo impostato nel timer
  • Timer.

I due timer opzionali mostrano questo formato:

DelayOpenTimer: DelayOpen, DelayOpenTime, DelayOpenTimer IdleHoldTimer: DampPeerOscillations, IdleHoldTime, IdleHoldTimer

Se il flag che indica il supporto per un timer opzionale (DelayOpen o DampPeerOscillations) non può essere impostato a TRUE, i timer e gli eventi che supportano quell'opzione non devono essere supportati.

8.2.1.4. FSM Event Numbers (Numeri evento FSM)

I numeri evento (1-28) utilizzati in questa descrizione della macchina a stati aiutano a specificare il comportamento della macchina a stati BGP. Le implementazioni POSSONO (MAY) utilizzare questi numeri per fornire informazioni di gestione della rete. La forma esatta di una FSM o degli eventi FSM è specifica per ogni implementazione.

8.2.1.5. FSM Actions that are Implementation Dependent (Azioni FSM che dipendono dall'implementazione)

In certi punti, la FSM BGP specifica che si verificherà l'inizializzazione BGP o che le risorse BGP verranno eliminate. L'inizializzazione della FSM BGP e delle risorse associate dipende dalla porzione di policy dell'implementazione BGP. I dettagli di queste azioni sono al di fuori dell'ambito del documento FSM.

8.2.2. Finite State Machine (Macchina a stati finiti)

Stato Idle (Inattivo):

Inizialmente, la FSM peer BGP si trova nello stato Idle. Di seguito, la FSM peer BGP sarà abbreviata in FSM BGP.

In questo stato, la FSM BGP rifiuta tutte le connessioni BGP in ingresso per questo peer. Nessuna risorsa è allocata al peer. In risposta a un evento ManualStart (Evento 1) o un evento AutomaticStart (Evento 3), il sistema locale:

  • inizializza tutte le risorse BGP per la connessione peer,

  • imposta ConnectRetryCounter a zero,

  • avvia il ConnectRetryTimer con il valore iniziale,

  • inizia una connessione TCP all'altro peer BGP,

  • ascolta una connessione che può essere iniziata dal peer BGP remoto, e

  • cambia il suo stato in Connect.

L'evento ManualStop (Evento 2) e l'evento AutomaticStop (Evento 8) sono ignorati nello stato Idle.

In risposta a un evento ManualStart_with_PassiveTcpEstablishment (Evento 4) o un evento AutomaticStart_with_PassiveTcpEstablishment (Evento 5), il sistema locale:

  • inizializza tutte le risorse BGP,

  • imposta il ConnectRetryCounter a zero,

  • avvia il ConnectRetryTimer con il valore iniziale,

  • ascolta una connessione che può essere iniziata dal peer remoto, e

  • cambia il suo stato in Active.

Il valore esatto del ConnectRetryTimer è una questione locale, ma DOVREBBE (SHOULD) essere sufficientemente grande da consentire l'inizializzazione TCP.

Se l'attributo DampPeerOscillations è impostato a TRUE, i seguenti tre eventi aggiuntivi possono verificarsi nello stato Idle:

  • AutomaticStart_with_DampPeerOscillations (Evento 6),

  • AutomaticStart_with_DampPeerOscillations_and_ PassiveTcpEstablishment (Evento 7),

  • IdleHoldTimer_Expires (Evento 13).

Alla ricezione di questi 3 eventi, il sistema locale utilizzerà questi eventi per prevenire le oscillazioni dei peer. Il metodo per prevenire l'oscillazione persistente dei peer è al di fuori dell'ambito di questo documento.

Qualsiasi altro evento (Eventi 9-12, 15-28) ricevuto nello stato Idle non causa cambiamenti nello stato del sistema locale.

Stato Connect (Connessione):

In questo stato, la FSM BGP sta aspettando che la connessione TCP sia completata.

Gli eventi di avvio (Eventi 1, 3-7) sono ignorati nello stato Connect.

In risposta a un evento ManualStop (Evento 2), il sistema locale:

  • abbandona la connessione TCP,

  • rilascia tutte le risorse BGP,

  • imposta ConnectRetryCounter a zero,

  • arresta il ConnectRetryTimer e imposta ConnectRetryTimer a zero, e

  • cambia il suo stato in Idle.

In risposta all'evento ConnectRetryTimer_Expires (Evento 9), il sistema locale:

  • abbandona la connessione TCP,

  • riavvia il ConnectRetryTimer,

  • arresta il DelayOpenTimer e reimposta il timer a zero,

  • inizia una connessione TCP all'altro peer BGP,

  • continua ad ascoltare una connessione che può essere iniziata dal peer BGP remoto, e

  • rimane nello stato Connect.

Se l'evento DelayOpenTimer_Expires (Evento 12) si verifica nello stato Connect, il sistema locale:

  • invia un messaggio OPEN al suo peer,

  • imposta l'HoldTimer a un valore grande, e

  • cambia il suo stato in OpenSent.

Se la FSM BGP riceve un evento TcpConnection_Valid (Evento 14), la connessione TCP viene elaborata e la connessione rimane nello stato Connect.

Se la FSM BGP riceve un evento Tcp_CR_Invalid (Evento 15), il sistema locale rifiuta la connessione TCP e la connessione rimane nello stato Connect.

Se la connessione TCP ha successo (Evento 16 o Evento 17), il sistema locale controlla l'attributo DelayOpen prima dell'elaborazione. Se l'attributo DelayOpen è impostato a TRUE, il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • imposta il DelayOpenTimer al valore iniziale, e

  • rimane nello stato Connect.

Se l'attributo DelayOpen è impostato a FALSE, il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • completa l'inizializzazione BGP

  • invia un messaggio OPEN al suo peer,

  • imposta l'HoldTimer a un valore grande, e

  • cambia il suo stato in OpenSent.

Un valore HoldTimer di 4 minuti è suggerito.

Se la connessione TCP fallisce (Evento 18), il sistema locale controlla il DelayOpenTimer. Se il DelayOpenTimer è in esecuzione, il sistema locale:

  • riavvia il ConnectRetryTimer con il valore iniziale,

  • arresta il DelayOpenTimer e reimposta il suo valore a zero,

  • continua ad ascoltare una connessione che può essere iniziata dal peer BGP remoto, e

  • cambia il suo stato in Active.

Se il DelayOpenTimer non è in esecuzione, il sistema locale:

  • arresta il ConnectRetryTimer a zero,

  • abbandona la connessione TCP,

  • rilascia tutte le risorse BGP, e

  • cambia il suo stato in Idle.

Se un messaggio OPEN viene ricevuto mentre il DelayOpenTimer è in esecuzione (Evento 20), il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • completa l'inizializzazione BGP,

  • arresta e cancella il DelayOpenTimer (imposta il valore a zero),

  • invia un messaggio OPEN,

  • invia un messaggio KEEPALIVE,

  • se il valore iniziale dell'HoldTimer è non zero,

    • avvia il KeepaliveTimer con il valore iniziale e

    • reimposta l'HoldTimer al valore negoziato,

    altrimenti, se il valore iniziale dell'HoldTimer è zero,

    • reimposta il KeepaliveTimer e

    • reimposta il valore dell'HoldTimer a zero,

  • e cambia il suo stato in OpenConfirm.

Se il valore del campo sistema autonomo è lo stesso del numero sistema autonomo locale, impostare lo stato della connessione su una connessione interna; altrimenti sarà "esterna".

Se il controllo dell'intestazione del messaggio BGP (Evento 21) o il controllo del messaggio OPEN rileva un errore (Evento 22) (vedere Sezione 6.2), il sistema locale:

  • (opzionalmente) Se l'attributo SendNOTIFICATIONwithoutOPEN è impostato a TRUE, allora il sistema locale invia prima un messaggio NOTIFICATION con il codice di errore appropriato, e poi

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se viene ricevuto un messaggio NOTIFICATION con un errore di versione (Evento 24), il sistema locale controlla il DelayOpenTimer. Se il DelayOpenTimer è in esecuzione, il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • arresta e reimposta il DelayOpenTimer (imposta a zero),

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP, e

  • cambia il suo stato in Idle.

Se il DelayOpenTimer non è in esecuzione, il sistema locale:

  • arresta il ConnectRetryTimer e imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a True, e

  • cambia il suo stato in Idle.

In risposta a qualsiasi altro evento (Eventi 8, 10-11, 13, 19, 23, 25-28), il sistema locale:

  • se il ConnectRetryTimer è in esecuzione, arresta e reimposta il ConnectRetryTimer (imposta a zero),

  • se il DelayOpenTimer è in esecuzione, arresta e reimposta il DelayOpenTimer (imposta a zero),

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a True, e

  • cambia il suo stato in Idle.

Stato Active (Attivo):

In questo stato, la FSM BGP sta cercando di acquisire un peer ascoltando e accettando una connessione TCP.

Gli eventi di avvio (Eventi 1, 3-7) sono ignorati nello stato Active.

In risposta a un evento ManualStop (Evento 2), il sistema locale:

  • Se il DelayOpenTimer è in esecuzione e l'attributo di sessione SendNOTIFICATIONwithoutOPEN è impostato, il sistema locale invia una NOTIFICATION con Cease,

  • rilascia tutte le risorse BGP incluso l'arresto del DelayOpenTimer

  • abbandona la connessione TCP,

  • imposta ConnectRetryCounter a zero,

  • arresta il ConnectRetryTimer e imposta il ConnectRetryTimer a zero, e

  • cambia il suo stato in Idle.

In risposta a un evento ConnectRetryTimer_Expires (Evento 9), il sistema locale:

  • riavvia il ConnectRetryTimer (con il valore iniziale),

  • inizia una connessione TCP all'altro peer BGP,

  • continua ad ascoltare una connessione TCP che può essere iniziata da un peer BGP remoto, e

  • cambia il suo stato in Connect.

Se il sistema locale riceve un evento DelayOpenTimer_Expires (Evento 12), il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • arresta e cancella il DelayOpenTimer (imposta a zero),

  • completa l'inizializzazione BGP,

  • invia il messaggio OPEN al suo peer remoto,

  • imposta il suo timer di mantenimento a un valore grande, e

  • cambia il suo stato in OpenSent.

Un valore HoldTimer di 4 minuti è anche suggerito per questa transizione di stato.

Se il sistema locale riceve un evento TcpConnection_Valid (Evento 14), il sistema locale elabora i flag di connessione TCP e rimane nello stato Active.

Se il sistema locale riceve un evento Tcp_CR_Invalid (Evento 15), il sistema locale rifiuta la connessione TCP e rimane nello stato Active.

In risposta al successo di una connessione TCP (Evento 16 o Evento 17), il sistema locale controlla l'attributo opzionale DelayOpen prima dell'elaborazione.

Se l'attributo DelayOpen è impostato a TRUE, il sistema locale:

  • arresta il ConnectRetryTimer e imposta il ConnectRetryTimer a zero,

  • imposta il DelayOpenTimer al valore iniziale (DelayOpenTime), e

  • rimane nello stato Active.

Se l'attributo DelayOpen è impostato a FALSE, il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • completa l'inizializzazione BGP,

  • invia il messaggio OPEN al suo peer,

  • imposta il suo HoldTimer a un valore grande, e

  • cambia il suo stato in OpenSent.

Un valore HoldTimer di 4 minuti è suggerito come "valore grande" per l'HoldTimer.

Se il sistema locale riceve un evento TcpConnectionFails (Evento 18), il sistema locale:

  • riavvia il ConnectRetryTimer (con il valore iniziale),

  • arresta e cancella il DelayOpenTimer (imposta il valore a zero),

  • rilascia tutte le risorse BGP,

  • incrementa il ConnectRetryCounter di 1,

  • opzionalmente esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se un messaggio OPEN viene ricevuto e il DelayOpenTimer è in esecuzione (Evento 20), il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • arresta e cancella il DelayOpenTimer (imposta a zero),

  • completa l'inizializzazione BGP,

  • invia un messaggio OPEN,

  • invia un messaggio KEEPALIVE,

  • se il valore dell'HoldTimer è non zero,

    • avvia il KeepaliveTimer al valore iniziale,

    • reimposta l'HoldTimer al valore negoziato,

    altrimenti se l'HoldTimer è zero

    • reimposta il KeepaliveTimer (imposta a zero),

    • reimposta l'HoldTimer a zero, e

  • cambia il suo stato in OpenConfirm.

Se il valore del campo sistema autonomo è lo stesso del numero sistema autonomo locale, impostare lo stato della connessione su una connessione interna; altrimenti sarà esterno.

Se il controllo dell'intestazione del messaggio BGP (Evento 21) o il controllo del messaggio OPEN rileva un errore (Evento 22) (vedere Sezione 6.2), il sistema locale:

  • (opzionalmente) invia un messaggio NOTIFICATION con il codice di errore appropriato se l'attributo SendNOTIFICATIONwithoutOPEN è impostato a TRUE,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se viene ricevuto un messaggio NOTIFICATION con un errore di versione (Evento 24), il sistema locale controlla il DelayOpenTimer. Se il DelayOpenTimer è in esecuzione, il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • arresta e reimposta il DelayOpenTimer (imposta a zero),

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP, e

  • cambia il suo stato in Idle.

Se il DelayOpenTimer non è in esecuzione, il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

In risposta a qualsiasi altro evento (Eventi 8, 10-11, 13, 19, 23, 25-28), il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di uno,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

OpenSent:

In questo stato, la FSM BGP attende un messaggio OPEN dal suo peer.

Gli eventi di avvio (Eventi 1, 3-7) sono ignorati nello stato OpenSent.

Se un evento ManualStop (Evento 2) viene emesso nello stato OpenSent, il sistema locale:

  • invia la NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • imposta il ConnectRetryCounter a zero, e

  • cambia il suo stato in Idle.

Se un evento AutomaticStop (Evento 8) viene emesso nello stato OpenSent, il sistema locale:

  • invia la NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se l'HoldTimer_Expires (Evento 10), il sistema locale:

  • invia un messaggio NOTIFICATION con il codice di errore Hold Timer Expired,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se viene ricevuto un evento TcpConnection_Valid (Evento 14), Tcp_CR_Acked (Evento 16) o TcpConnectionConfirmed (Evento 17), una seconda connessione TCP potrebbe essere in corso. Questa seconda connessione TCP viene tracciata secondo l'elaborazione della collisione di connessione (Sezione 6.8) fino a quando non viene ricevuto un messaggio OPEN.

Una richiesta di connessione TCP per una porta invalida (Tcp_CR_Invalid (Evento 15)) viene ignorata.

Se viene ricevuto un evento TcpConnectionFails (Evento 18), il sistema locale:

  • chiude la connessione BGP,

  • riavvia il ConnectRetryTimer,

  • continua ad ascoltare una connessione che può essere iniziata dal peer BGP remoto, e

  • cambia il suo stato in Active.

Quando viene ricevuto un messaggio OPEN, tutti i campi vengono controllati per la correttezza. Se non ci sono errori nel messaggio OPEN (Evento 19), il sistema locale:

  • reimposta il DelayOpenTimer a zero,

  • imposta il ConnectRetryTimer BGP a zero,

  • invia un messaggio KEEPALIVE, e

  • imposta un KeepaliveTimer (tramite il testo seguente)

  • imposta l'HoldTimer secondo il valore negoziato (vedere Sezione 4.2),

  • cambia il suo stato in OpenConfirm.

Se il valore del tempo di mantenimento negoziato è zero, allora l'HoldTimer e il KeepaliveTimer non vengono avviati. Se il valore del campo Sistema autonomo è lo stesso del numero di sistema autonomo locale, allora la connessione è una connessione "interna"; altrimenti, è una connessione "esterna". (Questo avrà un impatto sull'elaborazione UPDATE come descritto di seguito.)

Se il controllo dell'intestazione del messaggio BGP (Evento 21) o il controllo del messaggio OPEN rileva un errore (Evento 22)(vedere Sezione 6.2), il sistema locale:

  • invia un messaggio NOTIFICATION con il codice di errore appropriato,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è TRUE, e

  • cambia il suo stato in Idle.

I meccanismi di rilevamento delle collisioni (Sezione 6.8) devono essere applicati quando viene ricevuto un messaggio BGP OPEN valido (Evento 19 o Evento 20). Si prega di fare riferimento alla Sezione 6.8 per i dettagli del confronto.

Un evento CollisionDetectDump si verifica quando l'implementazione BGP determina, con mezzi al di fuori dell'ambito di questo documento, che si è verificata una collisione di connessione.

Se una connessione nello stato OpenSent è determinata essere la connessione che deve essere chiusa, un OpenCollisionDump (Evento 23) viene segnalato alla macchina a stati. Se tale evento viene ricevuto nello stato OpenSent, il sistema locale:

  • invia una NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se viene ricevuto un messaggio NOTIFICATION con un errore di versione (Evento 24), il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP, e

  • cambia il suo stato in Idle.

In risposta a qualsiasi altro evento (Eventi 9, 11-13, 20, 25-28), il sistema locale:

  • invia la NOTIFICATION con il codice di errore Finite State Machine Error,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Stato OpenConfirm:

In questo stato, BGP attende un messaggio KEEPALIVE o NOTIFICATION.

Qualsiasi evento di avvio (Eventi 1, 3-7) viene ignorato nello stato OpenConfirm.

In risposta a un evento ManualStop (Evento 2) iniziato dall'operatore, il sistema locale:

  • invia il messaggio NOTIFICATION con Cease,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • imposta il ConnectRetryCounter a zero,

  • imposta il ConnectRetryTimer a zero, e

  • cambia il suo stato in Idle.

In risposta all'evento AutomaticStop iniziato dal sistema (Evento 8), il sistema locale:

  • invia il messaggio NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se l'evento HoldTimer_Expires (Evento 10) si verifica prima che venga ricevuto un messaggio KEEPALIVE, il sistema locale:

  • invia il messaggio NOTIFICATION con il codice di errore Hold Timer Expired,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se il sistema locale riceve un evento KeepaliveTimer_Expires (Evento 11), il sistema locale:

  • invia un messaggio KEEPALIVE,

  • riavvia il KeepaliveTimer, e

  • rimane nello stato OpenConfirmed.

In caso di evento TcpConnection_Valid (Evento 14) o successo di una connessione TCP (Evento 16 o Evento 17) durante OpenConfirm, il sistema locale deve tracciare la seconda connessione.

Se viene tentata una connessione TCP con una porta invalida (Evento 15), il sistema locale ignorerà il secondo tentativo di connessione.

Se il sistema locale riceve un evento TcpConnectionFails (Evento 18) dal TCP sottostante o un messaggio NOTIFICATION (Evento 25), il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se il sistema locale riceve un messaggio NOTIFICATION con un errore di versione (NotifMsgVerErr (Evento 24)), il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP, e

  • cambia il suo stato in Idle.

Se il sistema locale riceve un messaggio OPEN valido (BGPOpen (Evento 19)), la funzione di rilevamento delle collisioni viene elaborata secondo la Sezione 6.8. Se questa connessione deve essere abbandonata a causa di una collisione di connessione, il sistema locale:

  • invia una NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP (invia TCP FIN),

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se viene ricevuto un messaggio OPEN, tutti i campi vengono controllati per la correttezza. Se il controllo dell'intestazione del messaggio BGP (BGPHeaderErr (Evento 21)) o il controllo del messaggio OPEN rileva un errore (vedere Sezione 6.2) (BGPOpenMsgErr (Evento 22)), il sistema locale:

  • invia un messaggio NOTIFICATION con il codice di errore appropriato,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se, durante l'elaborazione di un altro messaggio OPEN, l'implementazione BGP determina, con un mezzo al di fuori dell'ambito di questo documento, che si è verificata una collisione di connessione e che questa connessione deve essere chiusa, il sistema locale emetterà un evento OpenCollisionDump (Evento 23). Quando il sistema locale riceve un evento OpenCollisionDump (Evento 23), il sistema locale:

  • invia una NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se il sistema locale riceve un messaggio KEEPALIVE (KeepAliveMsg (Evento 26)), il sistema locale:

  • riavvia l'HoldTimer e

  • cambia il suo stato in Established.

In risposta a qualsiasi altro evento (Eventi 9, 12-13, 20, 27-28), il sistema locale:

  • invia una NOTIFICATION con un codice di Finite State Machine Error,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Stato Established (Stabilito):

Nello stato Established, la FSM BGP può scambiare messaggi UPDATE, NOTIFICATION e KEEPALIVE con il suo peer.

Qualsiasi evento di avvio (Eventi 1, 3-7) viene ignorato nello stato Established.

In risposta a un evento ManualStop (iniziato da un operatore) (Evento 2), il sistema locale:

  • invia il messaggio NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • elimina tutte le route associate a questa connessione,

  • rilascia le risorse BGP,

  • abbandona la connessione TCP,

  • imposta il ConnectRetryCounter a zero, e

  • cambia il suo stato in Idle.

In risposta a un evento AutomaticStop (Evento 8), il sistema locale:

  • invia una NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero

  • elimina tutte le route associate a questa connessione,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Una ragione per un evento AutomaticStop è: Un BGP riceve messaggi UPDATE con un numero di prefissi per un determinato peer tale che il totale dei prefissi ricevuti supera il numero massimo di prefissi configurato. Il sistema locale disconnette automaticamente il peer.

Se si verifica l'evento HoldTimer_Expires (Evento 10), il sistema locale:

  • invia un messaggio NOTIFICATION con il codice di errore Hold Timer Expired,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se si verifica l'evento KeepaliveTimer_Expires (Evento 11), il sistema locale:

  • invia un messaggio KEEPALIVE, e

  • riavvia il suo KeepaliveTimer, a meno che il valore HoldTime negoziato sia zero.

Ogni volta che il sistema locale invia un messaggio KEEPALIVE o UPDATE, riavvia il suo KeepaliveTimer, a meno che il valore HoldTime negoziato sia zero.

Un TcpConnection_Valid (Evento 14), ricevuto per una porta valida, farà tracciare la seconda connessione.

Una connessione TCP invalida (evento Tcp_CR_Invalid (Evento 15)) verrà ignorata.

In risposta a un'indicazione che la connessione TCP è stata stabilita con successo (Evento 16 o Evento 17), la seconda connessione DEVE (SHALL) essere tracciata fino a quando non invia un messaggio OPEN.

Se viene ricevuto un messaggio OPEN valido (BGPOpen (Evento 19)), e se l'attributo opzionale CollisionDetectEstablishedState è TRUE, il messaggio OPEN verrà controllato per vedere se entra in collisione (Sezione 6.8) con un'altra connessione. Se l'implementazione BGP determina che questa connessione deve essere terminata, elaborerà un evento OpenCollisionDump (Evento 23). Se questa connessione deve essere terminata, il sistema locale:

  • invia una NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • elimina tutte le route associate a questa connessione,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se il sistema locale riceve un messaggio NOTIFICATION (Evento 24 o Evento 25) o un TcpConnectionFails (Evento 18) dal TCP sottostante, il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • elimina tutte le route associate a questa connessione,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • cambia il suo stato in Idle.

Se il sistema locale riceve un messaggio KEEPALIVE (Evento 26), il sistema locale:

  • riavvia il suo HoldTimer, se il valore HoldTime negoziato è non zero, e

  • rimane nello stato Established.

Se il sistema locale riceve un messaggio UPDATE (Evento 27), il sistema locale:

  • elabora il messaggio,

  • riavvia il suo HoldTimer, se il valore HoldTime negoziato è non zero, e

  • rimane nello stato Established.

Se il sistema locale riceve un messaggio UPDATE e la procedura di gestione degli errori del messaggio UPDATE (vedere Sezione 6.3) rileva un errore (Evento 28), il sistema locale:

  • invia un messaggio NOTIFICATION con un errore Update,

  • imposta il ConnectRetryTimer a zero,

  • elimina tutte le route associate a questa connessione,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

In risposta a qualsiasi altro evento (Eventi 9, 12-13, 20-22), il sistema locale:

  • invia un messaggio NOTIFICATION con il codice di errore Finite State Machine Error,

  • elimina tutte le route associate a questa connessione,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.