IPv6 (Internet Protocol Version 6) è una versione del protocollo IP sviluppata dalla Internet Engineering Task Force (IETF). Questa versione del protocollo sostituisce la versione 4 del protocollo IP (IPv4) finora utilizzata e rappresenta un metodo standardizzato per la trasmissione di pacchetti di dati nelle reti di computer. Funzioni centrali di IPv6 sono l'indirizzamento di elementi di rete tramite i cosiddetti indirizzi IPv6 e l'inoltro di pacchetti tra sottoreti (routing). Una delle ragioni principali per l'implementazione di IPv6 è lo scarso numero di indirizzi Internet pubblici. IPv4 utilizza indirizzi a 32 bit. Ne risulta uno spazio di indirizzamento con circa 4,3 miliardi di indirizzi. IPv6 utilizza indirizzi IPv6 con una lunghezza di 128 bit. Questo permette di ottenere una quantità incredibile di indirizzi IPv6, ovvero 2^128 o 3,4 x 10^38 indirizzi.

Struttura di un indirizzo IPv6

Gli indirizzi IPv6 sono composti da 8 blocchi di 4 cifre esadecimali (ovvero 8 word di 16 bit ciascuna). I blocchi vengono separati da due punti. Esempio:*

2001:0620:0000:0000:0211:24FF:FE80:C12C

I primi 64 bit sono utilizzati per il routing e indicano il prefisso della rete. Il prefisso della rete contraddistingue la rete, la sottorete e gli indirizzi. Gli ultimi 64 bit sono definiti Interface Identifier (IID). L'Interface Identifier identifica un host all'interno di questa rete, viene formato a partire dall'indirizzo MAC a 48 bit dell'interfaccia e viene trasformato in un indirizzo a 64 bit. Si tratta del formato EUI-64 modificato. In questo modo, l'interfaccia è identificabile in modo univoco indipendentemente dal prefisso di rete.

Con IPv6, la maschera di rete e di sottorete utilizzata con IPv4 non è presente. Per poter comunque eseguire una segmentazione, la lunghezza del prefisso viene definita e viene aggiunta, con il carattere "/" (slash), all'indirizzo IPv6 effettivo. Esempio:*

Una sottorete con gli indirizzi IPv6 da 2001:0820:9511:0000:0000:0000:0000:0000 fino a 2001:0820:9511:FFFF:FFFF:FFFF:FFFF:FFFF può essere descritta con la notazione 2001:0820:9511::/48. 

Assegnazione dell'indirizzo

Solitamente, ai provider di servizi Internet vengono assegnate dal RIR reti /32, che vengono poi raggruppati in sottoreti. Al cliente finale vengono assegnate reti /48 o /56. 

Privacy Extensions

Un indirizzo IPv6, che si basa sul formato EUI-64 modificato, consente di conoscere l'indirizzo MAC sottostante. Poiché ciò potrebbe sollevare tra i clienti problematiche relative alla privacy, è stato sviluppato un processo con Privacy Extensions, al fine di rendere anonima la parte degli indirizzi IPv6 relativa all'host. A questo scopo, Privacy Extensions rimuove l'accoppiamento tra la funzione Interface Identifier e gli indirizzi MAC e genera identificatori di interfaccia temporanei per le connessioni in uscita.

Regole di notazione

Dal momento che gli indirizzi IPv6 possono essere molto lunghi, solitamente vengono accorciati. Su  RFC 5952 sono state definite a tal proposito regole di notazione vincolanti. Queste includono, tra le altre cose, le seguenti regole: 

  • Gli zeri iniziali all'interno di un blocco possono essere omessi

  • Un blocco composto da 4 zeri viene sintetizzato in un solo zero.

  • Blocchi consecutivi il cui valore è 0 o 0000 vengono abbreviati tramite due serie di due punti ("::"). Tuttavia, questa abbreviazione può essere effettuata una sola volta all'interno di uno stesso indirizzo, dal momento che altrimenti l'unicità andrà persa. Esempio:*

    L'indirizzo 2001:0dc8:0:0:8d5:0:0:0 può essere abbreviato come segue: 2001:0dc8:0:0:8d5:0:: o 2001:0dc8:0::8d5:0:0:0 

  • Se l'indirizzo contiene più sequenze di zeri, può essere sostituita solo la sequenza che si trova più a sinistra.

Notazione URL

In un URL, gli indirizzi IPv6 vengono riportati all'interno di parentesi quadre. Esempio:* 

http://[2001:0db8:83a3:08d3::0380:7344]/.

I numeri delle porte devono trovarsi dopo la parentesi di chiusura. Questi numeri vengono separati dai due punti. 

http://[2001:0db8:83a3:08d3::0380:7344]:8080//

Il segno di percentuale (%) continua ad essere utilizzato per l'identificazione della codifica esadecimale dei caratteri negli URL. All'interno dell'URL, il segno di percentuale deve essere sostituito dal proprio codice esadecimale "%25" (RFC 6874). Questo è necessario se si desidera forzare la connessione tramite una specifica interfaccia. 

Tipi di indirizzi IPv6

Come per IPv4, anche per IPv6 sono stati definiti diversi intervalli di indirizzi con compiti e caratteristiche speciali. Questi sono stati specificati in RFC 4291 e RFC 5156 e possono essere identificati già dai primi bit di un indirizzo IPv6, tramite il cosiddetto prefisso di formato. 

  • Indirizzi di loopback: L'indirizzo 0:0:0:0:0:0:0:1 (anche ::1/128) viene chiamato indirizzo di loopback. Si tratta dell'indirizzo della propria posizione.

  • Indirizzi link local: gli indirizzi link local sono validi esclusivamente all'interno di reti locali e iniziano con il prefisso di formato FE80::/10. Questi indirizzi vengono utilizzati per l'indirizzamento di elementi all'interno di una rete locale, per l'autoconfigurazione o per il protocollo Neighbour Discovery. In genere, l'ambito di validità di un indirizzo link local si estende al router successivo, affinché ogni dispositivo collegato alla rete sia in grado di comunicare con esso per generare un indirizzo IPv6 globale. Tale processo viene chiamato Neighbor Discovery.

  • Indirizzi unique local: per reti private locali sono stati definiti intervalli di indirizzi per il protocollo IPv6 riservati. Questi sono descritti su RFC 4193 e hanno una funzione simile agli intervalli di indirizzi privati definiti nel protocollo IPv4. Gli indirizzi unique local si trovano nell'intervallo di indirizzi "fc00::/7" (fc00… fino a fdff…) e non vengono instradati su Internet. Al contrario, gli indirizzi sono validi esclusivamente all'interno di una zona di rete definita. È necessario distinguere tra il prefisso "fc" e "fd", in quanto hanno significati diversi. Mentre gli indirizzi IPv6 con il prefisso fc vengono assegnati dal provider, gli indirizzi IPv6 con prefisso fd possono essere utilizzati nella propria rete locale.

  • Indirizzi global unicast: per indirizzi global unicast si intendono indirizzi unici al mondo instradabili a livello globale. Questi indirizzi sono necessari a un dispositivo di rete per connettersi a Internet. Un host può avere più di uno di questi indirizzi IPv6. Questi sono ottenuti dall'host tramite autoconfigurazione.

  • Indirizzi multicast: con gli indirizzi multicast è possibile realizzare una comunicazione uno-a-molti. I pacchetti inviati ad un indirizzo multicast raggiungono tutti i dispositivi di rete che fanno parte del gruppo multicast. Un dispositivo può appartenere a più gruppi multicast contemporaneamente. Se viene creato un indirizzo unicast IPv6 per un dispositivo di rete, questo diventa automaticamente un membro di specifici gruppi multicast necessari per il riconoscimento, la raggiungibilità e la determinazione del prefisso. Gli indirizzi multicast sono identificati dal prefisso "ff::/8". Questo è seguito da 4 bit per i flag e altri 4 bit per specificare il Multicast Scope.

    Gli indirizzi multicast terminano con un numero che rappresenta un gruppo multicast. Puoi trovare una lista di gruppi multicast su
    https://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml

  • Indirizzi anycast: indirizzi di questo tipo possono essere indirizzati a gruppi di dispositivi ricevitori. I pacchetti di dati vengono inviati solo al dispositivo più vicino al trasmettitore. Gli indirizzi anycast sono quindi utilizzati in contesti di distribuzione del carico e affidabilità.

Formato del pacchetto IPv6

Il protocollo IPv6 si distingue per un formato di pacchetto semplificato. L'header ha una lunghezza fissa di 40 byte. Le informazioni opzionali sono riportate negli extension header, tra l'area dati dell'intestazione IPv6 e il vero carico utile. In questo modo è possibile inserire opzioni senza modificare l'intestazione. Tra le informazioni che possono contenere estensioni dell'intestazione IPv6, fanno parte le hop by hop option, destination option, rounting, fragment, authentication header e encapsulating security payload (ESP). Puoi trovare maggiori informazioni relative formato del pacchetto IPv6 in RFC 2460.

Stateless Address Autoconfiguration

Per Stateless Address Autoconfiguration (SLAAC) si intende un processo per la configurazione automatica e senza stato di indirizzi IPv6 su un'interfaccia di rete. Tramite questo procedimento un host può generare automaticamente una connessione Internet funzionante. In questo contesto, "stateless" significa che il rispettivo indirizzo IPv6 non viene assegnato e memorizzato in modo centrale. Al contrario, per la comunicazione iniziale con il router, l'host genera un indirizzo IPv6 link local e se lo assegna. Con questo indirizzo IPv6 link local, un dispositivo è in grado di eseguire la ricerca di router nel suo segmento di rete, grazie al protocollo Neighbour Discovery (NDP). Ciò avviene tramite una richiesta all'indirizzo multicast, tramite cui tutti i router di un segmento sono raggiungibili. 

Dopo avere ricevuto la richiesta, un router invia informazioni a prefissi disponibili. Per evitare la duplicazione degli indirizzi IPv6, l'host esegue la funzione Duplicate Address Detection (DAD) sui nuovi indirizzi IPv6. A tal fine, l'host invia una richiesta nella rete locale all'indirizzo generato. L'indirizzo di risposta è un indirizzo multicast. Se un'altra stazione utilizza già l'indirizzo IPv6, torna indietro una risposta. Se non torna indietro alcuna risposta da questo indirizzo, l'host utilizza l'indirizzo IPv6 per la comunicazione. 

Protocollo Neighbour Discovery

Il protocollo Neighbour Discovery (NDP) è un protocollo IPv6. Viene utilizzato, tra l'altro, per la scomposizione di indirizzi IPv6 in indirizzi link layer (indirizzi MAC). Viene inoltre utilizzato per aggiornare gli indirizzi memorizzati nella cache. Se un nodo non si trova nella stessa rete, viene utilizzato il protocollo NDP per trovare un router in grado di inoltrare i pacchetti. Inoltre, questo protocollo esegue anche i seguenti compiti: 

  • Determinazione dei parametri 

  • Stateless Address Autoconfiguration 

  • Scomposizione di indirizzi (Address Resolution con Neighbor Discovery) 

  • Rilevamento dell'irraggiungibilità di un vicino (Neighbor Unreachability Detection, NUD) 

  • Rilevamento di indirizzi duplicati (Duplicate Address Detection, DAD) 

  • Inoltro (Redirect) 

Puoi trovare maggiori informazioni sul protocollo Neighbour Discovery nel RFC 4861.

DHCP6

DHCP è un protocollo che viene utilizzato per la gestione della configurazione IP in una rete TCP/IP. Ciò consente di integrare i client collegati in una rete esistente senza configurazione manuale dell'interfaccia di rete. In una rete IPv6 DHCP6 non è necessario, in quanto questo compito viene svolto tramite la funzione Stateless Address Autoconfiguration (SLAAC). Tuttavia, possono esserci dei buoni motivi per utilizzare DHCP6. Un caso è, ad esempio, se il client IPv6 non può accettare le opzioni di configurazione IP tramite la Stateless Address Autoconfiguration. In tal caso, l'indirizzo IP può essere assegnato tramite Stateless Address Autoconfiguration e i parametri di configurazione restanti tramite DHCPv6.