Passa al contenuto principale

4. IPv6 Extension Headers (Intestazioni di estensione IPv6)

In IPv6, le informazioni opzionali di livello Internet sono codificate in intestazioni separate, che possono essere collocate tra l'intestazione IPv6 e l'intestazione di livello superiore. Esiste un piccolo numero di queste intestazioni di estensione, ognuna identificata da un valore distinto di Next Header. Come mostrato negli esempi seguenti, un pacchetto IPv6 può trasportare zero, una o più intestazioni di estensione, ciascuna identificata dal campo Next Header dell'intestazione precedente:

+---------------+------------------------
| IPv6 header | TCP header + data
| |
| Next Header = |
| TCP |
+---------------+------------------------


+---------------+----------------+------------------------
| IPv6 header | Routing header | TCP header + data
| | |
| Next Header = | Next Header = |
| Routing | TCP |
+---------------+----------------+------------------------


+---------------+----------------+-----------------+-----------------
| IPv6 header | Routing header | Fragment header | fragment of TCP
| | | | header + data
| Next Header = | Next Header = | Next Header = |
| Routing | Fragment | TCP |
+---------------+----------------+-----------------+-----------------

Con una sola eccezione, le intestazioni di estensione non vengono esaminate o elaborate da alcun nodo lungo il percorso di consegna del pacchetto finché il pacchetto non raggiunge il nodo identificato nel campo Destination Address dell'intestazione IPv6, oppure, nel caso multicast, ciascun nodo dell'insieme di destinazione. A quel punto, la normale demultiplexing del campo Next Header dell'intestazione IPv6 richiama il modulo incaricato di elaborare la prima intestazione di estensione, oppure l'intestazione di livello superiore se non è presente alcuna intestazione di estensione. Il contenuto e la semantica di ogni intestazione di estensione determinano se continuare l'elaborazione con l'intestazione successiva. Di conseguenza, le intestazioni di estensione devono essere elaborate rigorosamente nell'ordine in cui appaiono nel pacchetto. Per esempio, il destinatario non deve scandire il pacchetto alla ricerca di un particolare tipo di intestazione di estensione e processarla prima di aver elaborato tutte le intestazioni precedenti.

L'eccezione citata nel paragrafo precedente è la Hop-by-Hop Options header (intestazione delle opzioni hop-by-hop), che trasporta informazioni da esaminare ed elaborare da ogni nodo lungo il percorso di consegna del pacchetto, inclusi il nodo sorgente e il nodo di destinazione. Quando è presente una Hop-by-Hop Options header, essa deve seguire immediatamente l'intestazione IPv6. La sua presenza è indicata dal valore zero nel campo Next Header dell'intestazione IPv6.

Se, come risultato dell'elaborazione di un'intestazione, un nodo deve procedere con l'intestazione successiva ma non riconosce il valore Next Header nell'intestazione corrente, dovrebbe scartare il pacchetto e inviare all'indirizzo sorgente del pacchetto un messaggio ICMP Parameter Problem con valore ICMP Code pari a 1, "unrecognized Next Header type encountered (tipo di Next Header non riconosciuto)", e con il campo ICMP Pointer contenente l'offset del valore non riconosciuto nel pacchetto originale. La stessa azione dovrebbe essere intrapresa se un nodo incontra un valore Next Header pari a zero in qualsiasi intestazione diversa dall'intestazione IPv6.

Ogni intestazione di estensione ha una lunghezza pari a un multiplo intero di 8 ottetti, per preservare l'allineamento a 8 ottetti delle intestazioni successive. I campi multi-ottetto all'interno di ogni intestazione di estensione sono allineati sui propri confini naturali, cioè un campo largo n ottetti è collocato a un offset pari a un multiplo intero di n ottetti dall'inizio dell'intestazione, dove n = 1, 2, 4 o 8.

Un'implementazione completa di IPv6 include l'implementazione delle seguenti intestazioni di estensione:

Hop-by-Hop Options
Routing (Type 0)
Fragment
Destination Options
Authentication
Encapsulating Security Payload

Le prime quattro sono specificate in questo documento; le ultime due sono specificate rispettivamente in [RFC-2402] e [RFC-2406].