Passa al contenuto principale

4. Header di Estensione IPv6 (IPv6 Extension Headers)

In IPv6, le informazioni opzionali del livello Internet sono codificate in header separati che possono essere posizionati tra l'header IPv6 del pacchetto e l'header del livello superiore. Esiste un numero ridotto di tali header di estensione (Extension Headers), ciascuno identificato da un distinto valore Next Header.

I numeri degli header di estensione provengono dallo stesso insieme di numeri di protocollo IP IANA [IANA-PN] utilizzati da IPv4 e IPv6. Durante l'elaborazione della sequenza di valori Next Header in un pacchetto, il primo valore che non è un header di estensione [IANA-EH] indica che il prossimo elemento nel pacchetto è l'header del livello superiore corrispondente. Se non è presente un header del livello superiore, viene utilizzato un valore speciale "No Next Header".

Come mostrato negli esempi seguenti, un pacchetto IPv6 può trasportare zero, uno o più header di estensione, ciascuno identificato dal campo Next Header dell'header 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 |
+---------------+----------------+-----------------+-----------------

Gli header di estensione (tranne l'header Hop-by-Hop Options) NON DEVONO (MUST NOT) essere elaborati, inseriti o eliminati da alcun nodo lungo il percorso di consegna del pacchetto, fino a quando il pacchetto raggiunge il nodo (o, nel caso di multicast, il gruppo di nodi) identificato nel campo Destination Address dell'header IPv6.

L'header Hop-by-Hop Options non viene inserito o eliminato, ma può essere ispezionato ed elaborato da qualsiasi nodo lungo il percorso di consegna del pacchetto. L'header Hop-by-Hop Options, quando presente, DEVE (MUST) seguire immediatamente l'header IPv6. La sua presenza è indicata dal valore zero nel campo Next Header dell'header IPv6.

NOTA: [RFC2460] affermava che tutti i nodi DOVEVANO (MUST) ispezionare ed elaborare l'header Hop-by-Hop Options, mentre ora ci si aspetta che i nodi lungo il percorso di consegna del pacchetto ispezionino ed elaborino l'header Hop-by-Hop Options solo se esplicitamente configurati per farlo.

Nel nodo di destinazione, il normale demultiplexing basato sul campo Next Header dell'header IPv6 richiama il modulo per elaborare il primo header di estensione, o l'header del livello superiore se non sono presenti header di estensione. Gli header di estensione DEVONO (MUST) essere elaborati rigorosamente nell'ordine in cui appaiono nel pacchetto.

Se il valore Next Header non è riconosciuto dal nodo, il nodo DOVREBBE (SHOULD) scartare il pacchetto e DOVREBBE (SHOULD) inviare un messaggio ICMP Parameter Problem al mittente.

La lunghezza di ciascun header di estensione è un multiplo intero di 8 ottetti. Un'implementazione completa di IPv6 include le implementazioni dei seguenti header di estensione:

  • Hop-by-Hop Options
  • Fragment
  • Destination Options
  • Routing
  • Authentication
  • Encapsulating Security Payload

4.1 Ordine degli Header di Estensione (Extension Header Order)

Quando vengono utilizzati più header di estensione, SI RACCOMANDA (RECOMMENDED) il seguente ordine:

IPv6 header
Hop-by-Hop Options header
Destination Options header (nota 1)
Routing header
Fragment header
Authentication header (nota 2)
Encapsulating Security Payload header (nota 2)
Destination Options header (nota 3)
Upper-Layer header

Nota 1: per le opzioni da elaborare dalla prima destinazione che appare nel campo IPv6 Destination Address. Nota 2: raccomandazioni aggiuntive in [RFC4303]. Nota 3: per le opzioni da elaborare solo dalla destinazione finale.

Ciascun header di estensione DOVREBBE (SHOULD) apparire al massimo una volta, ad eccezione dell'header Destination Options che DOVREBBE (SHOULD) apparire al massimo due volte.

4.2 Opzioni (Options)

Due header di estensione definiti (Hop-by-Hop Options e Destination Options) trasportano un numero variabile di opzioni codificate in formato Type-Length-Value (TLV):

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -
| Option Type | Opt Data Len | Option Data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -

Option Type: identificatore a 8 bit del tipo di opzione. Opt Data Len: intero senza segno a 8 bit. Lunghezza del campo Option Data in ottetti. Option Data: campo a lunghezza variabile. Dati specifici dell'opzione.

I 2 bit più significativi del campo Option Type specificano l'azione da intraprendere se l'opzione non è riconosciuta:

00 - salta questa opzione e continua l'elaborazione
01 - scarta il pacchetto
10 - scarta il pacchetto e invia ICMP Parameter Problem
11 - scarta il pacchetto e invia ICMP solo se non multicast

Il terzo bit più alto specifica se i dati dell'opzione possono cambiare durante il transito:

0 - i dati dell'opzione non cambiano durante il transito
1 - i dati dell'opzione possono cambiare durante il transito

4.3 Header Hop-by-Hop Options

L'header Hop-by-Hop Options trasporta informazioni opzionali da ispezionare da ogni nodo lungo il percorso. È identificato dal valore Next Header 0:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
| |
. Options .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Next Header: selettore a 8 bit. Identifica il tipo di header immediatamente successivo. Hdr Ext Len: intero senza segno a 8 bit. Lunghezza in unità di 8 ottetti (esclusi i primi 8 ottetti). Options: campo a lunghezza variabile contenente una o più opzioni codificate TLV.

4.4 Header Routing

L'header Routing viene utilizzato da un mittente IPv6 per elencare uno o più nodi intermedi da visitare lungo il percorso verso la destinazione. È identificato dal valore Next Header 43.

Il formato generale è:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len | Routing Type | Segments Left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. type-specific data .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Routing Type: identificatore a 8 bit del tipo particolare di Routing header. Segments Left: intero senza segno a 8 bit. Numero di segmenti di percorso esplicitamente elencati rimanenti.

4.5 Header Fragment

L'header Fragment viene utilizzato quando un pacchetto IPv6 viene frammentato dal mittente. È identificato dal valore Next Header 44:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Reserved | Fragment Offset |Res|M|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Fragment Offset: intero senza segno a 13 bit. Offset dei dati del frammento in unità di 8 ottetti. M flag: 1 = più frammenti; 0 = ultimo frammento. Identification: identificatore a 32 bit generato dal mittente per identificare univocamente il pacchetto frammentato.

4.6 Header Destination Options

L'header Destination Options trasporta informazioni opzionali da ispezionare solo dal nodo di destinazione. È identificato dal valore Next Header 60:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
| |
. Options .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Il formato dei campi è identico all'header Hop-by-Hop Options.

4.7 Header No Next Header

Il valore 59 nel campo Next Header indica che non c'è alcun header successivo dopo questo. Questo valore NON indica alcun header di estensione.