Il protocollo IP nella sua forma attuale (IPv4) ha i giorni contati. La rete internet, usata in passato soprattutto dalle università e dagli 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'audiovisivo dell'industria dell'intrattenimento, 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: supportare miliardi di computer, liberandosi dell'inefficienza dello spazio degli indirizzi IP attuali; ridurre la dimensione delle tabelle di router; semplificare il protocollo, per permettere ai router di inviare i datagrammi più rapidamente; fornire una migliore sicurezza (autenticazione e confidenzialità) rispetto all'attuale protocollo IP; dare più attenzione ai tipi di servizio, e soprattutto ai servizi associati al traffico in tempo reale; facilitare la diffusione multidestinatario permettendo di specificare l'importanza; dare la possibilità a un computer di spostarsi senza cambiare il proprio indirizzo; permettere al protocollo un'evoluzione futura e accordare al vecchio e al nuovo protocollo una coesistenza pacifica.
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 e DNS e, 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 byte 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'autenticazione e la confidenzialità costituiscono le funzioni di sicurezza più importanti del protocollo IPv6.
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 IPv6:
<--------------------------- 32 bit --------------------------->
|
|||
|
|||
<td width="480"> Indirizzo IP sorgente |
|||
<td width="480"> Indirizzo IP destinazione |
|||
<td width="480"> Dati |
Qui di seguito il significato dei differenti campi:
Il campo Versione è sempre uguale a 4 bit per IPv6. Durante il periodo di transizione da IPv4 verso IPv6, i router dovranno esaminare questo campo per sapere quale tipo di datagramma usano.
Il campo Classe di traffico (codificato a 8 bit) è usato per distinguere le sorgenti che devono beneficiare del controllo dei flussi delle altre. Alle risorse capaci di rallentare la banda saranno attribuite delle priorità da 0 a 7 in caso di congestione. I valori da 8 a 15 sono assegnati al traffico in tempo reale (i dati audio e video ne fanno parte) il cui debito è costante. Questa distinzione dei flussi permette ai router di reagire meglio in caso di congestione. In ogni gruppo prioritario, il livello di priorità più bassa corrisponde ai datagrammi meno importanti.
Il campo Identificatore di flussi contiene un numero unico scelto dalla sorgente che ha come scopo di facilitare il lavoro dei router e di permettere la realizzazione delle funzioni di qualità dei servizi come RSVP (Resource reSerVation setup Protocol). Questo indicatore può essere considerato come una nota in un contesto nei router. Il router può allora fare un trattamento particolare: scelta del router, trattamento in "tempo reale" dell'informazione. Il campo Identificatore di flussi può essere riempito con un valore aleatorio che servirà a referenziare il contesto. La sorgente manterrà questo valore per tutti i pacchetti che emetterà per questa applicazione e questa destinazione. Il trattamento è ottimizzato poiché il router deve solo consultare 5 campi per determinare l'appartenenza di un pacchetto.
Il campo Lunghezza dei dati utili (in inglese payload) a 2 byte, contiene solo la dimensione dei dati utili, senza considerare la lunghezza dell'intestazione. Per dei pacchetti la cui dimensione dei dati sarà superiore a 65536 questo campo vale 0 e si usa l'opzione jumbogramma dell'estensione di "hop by hop".
Il campo Intestazione seguente ha una funzione simile al campo protocollo del pacchetto IPv4: esso definisce semplicemente la prossima intestazione (nello stesso datagramma IPv6). Si può trattare di un protocollo (di livello superiore ICMP, UDP, TCP, ecc.) o di un'estensione.
Il campo Numero di salti sostituisce il campo "TTL" (Time-to-Live) in IPv4. Il suo valore (a 8 bit) è diminuito ad ogni nodo attraversato. Se questo valore raggiunge lo 0 allora il pacchetto IPv6 attraversa un router, e sarà rigettato con l'emissione di un messaggio ICMPv6 di errore. Esso è usato per impedire ai datagrammi di circolare infinitamente. Ha lo stesso ruolo del campo Durata di vita dell'IPv4, sapendo che contiene un valore rappresentativo del numero di salti o di passi (hops) che è decrescente ad ogni passaggio nel router. In teoria, nell'IPv4, vi è una nozione di tempo in secondi ma nessun router la usa come tale, e il nome è cambiato per rifletterne l'uso attuale.
Vengono in seguito i campi Indirizzo sorgente e Indirizzo di destinazione.
Dopo numerose discussioni, si decise che gli indirizzi di lunghezza fissa uguale a 16 byte rappresentavano il miglior compromesso.
I primi bit dell'indirizzo - il prefisso - definiscono il tipo di indirizzo. Gli indirizzi che cominciano con 8 zeri sono riservati, soprattutto per gli indirizzi IPv4. Così tutti gli indirizzi che cominciano con 8 zeri sono riservati agli indirizzi IPv4. Si supportano due varianti; esse si distinguono dai 16 bit seguenti (con 16 bit a 0 o a 1).
L'utilizzo dei prefissi separati per gli indirizzi attribuiti a un provider internet e gli indirizzi attribuiti ad una zona geografica costituisce un compromesso tra le due differenti visioni del futuro della rete internet. Ognuno di questi provider dispone di una frazione riservata dello spazio di indirizzamento (1/8 di questo spazio). I primi 5 bit che seguono il prefisso 010 sono usati per indicare in quale "registro" si trova il provider. 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 byte restanti come meglio crede. Un'altra possibilità è di utilizzare un byte per indicare la nazionalità del fornitore e lasciare disponibili i byte seguenti per definire una struttura d'indirizzi specifica.Il modello geografico è lo stesso di quelle della rete internet attuale, nel quale i provider internet 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ò superare i limiti delle organizzazioni, cosa che li rende ben più adatti a quelle che usano dei guardrail per proteggere la loro rete privata dalla rete internet.
Gli indirizzi di diffusione multi-destinatario dispongono di un campo Flag (4 bit) e di un campo Importanza (4 bit) dopo il prefisso, poi di un campo Identificatore di gruppo (112 bit). Uno dei bit 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 byte. 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
.
Caratteristica per la scrittura di URL. Dato che il carattere ":" viene utilizzato per separare i gruppi, porta confusione in un URL, perché ci indica la separazione IP porta
Quindi si deve scrivere l'indirizzo IPv6 tra parentesi quadre [] per distinguere l'indirizzo dalla porta. Ad esempio http://[2002:400:2A41:378::34A2:36]:8080.
Infine, gli indirizzi IPv4 possono essere scritti utilizzando la rappresentazione dell'indirizzo in notazione decimale puntata, preceduti da un doppio due punti, come ad esempio:
::192.31.254.46
.
È necessario essere più espliciti su questa notazione di indirizzi, ma bisogna sapere che esiste un numero importante di indirizzi su 16 byte. 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 frammentazione sono stati ritirati, perché IPv6 ha un approccio diverso alla frammentazione. Per cominciare, tutti i computer e i router conformi a IPv6 devono supportare i datagrammi da 576 byte. Questa regola pone la frammentazione 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. È molto più efficace avere un computer che trasmetta immediatamente dei datagrammi con le giuste dimensioni piuttosto che avere dei router che li frammentano alla ricezione.
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 bit indichino cosa fare ai router che non sanno eseguire l'opzione. Le scelte sono:
Saltare l'opzione;
Distruggere il datagramma;
Rinviare un messaggio ICMP alla sorgente;
Distruggere il datagramma senza rinvio del messaggio ICMP se si tratta di un datagramma multidestinatario (per evitare un numero troppo importante di rapporti ICMP in ritorno).
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.
il Routing headers fornisce un elenco di uno o più router che devono essere visitati nel tragitto verso la destinazione. Si realizzano due forme di routing usate in combinazione: uno strict routing (integrale e definito) e uno loose routing (dove sono definiti solo i router obbligatori). I primi 4 campi dell'intestazione d'estensione di Routing contengono 4 interi di un byte:
Il tipo d'intestazione seguente;
Il tipo di router (solitamente 0);
Il numero di indirizzi presenti nell'intestazione (da 1 a 24);
Un indirizzo che fornisca il prossimo indirizzo da visitare. Quest'ultimo campo comincia con il valore 0, e lo incrementa ad ogni indirizzo visitato.
L'intestazione Frammentazione tratta la frammentazione in modo simile all'IPv4. L'intestazione contiene l'identificativo del datagramma, il numero di frammento e un bit che precisa se seguono altri frammenti. Nell'IPv6, contrariamente all'IPv4, 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 Autenticazione 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 bit 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 byte. In maniera simile, la chiave segreta usata è ugualmente completata con degli 0 per essere un multiplo di 16 byte. 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 Autenticazione contiene 3 parti. La prima conta 4 byte precisando il numero di intestazione seguente, la lunghezza dell'intestazione d'autenticazione, e da 16 bit a zero. La seconda definisce il numero chiave su 32 bit. 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 Autenticazione, 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 bit, 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 byte. Questa intestazione non sarà usata in un primo tempo. È 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: RFC 1661.
Foto: © Pixabay.