跳到主要内容

8.2.2. Finite State Machine (Endliche Zustandsmaschine)

8.2.2. Finite State Machine (Endliche Zustandsmaschine)

Idle-Zustand:

Anfänglich befindet sich die BGP-Peer-FSM im Idle-Zustand. Im Folgenden wird die BGP-Peer-FSM auf BGP-FSM verkürzt.

In diesem Zustand lehnt die BGP-FSM alle eingehenden BGP-Verbindungen für diesen Peer ab. Es werden keine Ressourcen dem Peer zugewiesen. Als Reaktion auf ein ManualStart-Ereignis (Ereignis 1) oder ein AutomaticStart-Ereignis (Ereignis 3) führt das lokale System Folgendes aus:

  • initialisiert alle BGP-Ressourcen für die Peer-Verbindung,

  • setzt ConnectRetryCounter auf Null,

  • startet den ConnectRetryTimer mit dem Anfangswert,

  • initiiert eine TCP-Verbindung zum anderen BGP-Peer,

  • lauscht auf eine Verbindung, die vom entfernten BGP-Peer initiiert werden kann, und

  • ändert seinen Zustand zu Connect.

Das ManualStop-Ereignis (Ereignis 2) und das AutomaticStop-Ereignis (Ereignis 8) werden im Idle-Zustand ignoriert.

Als Reaktion auf ein ManualStart_with_PassiveTcpEstablishment-Ereignis (Ereignis 4) oder ein AutomaticStart_with_PassiveTcpEstablishment-Ereignis (Ereignis 5) führt das lokale System Folgendes aus:

  • initialisiert alle BGP-Ressourcen,

  • setzt den ConnectRetryCounter auf Null,

  • startet den ConnectRetryTimer mit dem Anfangswert,

  • lauscht auf eine Verbindung, die vom entfernten Peer initiiert werden kann, und

  • ändert seinen Zustand zu Active.

Der genaue Wert des ConnectRetryTimers ist eine lokale Angelegenheit, aber er SOLLTE (SHOULD) ausreichend groß sein, um die TCP-Initialisierung zu ermöglichen.

Wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, können die folgenden drei zusätzlichen Ereignisse im Idle-Zustand auftreten:

  • AutomaticStart_with_DampPeerOscillations (Ereignis 6),

  • AutomaticStart_with_DampPeerOscillations_and_PassiveTcpEstablishment (Ereignis 7),

  • IdleHoldTimer_Expires (Ereignis 13).

Beim Empfang dieser 3 Ereignisse wird das lokale System diese Ereignisse verwenden, um Peer-Oszillationen zu verhindern. Die Methode zur Verhinderung persistenter Peer-Oszillationen liegt außerhalb des Geltungsbereichs dieses Dokuments.

Jedes andere Ereignis (Ereignisse 9-12, 15-28), das im Idle-Zustand empfangen wird, verursacht keine Änderung im Zustand des lokalen Systems.

Connect-Zustand:

In diesem Zustand wartet die BGP-FSM darauf, dass die TCP-Verbindung abgeschlossen wird.

Die Start-Ereignisse (Ereignisse 1, 3-7) werden im Connect-Zustand ignoriert.

Als Reaktion auf ein ManualStop-Ereignis (Ereignis 2) führt das lokale System Folgendes aus:

  • lässt die TCP-Verbindung fallen,

  • gibt alle BGP-Ressourcen frei,

  • setzt ConnectRetryCounter auf Null,

  • stoppt den ConnectRetryTimer und setzt ConnectRetryTimer auf Null, und

  • ändert seinen Zustand zu Idle.

Als Reaktion auf das ConnectRetryTimer_Expires-Ereignis (Ereignis 9) führt das lokale System Folgendes aus:

  • lässt die TCP-Verbindung fallen,

  • startet den ConnectRetryTimer neu,

  • stoppt den DelayOpenTimer und setzt den Timer auf Null zurück,

  • initiiert eine TCP-Verbindung zum anderen BGP-Peer,

  • lauscht weiter auf eine Verbindung, die vom entfernten BGP-Peer initiiert werden kann, und

  • bleibt im Connect-Zustand.

Wenn das DelayOpenTimer_Expires-Ereignis (Ereignis 12) im Connect-Zustand auftritt, führt das lokale System Folgendes aus:

  • sendet eine OPEN-Nachricht an seinen Peer,

  • setzt den HoldTimer auf einen großen Wert, und

  • ändert seinen Zustand zu OpenSent.

Wenn die BGP-FSM ein TcpConnection_Valid-Ereignis (Ereignis 14) empfängt, wird die TCP-Verbindung verarbeitet, und die Verbindung bleibt im Connect-Zustand.

Wenn die BGP-FSM ein Tcp_CR_Invalid-Ereignis (Ereignis 15) empfängt, lehnt das lokale System die TCP-Verbindung ab, und die Verbindung bleibt im Connect-Zustand.

Wenn die TCP-Verbindung erfolgreich ist (Ereignis 16 oder Ereignis 17), überprüft das lokale System das DelayOpen-Attribut vor der Verarbeitung. Wenn das DelayOpen-Attribut auf TRUE gesetzt ist, führt das lokale System Folgendes aus:

  • stoppt den ConnectRetryTimer (falls laufend) und setzt den ConnectRetryTimer auf Null,

  • setzt den DelayOpenTimer auf den Anfangswert, und

  • bleibt im Connect-Zustand.

Wenn das DelayOpen-Attribut auf FALSE gesetzt ist, führt das lokale System Folgendes aus:

  • stoppt den ConnectRetryTimer (falls laufend) und setzt den ConnectRetryTimer auf Null,

  • schließt die BGP-Initialisierung ab

  • sendet eine OPEN-Nachricht an seinen Peer,

  • setzt den HoldTimer auf einen großen Wert, und

  • ändert seinen Zustand zu OpenSent.

Ein HoldTimer-Wert von 4 Minuten wird vorgeschlagen.

Wenn die TCP-Verbindung fehlschlägt (Ereignis 18), überprüft das lokale System den DelayOpenTimer. Wenn der DelayOpenTimer läuft, führt das lokale System Folgendes aus:

  • startet den ConnectRetryTimer mit dem Anfangswert neu,

  • stoppt den DelayOpenTimer und setzt seinen Wert auf Null zurück,

  • lauscht weiter auf eine Verbindung, die vom entfernten BGP-Peer initiiert werden kann, und

  • ändert seinen Zustand zu Active.

Wenn der DelayOpenTimer nicht läuft, führt das lokale System Folgendes aus:

  • stoppt den ConnectRetryTimer auf Null,

  • lässt die TCP-Verbindung fallen,

  • gibt alle BGP-Ressourcen frei, und

  • ändert seinen Zustand zu Idle.

Wenn eine OPEN-Nachricht empfangen wird, während der DelayOpenTimer läuft (Ereignis 20), führt das lokale System Folgendes aus:

  • stoppt den ConnectRetryTimer (falls laufend) und setzt den ConnectRetryTimer auf Null,

  • schließt die BGP-Initialisierung ab,

  • stoppt und löscht den DelayOpenTimer (setzt den Wert auf Null),

  • sendet eine OPEN-Nachricht,

  • sendet eine KEEPALIVE-Nachricht,

  • wenn der Anfangswert des HoldTimers nicht null ist,

    • startet den KeepaliveTimer mit dem Anfangswert und

    • setzt den HoldTimer auf den ausgehandelten Wert zurück,

    ansonsten, wenn der Anfangswert des HoldTimers null ist,

    • setzt den KeepaliveTimer zurück und

    • setzt den HoldTimer-Wert auf Null zurück,

  • und ändert seinen Zustand zu OpenConfirm.

Wenn der Wert des Autonomous-System-Feldes mit der lokalen Autonomous-System-Nummer übereinstimmt, setzen Sie den Verbindungsstatus auf eine interne Verbindung; andernfalls wird es "extern" sein.

Wenn die BGP-Nachrichten-Header-Überprüfung (Ereignis 21) oder die OPEN-Nachrichten-Überprüfung einen Fehler erkennt (Ereignis 22) (siehe Abschnitt 6.2), führt das lokale System Folgendes aus:

  • (optional) Wenn das SendNOTIFICATIONwithoutOPEN-Attribut auf TRUE gesetzt ist, sendet das lokale System zuerst eine NOTIFICATION-Nachricht mit dem entsprechenden Fehlercode, und dann

  • stoppt den ConnectRetryTimer (falls laufend) und setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn eine NOTIFICATION-Nachricht mit einem Versionsfehler empfangen wird (Ereignis 24), überprüft das lokale System den DelayOpenTimer. Wenn der DelayOpenTimer läuft, führt das lokale System Folgendes aus:

  • stoppt den ConnectRetryTimer (falls laufend) und setzt den ConnectRetryTimer auf Null,

  • stoppt und setzt den DelayOpenTimer zurück (setzt auf Null),

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen, und

  • ändert seinen Zustand zu Idle.

Wenn der DelayOpenTimer nicht läuft, führt das lokale System Folgendes aus:

  • stoppt den ConnectRetryTimer und setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf True gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Als Reaktion auf alle anderen Ereignisse (Ereignisse 8, 10-11, 13, 19, 23, 25-28) führt das lokale System Folgendes aus:

  • wenn der ConnectRetryTimer läuft, stoppt und setzt den ConnectRetryTimer zurück (setzt auf Null),

  • wenn der DelayOpenTimer läuft, stoppt und setzt den DelayOpenTimer zurück (setzt auf Null),

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf True gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Active-Zustand:

In diesem Zustand versucht die BGP-FSM, einen Peer zu erwerben, indem sie auf eine TCP-Verbindung lauscht und diese akzeptiert.

Die Start-Ereignisse (Ereignisse 1, 3-7) werden im Active-Zustand ignoriert.

Als Reaktion auf ein ManualStop-Ereignis (Ereignis 2) führt das lokale System Folgendes aus:

  • Wenn der DelayOpenTimer läuft und das SendNOTIFICATIONwithoutOPEN-Sitzungsattribut gesetzt ist, sendet das lokale System eine NOTIFICATION mit Cease,

  • gibt alle BGP-Ressourcen frei, einschließlich des Stoppens des DelayOpenTimers

  • lässt die TCP-Verbindung fallen,

  • setzt ConnectRetryCounter auf Null,

  • stoppt den ConnectRetryTimer und setzt den ConnectRetryTimer auf Null, und

  • ändert seinen Zustand zu Idle.

Als Reaktion auf ein ConnectRetryTimer_Expires-Ereignis (Ereignis 9) führt das lokale System Folgendes aus:

  • startet den ConnectRetryTimer (mit Anfangswert) neu,

  • initiiert eine TCP-Verbindung zum anderen BGP-Peer,

  • lauscht weiter auf eine TCP-Verbindung, die von einem entfernten BGP-Peer initiiert werden kann, und

  • ändert seinen Zustand zu Connect.

Wenn das lokale System ein DelayOpenTimer_Expires-Ereignis (Ereignis 12) empfängt, führt das lokale System Folgendes aus:

  • setzt den ConnectRetryTimer auf Null,

  • stoppt und löscht den DelayOpenTimer (setzt auf Null),

  • schließt die BGP-Initialisierung ab,

  • sendet die OPEN-Nachricht an seinen entfernten Peer,

  • setzt seinen Hold-Timer auf einen großen Wert, und

  • ändert seinen Zustand zu OpenSent.

Ein HoldTimer-Wert von 4 Minuten wird auch für diesen Zustandsübergang vorgeschlagen.

Wenn das lokale System ein TcpConnection_Valid-Ereignis (Ereignis 14) empfängt, verarbeitet das lokale System die TCP-Verbindungs-Flags und bleibt im Active-Zustand.

Wenn das lokale System ein Tcp_CR_Invalid-Ereignis (Ereignis 15) empfängt, lehnt das lokale System die TCP-Verbindung ab und bleibt im Active-Zustand.

Als Reaktion auf den Erfolg einer TCP-Verbindung (Ereignis 16 oder Ereignis 17) überprüft das lokale System das optionale DelayOpen-Attribut vor der Verarbeitung.

Wenn das DelayOpen-Attribut auf TRUE gesetzt ist, führt das lokale System Folgendes aus:

- stoppt den ConnectRetryTimer und setzt den ConnectRetryTimer auf Null,

- setzt den DelayOpenTimer auf den Anfangswert (DelayOpenTime), und

- bleibt im Active-Zustand.

Wenn das DelayOpen-Attribut auf FALSE gesetzt ist, führt das lokale System Folgendes aus:

- setzt den ConnectRetryTimer auf Null,

- schließt die BGP-Initialisierung ab,

- sendet die OPEN-Nachricht an seinen Peer,

- setzt seinen HoldTimer auf einen großen Wert, und

- ändert seinen Zustand zu OpenSent.

Ein HoldTimer-Wert von 4 Minuten wird als "großer Wert" für den HoldTimer vorgeschlagen.

Wenn das lokale System ein TcpConnectionFails-Ereignis (Ereignis 18) empfängt, führt das lokale System Folgendes aus:

  • startet den ConnectRetryTimer (mit dem Anfangswert) neu,

  • stoppt und löscht den DelayOpenTimer (setzt den Wert auf Null),

  • gibt alle BGP-Ressourcen frei,

  • erhöht den ConnectRetryCounter um 1,

  • führt optional Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn eine OPEN-Nachricht empfangen wird und der DelayOpenTimer läuft (Ereignis 20), führt das lokale System Folgendes aus:

  • stoppt den ConnectRetryTimer (falls laufend) und setzt den ConnectRetryTimer auf Null,

  • stoppt und löscht den DelayOpenTimer (setzt auf Null),

  • schließt die BGP-Initialisierung ab,

  • sendet eine OPEN-Nachricht,

  • sendet eine KEEPALIVE-Nachricht,

  • wenn der HoldTimer-Wert nicht null ist,

    • startet den KeepaliveTimer auf den Anfangswert,

    • setzt den HoldTimer auf den ausgehandelten Wert zurück,

    ansonsten, wenn der HoldTimer null ist

    • setzt den KeepaliveTimer zurück (setzt auf Null),

    • setzt den HoldTimer auf Null zurück, und

  • ändert seinen Zustand zu OpenConfirm.

Wenn der Wert des Autonomous-System-Feldes mit der lokalen Autonomous-System-Nummer übereinstimmt, setzen Sie den Verbindungsstatus auf eine interne Verbindung; andernfalls wird es extern sein.

Wenn die BGP-Nachrichten-Header-Überprüfung (Ereignis 21) oder die OPEN-Nachrichten-Überprüfung einen Fehler erkennt (Ereignis 22) (siehe Abschnitt 6.2), führt das lokale System Folgendes aus:

  • (optional) sendet eine NOTIFICATION-Nachricht mit dem entsprechenden Fehlercode, wenn das SendNOTIFICATIONwithoutOPEN-Attribut auf TRUE gesetzt ist,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn eine NOTIFICATION-Nachricht mit einem Versionsfehler empfangen wird (Ereignis 24), überprüft das lokale System den DelayOpenTimer. Wenn der DelayOpenTimer läuft, führt das lokale System Folgendes aus:

  • stoppt den ConnectRetryTimer (falls laufend) und setzt den ConnectRetryTimer auf Null,

  • stoppt und setzt den DelayOpenTimer zurück (setzt auf Null),

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen, und

  • ändert seinen Zustand zu Idle.

Wenn der DelayOpenTimer nicht läuft, führt das lokale System Folgendes aus:

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Als Reaktion auf alle anderen Ereignisse (Ereignisse 8, 10-11, 13, 19, 23, 25-28) führt das lokale System Folgendes aus:

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um eins,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

OpenSent:

In diesem Zustand wartet die BGP-FSM auf eine OPEN-Nachricht von ihrem Peer.

Die Start-Ereignisse (Ereignisse 1, 3-7) werden im OpenSent-Zustand ignoriert.

Wenn ein ManualStop-Ereignis (Ereignis 2) im OpenSent-Zustand ausgegeben wird, führt das lokale System Folgendes aus:

  • sendet die NOTIFICATION mit Cease,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • setzt den ConnectRetryCounter auf Null, und

  • ändert seinen Zustand zu Idle.

Wenn ein AutomaticStop-Ereignis (Ereignis 8) im OpenSent-Zustand ausgegeben wird, führt das lokale System Folgendes aus:

  • sendet die NOTIFICATION mit Cease,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn der HoldTimer_Expires (Ereignis 10) auftritt, führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION-Nachricht mit dem Fehlercode Hold Timer Expired,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn ein TcpConnection_Valid- (Ereignis 14), Tcp_CR_Acked- (Ereignis 16) oder TcpConnectionConfirmed-Ereignis (Ereignis 17) empfangen wird, kann eine zweite TCP-Verbindung im Gange sein. Diese zweite TCP-Verbindung wird gemäß der Verbindungskollisionsverarbeitung (Abschnitt 6.8) verfolgt, bis eine OPEN-Nachricht empfangen wird.

Eine TCP-Verbindungsanfrage für einen ungültigen Port (Tcp_CR_Invalid (Ereignis 15)) wird ignoriert.

Wenn ein TcpConnectionFails-Ereignis (Ereignis 18) empfangen wird, führt das lokale System Folgendes aus:

  • schließt die BGP-Verbindung,

  • startet den ConnectRetryTimer neu,

  • lauscht weiter auf eine Verbindung, die vom entfernten BGP-Peer initiiert werden kann, und

  • ändert seinen Zustand zu Active.

Wenn eine OPEN-Nachricht empfangen wird, werden alle Felder auf Korrektheit überprüft. Wenn es keine Fehler in der OPEN-Nachricht gibt (Ereignis 19), führt das lokale System Folgendes aus:

  • setzt den DelayOpenTimer auf Null zurück,

  • setzt den BGP-ConnectRetryTimer auf Null,

  • sendet eine KEEPALIVE-Nachricht, und

  • setzt einen KeepaliveTimer (über den untenstehenden Text)

  • setzt den HoldTimer gemäß dem ausgehandelten Wert (siehe Abschnitt 4.2),

  • ändert seinen Zustand zu OpenConfirm.

Wenn der ausgehandelte Hold-Time-Wert null ist, werden der HoldTimer und der KeepaliveTimer nicht gestartet. Wenn der Wert des Autonomous-System-Feldes mit der lokalen Autonomous-System-Nummer übereinstimmt, ist die Verbindung eine "interne" Verbindung; andernfalls ist es eine "externe" Verbindung. (Dies wird sich auf die UPDATE-Verarbeitung auswirken, wie unten beschrieben.)

Wenn die BGP-Nachrichten-Header-Überprüfung (Ereignis 21) oder die OPEN-Nachrichten-Überprüfung einen Fehler erkennt (Ereignis 22) (siehe Abschnitt 6.2), führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION-Nachricht mit dem entsprechenden Fehlercode,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut TRUE ist, und

  • ändert seinen Zustand zu Idle.

Kollisionserkennungsmechanismen (Abschnitt 6.8) müssen angewendet werden, wenn eine gültige BGP-OPEN-Nachricht empfangen wird (Ereignis 19 oder Ereignis 20). Bitte beziehen Sie sich auf Abschnitt 6.8 für die Details des Vergleichs.

Ein CollisionDetectDump-Ereignis tritt auf, wenn die BGP-Implementierung durch Mittel außerhalb des Geltungsbereichs dieses Dokuments bestimmt, dass eine Verbindungskollision aufgetreten ist.

Wenn eine Verbindung im OpenSent-Zustand als die Verbindung bestimmt wird, die geschlossen werden muss, wird ein OpenCollisionDump (Ereignis 23) an die Zustandsmaschine signalisiert. Wenn ein solches Ereignis im OpenSent-Zustand empfangen wird, führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION mit Cease,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn eine NOTIFICATION-Nachricht mit einem Versionsfehler empfangen wird (Ereignis 24), führt das lokale System Folgendes aus:

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen, und

  • ändert seinen Zustand zu Idle.

Als Reaktion auf alle anderen Ereignisse (Ereignisse 9, 11-13, 20, 25-28) führt das lokale System Folgendes aus:

  • sendet die NOTIFICATION mit dem Fehlercode Finite State Machine Error,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

OpenConfirm-Zustand:

In diesem Zustand wartet BGP auf eine KEEPALIVE- oder NOTIFICATION-Nachricht.

Jedes Start-Ereignis (Ereignisse 1, 3-7) wird im OpenConfirm-Zustand ignoriert.

Als Reaktion auf ein vom Operator initiiertes ManualStop-Ereignis (Ereignis 2) führt das lokale System Folgendes aus:

  • sendet die NOTIFICATION-Nachricht mit Cease,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • setzt den ConnectRetryCounter auf Null,

  • setzt den ConnectRetryTimer auf Null, und

  • ändert seinen Zustand zu Idle.

Als Reaktion auf das vom System initiierte AutomaticStop-Ereignis (Ereignis 8) führt das lokale System Folgendes aus:

  • sendet die NOTIFICATION-Nachricht mit Cease,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn das HoldTimer_Expires-Ereignis (Ereignis 10) eintritt, bevor eine KEEPALIVE-Nachricht empfangen wird, führt das lokale System Folgendes aus:

  • sendet die NOTIFICATION-Nachricht mit dem Fehlercode Hold Timer Expired,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn das lokale System ein KeepaliveTimer_Expires-Ereignis (Ereignis 11) empfängt, führt das lokale System Folgendes aus:

  • sendet eine KEEPALIVE-Nachricht,

  • startet den KeepaliveTimer neu, und

  • bleibt im OpenConfirmed-Zustand.

Im Fall eines TcpConnection_Valid-Ereignisses (Ereignis 14) oder des Erfolgs einer TCP-Verbindung (Ereignis 16 oder Ereignis 17) während OpenConfirm muss das lokale System die zweite Verbindung verfolgen.

Wenn eine TCP-Verbindung mit einem ungültigen Port versucht wird (Ereignis 15), ignoriert das lokale System den zweiten Verbindungsversuch.

Wenn das lokale System ein TcpConnectionFails-Ereignis (Ereignis 18) vom zugrunde liegenden TCP oder eine NOTIFICATION-Nachricht (Ereignis 25) empfängt, führt das lokale System Folgendes aus:

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn das lokale System eine NOTIFICATION-Nachricht mit einem Versionsfehler empfängt (NotifMsgVerErr (Ereignis 24)), führt das lokale System Folgendes aus:

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen, und

  • ändert seinen Zustand zu Idle.

Wenn das lokale System eine gültige OPEN-Nachricht empfängt (BGPOpen (Ereignis 19)), wird die Kollisionserkennungsfunktion gemäß Abschnitt 6.8 verarbeitet. Wenn diese Verbindung aufgrund einer Verbindungskollision fallen gelassen werden soll, führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION mit Cease,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen (sendet TCP FIN),

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn eine OPEN-Nachricht empfangen wird, werden alle Felder auf Korrektheit überprüft. Wenn die BGP-Nachrichten-Header-Überprüfung (BGPHeaderErr (Ereignis 21)) oder die OPEN-Nachrichten-Überprüfung einen Fehler erkennt (siehe Abschnitt 6.2) (BGPOpenMsgErr (Ereignis 22)), führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION-Nachricht mit dem entsprechenden Fehlercode,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn während der Verarbeitung einer anderen OPEN-Nachricht die BGP-Implementierung durch Mittel außerhalb des Geltungsbereichs dieses Dokuments bestimmt, dass eine Verbindungskollision aufgetreten ist und diese Verbindung geschlossen werden soll, gibt das lokale System ein OpenCollisionDump-Ereignis (Ereignis 23) aus. Wenn das lokale System ein OpenCollisionDump-Ereignis (Ereignis 23) empfängt, führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION mit Cease,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn das lokale System eine KEEPALIVE-Nachricht empfängt (KeepAliveMsg (Ereignis 26)), führt das lokale System Folgendes aus:

  • startet den HoldTimer neu und

  • ändert seinen Zustand zu Established.

Als Reaktion auf alle anderen Ereignisse (Ereignisse 9, 12-13, 20, 27-28) führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION mit einem Code von Finite State Machine Error,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Established-Zustand:

Im Established-Zustand kann die BGP-FSM UPDATE-, NOTIFICATION- und KEEPALIVE-Nachrichten mit ihrem Peer austauschen.

Jedes Start-Ereignis (Ereignisse 1, 3-7) wird im Established-Zustand ignoriert.

Als Reaktion auf ein ManualStop-Ereignis (initiiert von einem Operator) (Ereignis 2) führt das lokale System Folgendes aus:

  • sendet die NOTIFICATION-Nachricht mit Cease,

  • setzt den ConnectRetryTimer auf Null,

  • löscht alle mit dieser Verbindung verbundenen Routen,

  • gibt BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • setzt den ConnectRetryCounter auf Null, und

  • ändert seinen Zustand zu Idle.

Als Reaktion auf ein AutomaticStop-Ereignis (Ereignis 8) führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION mit Cease,

  • setzt den ConnectRetryTimer auf Null

  • löscht alle mit dieser Verbindung verbundenen Routen,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Ein Grund für ein AutomaticStop-Ereignis ist: Ein BGP empfängt UPDATE-Nachrichten mit einer Anzahl von Präfixen für einen gegebenen Peer, so dass die insgesamt empfangenen Präfixe die maximal konfigurierte Anzahl von Präfixen überschreiten. Das lokale System trennt den Peer automatisch.

Wenn das HoldTimer_Expires-Ereignis eintritt (Ereignis 10), führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION-Nachricht mit dem Fehlercode Hold Timer Expired,

  • setzt den ConnectRetryTimer auf Null,

  • löscht alle mit dieser Verbindung verbundenen Routen,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn das KeepaliveTimer_Expires-Ereignis eintritt (Ereignis 11), führt das lokale System Folgendes aus:

  • sendet eine KEEPALIVE-Nachricht, und

  • startet seinen KeepaliveTimer neu, es sei denn, der ausgehandelte HoldTime-Wert ist null.

Jedes Mal, wenn das lokale System eine KEEPALIVE- oder UPDATE-Nachricht sendet, startet es seinen KeepaliveTimer neu, es sei denn, der ausgehandelte HoldTime-Wert ist null.

Ein TcpConnection_Valid (Ereignis 14), empfangen für einen gültigen Port, wird die zweite Verbindung verfolgen lassen.

Eine ungültige TCP-Verbindung (Tcp_CR_Invalid-Ereignis (Ereignis 15)) wird ignoriert.

Als Reaktion auf eine Anzeige, dass die TCP-Verbindung erfolgreich eingerichtet wurde (Ereignis 16 oder Ereignis 17), MUSS (SHALL) die zweite Verbindung verfolgt werden, bis sie eine OPEN-Nachricht sendet.

Wenn eine gültige OPEN-Nachricht (BGPOpen (Ereignis 19)) empfangen wird und wenn das optionale Attribut CollisionDetectEstablishedState TRUE ist, wird die OPEN-Nachricht überprüft, um zu sehen, ob sie mit einer anderen Verbindung kollidiert (Abschnitt 6.8). Wenn die BGP-Implementierung bestimmt, dass diese Verbindung beendet werden muss, verarbeitet sie ein OpenCollisionDump-Ereignis (Ereignis 23). Wenn diese Verbindung beendet werden muss, führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION mit Cease,

  • setzt den ConnectRetryTimer auf Null,

  • löscht alle mit dieser Verbindung verbundenen Routen,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Wenn das lokale System eine NOTIFICATION-Nachricht (Ereignis 24 oder Ereignis 25) oder ein TcpConnectionFails (Ereignis 18) vom zugrunde liegenden TCP empfängt, führt das lokale System Folgendes aus:

  • setzt den ConnectRetryTimer auf Null,

  • löscht alle mit dieser Verbindung verbundenen Routen,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • ändert seinen Zustand zu Idle.

Wenn das lokale System eine KEEPALIVE-Nachricht empfängt (Ereignis 26), führt das lokale System Folgendes aus:

  • startet seinen HoldTimer neu, wenn der ausgehandelte HoldTime-Wert nicht null ist, und

  • bleibt im Established-Zustand.

Wenn das lokale System eine UPDATE-Nachricht empfängt (Ereignis 27), führt das lokale System Folgendes aus:

  • verarbeitet die Nachricht,

  • startet seinen HoldTimer neu, wenn der ausgehandelte HoldTime-Wert nicht null ist, und

  • bleibt im Established-Zustand.

Wenn das lokale System eine UPDATE-Nachricht empfängt und die UPDATE-Nachrichten-Fehlerbehandlungsprozedur (siehe Abschnitt 6.3) einen Fehler erkennt (Ereignis 28), führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION-Nachricht mit einem Update-Fehler,

  • setzt den ConnectRetryTimer auf Null,

  • löscht alle mit dieser Verbindung verbundenen Routen,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.

Als Reaktion auf alle anderen Ereignisse (Ereignisse 9, 12-13, 20-22) führt das lokale System Folgendes aus:

  • sendet eine NOTIFICATION-Nachricht mit dem Fehlercode Finite State Machine Error,

  • löscht alle mit dieser Verbindung verbundenen Routen,

  • setzt den ConnectRetryTimer auf Null,

  • gibt alle BGP-Ressourcen frei,

  • lässt die TCP-Verbindung fallen,

  • erhöht den ConnectRetryCounter um 1,

  • (optional) führt Peer-Oszillationsdämpfung durch, wenn das DampPeerOscillations-Attribut auf TRUE gesetzt ist, und

  • ändert seinen Zustand zu Idle.