Documento scritto da Nico VanHaute
Il protocollo IP nella sua forma attuale (IPv4 ) ha i giorni contati. La rete internet, usata in passato soprattutto dalle università, le industrie di punta, e i governi dalla metà degli anni 90, si orienta sempre più verso le aziende e le società commerciali - e verrà usata da un numero sempre maggiore di individui e sistemi con bisogni differenti. Ad esempio: con l'imminente convergenza del computer, delle reti, dell'audiovisuale dell'industria del divertimento, ogni televisore diverrà innanzitutto un'apparecchiatura di accesso a internet che permette a miliardi di individui di praticare, ad esempio, il video on-demand, le televendite o il commercio elettronico. In queste circostanze, il protocollo IPv6 (detto anche IPng per IP new generation) deve offrire più flessibilità e efficacia, risolvere tutta una serie di problemi nuovi e non dovrebbe mai essere in rottura di indirizzi.
Gli obiettivi principali di questo nuovo protocollo furono di :
Il protocollo IPv6 risponde in maniera ragionevole agli obiettivi elencati. Mantiene le funzioni migliori dell'IPv4, scartando o minimizzando le non buone, e aggiungendone delle nuove quando necessario.
In generale, IPv6 non è compatibile con IPv4, ma è compatibile con tutti gli altri protocolli internet, fra cui TCP, UDP, ICMP, IGMP, OSPF, BGP et DNS; a volte, possono essere richieste delle leggere modifiche (soprattutto per funzionare con indirizzi lunghi).
La novità assoluta dell'IPv6 è l'uso degli indirizzi più lunghi rispetto all'IPv4.
Essi sono codificati su 16 bytes e permettono di risolvere il problema che mette IPv6 all'ordine del giorno: avere un insieme di indirizzi internet quasi illimitato.
IPv4 permette di indirizzare 2^32=4,29.10^9 indirizzi mentre IPv6 permette di indirizzarne 2^128=3,4.10^38 .
Il miglioramento più grande dell'IPv6 è la semplificazione dell'intestazione dei datagrammi. L'intestazione del datagramma di base IPv6 comprende solo 7 campi (contro i 14 per IPv4). Questo cambiamento permette ai router di trattare i datagrammi più rapidamente e migliora globalmente la loro banda.
Il terzo miglioramento consiste nell'offrire più flessibilità alle opzioni. Questo cambiamento è essenziale con la nuova intestazione, dato che i campi obbligatori della vecchia versione sono ora diventati opzionali.
Inoltre, il modo in cui le opzioni sono rappresentate è diverso; essa permette ai router di ignorare semplicemente le opzioni che non sono loro destinate. Questa funzione accelera i tempi di trattamento dei datagrammi.
D'altro canto IPv6 apporta anche una sicurezza maggiore:
L'autentificazione e la confidenzialità costituiscono le funzioni di sicurezza più importanti del protocollo IPv6.
Infine, un'attenzione maggiore è accordata rispetto al passato ai tipi di servizi. Anche se il campo Tipo di servizi del datagramma IPv4 è raramente usato, la crescita attesa per il traffico multimediale in futuro necessita di un interessamento.
Ecco a cosa assomiglia un datagramma IPv6nbsp;:
<--------------------------- 32 bits --------------------------->
| |||
|
|||
|
|||
|
|||
|
|||
Qui di seguito il significato dei differenti campi :
L'utilizzo dei prefissi separati per gli indirizzi attribuiti a un fornitore e gli indirizzi attribuiti ad una zona geografica costituisce un compromesso tra le due differenti visioni del futuro della rete internet. Ognuno di questi fornitori dispone di una frazione riservata dello spazio di indirizzamento (1/8 di questo spazio). I primi 5 bits che seguono il prefisso 010 sono usati per indicare in quale "registro" si trova il fornitore di accesso. Attualmente, sono operativi 3 grandi registri, per l'America del nord, l'Europa e l'Asia. Vi si potranno aggiungere fino a 29 nuovi registri.
Ogni registro è libero di dividere i 15 bytes restanti come meglio crede. Un'altra possibilità è di utilizzare un byte per indicare la nazionalità del fornitore e lasciare disponibili i bytes seguenti per definire una struttura d'indirizzi specifica.
Il modello geografico è lo stesso di quelle della rete internet attuale, nel quale i fornitori d'acceso non hanno un grande ruolo. In questo quadro, IPv6 può gestire 2 tipi di indirizzi.
Gli indirizzi dei link e dei siti locali hanno una sola specificazione locale. Essi possono essere riutilizzati da altre organizzazioni senza creare un conflitto. Non possono però depassare i limiti delle organizzazioni, cosa che li rende ben più adatti a quelle che usano dei guard-rail per proteggere la loro rete privata dalla rete internet.
Gli indirizzi di diffusione multidestinatario dispongono di un campo Flag (4 bits) e di un campo Importanza(4 bits) dopo il prefisso, poi di un campo Identificatore di gruppo (112 bits). Uno dei bits del flag distingue i gruppi permanenti dai gruppi transitori.
Il campo Importanza permette una diffusione limitata su una zona
Oltre a supportare l'indirizzamento point to point classico (unicast) e l'indirizzamento di diffusione multidestinatario (multicast) IPv6 supporta un nuovo tipo di indirizzamento di diffusione a prima vista (anycast).
Questa tecnica è simile alla diffusione multidestinatario dove l'indirizzo di destinazione è un gruppo d'indirizzo ma, piuttosto che cercare di inviare il datagramma a tutti i membri del gruppo, esso cerca di inviarlo ad un solo membro del gruppo, quello più vicino o il più adatto a riceverlo.
Una nuova notazione è stata definita per descrivere gli indirizzi IPv6 da 16 bytes. Essa comprende 8 gruppi di 4 cifre esadecimali separati da due punti. Ad esempio :
8000:0000:0000:0000:0123:4567:89AB:CDEF
Dato che alcuni indirizzi hanno dei numeri zero nella loro stringa, sono state definite 3 ottimizzazioni. Innanzitutto, i primi zero di un gruppo possono essere omessi, come ad esempio 0123 che può essere scritto 123. Poi, uno o più gruppi di 4 zeri consecutivi possono essere sostituiti da un doppio due punti. Ed è così che l'indirizzo precedente diventa :
8000::::123:4567:89AB:CDEF
Infine, gli indirizzi IPv4 possono essere scritti utilizzando la rappresentazione dell'indirizzo in notazione decimale puntata preceduta da un doppio due punti, come ad esempio :
::192.31.254.46
E' necessario essere più espliciti su questa notazione di indirizzi, ma bisogna sapere che esiste un numero importante di indirizzi su 16 bytes. Precisamente, ve ne sono 2^128, ossia approssimativamente 3 x 10^38. Se la terra intera (terre e mari compresi) fosse coperta di computer, IPv6 potrebbe fornire 7 x 10^23 indirizzi IP per m².
Il campo Protocollo è escluso perché il campo Intestazione seguente dell'ultima intestazione IP di un datagramma precisa il tipo di protocollo (ad esempio UDP o TCP ).
Tutti i campi relativi alla fragmentazione sono stati ritirati, perché IPv6 ha un approccio diverso alla fragmentazione.
Per cominciare, tutti i computer e i router conformi a IPv6 devono supportare i datagrammi da 576 bytes. Questa regola pone la fragmentazione ad un ruolo secondario. Inoltre, quando un computer invia un datagramma IPv6 troppo grande , contrariamente a quello che succede con la frammentazione, il router che non riesce a trasmetterlo invia un messaggio di errore alla sorgente. Questo messaggio precisa al computer sorgente di interrompere l'invio di nuovi datagrammi verso questa destinazione. E' molto più efficace avere un computer che trasmetta immediatamente dei datagrammi con le giuste dimensioni piuttosto che avere dei router che li frammentano al momento.
Infine, il campo Totale di controllo non esiste più dato che il suo calcolo riduce troppo la performance. In effetti, con l'affidabilità delle reti attuali, combinata con il fatto che i livelli delle connessioni di dati e trasporto effettuano il loro proprio controllo, il guadagno in qualità di un totale di controllo supplementare non vale il prezzo da pagare per calcolarlo.
Questa intestazione fornisce un'informazione complementare in modo efficace. Ognuna delle quali è opzionale. Se sono presenti più intestazioni, esse devono apparire immediatamente dopo l'intestazione fissa, di preferenza nell'ordine dell'elenco.
Alcune intestazioni hanno un formato fisso; altre contengono un numero variabile di campi variabili. Per questo, ogni articolo è codificato sotto forma di tripletta (Tipo, Lunghezza, Valore). Il Tipo è un campo di un byte che precisa la natura dell'opzione. I differenti tipi sono stati scelti in modo che i primi due bits indichino cosa fare ai router che non sanno eseguire l'opzione.
Le scelte sono:
La Lunghezza è un campo di un byte. Essa indica la dimensione del campo Valore (da 0 a 255) che contiene un'informazione qualsiasi indirizzata al destinatario.
L'intestazione Passo-dopo-passo contiene delle informazioni destinate a tutti i router sul percorso.
L'intestazione Router fornisce un elenco di uno o più router che devono essere visitati nel tragitto verso la destinazione. Si realizzano due forme di router usate in combinazione: uno stretto (integrale e definito) e uno addolcito (dove sono definiti solo i router obbligatori).
I primi 4 campi dell'intestazione d'estensione Router contengono 4 interi di un byte:
L'intestazione Frammentazione tratta la frammentazione in modo simile all' IPv4. L'intestazione contiene l'identificativo del datagramma, il numero di fragmento e un bit che precisa se seguono altri frammenti. Nell'IPv6, contrariamente all' IP4v, solo il computer sorgente può frammentare il datagramma. I router sul percorso non lo possono fare. Questo permette al computer sorgente di frammentare il datagramma in pezzi e di usare l'intestazione Frammentazione per trasmettere i pezzi.
L'intestazione Autentificazione fornisce un meccanismo che permette al destinatario di un datagramma di assicurarsi sull'identità della sorgente. Nell' IPv4, non vi è nessuna garanzia simile.
L'utilizzo della codificazione dei dati del datagramma (il suo carico utile) rinforza la sua sicurezza; solo il vero destinatario potrà leggerli.
Quando un emittente e un ricevente vogliono comunicare in sicurezza, essi devono innanzitutto mettersi d'accordo su una o più chiavi segrete che solo loro conoscono. Viene assegnato un numero chiave di 32 bits a ciascuna delle due chiavi.
I numeri chiave sono globali nel senso che, ad esempio, se A usa la chiave 4 per comunicare con B, A non può utilizzare questa chiave per comunicare con C. Altri parametri sono associati ad ogni numero chiave, come la sua durata di vita, ecc…
Per inviare un messaggio autentificato, il computer sorgente costruisce in primis un datagramma che contiene tutte le intestazioni IP e il carico utile, poi sostituisce i campi che cambiano con degli zero (ad esempio: il campo Numero max. di salti). Il datagramma è completato con degli 0 per diventare un multiplo di 16 bytes. In maniera simile, la chiave segreta usata è ugualmente completata con degli 0 per essere un multiplo di 16 bytes. Poi, un totale di controllo cifrato è calcolato dopo la concatenazione della chiave segreta completata, del datagramma completo e, di nuovo, della chiave segreta completa.
L'intestazione Autentificazione contiene 3 parti. La prima conta 4 bytes precisando il numero di intestazione seguente, la lunghezza dell'intestazione d'autentificazione, e da 16 bits a zero. La seconda definisce il numero chiave su 32 bits. La terza contiene il totale di controllo cifrato (con l'algoritmo MD5 o un altro)
Il destinatario usa il numero chiave per trovare la chiave segreta. Il valore completo della chiave segreta è aggiunto prima e dopo il carico utile anch'esso completato, i campi variabili dell'intestazione sono svuotati dai loro zeri, poi il totale di controllo cifrato e calcolato. Se il risultato del calcolo è uguale al totale del controllo cifrato contenuto nell'intestazione Autentificazione, il destinatario è sicuro che il datagramma arrivi effettivamente dalla sorgente con cui condivide la chiave segreta. Ed è ugualmente sicuro che il datagramma non sia stato falsificato a sua insaputa.
Per i datagrammi che devono essere inviati segretamente, bisogna usare l'intestazione d'estensione Carico utile cifrato. Questa intestazione comincia con un numero chiave di 32 bits, seguito dal carico utile cifrato.
L'intestazione Opzioni di destinazione è usata per dei campi che hanno bisogno di essere interpretati e capiti solo dal computer destinatario. Nella versione originale IPv6, la sola opzione destinazione che è stata definita è l'opzione nulla. Essa permette di completare questa intestazione con degli 0 per ottenere un multiplo di 8 bytes. Questa intestazione non sarà usata in un primo tempo. E' stata definita per assicurarsi che i nuovi software di router possano considerarla, nel caso in cui qualcuno possa prevedere un giorno un'opzione di destinazione.
Per ulteriori informazioni sul protocollo IPv6, la cosa migliore è di riferirsi alla RFC 2460 che spiega dettagliatamente il protocollo :
Articolo scritto da Nico VanHaute.