Annexe C. Machine à États pour l'État d'Accessibilité (State Machine for the Reachability State)
Cette annexe fournit un diagramme de machine à états et une explication détaillée des états d'accessibilité du Neighbor Cache définis dans cette spécification.
C.1. Vue d'ensemble (Overview)
L'entrée Neighbor Cache pour un voisin transite par plusieurs états au fur et à mesure que le nœud apprend et vérifie l'accessibilité du voisin. Ces états sont :
- INCOMPLETE (incomplet) : résolution d'adresse en cours
- REACHABLE (accessible) : les chemins aller et retour fonctionnent
- STALE (périmé) : les informations sont obsolètes mais utilisables
- DELAY (délai) : attente de vérification de l'accessibilité
- PROBE (sonde) : sondage actif de l'accessibilité
C.2. Diagramme de Transition d'États (State Transition Diagram)
INCOMPLETE
|
| Adresse résolue
v
REACHABLE
|
| Timeout d'accessibilité
v
STALE
|
| Trafic envoyé
v
DELAY
|
| Timer de sonde expire
v
PROBE
|
+------------+------------+
| |
Accessibilité confirmée Tentatives max atteintes
| |
v v
REACHABLE (supprimé)
C.3. Descriptions des États (State Descriptions)
C.3.1. État INCOMPLETE
Conditions d'entrée :
- Une entrée Neighbor Cache est créée lorsque la résolution d'adresse est nécessaire
- Aucune adresse de couche liaison n'est encore connue
Actions :
- Envoyer une sollicitation de voisin multicast
- Démarrer le timer de retransmission
- Mettre en file d'attente les paquets en attente de résolution d'adresse
Conditions de sortie :
- Vers REACHABLE : Neighbor Advertisement reçu avec adresse de couche liaison
- Vers (supprimé) : Nombre maximum de retransmissions atteint sans réponse
Timers :
- Timer de retransmission : RETRANS_TIMER (typiquement 1000ms)
- Tentatives maximales : MAX_MULTICAST_SOLICIT (typiquement 3)
C.3.2. État REACHABLE
Conditions d'entrée :
- Résolution d'adresse terminée avec succès, OU
- Confirmation d'accessibilité reçue (Neighbor Advertisement sollicité, confirmation de couche supérieure)
Actions :
- Transfert normal de paquets
- Aucun sondage nécessaire
- Le trafic circule normalement
Conditions de sortie :
- Vers STALE : ReachableTime expire sans confirmation d'accessibilité
Timers :
- ReachableTime : valeur aléatoire basée sur BaseReachableTime (typiquement 15-45 secondes)
C.3.3. État STALE
Conditions d'entrée :
- ReachableTime expiré dans l'état REACHABLE, OU
- Neighbor Advertisement non sollicité reçu mettant à jour l'adresse de couche liaison, OU
- Entrée créée par message Neighbor Discovery reçu (pas NA sollicité)
Actions :
- Utiliser l'adresse de couche liaison en cache
- Ne pas envoyer de sondes
- Considérer les informations comme potentiellement obsolètes
Conditions de sortie :
- Vers DELAY : Les protocoles de couche supérieure envoient du trafic vers ce voisin
- Vers REACHABLE : Neighbor Advertisement sollicité reçu confirmant l'accessibilité
Timers :
- Aucun (peut rester dans STALE indéfiniment)
C.3.4. État DELAY
Conditions d'entrée :
- Trafic envoyé vers un voisin dans l'état STALE
Actions :
- Attendre la confirmation d'accessibilité de la couche supérieure
- Ne pas encore envoyer de sondes (donner le temps aux couches supérieures de confirmer)
- Continuer à utiliser l'adresse de couche liaison en cache
Conditions de sortie :
- Vers REACHABLE : Accessibilité confirmée par le protocole de couche supérieure
- Vers PROBE : Le timer de délai expire sans confirmation d'accessibilité
Timers :
- Timer de délai : DELAY_FIRST_PROBE_TIME (typiquement 5 secondes)
C.3.5. État PROBE
Conditions d'entrée :
- Timer de délai expiré dans l'état DELAY sans confirmation d'accessibilité
Actions :
- Envoyer des sondes de sollicitation de voisin unicast
- Continuer à utiliser l'adresse de couche liaison en cache
- Retransmettre les sondes en l'absence de réponse
Conditions de sortie :
- Vers REACHABLE : Neighbor Advertisement sollicité reçu
- Vers (supprimé) : Sollicitations unicast maximales envoyées sans réponse
Timers :
- Timer de retransmission : RETRANS_TIMER (typiquement 1000ms)
- Tentatives maximales : MAX_UNICAST_SOLICIT (typiquement 3)
C.4. Événements et Déclencheurs (Events and Triggers)
C.4.1. Confirmations d'Accessibilité
L'accessibilité est confirmée par :
- Réception d'un Neighbor Advertisement sollicité
- Indication du protocole de couche supérieure (par exemple, ACK TCP)
- Réception d'un message Neighbor Discovery avec le flag Solicited activé
C.4.2. Changements d'Adresse de Couche Liaison
Lorsqu'un Neighbor Advertisement met à jour l'adresse de couche liaison :
- Si le flag Override est activé : mettre à jour l'adresse, passer à STALE
- Si le flag Override est désactivé et les adresses diffèrent : passer à STALE, ne pas mettre à jour
- Si le flag Override est désactivé et les adresses correspondent : pas de changement d'état
C.4.3. Événements de Timeout
- Expiration de ReachableTime dans REACHABLE : passer à STALE
- Expiration de DELAY_FIRST_PROBE_TIME dans DELAY : passer à PROBE
- Timer de retransmission dans INCOMPLETE/PROBE : retransmettre ou supprimer
C.5. Considérations d'Implémentation (Implementation Considerations)
C.5.1. Suivi d'État
Les implémentations DEVRAIENT (SHOULD) suivre :
- État actuel
- Adresse de couche liaison (si connue)
- Flag IsRouter
- File d'attente de paquets en attente (pour INCOMPLETE)
- Compteur de retransmission
- Timers applicables
C.5.2. Indices de Couche Supérieure
Les protocoles de couche supérieure peuvent fournir des indices sur l'accessibilité :
- Indices positifs : établissement de connexion, accusé de réception de données
- Indices négatifs : échecs de connexion, timeouts
Ces indices peuvent déclencher des transitions d'état ou accélérer le sondage.
C.5.3. Optimisations de Performance
DAD Optimiste (RFC 4429) :
- Permettre l'utilisation de l'adresse avant la fin du DAD
- Transition plus rapide vers REACHABLE dans certains scénarios
Récupération Rapide :
- Prioriser les vérifications d'accessibilité pour les voisins activement utilisés
- Utiliser le sondage parallèle pour les voisins critiques
C.5.4. Considérations de Sécurité
Les transitions d'état doivent être protégées :
- Valider les adresses source des messages Neighbor Discovery
- Utiliser SEND (RFC 3971) pour la protection cryptographique
- Limiter le taux de transitions d'état pour prévenir les attaques DoS
C.6. Exemples de Scénarios (Example Scenarios)
C.6.1. Résolution d'Adresse Réussie
- Créer une entrée dans l'état INCOMPLETE
- Envoyer une sollicitation de voisin
- Recevoir un Neighbor Advertisement → REACHABLE
- Après ReachableTime → STALE
- Envoyer du trafic → DELAY
- La couche supérieure confirme l'accessibilité → REACHABLE
C.6.2. Le Voisin Devient Inaccessible
- Entrée dans l'état REACHABLE
- ReachableTime expire → STALE
- Envoyer du trafic → DELAY
- Aucune confirmation d'accessibilité → PROBE
- Envoyer des sondes unicast (×3)
- Aucune réponse → Supprimer l'entrée
C.6.3. Changements d'Adresse de Couche Liaison
- Entrée dans l'état REACHABLE/STALE
- Recevoir un NA non sollicité avec une nouvelle adresse, Override=1
- Mettre à jour l'adresse → STALE
- Le trafic futur déclenche la vérification
Note : Cette machine à états est conçue pour équilibrer la détection rapide des voisins inaccessibles avec une surcharge minimale pour les voisins stables et accessibles.