Passa al contenuto principale

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:

  1. Ricezione di un Neighbor Advertisement sollecitato
  2. Indicazione del protocollo di livello superiore (es. TCP ACK)
  3. Ricezione di un messaggio Neighbor Discovery con flag Solicited impostato

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

  1. Creare voce nello stato INCOMPLETE
  2. Inviare Neighbor Solicitation
  3. Ricevere Neighbor Advertisement → REACHABLE
  4. Dopo ReachableTime → STALE
  5. Inviare traffico → DELAY
  6. Il livello superiore conferma raggiungibilità → REACHABLE

C.6.2. Il Vicino Diventa Irraggiungibile

  1. Voce nello stato REACHABLE
  2. ReachableTime scade → STALE
  3. Inviare traffico → DELAY
  4. Nessuna conferma raggiungibilità → PROBE
  5. Inviare sonde unicast (×3)
  6. Nessuna risposta → Eliminare voce
  1. Voce nello stato REACHABLE/STALE
  2. Ricevere NA non sollecitato con nuovo indirizzo, Override=1
  3. Aggiornare indirizzo → STALE
  4. 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.