In questo articolo, Il livello Rete – indirizzamento IPv6, analizziamo l’evoluzione che ha avuto il protocollo IP nella versione 6 consentendo di ottenere uno spazio di indirizzamento nettamente più ampio
Indice dei contenuti
Introduzione
Nonostante la serie di tecniche messe in campo per sopperire al limitato spazio degli indirizzi offerto da IPv4 (indirizzi dinamici, indirizzi privati, la CIDR, le VLSM, NAT), la grande diffusione della rete Internet spinse, fin dagli anni Novanta, a progettare una nuova versione di IP che garantisse un numero di indirizzi sufficiente a soddisfare tutte le richieste.
La nuova versione è stata definita dalle RFC 1883 e 1887 con il nome di IPv6, la cui caratteristica fondamentale è quella di aumentare notevolmente lo spazio degli indirizzi portandolo da 4 a 16 byte (128 bit).
Per capire meglio perché è necessario conoscere il protocollo IPv6, è utile conoscere i limiti di IPv4 e i vantaggi di IPv6.
IPv4 presenta ancora tre problemi principali:
- Esaurimento degli indirizzi IPv4 – Il protocollo IPv4 ha un numero limitato di indirizzi IPv4 univoci pubblici disponibili. Sebbene vi siano circa 4 miliardi di indirizzi IPv4, il crescente numero di nuovi dispositivi che supportano il protocollo IP, le connessioni sempre attive e la crescita potenziale delle aree geografiche meno sviluppate hanno aumentato la necessità di più indirizzi.
- Mancanza di connettività end-to-end – Network Address Translation (NAT) è una tecnologia comunemente implementata nelle reti IPv4. NAT consente a più dispositivi di condividere un unico indirizzo IPv4 pubblico. Tuttavia, poiché l’indirizzo IPv4 pubblico è condiviso, l’indirizzo IPv4 di un host della rete interna risulta nascosto. Ciò può essere problematico per le tecnologie che richiedono una connettività end-to-end.
- Maggiore complessità della rete – Sebbene NAT abbia esteso la durata di vita di IPv4, era inteso solo come meccanismo di transizione a IPv6. NAT nelle sue varie implementazioni crea ulteriore complessità nella rete, creando latenza e rendendo più difficile la risoluzione dei problemi.
I miglioramenti forniti da IPv6 includono:
- Spazio degli indirizzi aumentato – Gli indirizzi IPv6 sono basati su indirizzamenti gerarchici a 128 bit, rispetto agli indirizzi IPv4 con 32 bit.
- Gestione dei pacchetti migliorata – L’header IPv6 è stato semplificato e il numero di campi è stato ridotto.
- Elimina la necessità del NAT – Con un numero così ampio di indirizzi pubblici IPv6, il NAT tra un indirizzo IPv4 privato e un indirizzo IPv4 pubblico non è necessario. Ciò evita alcuni dei problemi indotti dal NAT riscontrati dalle applicazioni che richiedono la connettività end-to-end.
- capacità di etichettare il flusso: è stata aggiunta una nuova funzionalità, che permette di etichettare i pacchetti di particolari flussi di traffico con alta priorità;
- miglioramento dei campi opzionali: i campi sono flessibili e dinamici in funzione delle esigenze.
- Miglioramento dlel’efficienza: il campo checksum è stato eliminato. Prima i router lo ricalcolavano ad ogni hop con un conseguente aumento della complessità di computazione
Lo spazio degli indirizzi IPv4 a 32 bit fornisce circa 4.294.967.296 indirizzi univoci. Lo spazio degli indirizzi IPv6 fornisce 340.282.366.920.938.463.463.374.607.431.768.211.456 o 340 undecilioni di indirizzi.
Compatibilità IPv4 e IPv6
Pur non essendo retro compatibili (backward compatible) i due protocolli IPv4 e
IPv6 possono coesistere grazie alla creazione di un tunnel.
La figura seguente mostra la tecnica di tunneling, descritta in RFC 2473 e in RFC 4213.
Un tunnel serve a trasmettere i pacchetti IPv6 inserendoli nel campo dati all’interno
di un pacchetto IPv4. L’indirizzo di destinazione del pacchetto IPv4 è l’indirizzo di
un sistema su cui sono attivi entrambi i protocolli. Il destinatario del pacchetto IPv4
estrae il pacchetto IPv6 e lo inoltra verso la destinazione IPv6 finale (che può essere
lui stesso). Inoltre:
- il traffico IPv4 in una rete non subisce alcun inconveniente all’attivazione di IPv6;
- tutti gli attuali Sistemi Operativi consentono l’utilizzo contemporaneo dei due
protocolli - molte applicazioni, quando si trovano su un computer dotato di indirizzo IPv6, scelgono il trasporto IPv6 quando anche il destinatario possiede un indirizzo IPv6: può dunque capitare di essere collegati alla rete Internet IPv6 senza saperlo.

Header IPv6
Uno dei principali miglioramenti del design di IPv6 su IPv4 è l’header IPv6 semplificato.
Ad esempio, l’header IPv4 è costituito da un header di lunghezza variabile di 20 ottetti (fino a 60 byte se viene utilizzato il campo Opzioni) e 12 campi header di base, esclusi il campo Opzioni e il campo Padding.
Per IPv6, alcuni campi sono rimasti gli stessi, alcuni campi hanno cambiato nome e posizione e alcuni campi IPv4 non sono più necessari, come evidenziato in figura.

Nella tabella seguente descriviamo i campi:

Confronto tra header IPv4 ed Header IPv6
L’intestazione di IPv6 è più semplice dell’intestazione di IPv4. Infatti sono stati eliminati i campi fragment offset, checksum intestazione ed Opzioni.
Il campo Opzioni è stato sostitito dal campo Next header.
IPv6 introduce l’utilizzo dell’ “intestazione estesa” (Extension Header – EH) che
permette di gestire eventuali informazioni aggiuntive che sono state escluse
dall’intestazione principale a causa dell’eliminazione dei tre campi precedenti. Un
nuovo campo, opzionale, è inserito tra l’intestazione e il payload. Tale campo è richiamato dal contenuto di Next Header, presente nell’intestazione IPv6, che specifica qual è l’intestazione successiva del protocollo contenuto nel campo payload.
Nuove intestazioni possono essere aggiunte, in modo che la prima richiami la successiva e quest’ultima richiami quella che viene dopo e così via (daisy-chain)
Il vantaggio è che queste intestazioni non sono processate durante il loro passaggio attraverso la rete, rendendo più snello e veloce il transito e lo smistamento dei pacchetti.
Nella maggioranza dei casi, il campo Next Header indica il tipo di protocollo di trasporto utilizzato (TCP o UDP). In altri casi può contenere parametri relativi al routing, alla frammentazione dei pacchetti, all’autenticazione e alla sicurezza.
La tabella seguente mostra alcune intestazioni estese di IPv6.

Nelle due figure successive mostriamo due casi. Il primo si riferisce al caso standard con il solo riferimento a TCP. Il secondo prende in considerazione la frammentazione
di un pacchetto con tre riferimenti successivi:
- intestazione standard: il campo Next Header dell’intestazione principale contiene il valore 6, che significa che la prossima intestazione è quella di TCP:

intestazione estesa:
a. il campo Next Header dell’intestazione principale contiene il valore 43,
che significa che la prossima intestazione è quella di routing;
b. il campo Next Header dell’intestazione di routing contiene il valore 44,
che significa che la prossima intestazione è quella di frammentazione;
c. il campo Next Header dell’intestazione di frammentazione contiene il valore 6, che significa che la prossima intestazione è quella di TCP.

Formato degli indirizzi IPv6
- Gli indirizzi IPv6, a 128 bit, sono codificati come una stringa di valori esadecimali. Ogni cifra esadecimale è composta da 4 bit, cioè un nibble. Per cui ogni indirizzo IPv6 è costituito da 128/4 = 32 cifre esadecimali
- Un indirizzo completo espresso nel formato standard (“preferred format”) è composto da 8 “hextet”. Un “hextet” è un gruppo di 16 bit (2 byte), cioè è composto da 4 nibble, corrispondenti a quattro cifre esadecimali
- Ogni gruppo di quattro cifre esadecimali è separato da due punti (:). Per esempio: 2001:0db8:0000:0000:0001:0000:0000:0001

Un indirizzo IPv6 è particolarmente scomodo da esprimere e gestire. Esistono però delle regole che possono essere usate per facilitare la notazione, riducendo il numero delle cifre necessarie.
- Omettere gli 0 iniziali di ogni hextet.
Per esempio:
– l’indirizzo: 2001:0db8:0000:0000:0000:a111:0020:0001
può essere scritto: 2001:db8:0:0:0:a111:20:1 - Una coppia di due punti (“::”) sostituisce gli hextet contigui costituiti da tutti zeri.
Per esempio:
– l’indirizzo: 2001:0db8:0000:0000:0000:a111:0020:0001
può essere scritto: 2001:db8::a111:20:1
– l’indirizzo: fe80:000a:0000:ab00:0000:0000:0fff:0100
può essere scritto: fe80:a:0:ab00::fff:100
L’unica avvertenza è che la coppia di due punti può essere utilizzata una volta
sola all’interno di un indirizzo.
Indirizzamento IPv6
Gli indirizzi IPv6 possono appartenere a tre categorie:
-
Unicast: è un indirizzo che riguarda un’interfaccia di rete singola; in altri termini,
un indirizzo unicast serve per raggiungere un’interfaccia di rete in modo univoco. - Anycast: è un indirizzo che ha le stesse caratteristiche sintattiche di quello unicast, attribuito però a diverse interfacce di altrettanti nodi, con lo scopo di poter raggiungere quello che risponde prima (quello più vicino in base al protocollo di instradamento). I pacchetti inviati a un indirizzo anycast raggiungono un’unica interfaccia di rete, la prima che risponde. Gli indirizzi anycast possono essere usati solo dai router.
- Multicast: è attribuito a più interfacce di rete distinte; i pacchetti inviati a un indirizzo multicast raggiungono tutte le interfacce di rete cui questo indirizzo è stato attribuito.

Indirizzi Unicast
La distinzione tra indirizzi IPv4 privati e pubblici si riflette negli indirizzi IPv6:
- gli indirizzi GUA (Global Unicast Address) appartengono al blocco di indirizzi
2000::/3e sono rilasciati dai registri regionali dipendenti dalla IANA che ne garantiscono l’univocità a livello globale. - gli indirizzi ULA (Unique Local Address) appartengono al blocco di indirizzi
FC00::/7e si possono utilizzare esclusivamente nelle reti LAN, con la possibilità di essere riutilizzati in reti LAN diverse;
Un indirizzo IPv6 può essere assegnato in diversi modi a una interfaccia:
- con l’assegnazione manuale ogni indirizzo è attribuito in modo statico
dall’amministratore di rete (static address configuration);
- con l’assegnazione automatica ogni indirizzo è assegnato tramite uno dei
seguenti protocolli:
– DHCPv6 (Dynamic Host Configuration Protocol version 6). L’assegnazione dinamica degli indirizzi è delegata a un server DHCP (questa modalità di assegnazione è denominata “Stateful DHCP address assignment” – RFC 8415);
– SLAAC (Stateless Address Autoconfiguration – RFC 4862): l’indirizzo Link Local è generato autonomamente dal sistema operativo dell’host;
l’indirizzo globale è generato da un router ed è assegnato all’host mediante i messaggi di Router Advertisement, scambiati con il protocollo ICMPv6.
In pratica gli indirizzi ULA hanno le prime due cifre esadecimali corrispondenti a FC (1111: 1100) o FD (1111:1101), mentre gli indirizzi GUA hanno la prima cifra esadecimale corrispondente a 2 (0010) o 3 (0011).
ESEMPIO: L’indirizzo IPv6 FDF8:F53B:82E4::53/64 è un indirizzo ULA, mentre l’indirizzo IPv6 2001:DB8:AB:CDEF::123:4567:890/64 è un indirizzo GUA
A ogni interfaccia di un end device o di un dispositivo di rete, oltre a un indirizzo ULA o GUA, deve essere assegnato un indirizzo link-local appartenente al blocco di indirizzi FE80::/10 la cui validità è limitata allo specifico collegamento
ESEMPIO: L’interfaccia di un PC ha indirizzo IPv6 ULA FDF8:F53B:82E4::53/64 e indirizzo IPv6 link-local FE80::1234:5678:90AB:CDEF/64
Altri indirizzi IPv6 o blocchi di indirizzi IPv6 con un uso specifico sono riportati nella seguente tabella:

Global Unicast Address (GUA)
Gli indirizzi univoci globali (GUA – Global Unicast Address) corrispondono agli
indirizzi IPv4 pubblici, e sono necessari per comunicare al di fuori di una rete locale.
Un indirizzo GUA ha una struttura gerarchica, come mostra la seguente figura:

Il formato comprende:
- un prefisso per la rete (chiamato Subnet Prefix);
- un identificatore di interfaccia (chiamato Interface ID).
Questa separazione, come per IPv4, permette di distinguere la parte di indirizzo
relativa alla rete dalla parte restante relativa all’interfaccia del nodo (router o host).
L’indirizzo può essere espresso nella notazione CIDR secondo lo schema:
- indirizzo-ipv6/lunghezza-prefisso.
Il valore decimale dopo il simbolo “/” stabilisce, come in IPv4, la lunghezza del
prefisso di rete, cioè specifica quanti sono i bit dell’indirizzo dedicati alla rete.
La lunghezza del prefisso può variare da 0 a 128 bit, ma quasi sempre viene uti-
lizzato il prefisso /64
Esempio: L’indirizzo 2001:0db8:0000:0000:0001:0000:0000:0001/64 è diviso nel
le due parti di 64 bit ciascuna:

Da un indirizzo Unicast globale è possibile ottenere delle sottoreti.
L’utilizzo di sottoreti è utile per:
- risparmiare indirizzi;
- ridurre il traffico di rete;
- aumentare la sicurezza;
- facilitare la progettazione della rete.
Il formato generale di un indirizzo Unicast globale con sottorete, mostrato nella
figura seguente, comprende:
- una parte per la rete, chiamata Global Routing Prefix (“prefisso di routing globale”);
- una parte per la sottorete, chiamata Subnet ID (“identificatore di sottorete”);
- una parte per l’interfaccia, chiamata Interface ID (“identificatore di interfaccia”)

Gli indirizzi IPv6 Global Unicast assegnati da IANA ed effettivamente utilizzati sono quelli che iniziano con i bit 001 (RFC 3513 del 2003) e hanno la seguente struttura:
- 48 bit per la rete (Global Routing Prefix). Di questi 48 bit i primi 3 sono
sempre 001 per indicare che l’indirizzo è di tipo Unicast globale; - 16 bit per le sottoreti (Subnet ID). Con 16 bit si possono avere fino a 216
(ossia 65536) sottoreti; - 64 bit per l’host (Interface ID)

ESEMPIO:

Esercitati utilizzando il simulatore di subnetting IPv6 online:
Link Local Address (LLA)
Gli indirizzi univoci locali (LLA – Link Local Address) corrispondono agli indirizzi IPv4 privati: valgono solo nella subnet a cui appartengono. Ogni interfaccia deve avere un indirizzo LLA.
Su un’interfaccia fisica è possibile configurare un solo indirizzo univoco locale IPv6.
Un indirizzo Link Local viene assegnato anche in mancanza di un indirizzo Global Unicast.

Come mostra la figura:
- i primi 10 bit sono sempre 1111 1110 10 (fe80::/10);
- seguono 54 bit sempre a 0 (fe80::/64);
- seguono i 64 bit di interfaccia.
Gli indirizzi LLA non si prestano per la realizzazione di sottoreti.
Quando un indirizzo LLA è assegnato automaticamente, il prefisso Link Local è sempre fe80::/10. Il formato di un indirizzo LLA è basato sullo standard IEEE EUI-64 bit ed è ottenuto partendo da un indirizzo MAC a 48 bit definito nello standard EUI-48 bit, inserendo fffe come mostrato nell’ esempio seguente:
La seguente procedura crea automaticamente l’indirizzo link local di una interfaccia, partendo dal suo indirizzo MAC:
• indirizzo MAC (IEEE EUI-48) della scheda di rete: 00.00.0c.30.0a.b3;
– Inserimento ff.fe: l’indirizzo MAC a 48 bit è diviso in due parti
– fffe è inserito dopo i 24 bit più significativi (terzo ottetto)
- si ottiene: 00.00.0c.ff.fe.30.0a.b3;
- complemento a uno del settimo bit più significativo 00000000 –>00000010 –>02;
- si ottiene (IEEE EUI-64): 02.00.0c.ff.fe.30.0a.b3;
- aggiunta del prefisso di rete: fe80;
- si ottiene l’indirizzo IPv6 completo: fe80::200:cff:fe30:ab3/64.

Gli indirizzi Anycast
Un indirizzo Anycast è assegnato a più interfacce, ma solo una di esse, la più
“vicina,” viene raggiunta.
Che cosa significa che un nodo è “vicino”? Per esempio, in un gruppo di router a
cui è assegnato lo stesso indirizzo Anycast, il router più vicino è quello raggiungibile con il minor numero di salti da un router all’altro.
I parametri che sono presi in considerazione per determinare il router “vicino”
possono riguardare, oltre al numero di salti, anche il tempo di latenza, i costi e, in generale, l’efficienza.
Il formato degli indirizzi Anycast è indistinguibile da quello degli indirizzi Unicast, però l’assegnazione di un indirizzo Unicast a più interfacce trasforma quest’ultimo in un indirizzo Anycast.
Indirizzi Multicast
Il traffico Multicast in IPv6 è gestito in modo analogo a come avviene in IPv4.
Tutti i nodi IPv6 che hanno un uguale indirizzo Multicast ricevono i pacchetti destinati a quell’indirizzo.
Gli indirizzi Multicast hanno i primi 8 bit impostati a 1 e, quindi, un indirizzo IPv6 Multicast inizia sempre con ff ( ff00::/8).
Conclusioni
Tre tipi di indirizzi IPv6: GUA, ULA, LLA
1. LLA – Link-Local Address
- Inizia con:
fe80:: - Serve solo all’interno della rete locale, mai su Internet
- Ogni dispositivo ha sempre un indirizzo LLA.
Quando si usa?
- Comunicazione tra dispositivi sulla stessa rete fisica (es. due PC collegati allo stesso switch).
- Usato anche per autoconfigurare la rete.
Esempio:
- Il tuo PC ha
fe80::1a2b:3c4d:5e6f:7g8h, e comunica con il router che hafe80::1.
2. ULA – Unique Local Address
- Inizia con:
fc00::/7(di solito vedifd00::) - E’ tipo una “versione IPv6” degli indirizzi privati IPv4 (es. 192.168.x.x)
- Usato solo all’interno di una rete privata, mai su Internet.
Quando si usa?
- Per reti interne che non devono uscire su Internet.
- Usati per: server interni, stampanti di rete, comunicazioni tra dispositivi IoT in casa o azienda.
Esempio:
- Una stampante ha
fd12:3456:789a::1, usata solo dai PC aziendali.
3. GUA – Global Unicast Address
- Inizia con:
2000::/3(es.2001:db8::) - È l’indirizzo pubblico visibile su Internet.
- Come un IPv4 pubblico, serve per comunicare su Internet.
Quando si usa?
- Quando un dispositivo deve comunicare in Internet, come un sito web, un server cloud, o un PC che naviga.
Esempio:
- Un server web ha
2001:db8:1234::1ed è raggiungibile da tutto il mondo.
Esempio pratico completo
Immagina una piccola rete con:
- Un router collegato a Internet
- Un PC
- Una stampante
- Un server interno
Ogni dispositivo avrà:
| Dispositivo | LLA (Link-local) | ULA (Interno) | GUA (Pubblico) |
|---|---|---|---|
| Router | fe80::1 | fd00::1 | 2001:db8::1 |
| PC | fe80::2 | fd00::2 | 2001:db8::2 |
| Stampante | fe80::3 | fd00::3 | ❌ (non esce su Internet) |
| Server | fe80::4 | fd00::4 | 2001:db8::100 |

Lascia un commento