Passa al contenuto principale

8. Funzione di reindirizzamento (Redirect Function)

Il messaggio Redirect viene utilizzato dai router per informare gli host di un primo hop migliore verso una destinazione. I router inviano messaggi Redirect solo per i pacchetti inoltrati dal router. Gli host DEVONO (MUST) scartare silenziosamente tutti i messaggi Redirect ricevuti che non soddisfano tutti i controlli di validità specificati nella Sezione 8.1.

8.1. Validazione dei messaggi Redirect (Validation of Redirect Messages)

Un host DEVE (MUST) scartare silenziosamente qualsiasi messaggio Redirect ricevuto che non soddisfa tutti i seguenti controlli di validità:

  • L'indirizzo sorgente IP del Redirect è lo stesso del router di primo hop corrente per l'indirizzo di destinazione ICMP specificato.

  • Il campo IP Hop Limit ha un valore di 255, cioè il pacchetto non avrebbe potuto essere inoltrato da un router.

  • Il checksum ICMP è valido.

  • Il codice ICMP è 0.

  • La lunghezza ICMP (derivata dalla lunghezza IP) è di 40 o più ottetti.

  • L'indirizzo sorgente IP del Redirect è un indirizzo link-local. I router devono utilizzare il loro indirizzo link-local come sorgente per i messaggi Redirect in modo che gli host possano identificare in modo univoco i router.

  • Il campo ICMP Destination Address nel messaggio di redirect non contiene un indirizzo multicast.

  • L'indirizzo ICMP Target è un indirizzo link-local (quando reindirizzato a un router) o identico all'indirizzo ICMP Destination (quando reindirizzato alla destinazione on-link).

  • Tutte le opzioni incluse hanno una lunghezza maggiore di zero.

Il contenuto del campo Reserved e di eventuali opzioni non riconosciute DEVE (MUST) essere ignorato. Modifiche future e retrocompatibili al protocollo possono specificare il contenuto del campo Reserved o aggiungere nuove opzioni; modifiche non retrocompatibili possono utilizzare valori di codice diversi.

Il contenuto di eventuali opzioni definite che non sono specificate per essere utilizzate con i messaggi Redirect DEVE (MUST) essere ignorato e il pacchetto elaborato normalmente. Le uniche opzioni definite che possono apparire sono le opzioni Target Link-Layer Address e Redirected Header.

8.2. Specifica del router (Router Specification)

Un router DOVREBBE (SHOULD) inviare un messaggio Redirect, soggetto a limitazione di velocità, ogni volta che inoltra un pacchetto che non è esplicitamente indirizzato a se stesso, in cui:

  • il campo Source Address del pacchetto identifica un vicino, e

  • il router determina che un nodo di primo hop migliore risiede sullo stesso collegamento del nodo mittente per l'indirizzo di destinazione del pacchetto, e

  • l'indirizzo di destinazione del pacchetto non è un indirizzo multicast.

Il messaggio Redirect trasmesso contiene:

  • Nel campo Target Address: l'indirizzo a cui i pacchetti successivi per la destinazione dovrebbero essere inviati. Se il target è un router, l'indirizzo link-local di quel router DEVE (MUST) essere utilizzato. Se il target è un host, il campo indirizzo target DEVE (MUST) essere impostato allo stesso valore dell'indirizzo di destinazione del pacchetto IP invocante.

  • Nel campo Destination Address: l'indirizzo di destinazione del pacchetto IP invocante.

  • Nelle opzioni:

    • Opzione Target Link-Layer Address: l'indirizzo di livello di collegamento del target. DOVREBBE (SHOULD) essere inclusa (se nota). Si noti che sui collegamenti NBMA, gli host potrebbero non avere indirizzi di livello di collegamento, nel qual caso l'opzione non può essere inclusa.

    • Redirected Header: quanto più possibile del pacchetto inoltrato senza che il pacchetto di redirect superi l'MTU minimo richiesto per supportare IPv6 come specificato in [IPv6].

Un router DEVE (MUST) limitare la velocità con cui vengono inviati i messaggi Redirect, al fine di limitare la larghezza di banda e i costi di elaborazione sostenuti dai messaggi Redirect quando la sorgente non risponde correttamente ai Redirect. Maggiori dettagli sulla limitazione della velocità dei messaggi di errore ICMP possono essere trovati in [ICMPv6].

8.3. Specifica dell'host (Host Specification)

Un host che riceve un Redirect esamina il pacchetto ed esegue i seguenti controlli di validità. Se uno di questi controlli fallisce, l'host DEVE (MUST) scartare silenziosamente il messaggio Redirect.

Dopo che l'host ha verificato che il messaggio Redirect è valido, elabora il messaggio come segue:

  • Se l'indirizzo Target non è uguale all'indirizzo Destination, l'host sostituisce la voce corrente per l'indirizzo Destination nel suo Destination Cache con una voce che punta all'indirizzo Target. La voce dovrebbe ereditare lo stato della vecchia voce rispetto alle informazioni sul MTU del percorso e allo stato di rilevazione di irraggiungibilità del vicino. Quando l'host crea una nuova voce Destination Cache, la voce viene inizializzata come descritto nella Sezione 5.2.

  • Se l'indirizzo Target è uguale all'indirizzo Destination, l'host ricevente esegue le seguenti operazioni sulla sua voce Prefix List per la destinazione:

    • Se non esiste alcuna voce, l'host aggiunge la destinazione alla sua Prefix List come destinazione on-link.
    • Se una voce per la destinazione esiste già nella Prefix List, l'host aggiorna la voce per indicare che la destinazione è on-link.

In entrambi i casi, l'host aggiorna la voce Destination Cache per la destinazione in modo che punti all'indirizzo Target. Se la voce Destination Cache non esiste, l'host crea una nuova voce. La voce DOVREBBE (SHOULD) essere aggiornata anche se l'host ha già una voce in cache che specifica un vicino di primo hop diverso, perché i router sono in una posizione migliore per determinare il vicino di primo hop appropriato.

Se il redirect contiene un'opzione Target Link-Layer Address, l'host crea o aggiorna la voce Neighbor Cache per il target. In entrambi i casi, viene utilizzato l'indirizzo di livello di collegamento nell'opzione. La voce Neighbor Cache per il target viene impostata sullo stato STALE. Se viene creata una voce Neighbor Cache per il target, il suo stato di raggiungibilità DEVE (MUST) essere impostato su STALE come specificato nella Sezione 7.3.3. Se una voce cache esisteva già ed è aggiornata con un indirizzo di livello di collegamento diverso, il suo stato di raggiungibilità DEVE (MUST) anche essere impostato su STALE.

L'host DEVE (MUST) aggiungere l'indirizzo Target al Destination Cache. L'indirizzo del next-hop della voce viene impostato sull'indirizzo Target del Redirect. Se una voce Destination Cache per la destinazione esisteva già, viene aggiornata per utilizzare l'indirizzo Target come next-hop. Si noti che l'host non verifica che il target sia raggiungibile; la validità del messaggio Redirect è responsabilità del router.

Un messaggio Redirect DOVREBBE (SHOULD) essere inviato da un router in risposta a un pacchetto inoltrato dal router in cui il campo Source Address identifica un vicino e il router determina un nodo di primo hop migliore per la destinazione. La velocità con cui un router può inviare Redirect deve essere limitata per prevenire tempeste di broadcast o attacchi denial-of-service sugli host.

8.4. Esempio (Example)

Consideriamo il caso in cui un host invia un pacchetto a una destinazione tramite un router predefinito R1, ma un altro router R2 sullo stesso collegamento sarebbe un primo hop migliore verso la destinazione. Quando inoltra il pacchetto, R1 invia un Redirect all'host informandolo che R2 è una scelta migliore. Il Redirect include l'indirizzo link-local di R2.

      +------+
| Host |
+------+
|
| (1) Pacchetto a Dest
|
v
+----+ +----+
| R1 | ---------> | R2 |
+----+ Redirect +----+
| |
| |
+------------------+
Link
  1. L'host invia un pacchetto alla destinazione tramite R1 (il suo router predefinito)
  2. R1 inoltra il pacchetto e invia un Redirect all'host, indicando che R2 è migliore
  3. L'host aggiorna il suo Destination Cache per utilizzare R2 per questa destinazione
  4. I pacchetti successivi alla destinazione vengono inviati direttamente a R2

8.5. Prevenzione dei loop di redirect (Redirect Loop Prevention)

Il meccanismo di redirect è suscettibile a loop di redirect se più router su un collegamento non concordano sul miglior primo hop per una destinazione. Tuttavia, tali loop sono tipicamente di breve durata per i seguenti motivi:

  • I router inviano solo Redirect per i pacchetti che inoltrano. Se un router riceve un pacchetto per il quale è il miglior primo hop, non invierà un Redirect.

  • Gli host che ricevono più Redirect che puntano a router diversi per la stessa destinazione utilizzeranno il Redirect ricevuto più di recente. Nel tempo, il sistema dovrebbe convergere verso uno stato stabile.

  • L'algoritmo di rilevazione di irraggiungibilità del vicino alla fine rileverà se un router è irraggiungibile, causando l'host a ripiegare su un altro router.

Nonostante queste mitigazioni, le implementazioni dovrebbero essere consapevoli della possibilità di loop di redirect e possono implementare salvaguardie aggiuntive, come la limitazione della velocità con cui le voci Destination Cache vengono aggiornate in risposta ai Redirect.