IPv6

IPv6

IPv6 è il protocollo designato come successore di IPv4, e nasce per superare le intrinseche limitazioni di quest’ultimo, relative soprattutto al numero massimo di indirizzi disponibili, oltre ad introdurre nuovi servizi e a semplificare notevolmente la gestione delle reti IP.

La principale differenza tra i due protocolli, quindi, è data dal maggiore spazio di indirizzamento disponibile, infatti IPv4 è a 32 bit e indirizza 232 indirizzi, mentre IPv6 è a 128 bit e quindi può indirizzare un 2128, ovvero una quantità enormemente maggiore.

Vediamo la composizione di un pacchetto IPv6:

Figura 23: Pacchetto IPv6
Figura 23: Pacchetto IPv6

Version [4 bit]: indica la versione in uso del datagramma IP: per IPv6, ha valore 6 (da qui il nome IPv6). Come abbiamo già visto, per IPv4 questo campo ha valore 4.

Traffic Class [8 bit]: questo campo indica la classe di traffico, ovvero permette di gestire le code sulla base di un sistema di priorità assegnando ad ogni pacchetto una classe di priorità diversa rispetto ad altri pacchetti provenienti dalla stessa sorgente. Viene usata nel controllo della congestione e serve quindi per gestire prima le richieste di pacchetti con priorità alta.

Flow Label [20 bit]: questo campo è usato dal mittente per etichettare una sequenza di pacchetti come se fossero nello stesso flusso. Supporta la gestione del QoS (Quality of Service), consentendo ad esempio di specificare quali etichette abbiano via libera rispetto ad altre.

Payload Length [16 bit]: indica la dimensione del payload, ovvero la lunghezza del pacchetto, espressa in numero di byte, di tutto ciò che si trova dopo l’header. Il suo valore massimo è 65.535 byte.

Next Header [8 bit]: indica quale tipo di intestazione segue l’header di base IPv6. Molto simile al campo protocol dell’header IPv4, del quale usa gli stessi valori.

Hop Limit [8 bit]: indica il limite di salti consentito, praticamente il Time to live visto in IPv4. Il suo valore viene decrementato di 1 ogni volta che il pacchetto passa attraverso un router: quando tale valore arriva a zero il pacchetto viene considerato “scaduto” e quindi scartato.

Source Address [128 bit]: indica l’indirizzo IP del mittente del pacchetto.

Destination Address [128 bit]: indica l’indirizzo IP del destinatario del pacchetto.

Notiamo che il pacchetto IPv6 ha un numero di campi minore rispetto a quello dell’IPv4: questa caratteristica conferisce al protocollo IPv6 maggiori prestazioni ed efficienza nel routing. Le principali novità e migliorie sono l’header di lunghezza fissa, a 40 byte, l’impossibilità per i router di frammentare i pacchetti e l’eliminazione del campo checksum, dal momento che tale funzione viene delegata ad altri livello dello Stack. Inoltre, il protocollo IPv6 implementa funzioni per la sicurezza delle comunicazioni basate sulla crittografia

Formato degli Indirizzi IPv6

Come abbiamo visto la principale novità è nello spazio di indirizzamento, che prevede ben 128 bit, contro i soli 32 previsti dal protocollo IPv4. Questo comporta tuttavia che il formato degli indirizzi di IPv6 sia notevolmente più complicato rispetto a quello di IPv4.

Un indirizzo IPv6, infatti, è formato da 8 campi, separati dal simbolo “:”, ognuno dei quali composto da 16 bit espressi in notazione esadecimale. Ecco un esempio di indirizzo IPv6:

2fee:0db8:25a3:0000:31cb:8a2e:02df:6aaa

Se nell’indirizzo compare uno zero come cifra più significativa, allora può essere omessa. Ad esempio, riscriviamo l’indirizzo scritto sopra con questa notazione:

2fee:db8:25a3::31cb:8a2e:2df:6aaa

Vediamo che gli zeri all’inizio sono scomparsi e che il 4° campo, composto tutto da zeri, è stato completamente eliminato, senza nessun simbolo tra la coppia di caratteri “:”.

Nell’IPv4 per individuare le subnet si utilizza la netmask, mentre nell’IPv6 si utilizza il nuovo concetto di prefisso. Ad esempio:

2fee:db8:25a3::31cb:8a2e:2df:6aaa/80

il /80 sta ad indicare che i primi 80 bit rappresentano la subnet e i rimanenti 48 il singolo host ( 128 – 80 = 48 ). Il caso limite è rappresentato dal prefisso 127, infatti:

2fee:db8:25a3::31cb:8a2e:2df:6aaa/127

Indica che abbiamo solamente 2 host, ma una miriade di subnet(!).

Gli indirizzi IPv6 sono stati suddivisi in 3 macrocategorie, utilizzate per vari scopi:

  • Unicast
  • Multicast
  • Anycast

Sottolineiamo il fatto che gli indirizzi IPv6 sono assegnati alle interfacce, e quindi un indirizzo IPv6 può identificare una sola interfaccia (indirizzi Unicast) o gruppi di interfacce (indirizzi Multicast ed Anycast).

Indirizzi Unicast

Gli indirizzi di questo tipo sono composti da due parti uguali da 64 bit ciascuna. I primi 64 bit indicano il prefisso di rete, mentre gli altri indicano l’host. Gli unicast sono assegnati ad una singola interfaccia e quindi i pacchetti inviati ad un indirizzo di tipo unicast verranno recapitati solo all’interfaccia associata.

Indirizzi Multicast

Gli indirizzi multicast rappresentano un insieme di indirizzi assegnati ad un insieme di interfacce: un pacchetto di questo tipo verrà quindi recapitato a tutte le interfacce dell’insieme, ed equivale all’indirizzo del broadcast nel protocollo IPv4. Il formato di un indirizzo IPv6 multicast è il seguente

FF<flags><scope>::<group id>

Dove:

  • FF: indica che si tratta di un indirizzo multicast.
  • Flags: settato a 1 indica un indirizzo temporaneo. Settato a 0 indica un indirizzo permanente.
  • Scope: si usa per limitare l’ambito del group id.
  • Group ID: identifica il gruppo di nodi multicast.

Indirizzi Anycast

Questa categoria di indirizzi viene assegnata ad un gruppo di interfacce. I pacchetti inviati ad un indirizzo anycast arriveranno all’interfaccia più vicina.

Indirizzi speciali

Esistono degli indirizzi e dei prefissi speciali, per usi particolari:

::/128: si tratta di un indirizzo composto totalmente da zeri, detto unspecified address: esso viene utilizzato per indicare l’assenza di indirizzo IPv6 e si impiega esclusivamente a livello software, corrisponde all’indirizzo 0.0.0.0 in IPv4;

::1/128: indirizzo di loopback. È un indirizzo associato al dispositivo di rete che ripete come eco tutti i pacchetti che gli sono indirizzati. Corrisponde a 127.0.0.1 in IPv4;

::/96: questo indirizzo è utilizzato per connettere le due tecnologie IPv4/IPv6 nelle reti ibride. Gli indirizzi IPv4 compatibili sono stati deprecati in favore degli indirizzi IPv4-Mapped address;

::ffff:0:0/96: si tratta di un indirizzi IPv6 del tipo IPv4-mapped address, e viene utilizzato nei dispositivi dual stack;

fe80::/10: prefisso link-local. Tale prefisso specifica che l’indirizzo è valido esclusivamente sullo specifico link fisico;

fec0::/10: prefisso site-local. Tale prefisso specifica che l’indirizzo è valido esclusivamente all’interno dell’organizzazione locale. Tuttavia, il suo uso è deprecato e probabilmente non verrà più implementato in futuro.

fc00::/7: prefisso Unique Local Addresses (ULA). Questo prefisso è valido esclusivamente all’interno di una organizzazione. Il suo uso è analogo alle classi private della versione IPv4 (gli IP ULA non vengono ruotati su internet). Sostituiscono gli indirizzi Site-local deprecati.

ff00::/8: come già visto si tratta del prefisso che identifica gli indirizzi di multicast.

IPv6 e DNS (Domain Name System)

La nascita degli indirizzi IPv6 ha posto l’esigenza della loro rappresentazione nel sistema DNS. Tali indirizzi sono rappresentati dal record AAAA, che corrisponde al Record A degli indirizzi IPv4.