8. BGP Finite State Machine (FSM) (Machine à états finis BGP)
-
BGP Finite State Machine (FSM) (Machine à états finis BGP)
Les structures de données et la FSM décrites dans ce document sont conceptuelles et n'ont pas à être implémentées précisément comme décrit ici, tant que les implémentations supportent la fonctionnalité décrite et qu'elles exhibent le même comportement visible de l'extérieur.
Cette section spécifie le fonctionnement de BGP en termes d'une machine à états finis (Finite State Machine: FSM). La section se divise en deux parties :
- Description des événements pour la machine à états (Section 8.1)
- Description de la FSM (Section 8.2)
Les attributs de session requis (obligatoires) pour chaque connexion sont :
- State (État)
- ConnectRetryCounter (Compteur de tentatives de connexion)
- ConnectRetryTimer (Temporisateur de tentatives de connexion)
- ConnectRetryTime (Temps de tentative de connexion)
- HoldTimer (Temporisateur de maintien)
- HoldTime (Temps de maintien)
- KeepaliveTimer (Temporisateur Keepalive)
- KeepaliveTime (Temps Keepalive)
L'attribut de session d'état indique l'état actuel de la FSM BGP. Le ConnectRetryCounter indique le nombre de fois qu'un pair BGP a tenté d'établir une session de pair.
Les attributs obligatoires liés aux temporisateurs sont décrits dans la Section 10. Chaque temporisateur a un "timer" et un "time" (la valeur initiale).
Les attributs de session optionnels sont listés ci-dessous. Ces attributs optionnels peuvent être supportés, soit par connexion, soit par système local :
- AcceptConnectionsUnconfiguredPeers (Accepter les connexions de pairs non configurés)
- AllowAutomaticStart (Permettre le démarrage automatique)
- AllowAutomaticStop (Permettre l'arrêt automatique)
- CollisionDetectEstablishedState (Détection de collision dans l'état Established)
- DampPeerOscillations (Amortissement des oscillations de pairs)
- DelayOpen (Retarder l'ouverture)
- DelayOpenTime (Temps de retard d'ouverture)
- DelayOpenTimer (Temporisateur de retard d'ouverture)
- IdleHoldTime (Temps de maintien inactif)
- IdleHoldTimer (Temporisateur de maintien inactif)
- PassiveTcpEstablishment (Établissement TCP passif)
- SendNOTIFICATIONwithoutOPEN (Envoyer NOTIFICATION sans OPEN)
- TrackTcpState (Suivre l'état TCP)
Les attributs de session optionnels supportent différentes fonctionnalités de la fonctionnalité BGP qui ont des implications pour les transitions d'état de la FSM BGP. Deux groupes d'attributs liés aux temporisateurs sont :
groupe 1: DelayOpen, DelayOpenTime, DelayOpenTimer groupe 2: DampPeerOscillations, IdleHoldTime, IdleHoldTimer
Le premier paramètre (DelayOpen, DampPeerOscillations) est un attribut optionnel qui indique que la fonction de temporisateur est active. La valeur "Time" spécifie la valeur initiale pour le "Timer" (DelayOpenTime, IdleHoldTime). Le "Timer" spécifie le temporisateur réel.
Veuillez vous référer à la Section 8.1.1 pour une explication de l'interaction entre ces attributs optionnels et les événements signalés à la machine à états. La Section 8.2.1.3 fournit également un bref aperçu des différents types d'attributs optionnels (drapeaux ou temporisateurs).
8.1. Events for the BGP FSM (Événements pour la FSM BGP)
8.1.1. Optional Events Linked to Optional Session Attributes (Événements optionnels liés aux attributs de session optionnels)
Les entrées de la FSM BGP sont des événements. Les événements peuvent être soit obligatoires, soit optionnels. Certains événements optionnels sont liés à des attributs de session optionnels. Les attributs de session optionnels activent plusieurs groupes de fonctionnalités FSM.
Le lien entre la fonctionnalité FSM, les événements et les attributs de session optionnels est décrit ci-dessous.
Groupe 1: Événements administratifs automatiques (Start/Stop)
Attributs de session optionnels: AllowAutomaticStart, AllowAutomaticStop, DampPeerOscillations, IdleHoldTime, IdleHoldTimer
Option 1: AllowAutomaticStart
Description: Une connexion de pair BGP peut être démarrée et arrêtée par contrôle administratif. Ce contrôle administratif peut être soit manuel, basé sur l'intervention de l'opérateur, soit sous le contrôle d'une logique spécifique à une implémentation BGP. Le terme "automatique" se réfère à un démarrage émis vers la FSM de connexion de pair BGP lorsqu'une telle logique détermine que la connexion de pair BGP doit être redémarrée.
L'attribut AllowAutomaticStart spécifie que cette connexion BGP supporte le démarrage automatique de la connexion BGP.
Si l'implémentation BGP supporte AllowAutomaticStart, le pair peut être redémarré de manière répétée. Trois autres options contrôlent la vitesse à laquelle le redémarrage automatique se produit : DampPeerOscillations, IdleHoldTime et IdleHoldTimer.
L'option DampPeerOscillations spécifie que l'implémentation engage une logique supplémentaire pour amortir les oscillations des pairs BGP face à des séquences de démarrage et d'arrêt automatiques. IdleHoldTime spécifie la durée pendant laquelle le pair BGP est maintenu dans l'état Idle avant de permettre le prochain redémarrage automatique. L'IdleHoldTimer est le temporisateur qui maintient le pair dans l'état Idle.
Un exemple de logique DampPeerOscillations est une augmentation de la valeur IdleHoldTime si un pair BGP oscille la connectivité (connecté/déconnecté) de manière répétée dans une période de temps. Pour engager cette logique, un pair pourrait se connecter et se déconnecter 10 fois en 5 minutes. La valeur IdleHoldTime serait réinitialisée de 0 à 120 secondes.
Valeurs: TRUE ou FALSE
Option 2: AllowAutomaticStop
Description: Cet attribut optionnel de session de pair BGP indique que la connexion BGP permet l'arrêt "automatique" de la connexion BGP. Un arrêt "automatique" est défini comme un arrêt sous le contrôle d'une logique spécifique à l'implémentation. La logique spécifique à l'implémentation est hors du champ d'application de cette spécification.
Valeurs: TRUE ou FALSE
Option 3: DampPeerOscillations
Description: L'attribut de session optionnel DampPeerOscillations indique que la connexion BGP utilise une logique qui amortit les oscillations de pairs BGP dans l'état Idle.
Valeur: TRUE ou FALSE
Option 4: IdleHoldTime
Description: L'IdleHoldTime est la valeur qui est définie dans l'IdleHoldTimer.
Valeurs: Temps en secondes
Option 5: IdleHoldTimer
Description: L'IdleHoldTimer aide à contrôler l'oscillation des pairs BGP. L'IdleHoldTimer est utilisé pour maintenir le pair BGP dans Idle pendant une durée particulière. L'événement IdleHoldTimer_Expires est décrit dans la Section 8.1.3.
Valeurs: Temps en secondes
Groupe 2: Pairs non configurés
Attributs de session optionnels: AcceptConnectionsUnconfiguredPeers
Option 1: AcceptConnectionsUnconfiguredPeers
Description: La FSM BGP permet optionnellement l'acceptation de connexions de pairs BGP de voisins qui ne sont pas pré-configurés. L'attribut de session optionnel "AcceptConnectionsUnconfiguredPeers" permet à la FSM de supporter les transitions d'état qui permettent à l'implémentation d'accepter ou de rejeter ces pairs non configurés.
L'AcceptConnectionsUnconfiguredPeers a des implications de sécurité. Veuillez vous référer au document sur les vulnérabilités BGP [RFC4272] pour plus de détails.
Valeur: True ou False
Groupe 3: Traitement TCP
Attributs de session optionnels: PassiveTcpEstablishment, TrackTcpState
Option 1: PassiveTcpEstablishment
Description: Cette option indique que la FSM BGP attendra passivement que le pair BGP distant établisse la connexion TCP BGP.
valeur: TRUE ou FALSE
Option 2: TrackTcpState
Description: La FSM BGP suit normalement le résultat final d'une tentative de connexion TCP plutôt que les messages TCP individuels. Optionnellement, la FSM BGP peut supporter une interaction supplémentaire avec la négociation de connexion TCP. L'interaction avec les événements TCP peut augmenter la quantité de journalisation que la connexion de pair BGP nécessite et le nombre de changements de FSM BGP.
Valeur: TRUE ou FALSE
Groupe 4: Traitement des messages BGP
Attributs de session optionnels: DelayOpen, DelayOpenTime, DelayOpenTimer, SendNOTIFICATIONwithoutOPEN, CollisionDetectEstablishedState
Option 1: DelayOpen
Description: L'attribut de session optionnel DelayOpen permet aux implémentations d'être configurées pour retarder l'envoi d'un message OPEN pendant une période de temps spécifique (DelayOpenTime). Le retard permet au pair BGP distant de disposer de temps pour envoyer le premier message OPEN.
Valeur: TRUE ou FALSE
Option 2: DelayOpenTime
Description: Le DelayOpenTime est la valeur initiale définie dans le DelayOpenTimer.
Valeur: Temps en secondes
Option 3: DelayOpenTimer
Description: L'attribut de session optionnel DelayOpenTimer est utilisé pour retarder l'envoi d'un message OPEN sur une connexion. L'événement DelayOpenTimer_Expires (Événement 12) est décrit dans la Section 8.1.3.
Valeur: Temps en secondes
Option 4: SendNOTIFICATIONwithoutOPEN
Description: Le SendNOTIFICATIONwithoutOPEN permet à un pair d'envoyer une NOTIFICATION sans envoyer d'abord un message OPEN. Sans cet attribut de session optionnel, la connexion BGP suppose qu'un message OPEN doit être envoyé par un pair avant que le pair n'envoie un message NOTIFICATION.
Valeur: True ou False
Option 5: CollisionDetectEstablishedState
Description: Normalement, une détection de collision (voir Section 6.8) sera ignorée dans l'état Established. Cet attribut de session optionnel indique que cette connexion BGP traite les collisions dans l'état Established.
Valeur: True ou False
Note: Les attributs de session optionnels clarifient la description de la FSM BGP pour les fonctionnalités existantes des implémentations BGP. Les attributs de session optionnels peuvent être prédéfinis pour une implémentation et non lisibles via les interfaces de gestion pour les implémentations correctes existantes. À mesure que de nouvelles MIB BGP (version 2 et au-delà) sont supportées, ces champs seront accessibles via une interface de gestion.
8.1.2. Administrative Events (Événements administratifs)
Un événement administratif est un événement dans lequel l'interface opérateur et le moteur de politique BGP signalent à la machine à états finis BGP de démarrer ou d'arrêter la machine à états BGP. Les indications de démarrage et d'arrêt de base sont augmentées par des attributs de connexion optionnels qui signalent un certain type de mécanisme de démarrage ou d'arrêt à la FSM BGP. Un exemple de cette combinaison est l'événement 5, AutomaticStart_with_PassiveTcpEstablishment. Avec cet événement, l'implémentation BGP signale à la FSM BGP que l'implémentation utilise un démarrage automatique avec l'option d'utiliser un établissement TCP passif. L'établissement TCP passif signale que cette FSM BGP attendra que le côté distant démarre l'établissement TCP.
Notez que seuls l'événement 1 (ManualStart) et l'événement 2 (ManualStop) sont des événements administratifs obligatoires. Tous les autres événements administratifs sont optionnels (événements 3-8). Chaque événement ci-dessous a un nom, une définition, un statut (obligatoire ou optionnel) et les attributs de session optionnels qui DOIVENT (SHOULD) être définis à chaque étape. Lors de la génération de l'événement 1 à l'événement 8 pour la FSM BGP, les conditions spécifiées dans la section "Statut d'attribut optionnel" sont vérifiées. Si l'une de ces conditions n'est pas satisfaite, le système local devrait enregistrer une erreur FSM.
Les paramètres des attributs de session optionnels peuvent être implicites dans certaines implémentations et peuvent donc ne pas être définis explicitement par une action d'opérateur externe. La Section 8.2.1.5 décrit ces paramètres implicites des attributs de session optionnels. Les états administratifs décrits ci-dessous peuvent également être implicites dans certaines implémentations et non directement configurables par un opérateur externe.
Événement 1: ManualStart (Démarrage manuel)
Définition: L'administrateur du système local démarre manuellement la connexion de pair.
Statut: Obligatoire
Statut d'attribut optionnel: L'attribut PassiveTcpEstablishment DEVRAIT (SHOULD) être défini à FALSE.
Événement 2: ManualStop (Arrêt manuel)
Définition: L'administrateur du système local arrête manuellement la connexion de pair.
Statut: Obligatoire
Statut d'attribut optionnel: Aucune interaction avec les attributs optionnels.
Événement 3: AutomaticStart (Démarrage automatique)
Définition: Le système local démarre automatiquement la connexion BGP.
Statut: Optionnel, selon le système local
Statut d'attribut optionnel: 1) L'attribut AllowAutomaticStart DEVRAIT (SHOULD) être défini à TRUE si cet événement se produit. 2) Si l'attribut de session optionnel PassiveTcpEstablishment est supporté, il DEVRAIT (SHOULD) être défini à FALSE. 3) Si DampPeerOscillations est supporté, il DEVRAIT (SHOULD) être défini à FALSE lorsque cet événement se produit.
Événement 4: ManualStart_with_PassiveTcpEstablishment (Démarrage manuel avec établissement TCP passif)
Définition: L'administrateur du système local démarre manuellement la connexion de pair, mais a activé PassiveTcpEstablishment. L'attribut optionnel PassiveTcpEstablishment indique que le pair écoutera avant d'établir la connexion.
Statut: Optionnel, selon le système local
Statut d'attribut optionnel: 1) L'attribut PassiveTcpEstablishment DEVRAIT (SHOULD) être défini à TRUE si cet événement se produit. 2) L'attribut DampPeerOscillations DEVRAIT (SHOULD) être défini à FALSE lorsque cet événement se produit.
Événement 5: AutomaticStart_with_PassiveTcpEstablishment (Démarrage automatique avec établissement TCP passif)
Définition: Le système local démarre automatiquement la connexion BGP avec PassiveTcpEstablishment activé. L'attribut optionnel PassiveTcpEstablishment indique que le pair écoutera avant d'établir une connexion.
Statut: Optionnel, selon le système local
Statut d'attribut optionnel: 1) L'attribut AllowAutomaticStart DEVRAIT (SHOULD) être défini à TRUE. 2) L'attribut PassiveTcpEstablishment DEVRAIT (SHOULD) être défini à TRUE. 3) Si l'attribut DampPeerOscillations est supporté, le DampPeerOscillations DEVRAIT (SHOULD) être défini à FALSE.
Événement 6: AutomaticStart_with_DampPeerOscillations (Démarrage automatique avec amortissement des oscillations de pairs)
Définition: Le système local démarre automatiquement la connexion de pair BGP avec l'amortissement des oscillations de pairs activé. La méthode exacte d'amortissement des oscillations de pairs persistantes est déterminée par l'implémentation et est hors du champ d'application de ce document.
Statut: Optionnel, selon le système local.
Statut d'attribut optionnel: 1) L'attribut AllowAutomaticStart DEVRAIT (SHOULD) être défini à TRUE. 2) L'attribut DampPeerOscillations DEVRAIT (SHOULD) être défini à TRUE. 3) L'attribut PassiveTcpEstablishment DEVRAIT (SHOULD) être défini à FALSE.
Événement 7: AutomaticStart_with_DampPeerOscillations_and_ PassiveTcpEstablishment (Démarrage automatique avec amortissement des oscillations de pairs et établissement TCP passif)
Définition: Le système local démarre automatiquement la connexion de pair BGP avec l'amortissement des oscillations de pairs activé et PassiveTcpEstablishment activé. La méthode exacte d'amortissement des oscillations de pairs persistantes est déterminée par l'implémentation et est hors du champ d'application de ce document.
Statut: Optionnel, selon le système local
Statut des attributs optionnels: 1) L'attribut AllowAutomaticStart DEVRAIT (SHOULD) être défini à TRUE. 2) L'attribut DampPeerOscillations DEVRAIT (SHOULD) être défini à TRUE. 3) L'attribut PassiveTcpEstablishment DEVRAIT (SHOULD) être défini à TRUE.
Événement 8: AutomaticStop (Arrêt automatique)
Définition: Le système local arrête automatiquement la connexion BGP.
Un exemple d'événement d'arrêt automatique est le dépassement du nombre de préfixes pour un pair donné et le système local déconnectant automatiquement le pair.
Statut: Optionnel, selon le système local
Statut d'attribut optionnel: 1) L'attribut AllowAutomaticStop DEVRAIT (SHOULD) être TRUE.
8.1.3. Timer Events (Événements de temporisateur)
Événement 9: ConnectRetryTimer_Expires (Expiration du temporisateur de tentative de connexion)
Définition: Un événement généré lorsque le ConnectRetryTimer expire.
Statut: Obligatoire
Événement 10: HoldTimer_Expires (Expiration du temporisateur de maintien)
Définition: Un événement généré lorsque le HoldTimer expire.
Statut: Obligatoire
Événement 11: KeepaliveTimer_Expires (Expiration du temporisateur Keepalive)
Définition: Un événement généré lorsque le KeepaliveTimer expire.
Statut: Obligatoire
Événement 12: DelayOpenTimer_Expires (Expiration du temporisateur de retard d'ouverture)
Définition: Un événement généré lorsque le DelayOpenTimer expire.
Statut: Optionnel
Statut d'attribut optionnel: Si cet événement se produit,
- L'attribut DelayOpen DEVRAIT (SHOULD) être défini à TRUE,
- L'attribut DelayOpenTime DEVRAIT (SHOULD) être supporté,
- Le DelayOpenTimer DEVRAIT (SHOULD) être supporté.
Événement 13: IdleHoldTimer_Expires (Expiration du temporisateur de maintien inactif)
Définition: Un événement généré lorsque l'IdleHoldTimer expire, indiquant que la connexion BGP a terminé d'attendre la période de back-off pour empêcher l'oscillation du pair BGP.
L'IdleHoldTimer n'est utilisé que lorsque la fonction d'amortissement des oscillations de pairs persistantes est activée en définissant l'attribut optionnel DampPeerOscillations à TRUE.
Les implémentations qui n'implémentent pas la fonction d'amortissement des oscillations de pairs persistantes peuvent ne pas avoir l'IdleHoldTimer.
Statut: Optionnel
Statut d'attribut optionnel: Si cet événement se produit :
- L'attribut DampPeerOscillations DEVRAIT (SHOULD) être défini à TRUE.
- L'IdleHoldTimer DEVRAIT (SHOULD) venir d'expirer.
8.1.4. TCP Connection-Based Events (Événements basés sur la connexion TCP)
Événement 14: TcpConnection_Valid (Connexion TCP valide)
Définition: Événement indiquant la réception par le système local d'une demande de connexion TCP avec une adresse IP source valide, un port TCP, une adresse IP de destination et un port TCP. La définition d'une adresse IP source invalide et d'une adresse IP de destination invalide est déterminée par l'implémentation.
Le port de destination de BGP DEVRAIT (SHOULD) être le port 179, comme défini par l'IANA.
Une demande de connexion TCP est désignée par le système local recevant un SYN TCP.
Statut: Optionnel
Statut d'attribut optionnel: 1) L'attribut TrackTcpState DEVRAIT (SHOULD) être défini à TRUE si cet événement se produit.
Événement 15: Tcp_CR_Invalid (Demande de connexion TCP invalide)
Définition: Événement indiquant la réception par le système local d'une demande de connexion TCP avec soit une adresse source ou un numéro de port invalide, soit une adresse de destination ou un numéro de port invalide.
Le numéro de port de destination BGP DEVRAIT (SHOULD) être 179, comme défini par l'IANA.
Une demande de connexion TCP se produit lorsque le système local reçoit un SYN TCP.
Statut: Optionnel
Statut d'attribut optionnel: 1) L'attribut TrackTcpState devrait être défini à TRUE si cet événement se produit.
Événement 16: Tcp_CR_Acked (Demande de connexion TCP acquittée)
Définition: Événement indiquant la demande du système local d'établir une connexion TCP vers le pair distant.
La connexion TCP du système local a envoyé un SYN TCP, reçu un message SYN/ACK TCP et envoyé un ACK TCP.
Statut: Obligatoire
Événement 17: TcpConnectionConfirmed (Connexion TCP confirmée)
Définition: Événement indiquant que le système local a reçu une confirmation que la connexion TCP a été établie par le site distant.
Le moteur TCP du pair distant a envoyé un SYN TCP. Le moteur TCP du pair local a envoyé un message SYN, ACK et a maintenant reçu un ACK final.
Statut: Obligatoire
Événement 18: TcpConnectionFails (Échec de la connexion TCP)
Définition: Événement indiquant que le système local a reçu une notification d'échec de connexion TCP.
La machine TCP du pair BGP distant aurait pu envoyer un FIN. Le pair local répondrait avec un FIN-ACK. Une autre possibilité est que le pair local ait indiqué un timeout dans la connexion TCP et ait fermé la connexion.
Statut: Obligatoire
8.1.5. BGP Message-Based Events (Événements basés sur les messages BGP)
Événement 19: BGPOpen
Définition: Un événement est généré lorsqu'un message OPEN valide a été reçu.
Statut: Obligatoire
Statut d'attribut optionnel: 1) L'attribut optionnel DelayOpen DEVRAIT (SHOULD) être défini à FALSE. 2) Le DelayOpenTimer NE DEVRAIT (SHOULD) PAS être en cours d'exécution.
Événement 20: BGPOpen with DelayOpenTimer running (BGPOpen avec DelayOpenTimer en cours d'exécution)
Définition: Un événement est généré lorsqu'un message OPEN valide a été reçu pour un pair qui a une connexion de transport établie avec succès et qui retarde actuellement l'envoi d'un message BGP open.
Statut: Optionnel
Statut d'attribut optionnel: 1) L'attribut DelayOpen DEVRAIT (SHOULD) être défini à TRUE. 2) Le DelayOpenTimer DEVRAIT (SHOULD) être en cours d'exécution.
Événement 21: BGPHeaderErr (Erreur d'en-tête BGP)
Définition: Un événement est généré lorsqu'un en-tête de message BGP reçu n'est pas valide.
Statut: Obligatoire
Événement 22: BGPOpenMsgErr (Erreur de message OPEN BGP)
Définition: Un événement est généré lorsqu'un message OPEN a été reçu avec des erreurs.
Statut: Obligatoire
Événement 23: OpenCollisionDump (Décharge de collision Open)
Définition: Un événement généré administrativement lorsqu'une collision de connexion a été détectée lors du traitement d'un message OPEN entrant et que cette connexion a été sélectionnée pour être déconnectée. Voir la Section 6.8 pour plus d'informations sur la détection de collision.
L'événement 23 est une action administrative générée par la logique d'implémentation qui détermine si cette connexion doit être abandonnée selon les règles de la Section 6.8. Cet événement peut se produire si la FSM est implémentée comme deux machines à états liées.
Statut: Optionnel
Statut d'attribut optionnel: Si la machine à états doit traiter cet événement dans l'état Established,
- L'attribut optionnel CollisionDetectEstablishedState DEVRAIT (SHOULD) être défini à TRUE.
Veuillez noter : L'événement OpenCollisionDump peut se produire dans Idle, Connect, Active, OpenSent et OpenConfirm sans qu'aucun attribut optionnel ne soit défini.
Événement 24: NotifMsgVerErr (Erreur de version de message de notification)
Définition: Un événement est généré lorsqu'un message NOTIFICATION avec "erreur de version" est reçu.
Statut: Obligatoire
Événement 25: NotifMsg (Message de notification)
Définition: Un événement est généré lorsqu'un message NOTIFICATION est reçu et que le code d'erreur n'est pas "erreur de version".
Statut: Obligatoire
Événement 26: KeepAliveMsg (Message Keepalive)
Définition: Un événement est généré lorsqu'un message KEEPALIVE est reçu.
Statut: Obligatoire
Événement 27: UpdateMsg (Message de mise à jour)
Définition: Un événement est généré lorsqu'un message UPDATE valide est reçu.
Statut: Obligatoire
Événement 28: UpdateMsgErr (Erreur de message de mise à jour)
Définition: Un événement est généré lorsqu'un message UPDATE invalide est reçu.
Statut: Obligatoire
8.2. Description of FSM (Description de la FSM)
8.2.1. FSM Definition (Définition de la FSM)
BGP DOIT (MUST) maintenir une FSM séparée pour chaque pair configuré. Chaque pair BGP apparié dans une connexion potentielle tentera de se connecter à l'autre, à moins d'être configuré pour rester dans l'état idle ou configuré pour rester passif. Aux fins de cette discussion, le côté actif ou connectant de la connexion TCP (le côté d'une connexion TCP envoyant le premier paquet SYN TCP) est appelé sortant. Le côté passif ou d'écoute (l'expéditeur du premier SYN/ACK) est appelé une connexion entrante. (Voir la Section 8.2.1.1 pour des informations sur les termes actif et passif utilisés ci-dessous.)
Une implémentation BGP DOIT (MUST) se connecter et écouter sur le port TCP 179 pour les connexions entrantes en plus de tenter de se connecter aux pairs. Pour chaque connexion entrante, une machine à états DOIT (MUST) être instanciée. Il existe une période pendant laquelle l'identité du pair à l'autre extrémité d'une connexion entrante est connue, mais l'identifiant BGP n'est pas connu. Pendant ce temps, une connexion entrante et une connexion sortante peuvent exister pour le même appairage configuré. Cela est appelé une collision de connexion (voir Section 6.8).
Une implémentation BGP aura, au plus, une FSM pour chaque appairage configuré, plus une FSM pour chaque connexion TCP entrante pour laquelle le pair n'a pas encore été identifié. Chaque FSM correspond exactement à une connexion TCP.
Il peut y avoir plus d'une connexion entre une paire de pairs si les connexions sont configurées pour utiliser une paire différente d'adresses IP. Cela est appelé plusieurs "appairages configurés" vers le même pair.
8.2.1.1. Terms "active" and "passive" (Termes "actif" et "passif")
Les termes actif et passif ont été dans le vocabulaire des opérateurs Internet depuis près d'une décennie et se sont révélés utiles. Les mots actif et passif ont des significations légèrement différentes lorsqu'ils sont appliqués à une connexion TCP ou à un pair. Il n'y a qu'un côté actif et un côté passif pour toute connexion TCP, selon la définition ci-dessus et la machine à états ci-dessous. Lorsqu'un locuteur BGP est configuré comme actif, il peut finir du côté actif ou passif de la connexion qui finit par être établie. Une fois la connexion TCP terminée, peu importe quelle extrémité était active et laquelle était passive. La seule différence réside dans le côté de la connexion TCP qui a le numéro de port 179.
8.2.1.2. FSM and Collision Detection (FSM et détection de collision)
Il y a une FSM par connexion BGP. Lorsque la collision de connexion se produit avant de déterminer à quel pair une connexion est associée, il peut y avoir deux connexions pour un pair. Après la résolution de la collision de connexion (voir Section 6.8), la FSM pour la connexion qui est fermée DEVRAIT (SHOULD) être éliminée.
8.2.1.3. FSM and Optional Session Attributes (FSM et attributs de session optionnels)
Les attributs de session optionnels spécifient soit des attributs qui agissent comme des drapeaux (TRUE ou FALSE), soit des temporisateurs optionnels. Pour les attributs optionnels qui agissent comme des drapeaux, si l'attribut de session optionnel peut être défini à TRUE sur le système, les actions FSM BGP correspondantes doivent être supportées. Par exemple, si les options suivantes peuvent être définies dans une implémentation BGP : AutoStart et PassiveTcpEstablishment, alors les événements 3, 4 et 5 doivent être supportés. Si un attribut de session optionnel ne peut pas être défini à TRUE, les événements supportant cet ensemble d'options n'ont pas à être supportés.
Chacun des temporisateurs optionnels (DelayOpenTimer et IdleHoldTimer) a un groupe d'attributs qui sont :
- drapeau indiquant le support,
- Temps défini dans le temporisateur
- Temporisateur.
Les deux temporisateurs optionnels montrent ce format :
DelayOpenTimer: DelayOpen, DelayOpenTime, DelayOpenTimer IdleHoldTimer: DampPeerOscillations, IdleHoldTime, IdleHoldTimer
Si le drapeau indiquant le support d'un temporisateur optionnel (DelayOpen ou DampPeerOscillations) ne peut pas être défini à TRUE, les temporisateurs et événements supportant cette option n'ont pas à être supportés.
8.2.1.4. FSM Event Numbers (Numéros d'événement FSM)
Les numéros d'événement (1-28) utilisés dans cette description de machine à états aident à spécifier le comportement de la machine à états BGP. Les implémentations PEUVENT (MAY) utiliser ces numéros pour fournir des informations de gestion de réseau. La forme exacte d'une FSM ou des événements FSM est spécifique à chaque implémentation.
8.2.1.5. FSM Actions that are Implementation Dependent (Actions FSM qui dépendent de l'implémentation)
À certains points, la FSM BGP spécifie que l'initialisation BGP se produira ou que les ressources BGP seront supprimées. L'initialisation de la FSM BGP et des ressources associées dépend de la portion politique de l'implémentation BGP. Les détails de ces actions sont hors du champ d'application du document FSM.
8.2.2. Finite State Machine (Machine à états finis)
État Idle (Inactif) :
Initialement, la FSM de pair BGP est dans l'état Idle. Ci-après, la FSM de pair BGP sera raccourcie en FSM BGP.
Dans cet état, la FSM BGP refuse toutes les connexions BGP entrantes pour ce pair. Aucune ressource n'est allouée au pair. En réponse à un événement ManualStart (Événement 1) ou un événement AutomaticStart (Événement 3), le système local :
-
initialise toutes les ressources BGP pour la connexion de pair,
-
définit ConnectRetryCounter à zéro,
-
démarre le ConnectRetryTimer avec la valeur initiale,
-
initie une connexion TCP vers l'autre pair BGP,
-
écoute une connexion qui peut être initiée par le pair BGP distant, et
-
change son état en Connect.
L'événement ManualStop (Événement 2) et l'événement AutomaticStop (Événement 8) sont ignorés dans l'état Idle.
En réponse à un événement ManualStart_with_PassiveTcpEstablishment (Événement 4) ou un événement AutomaticStart_with_PassiveTcpEstablishment (Événement 5), le système local :
-
initialise toutes les ressources BGP,
-
définit le ConnectRetryCounter à zéro,
-
démarre le ConnectRetryTimer avec la valeur initiale,
-
écoute une connexion qui peut être initiée par le pair distant, et
-
change son état en Active.
La valeur exacte du ConnectRetryTimer est une question locale, mais elle DEVRAIT (SHOULD) être suffisamment grande pour permettre l'initialisation TCP.
Si l'attribut DampPeerOscillations est défini à TRUE, les trois événements supplémentaires suivants peuvent se produire dans l'état Idle :
-
AutomaticStart_with_DampPeerOscillations (Événement 6),
-
AutomaticStart_with_DampPeerOscillations_and_ PassiveTcpEstablishment (Événement 7),
-
IdleHoldTimer_Expires (Événement 13).
Lors de la réception de ces 3 événements, le système local utilisera ces événements pour empêcher les oscillations de pairs. La méthode pour empêcher l'oscillation de pairs persistante est hors du champ d'application de ce document.
Tout autre événement (Événements 9-12, 15-28) reçu dans l'état Idle n'entraîne pas de changement dans l'état du système local.
État Connect (Connexion) :
Dans cet état, la FSM BGP attend que la connexion TCP soit terminée.
Les événements de démarrage (Événements 1, 3-7) sont ignorés dans l'état Connect.
En réponse à un événement ManualStop (Événement 2), le système local :
-
abandonne la connexion TCP,
-
libère toutes les ressources BGP,
-
définit ConnectRetryCounter à zéro,
-
arrête le ConnectRetryTimer et définit ConnectRetryTimer à zéro, et
-
change son état en Idle.
En réponse à l'événement ConnectRetryTimer_Expires (Événement 9), le système local :
-
abandonne la connexion TCP,
-
redémarre le ConnectRetryTimer,
-
arrête le DelayOpenTimer et réinitialise le temporisateur à zéro,
-
initie une connexion TCP vers l'autre pair BGP,
-
continue d'écouter une connexion qui peut être initiée par le pair BGP distant, et
-
reste dans l'état Connect.
Si l'événement DelayOpenTimer_Expires (Événement 12) se produit dans l'état Connect, le système local :
-
envoie un message OPEN à son pair,
-
définit le HoldTimer à une grande valeur, et
-
change son état en OpenSent.
Si la FSM BGP reçoit un événement TcpConnection_Valid (Événement 14), la connexion TCP est traitée et la connexion reste dans l'état Connect.
Si la FSM BGP reçoit un événement Tcp_CR_Invalid (Événement 15), le système local rejette la connexion TCP et la connexion reste dans l'état Connect.
Si la connexion TCP réussit (Événement 16 ou Événement 17), le système local vérifie l'attribut DelayOpen avant le traitement. Si l'attribut DelayOpen est défini à TRUE, le système local :
-
arrête le ConnectRetryTimer (s'il est en cours d'exécution) et définit le ConnectRetryTimer à zéro,
-
définit le DelayOpenTimer à la valeur initiale, et
-
reste dans l'état Connect.
Si l'attribut DelayOpen est défini à FALSE, le système local :
-
arrête le ConnectRetryTimer (s'il est en cours d'exécution) et définit le ConnectRetryTimer à zéro,
-
termine l'initialisation BGP
-
envoie un message OPEN à son pair,
-
définit le HoldTimer à une grande valeur, et
-
change son état en OpenSent.
Une valeur HoldTimer de 4 minutes est suggérée.
Si la connexion TCP échoue (Événement 18), le système local vérifie le DelayOpenTimer. Si le DelayOpenTimer est en cours d'exécution, le système local :
-
redémarre le ConnectRetryTimer avec la valeur initiale,
-
arrête le DelayOpenTimer et réinitialise sa valeur à zéro,
-
continue d'écouter une connexion qui peut être initiée par le pair BGP distant, et
-
change son état en Active.
Si le DelayOpenTimer n'est pas en cours d'exécution, le système local :
-
arrête le ConnectRetryTimer à zéro,
-
abandonne la connexion TCP,
-
libère toutes les ressources BGP, et
-
change son état en Idle.
Si un message OPEN est reçu pendant que le DelayOpenTimer est en cours d'exécution (Événement 20), le système local :
-
arrête le ConnectRetryTimer (s'il est en cours d'exécution) et définit le ConnectRetryTimer à zéro,
-
termine l'initialisation BGP,
-
arrête et efface le DelayOpenTimer (définit la valeur à zéro),
-
envoie un message OPEN,
-
envoie un message KEEPALIVE,
-
si la valeur initiale du HoldTimer est non nulle,
-
démarre le KeepaliveTimer avec la valeur initiale et
-
réinitialise le HoldTimer à la valeur négociée,
sinon, si la valeur initiale du HoldTimer est zéro,
-
réinitialise le KeepaliveTimer et
-
réinitialise la valeur du HoldTimer à zéro,
-
-
et change son état en OpenConfirm.
Si la valeur du champ de système autonome est la même que le numéro de système autonome local, définissez le statut de connexion sur une connexion interne ; sinon, ce sera "externe".
Si la vérification de l'en-tête de message BGP (Événement 21) ou la vérification du message OPEN détecte une erreur (Événement 22) (voir Section 6.2), le système local :
-
(optionnellement) Si l'attribut SendNOTIFICATIONwithoutOPEN est défini à TRUE, alors le système local envoie d'abord un message NOTIFICATION avec le code d'erreur approprié, puis
-
arrête le ConnectRetryTimer (s'il est en cours d'exécution) et définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si un message NOTIFICATION est reçu avec une erreur de version (Événement 24), le système local vérifie le DelayOpenTimer. Si le DelayOpenTimer est en cours d'exécution, le système local :
-
arrête le ConnectRetryTimer (s'il est en cours d'exécution) et définit le ConnectRetryTimer à zéro,
-
arrête et réinitialise le DelayOpenTimer (définit à zéro),
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP, et
-
change son état en Idle.
Si le DelayOpenTimer n'est pas en cours d'exécution, le système local :
-
arrête le ConnectRetryTimer et définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à True, et
-
change son état en Idle.
En réponse à tout autre événement (Événements 8, 10-11, 13, 19, 23, 25-28), le système local :
-
si le ConnectRetryTimer est en cours d'exécution, arrête et réinitialise le ConnectRetryTimer (définit à zéro),
-
si le DelayOpenTimer est en cours d'exécution, arrête et réinitialise le DelayOpenTimer (définit à zéro),
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à True, et
-
change son état en Idle.
État Active :
Dans cet état, la FSM BGP tente d'acquérir un pair en écoutant et en acceptant une connexion TCP.
Les événements de démarrage (Événements 1, 3-7) sont ignorés dans l'état Active.
En réponse à un événement ManualStop (Événement 2), le système local :
-
Si le DelayOpenTimer est en cours d'exécution et que l'attribut de session SendNOTIFICATIONwithoutOPEN est défini, le système local envoie une NOTIFICATION avec un Cease,
-
libère toutes les ressources BGP, y compris l'arrêt du DelayOpenTimer
-
abandonne la connexion TCP,
-
définit ConnectRetryCounter à zéro,
-
arrête le ConnectRetryTimer et définit le ConnectRetryTimer à zéro, et
-
change son état en Idle.
En réponse à un événement ConnectRetryTimer_Expires (Événement 9), le système local :
-
redémarre le ConnectRetryTimer (avec la valeur initiale),
-
initie une connexion TCP vers l'autre pair BGP,
-
continue d'écouter une connexion TCP qui peut être initiée par un pair BGP distant, et
-
change son état en Connect.
Si le système local reçoit un événement DelayOpenTimer_Expires (Événement 12), le système local :
-
définit le ConnectRetryTimer à zéro,
-
arrête et efface le DelayOpenTimer (définit à zéro),
-
termine l'initialisation BGP,
-
envoie le message OPEN à son pair distant,
-
définit son temporisateur de maintien à une grande valeur, et
-
change son état en OpenSent.
Une valeur HoldTimer de 4 minutes est également suggérée pour cette transition d'état.
Si le système local reçoit un événement TcpConnection_Valid (Événement 14), le système local traite les drapeaux de connexion TCP et reste dans l'état Active.
Si le système local reçoit un événement Tcp_CR_Invalid (Événement 15), le système local rejette la connexion TCP et reste dans l'état Active.
En réponse au succès d'une connexion TCP (Événement 16 ou Événement 17), le système local vérifie l'attribut optionnel DelayOpen avant le traitement.
Si l'attribut DelayOpen est défini à TRUE, le système local :
-
arrête le ConnectRetryTimer et définit le ConnectRetryTimer à zéro,
-
définit le DelayOpenTimer à la valeur initiale (DelayOpenTime), et
-
reste dans l'état Active.
Si l'attribut DelayOpen est défini à FALSE, le système local :
-
définit le ConnectRetryTimer à zéro,
-
termine l'initialisation BGP,
-
envoie le message OPEN à son pair,
-
définit son HoldTimer à une grande valeur, et
-
change son état en OpenSent.
Une valeur HoldTimer de 4 minutes est suggérée comme "grande valeur" pour le HoldTimer.
Si le système local reçoit un événement TcpConnectionFails (Événement 18), le système local :
-
redémarre le ConnectRetryTimer (avec la valeur initiale),
-
arrête et efface le DelayOpenTimer (définit la valeur à zéro),
-
libère toutes les ressources BGP,
-
incrémente le ConnectRetryCounter de 1,
-
effectue optionnellement l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si un message OPEN est reçu et que le DelayOpenTimer est en cours d'exécution (Événement 20), le système local :
-
arrête le ConnectRetryTimer (s'il est en cours d'exécution) et définit le ConnectRetryTimer à zéro,
-
arrête et efface le DelayOpenTimer (définit à zéro),
-
termine l'initialisation BGP,
-
envoie un message OPEN,
-
envoie un message KEEPALIVE,
-
si la valeur du HoldTimer est non nulle,
-
démarre le KeepaliveTimer à la valeur initiale,
-
réinitialise le HoldTimer à la valeur négociée,
sinon si le HoldTimer est zéro
-
réinitialise le KeepaliveTimer (définit à zéro),
-
réinitialise le HoldTimer à zéro, et
-
-
change son état en OpenConfirm.
Si la valeur du champ de système autonome est la même que le numéro de système autonome local, définissez le statut de connexion sur une connexion interne ; sinon, ce sera externe.
Si la vérification de l'en-tête de message BGP (Événement 21) ou la vérification du message OPEN détecte une erreur (Événement 22) (voir Section 6.2), le système local :
-
(optionnellement) envoie un message NOTIFICATION avec le code d'erreur approprié si l'attribut SendNOTIFICATIONwithoutOPEN est défini à TRUE,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si un message NOTIFICATION est reçu avec une erreur de version (Événement 24), le système local vérifie le DelayOpenTimer. Si le DelayOpenTimer est en cours d'exécution, le système local :
-
arrête le ConnectRetryTimer (s'il est en cours d'exécution) et définit le ConnectRetryTimer à zéro,
-
arrête et réinitialise le DelayOpenTimer (définit à zéro),
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP, et
-
change son état en Idle.
Si le DelayOpenTimer n'est pas en cours d'exécution, le système local :
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
En réponse à tout autre événement (Événements 8, 10-11, 13, 19, 23, 25-28), le système local :
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de un,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
OpenSent :
Dans cet état, la FSM BGP attend un message OPEN de son pair.
Les événements de démarrage (Événements 1, 3-7) sont ignorés dans l'état OpenSent.
Si un événement ManualStop (Événement 2) est émis dans l'état OpenSent, le système local :
-
envoie la NOTIFICATION avec un Cease,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
définit le ConnectRetryCounter à zéro, et
-
change son état en Idle.
Si un événement AutomaticStop (Événement 8) est émis dans l'état OpenSent, le système local :
-
envoie la NOTIFICATION avec un Cease,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si le HoldTimer_Expires (Événement 10), le système local :
-
envoie un message NOTIFICATION avec le code d'erreur Hold Timer Expired,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si un événement TcpConnection_Valid (Événement 14), Tcp_CR_Acked (Événement 16) ou TcpConnectionConfirmed (Événement 17) est reçu, une deuxième connexion TCP peut être en cours. Cette deuxième connexion TCP est suivie selon le traitement de collision de connexion (Section 6.8) jusqu'à ce qu'un message OPEN soit reçu.
Une demande de connexion TCP pour un port invalide (Tcp_CR_Invalid (Événement 15)) est ignorée.
Si un événement TcpConnectionFails (Événement 18) est reçu, le système local :
-
ferme la connexion BGP,
-
redémarre le ConnectRetryTimer,
-
continue d'écouter une connexion qui peut être initiée par le pair BGP distant, et
-
change son état en Active.
Lorsqu'un message OPEN est reçu, tous les champs sont vérifiés pour l'exactitude. S'il n'y a pas d'erreurs dans le message OPEN (Événement 19), le système local :
-
réinitialise le DelayOpenTimer à zéro,
-
définit le ConnectRetryTimer BGP à zéro,
-
envoie un message KEEPALIVE, et
-
définit un KeepaliveTimer (via le texte ci-dessous)
-
définit le HoldTimer selon la valeur négociée (voir Section 4.2),
-
change son état en OpenConfirm.
Si la valeur de temps de maintien négociée est zéro, alors le HoldTimer et le KeepaliveTimer ne sont pas démarrés. Si la valeur du champ Système autonome est la même que le numéro de système autonome local, alors la connexion est une connexion "interne" ; sinon, c'est une connexion "externe". (Cela aura un impact sur le traitement UPDATE comme décrit ci-dessous.)
Si la vérification de l'en-tête de message BGP (Événement 21) ou la vérification du message OPEN détecte une erreur (Événement 22)(voir Section 6.2), le système local :
-
envoie un message NOTIFICATION avec le code d'erreur approprié,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est TRUE, et
-
change son état en Idle.
Les mécanismes de détection de collision (Section 6.8) doivent être appliqués lorsqu'un message BGP OPEN valide est reçu (Événement 19 ou Événement 20). Veuillez vous référer à la Section 6.8 pour les détails de la comparaison.
Un événement CollisionDetectDump se produit lorsque l'implémentation BGP détermine, par des moyens hors du champ d'application de ce document, qu'une collision de connexion s'est produite.
Si une connexion dans l'état OpenSent est déterminée comme étant la connexion qui doit être fermée, un OpenCollisionDump (Événement 23) est signalé à la machine à états. Si un tel événement est reçu dans l'état OpenSent, le système local :
-
envoie une NOTIFICATION avec un Cease,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si un message NOTIFICATION est reçu avec une erreur de version (Événement 24), le système local :
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP, et
-
change son état en Idle.
En réponse à tout autre événement (Événements 9, 11-13, 20, 25-28), le système local :
-
envoie la NOTIFICATION avec le code d'erreur Finite State Machine Error,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
État OpenConfirm :
Dans cet état, BGP attend un message KEEPALIVE ou NOTIFICATION.
Tout événement de démarrage (Événements 1, 3-7) est ignoré dans l'état OpenConfirm.
En réponse à un événement ManualStop (Événement 2) initié par l'opérateur, le système local :
-
envoie le message NOTIFICATION avec un Cease,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
définit le ConnectRetryCounter à zéro,
-
définit le ConnectRetryTimer à zéro, et
-
change son état en Idle.
En réponse à l'événement AutomaticStop initié par le système (Événement 8), le système local :
-
envoie le message NOTIFICATION avec un Cease,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si l'événement HoldTimer_Expires (Événement 10) se produit avant qu'un message KEEPALIVE ne soit reçu, le système local :
-
envoie le message NOTIFICATION avec le code d'erreur Hold Timer Expired,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si le système local reçoit un événement KeepaliveTimer_Expires (Événement 11), le système local :
-
envoie un message KEEPALIVE,
-
redémarre le KeepaliveTimer, et
-
reste dans l'état OpenConfirmed.
En cas d'événement TcpConnection_Valid (Événement 14) ou de succès d'une connexion TCP (Événement 16 ou Événement 17) pendant OpenConfirm, le système local doit suivre la deuxième connexion.
Si une connexion TCP est tentée avec un port invalide (Événement 15), le système local ignorera la deuxième tentative de connexion.
Si le système local reçoit un événement TcpConnectionFails (Événement 18) du TCP sous-jacent ou un message NOTIFICATION (Événement 25), le système local :
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si le système local reçoit un message NOTIFICATION avec une erreur de version (NotifMsgVerErr (Événement 24)), le système local :
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP, et
-
change son état en Idle.
Si le système local reçoit un message OPEN valide (BGPOpen (Événement 19)), la fonction de détection de collision est traitée selon la Section 6.8. Si cette connexion doit être abandonnée en raison d'une collision de connexion, le système local :
-
envoie une NOTIFICATION avec un Cease,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP (envoie TCP FIN),
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si un message OPEN est reçu, tous les champs sont vérifiés pour l'exactitude. Si la vérification de l'en-tête de message BGP (BGPHeaderErr (Événement 21)) ou la vérification du message OPEN détecte une erreur (voir Section 6.2) (BGPOpenMsgErr (Événement 22)), le système local :
-
envoie un message NOTIFICATION avec le code d'erreur approprié,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si, lors du traitement d'un autre message OPEN, l'implémentation BGP détermine, par un moyen hors du champ d'application de ce document, qu'une collision de connexion s'est produite et que cette connexion doit être fermée, le système local émettra un événement OpenCollisionDump (Événement 23). Lorsque le système local reçoit un événement OpenCollisionDump (Événement 23), le système local :
-
envoie une NOTIFICATION avec un Cease,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si le système local reçoit un message KEEPALIVE (KeepAliveMsg (Événement 26)), le système local :
-
redémarre le HoldTimer et
-
change son état en Established.
En réponse à tout autre événement (Événements 9, 12-13, 20, 27-28), le système local :
-
envoie une NOTIFICATION avec un code de Finite State Machine Error,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
État Established (Établi) :
Dans l'état Established, la FSM BGP peut échanger des messages UPDATE, NOTIFICATION et KEEPALIVE avec son pair.
Tout événement de démarrage (Événements 1, 3-7) est ignoré dans l'état Established.
En réponse à un événement ManualStop (initié par un opérateur) (Événement 2), le système local :
-
envoie le message NOTIFICATION avec un Cease,
-
définit le ConnectRetryTimer à zéro,
-
supprime toutes les routes associées à cette connexion,
-
libère les ressources BGP,
-
abandonne la connexion TCP,
-
définit le ConnectRetryCounter à zéro, et
-
change son état en Idle.
En réponse à un événement AutomaticStop (Événement 8), le système local :
-
envoie une NOTIFICATION avec un Cease,
-
définit le ConnectRetryTimer à zéro
-
supprime toutes les routes associées à cette connexion,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Une raison pour un événement AutomaticStop est : Un BGP reçoit des messages UPDATE avec un nombre de préfixes pour un pair donné tel que le total de préfixes reçus dépasse le nombre maximum de préfixes configuré. Le système local déconnecte automatiquement le pair.
Si l'événement HoldTimer_Expires se produit (Événement 10), le système local :
-
envoie un message NOTIFICATION avec le code d'erreur Hold Timer Expired,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si l'événement KeepaliveTimer_Expires se produit (Événement 11), le système local :
-
envoie un message KEEPALIVE, et
-
redémarre son KeepaliveTimer, sauf si la valeur HoldTime négociée est zéro.
Chaque fois que le système local envoie un message KEEPALIVE ou UPDATE, il redémarre son KeepaliveTimer, sauf si la valeur HoldTime négociée est zéro.
Un TcpConnection_Valid (Événement 14), reçu pour un port valide, fera suivre la deuxième connexion.
Une connexion TCP invalide (événement Tcp_CR_Invalid (Événement 15)) sera ignorée.
En réponse à une indication que la connexion TCP est établie avec succès (Événement 16 ou Événement 17), la deuxième connexion DOIT (SHALL) être suivie jusqu'à ce qu'elle envoie un message OPEN.
Si un message OPEN valide (BGPOpen (Événement 19)) est reçu et si l'attribut optionnel CollisionDetectEstablishedState est TRUE, le message OPEN sera vérifié pour voir s'il entre en collision (Section 6.8) avec une autre connexion. Si l'implémentation BGP détermine que cette connexion doit être terminée, elle traitera un événement OpenCollisionDump (Événement 23). Si cette connexion doit être terminée, le système local :
-
envoie une NOTIFICATION avec un Cease,
-
définit le ConnectRetryTimer à zéro,
-
supprime toutes les routes associées à cette connexion,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si le DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
Si le système local reçoit un message NOTIFICATION (Événement 24 ou Événement 25) ou un TcpConnectionFails (Événement 18) du TCP sous-jacent, le système local :
-
définit le ConnectRetryTimer à zéro,
-
supprime toutes les routes associées à cette connexion,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
change son état en Idle.
Si le système local reçoit un message KEEPALIVE (Événement 26), le système local :
-
redémarre son HoldTimer, si la valeur HoldTime négociée est non nulle, et
-
reste dans l'état Established.
Si le système local reçoit un message UPDATE (Événement 27), le système local :
-
traite le message,
-
redémarre son HoldTimer, si la valeur HoldTime négociée est non nulle, et
-
reste dans l'état Established.
Si le système local reçoit un message UPDATE et que la procédure de gestion des erreurs de message UPDATE (voir Section 6.3) détecte une erreur (Événement 28), le système local :
-
envoie un message NOTIFICATION avec une erreur Update,
-
définit le ConnectRetryTimer à zéro,
-
supprime toutes les routes associées à cette connexion,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.
En réponse à tout autre événement (Événements 9, 12-13, 20-22), le système local :
-
envoie un message NOTIFICATION avec le code d'erreur Finite State Machine Error,
-
supprime toutes les routes associées à cette connexion,
-
définit le ConnectRetryTimer à zéro,
-
libère toutes les ressources BGP,
-
abandonne la connexion TCP,
-
incrémente le ConnectRetryCounter de 1,
-
(optionnellement) effectue l'amortissement des oscillations de pairs si l'attribut DampPeerOscillations est défini à TRUE, et
-
change son état en Idle.