Dalle opzioni agli extension header
Il campo options di IPv4 è stato eliminato poiché
poco usato a causa delle complicazioni che introduce: con le opzioni
cioè, il tempo di elaborazione dei pacchetti IPv4 aumenta, in quanto
ogni router attraversato deve processarle tutte prima di inoltrare il
pacchetto.
Per soddisfare l'esigenza di poter specificare comunque delle opzioni in modo
più efficiente rispetto al passato, si è pensato al meccanismo
degli extension header. Per ora ne sono stati specificati sei, ma in
futuro se ne potranno aggiungere altri. Gli extension header sono
inseriti subito dopo l'header IPv6, in questo modo per i router
che non li devono processare essi fanno parte del payload del pacchetto
e non sono analizzati. Per questo motivo si ha un miglioramento delle
prestazioni di forwarding.

Figura 4 - Catena di header.
Ogni pacchetto può contenere più di una intestazione, come
mostrato in figura 4; ognuna deve specificare, nel campo next
header, il tipo della successiva, formando quella che viene
chiamata "catena di header". Nel formare tale catena occorre rispettare
il seguente ordine:
- header IPv6;
- hop by hop option header
- destination option header
- routing header
- fragmentation header
- authentication header
- encrypted security payload header
- destination option header
- upper layer header (es. TCP o UDP).
in cui il destination option header può comparire in due
posizioni distinte.
Hop by hop option header.
Deve essere elaborato da ogni nodo della rete attraversato dal pacchetto. Il formato
è mostrato in figura 5, dove si può notare che il campo
option ha lunghezza variabile quindi è necessario specificarne
la lunghezza in hdr ext len. Il formato delle opzioni è
illustrato in figura 6: ognuna deve iniziare con un campo di 8 bit che ne
specifica il tipo, seguito da un campo di 8 bit per la lunghezza.

Figura 5 - Option header.
Le opzioni che possono interessare tutti i nodi lungo il cammino coinvolgono in
genere funzioni di gestione o debugging. Fino ad ora sono state definite
le seguenti opzioni hop-by-hop:
- 2 opzioni di padding per garantire dati allineati su 64 bit
(type =0);
- opzione di payload jumbogram (type=194);
- opzione di Router Alert. Essa è di tipo generico ed avverte il
router che quel pacchetto contiene informazioni specifiche, che devono
essere esaminate in modo accurato. Un esempio in cui può essere utile
tale opzione è il protocollo RSVP in cui la sorgente ha bisogno di
prestabilire un cammino per i pacchetti che genera. Il formato è
mostrato in figura 7.

Figura 6- Formato opzioni

Figura 7 - Router Alert Option.
Routing header
Il routing header è usato da una sorgente per elencare l'insieme dei
nodi che un pacchetto deve attraversare prima di giungere a destinazione. E'
identificato da un valore del campo next header nell'intestazione che
lo precede pari a 43.
Il formato di questo extension header è mostrato in figura 8
Mediante il campo Routing Type è possibile specificare
più di una variante per questa intestazione e, per ogni tipo, vi saranno
dati diversi inseriti nel campo type-specific data. Per ora
è stato definito solo il caso illustrato in figura 9, in cui il
Routing Type è nullo. In questo caso il campo segment
left, indica il numero di segmenti ancora da raggiungere prima di arrivare
alla destinazione, reserved (32 bit), non è ancora utilizzato e
Address [1..n] è la lista degli indirizzi che rappresentano le
tappe del cammino.

Figura 8 - Routing header
Quando si usa questo tipo di routing header l'header IPv6
iniziale contiene come indirizzo di destinazione il primo indirizzo della
lista. A ogni hop il nodo intermedio lo sostituisce con quello del
successivo scritto nella lista e decrementa segment left.
Questo tipo di routing header deriva dall'opzione di source
routing di IPv4, ma per questa vi è la possibilità di
precisare se il pacchetto sarà inviato direttamente (e solo), al nodo
con quell'indirizzo (strict), o potrà passare anche per
router intermedi (loose); in IPv6 si è scelto di
non specificare la scelta tra strict e loose poiché non
facilmente attuabile in

Figura 9: routing header ad oggi definito
pratica, soprattutto in caso di tunnel. Essi infatti, ai fini
dell'instradamento, contano come un singolo hop anche quando i
router attraversati sono più di uno; di conseguenza la scelta di
considerare l'estremità di un tunnel strict o loose
è soggettiva.
Destination option header
Il formato è uguale a quello dell'hop by hop extension header
poiché anche in questo caso vengono definite delle opzioni (si veda la
figura 5). E´ l'unico extension header che può comparire due
volte nello stesso pacchetto, anche se in due posizioni diverse.
Se è posto prima di routing header sarà elaborato dal
primo nodo che compare nel campo Destination dell'intestazione IPv6.
Altrimenti è visibile solo agli estremi. Per ora sono state definite
solo due opzioni di padding, al fine di rendere i pacchetti di lunghezza
pari a multipli di 64 byte.
Fragmentation header
Una novità introdotta da IPv6 è l'eliminazione della frammentazione
hop by hop del pacchetto. Col nuovo protocollo la frammentazione
è gestita dagli estremi, mediante un apposito extension
header.
Se le dimensioni del pacchetto superano quella della MTU massima consentita per
il link sul quale tale pacchetto deve essere trasmesso, il nodo lo scarica e
invia indietro verso la sorgente un messaggio ICMP di errore.
Nel caso in cui sia necessario inviare un datagramma il cui payload
supera le dimensioni consentite su quel link dal valore di MTU, IPv6 fornisce
alla stazione mittente la possibilità di frammentare il pacchetto: l'uso
del fragmentation header permette alla destinazione di ricostruirlo
correttamente.
Il formato di fragmentation header è illustrato in figura 10.

Figura 10 - Fragmentation header.
Ogni pacchetto è composto da una parte non frammentabile e una
frammentabile, come mostrato in figura 11. La prima, che comprende
l'header IPv6 e gli altri header che devono essere elaborati a
ogni nodo, deve essere ripetuta uguale per ogni frammento. Vi sono solo due
eccezioni: occorre aggiornare il payload length e l'ultimo Next
Header che deve ora segnalare la presenza del Fragment Header.

Figura 11 - Pacchetto prima della frammentazione

Figura 12 - Pacchetti risultanti dalla frammentazione.
La seconda parte comprende il resto del pacchetto e viene divisa in blocchi
multipli di 8 ottetti a ciascuno dei quali viene anteposta la parte non
frammentabile aggiornata, come rappresentato in figura 12.
Nel caso in cui un cambiamento nelle tabelle di instradamento provochi la
variazione di alcuni valori per le MTU dei link, è prevista la
possibilità di far gestire la frammentazione ai router mediante
l'uso di tunnel IPv6 in IPv6, ma fino ad ora si sono avute poche
implementazioni di questo tipo.
Authentication header ed encrypted security payload header
IPv6 fornisce un servizio standard di autenticazione e cifratura end-to-end
attraverso due extension header il cui formato è mostrato nelle
figure 13 e 14.
L'Authentication Header (AH), ha lo scopo di garantire
l'autenticità e l'integrità del pacchetto in cui è posto,
ossia controlla che tale pacchetto non sia modificato in transito o sia stato
generato da chi non ha il permesso di accedere a quella determinata risorsa.
L'Encrypted Security Payload header (ESP), invece, fornisce un
meccanismo per trattare i dati in modo che possano essere letti solo al termine
del percorso.
In entrambi i casi sorgente e destinazione devono accordarsi circa la chiave
segreta, l'algoritmo da usare e quali valori assegnare ai suoi
parametri. L'insieme di queste informazioni forma una associazione di
sicurezza (Security Association SA), identificata dal campo SPI
(security parameter index) insieme agli indirizzi di sorgente e
destinazione.
La negoziazione di una security association è parte integrante
del protocollo di scambio delle chiavi.
Le implementazioni di IPv6 devono supportare l'algoritmo MD5 per
l'autenticazione e controllo di integrità e DES_CBC come algoritmo per
la crittografia, ma siccome le specifiche non dipendono da tali algoritmi
possono essere usate altre tecniche una volta stabilita un'associazione di
sicurezza.

Figura 13 Authentication header

Figura 14 - ESP header.
In base alla scelta dell'algoritmo di autenticazione, può variare la
lunghezza del campo authentication data (si veda la figura 13). Esso
contiene il valore di autenticazione generato dal mittente, corrispondente al
risultato di un calcolo che usa come dati la chiave segreta, il campo dati e
l'intestazione del pacchetto IP. Il destinatario, alla ricezione di un
pacchetto in cui è presente l'extension header AH, calcola il
valore di autenticazione nello stesso modo in cui è stato calcolato
dalla sorgente e lo confronta con quello ricevuto. Se i due valori sono uguali
il pacchetto è integro e il mittente autentico.
E' importante notare che sia sorgente che destinazione effettuano il calcolo
sul pacchetto IP normalizzato al quale viene concatenata la chiave segreta. Un
pacchetto si dice normalizzato quando il next hop e tutte le opzioni
che devono essere modificate lungo il cammino sono poste a zero e l'eventuale
Routing Header è posto al valore che avrà a
destinazione.
ESP è l'extension header che porta end-to-end i parametri
e le chiavi usati per la crittografia.
Quando usato, deve essere l'ultimo della catena perché nasconde
completamente sia i dati di livello superiore che gli header successivi
ad esso.
Sono possibili due scelte: transport mode e tunnel mode (si veda
la figura 15 ). Nel primo caso ciò che viene cifrato è solo il
payload del pacchetto IPv6. Per avere un grado più elevato di
sicurezza si può ricorrere al tunnel mode in cui l'intero
pacchetto è criptato ed è poi incapsulato in un altro pacchetto.
In questo modo è visibile solo agli estremi ed è per questo che
l'efficacia della cifratura è maggiore, ma per contro aumenta
l'overhead.

Figura 15 - Transport mode e tunnel mode.
|