Appendice C. Macchina a Stati per lo Stato di Raggiungibilità (State Machine for the Reachability State)
Questa appendice fornisce un diagramma di macchina a stati e una spiegazione dettagliata degli stati di raggiungibilità del Neighbor Cache definiti in questa specifica.
C.1. Panoramica (Overview)
La voce Neighbor Cache per un vicino transita attraverso diversi stati mentre il nodo apprende e verifica la raggiungibilità del vicino:
- INCOMPLETE (incompleto): risoluzione indirizzo in corso
- REACHABLE (raggiungibile): i percorsi avanti e indietro funzionano
- STALE (stantio): le informazioni sono obsolete ma utilizzabili
- DELAY (ritardo): in attesa di verifica della raggiungibilità
- PROBE (sonda): test attivo della raggiungibilità
C.2. Diagramma di Transizione degli Stati (State Transition Diagram)
INCOMPLETE
|
| Indirizzo risolto
v
REACHABLE
|
| Timeout raggiungibilità
v
STALE
|
| Traffico inviato
v
DELAY
|
| Timer sonda scaduto
v
PROBE
|
+------------+------------+
| |
Raggiungibilità confermata Tentativi max raggiunti
| |
v v
REACHABLE (eliminato)
C.3. Descrizioni degli Stati (State Descriptions)
C.3.1. Stato INCOMPLETE
Condizioni di ingresso:
- Una voce Neighbor Cache viene creata quando è necessaria la risoluzione dell'indirizzo
- Nessun indirizzo link-layer è ancora noto
Azioni:
- Inviare Neighbor Solicitation multicast
- Avviare timer di ritrasmissione
- Accodare pacchetti in attesa di risoluzione indirizzo
Condizioni di uscita:
- A REACHABLE: Neighbor Advertisement ricevuto con indirizzo link-layer
- A (eliminato): Numero massimo di ritrasmissioni raggiunto senza risposta
Timer:
- Timer di ritrasmissione: RETRANS_TIMER (tipicamente 1000ms)
- Tentativi massimi: MAX_MULTICAST_SOLICIT (tipicamente 3)
C.3.2. Stato REACHABLE
Condizioni di ingresso:
- Risoluzione indirizzo completata con successo, OPPURE
- Conferma raggiungibilità ricevuta (Neighbor Advertisement sollecitato, conferma livello superiore)
Azioni:
- Normale inoltro pacchetti
- Nessun test necessario
- Il traffico scorre normalmente
Condizioni di uscita:
- A STALE: ReachableTime scade senza conferma raggiungibilità
Timer:
- ReachableTime: valore randomizzato basato su BaseReachableTime (tipicamente 15-45 secondi)
C.3.3. Stato STALE
Condizioni di ingresso:
- ReachableTime scaduto nello stato REACHABLE, OPPURE
- Neighbor Advertisement non sollecitato ricevuto che aggiorna indirizzo link-layer, OPPURE
- Voce creata da messaggio Neighbor Discovery ricevuto (non NA sollecitato)
Azioni:
- Usare indirizzo link-layer in cache
- Non inviare sonde
- Considerare le informazioni come potenzialmente obsolete
Condizioni di uscita:
- A DELAY: I protocolli di livello superiore inviano traffico a questo vicino
- A REACHABLE: Neighbor Advertisement sollecitato ricevuto che conferma la raggiungibilità
Timer:
- Nessuno (può rimanere in STALE indefinitamente)
C.3.4. Stato DELAY
Condizioni di ingresso:
- Traffico inviato a un vicino nello stato STALE
Azioni:
- Attendere conferma raggiungibilità dal livello superiore
- Non inviare ancora sonde (dare tempo ai livelli superiori di confermare)
- Continuare a usare indirizzo link-layer in cache
Condizioni di uscita:
- A REACHABLE: Raggiungibilità confermata dal protocollo di livello superiore
- A PROBE: Timer di ritardo scade senza conferma raggiungibilità
Timer:
- Timer di ritardo: DELAY_FIRST_PROBE_TIME (tipicamente 5 secondi)
C.3.5. Stato PROBE
Condizioni di ingresso:
- Timer di ritardo scaduto nello stato DELAY senza conferma raggiungibilità
Azioni:
- Inviare sonde Neighbor Solicitation unicast
- Continuare a usare indirizzo link-layer in cache
- Ritrasmettere sonde se non c'è risposta
Condizioni di uscita:
- A REACHABLE: Neighbor Advertisement sollecitato ricevuto
- A (eliminato): Sollicitazioni unicast massime inviate senza risposta
Timer:
- Timer di ritrasmissione: RETRANS_TIMER (tipicamente 1000ms)
- Tentativi massimi: MAX_UNICAST_SOLICIT (tipicamente 3)
C.4. Eventi e Trigger (Events and Triggers)
C.4.1. Conferme di Raggiungibilità
La raggiungibilità è confermata da:
- Ricezione di un Neighbor Advertisement sollecitato
- Indicazione del protocollo di livello superiore (es. TCP ACK)
- Ricezione di un messaggio Neighbor Discovery con flag Solicited impostato
C.4.2. Cambiamenti dell'Indirizzo Link-Layer
Quando un Neighbor Advertisement aggiorna l'indirizzo link-layer:
- Se flag Override è impostato: aggiornare indirizzo, spostarsi a STALE
- Se flag Override è cancellato e gli indirizzi differiscono: spostarsi a STALE, non aggiornare
- Se flag Override è cancellato e gli indirizzi corrispondono: nessun cambiamento di stato
C.4.3. Eventi di Timeout
- Scadenza ReachableTime in REACHABLE: spostarsi a STALE
- Scadenza DELAY_FIRST_PROBE_TIME in DELAY: spostarsi a PROBE
- Timer di ritrasmissione in INCOMPLETE/PROBE: ritrasmettere o eliminare
C.5. Considerazioni sull'Implementazione (Implementation Considerations)
C.5.1. Tracciamento dello Stato
Le implementazioni DOVREBBERO (SHOULD) tracciare:
- Stato corrente
- Indirizzo link-layer (se noto)
- Flag IsRouter
- Coda pacchetti in sospeso (per INCOMPLETE)
- Contatore ritrasmissioni
- Timer applicabili
C.5.2. Suggerimenti del Livello Superiore
I protocolli di livello superiore possono fornire suggerimenti sulla raggiungibilità:
- Suggerimenti positivi: stabilimento connessione, acknowledgment dati
- Suggerimenti negativi: fallimenti connessione, timeout
Questi suggerimenti possono innescare transizioni di stato o accelerare il testing.
C.5.3. Ottimizzazioni delle Prestazioni
DAD Ottimistico (RFC 4429):
- Consentire uso indirizzo prima del completamento DAD
- Transizione più veloce a REACHABLE in alcuni scenari
Recupero Veloce:
- Dare priorità ai controlli di raggiungibilità per i vicini utilizzati attivamente
- Usare test parallelo per vicini critici
C.5.4. Considerazioni di Sicurezza
Le transizioni di stato dovrebbero essere protette:
- Validare indirizzi sorgente dei messaggi Neighbor Discovery
- Usare SEND (RFC 3971) per protezione crittografica
- Limitare il tasso di transizioni di stato per prevenire attacchi DoS
C.6. Scenari di Esempio (Example Scenarios)
C.6.1. Risoluzione Indirizzo Riuscita
- Creare voce nello stato INCOMPLETE
- Inviare Neighbor Solicitation
- Ricevere Neighbor Advertisement → REACHABLE
- Dopo ReachableTime → STALE
- Inviare traffico → DELAY
- Il livello superiore conferma raggiungibilità → REACHABLE
C.6.2. Il Vicino Diventa Irraggiungibile
- Voce nello stato REACHABLE
- ReachableTime scade → STALE
- Inviare traffico → DELAY
- Nessuna conferma raggiungibilità → PROBE
- Inviare sonde unicast (×3)
- Nessuna risposta → Eliminare voce
C.6.3. Cambiamenti dell'Indirizzo Link-Layer
- Voce nello stato REACHABLE/STALE
- Ricevere NA non sollecitato con nuovo indirizzo, Override=1
- Aggiornare indirizzo → STALE
- Il traffico futuro innesca la verifica
Nota: Questa macchina a stati è progettata per bilanciare il rilevamento rapido di vicini irraggiungibili con un overhead minimo per vicini stabili e raggiungibili.