Zum Hauptinhalt springen

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:

  1. Empfang eines angeforderten Neighbor Advertisement
  2. Anzeige durch Protokoll höherer Schicht (z.B. TCP ACK)
  3. Empfang einer Neighbor Discovery-Nachricht mit gesetztem Solicited-Flag

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

  1. Eintrag im INCOMPLETE-Zustand erstellen
  2. Neighbor Solicitation senden
  3. Neighbor Advertisement empfangen → REACHABLE
  4. Nach ReachableTime → STALE
  5. Verkehr senden → DELAY
  6. Höhere Schicht bestätigt Erreichbarkeit → REACHABLE

C.6.2. Nachbar wird unerreichbar

  1. Eintrag im REACHABLE-Zustand
  2. ReachableTime läuft ab → STALE
  3. Verkehr senden → DELAY
  4. Keine Erreichbarkeitsbestätigung → PROBE
  5. Unicast-Sonden senden (×3)
  6. Keine Antwort → Eintrag löschen
  1. Eintrag im REACHABLE/STALE-Zustand
  2. Unaufgefordertes NA mit neuer Adresse empfangen, Override=1
  3. Adresse aktualisieren → STALE
  4. 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.