Anhang C. Zustandsautomat für den Erreichbarkeitszustand (State Machine for the Reachability State)
Dieser Anhang bietet ein Zustandsautomatendiagramm und eine detaillierte Erklärung der in dieser Spezifikation definierten Neighbor Cache-Erreichbarkeitszustände.
C.1. Übersicht (Overview)
Der Neighbor Cache-Eintrag für einen Nachbarn durchläuft mehrere Zustände, während der Knoten die Erreichbarkeit des Nachbarn lernt und überprüft:
- INCOMPLETE (unvollständig): Adressauflösung läuft
- REACHABLE (erreichbar): Vorwärts- und Rückwärtspfade funktionieren
- STALE (veraltet): Informationen sind veraltet, aber verwendbar
- DELAY (Verzögerung): Warten auf Erreichbarkeitsüberprüfung
- PROBE (Sonde): Aktives Testen der Erreichbarkeit
C.2. Zustandsübergangsdiagramm (State Transition Diagram)
INCOMPLETE
|
| Adresse aufgelöst
v
REACHABLE
|
| Erreichbarkeits-Timeout
v
STALE
|
| Verkehr gesendet
v
DELAY
|
| Sonden-Timer abgelaufen
v
PROBE
|
+------------+------------+
| |
Erreichbarkeit bestätigt Max. Versuche erreicht
| |
v v
REACHABLE (gelöscht)
C.3. Zustandsbeschreibungen (State Descriptions)
C.3.1. INCOMPLETE-Zustand
Eintrittsbedingungen:
- Ein Neighbor Cache-Eintrag wird erstellt, wenn Adressauflösung erforderlich ist
- Keine Link-Layer-Adresse ist noch bekannt
Aktionen:
- Multicast-Neighbor-Solicitation senden
- Übertragungstimer starten
- Pakete in Warteschlange stellen, die auf Adressauflösung warten
Austrittsbedingungen:
- Zu REACHABLE: Neighbor Advertisement mit Link-Layer-Adresse empfangen
- Zu (gelöscht): Maximale Wiederholungen ohne Antwort erreicht
Timer:
- Wiederholungstimer: RETRANS_TIMER (typischerweise 1000ms)
- Maximale Versuche: MAX_MULTICAST_SOLICIT (typischerweise 3)
C.3.2. REACHABLE-Zustand
Eintrittsbedingungen:
- Adressauflösung erfolgreich abgeschlossen, ODER
- Erreichbarkeitsbestätigung empfangen (angefordertes Neighbor Advertisement, Bestätigung höherer Schicht)
Aktionen:
- Normale Paketweiterleitung
- Kein Testen erforderlich
- Verkehr fließt normal
Austrittsbedingungen:
- Zu STALE: ReachableTime läuft ab ohne Erreichbarkeitsbestätigung
Timer:
- ReachableTime: Zufälliger Wert basierend auf BaseReachableTime (typischerweise 15-45 Sekunden)
C.3.3. STALE-Zustand
Eintrittsbedingungen:
- ReachableTime im REACHABLE-Zustand abgelaufen, ODER
- Unaufgefordertes Neighbor Advertisement empfangen, das Link-Layer-Adresse aktualisiert, ODER
- Eintrag durch empfangene Neighbor Discovery-Nachricht erstellt (nicht angefordertes NA)
Aktionen:
- Zwischengespeicherte Link-Layer-Adresse verwenden
- Keine Sonden senden
- Informationen als möglicherweise veraltet betrachten
Austrittsbedingungen:
- Zu DELAY: Protokolle höherer Schicht senden Verkehr zu diesem Nachbarn
- Zu REACHABLE: Angefordertes Neighbor Advertisement empfangen, das Erreichbarkeit bestätigt
Timer:
- Keine (kann unbegrenzt in STALE bleiben)
C.3.4. DELAY-Zustand
Eintrittsbedingungen:
- Verkehr zu einem Nachbarn im STALE-Zustand gesendet
Aktionen:
- Auf Erreichbarkeitsbestätigung höherer Schicht warten
- Noch keine Sonden senden (höheren Schichten Zeit zur Bestätigung geben)
- Weiterhin zwischengespeicherte Link-Layer-Adresse verwenden
Austrittsbedingungen:
- Zu REACHABLE: Erreichbarkeit durch Protokoll höherer Schicht bestätigt
- Zu PROBE: Verzögerungstimer läuft ab ohne Erreichbarkeitsbestätigung
Timer:
- Verzögerungstimer: DELAY_FIRST_PROBE_TIME (typischerweise 5 Sekunden)
C.3.5. PROBE-Zustand
Eintrittsbedingungen:
- Verzögerungstimer im DELAY-Zustand ohne Erreichbarkeitsbestätigung abgelaufen
Aktionen:
- Unicast-Neighbor-Solicitation-Sonden senden
- Weiterhin zwischengespeicherte Link-Layer-Adresse verwenden
- Sonden bei fehlender Antwort wiederholen
Austrittsbedingungen:
- Zu REACHABLE: Angefordertes Neighbor Advertisement empfangen
- Zu (gelöscht): Maximale Unicast-Solicitations ohne Antwort gesendet
Timer:
- Wiederholungstimer: RETRANS_TIMER (typischerweise 1000ms)
- Maximale Versuche: MAX_UNICAST_SOLICIT (typischerweise 3)
C.4. Ereignisse und Auslöser (Events and Triggers)
C.4.1. Erreichbarkeitsbestätigungen
Erreichbarkeit wird bestätigt durch:
- Empfang eines angeforderten Neighbor Advertisement
- Anzeige durch Protokoll höherer Schicht (z.B. TCP ACK)
- Empfang einer Neighbor Discovery-Nachricht mit gesetztem Solicited-Flag
C.4.2. Änderungen der Link-Layer-Adresse
Wenn ein Neighbor Advertisement die Link-Layer-Adresse aktualisiert:
- Wenn Override-Flag gesetzt: Adresse aktualisieren, zu STALE wechseln
- Wenn Override-Flag gelöscht und Adressen unterschiedlich: zu STALE wechseln, nicht aktualisieren
- Wenn Override-Flag gelöscht und Adressen übereinstimmen: keine Zustandsänderung
C.4.3. Timeout-Ereignisse
- ReachableTime-Ablauf in REACHABLE: zu STALE wechseln
- DELAY_FIRST_PROBE_TIME-Ablauf in DELAY: zu PROBE wechseln
- Wiederholungstimer in INCOMPLETE/PROBE: wiederholen oder löschen
C.5. Implementierungsüberlegungen (Implementation Considerations)
C.5.1. Zustandsverfolgung
Implementierungen SOLLTEN (SHOULD) verfolgen:
- Aktueller Zustand
- Link-Layer-Adresse (falls bekannt)
- IsRouter-Flag
- Warteschlange ausstehender Pakete (für INCOMPLETE)
- Wiederholungszähler
- Anwendbare Timer
C.5.2. Hinweise höherer Schicht
Protokolle höherer Schicht können Hinweise zur Erreichbarkeit liefern:
- Positive Hinweise: Verbindungsaufbau, Datenbestätigung
- Negative Hinweise: Verbindungsfehler, Timeouts
Diese Hinweise können Zustandsübergänge auslösen oder Tests beschleunigen.
C.5.3. Leistungsoptimierungen
Optimistisches DAD (RFC 4429):
- Adressverwendung vor DAD-Abschluss erlauben
- Schnellerer Übergang zu REACHABLE in einigen Szenarien
Schnelle Wiederherstellung:
- Erreichbarkeitsprüfungen für aktiv genutzte Nachbarn priorisieren
- Paralleles Testen für kritische Nachbarn verwenden
C.5.4. Sicherheitsüberlegungen
Zustandsübergänge sollten geschützt werden:
- Quelladressen von Neighbor Discovery-Nachrichten validieren
- SEND (RFC 3971) für kryptografischen Schutz verwenden
- Zustandsübergänge zur Verhinderung von DoS-Angriffen ratenbegrenzen
C.6. Beispielszenarien (Example Scenarios)
C.6.1. Erfolgreiche Adressauflösung
- Eintrag im INCOMPLETE-Zustand erstellen
- Neighbor Solicitation senden
- Neighbor Advertisement empfangen → REACHABLE
- Nach ReachableTime → STALE
- Verkehr senden → DELAY
- Höhere Schicht bestätigt Erreichbarkeit → REACHABLE
C.6.2. Nachbar wird unerreichbar
- Eintrag im REACHABLE-Zustand
- ReachableTime läuft ab → STALE
- Verkehr senden → DELAY
- Keine Erreichbarkeitsbestätigung → PROBE
- Unicast-Sonden senden (×3)
- Keine Antwort → Eintrag löschen
C.6.3. Änderungen der Link-Layer-Adresse
- Eintrag im REACHABLE/STALE-Zustand
- Unaufgefordertes NA mit neuer Adresse empfangen, Override=1
- Adresse aktualisieren → STALE
- Zukünftiger Verkehr löst Überprüfung aus
Hinweis: Dieser Zustandsautomat ist darauf ausgelegt, schnelle Erkennung unerreichbarer Nachbarn mit minimalem Overhead für stabile, erreichbare Nachbarn auszubalancieren.