Perché IPv6? Il problema dell’esaurimento degli indirizzi
IPv4 usa indirizzi a 32 bit: il che significa circa 4,3 miliardi di combinazioni possibili. Nel 1981, quando RFC 791 definiva IPv4, pareva uno spazio sterminato. Non lo era.
Il 5 febbraio 2011 IANA (Internet Assigned Numbers Authority) ha assegnato gli ultimi blocchi /8 ai cinque RIR regionali. Gli indirizzi IPv4 erano ufficialmente esauriti. I RIR hanno continuato a distribuire gli spazi rimanenti fino al 2012–2019, secondo la regione.
NAT (Network Address Translation) ha “allungato la vita” di IPv4 mascherando intere reti private dietro un singolo IP pubblico. Funziona, ma rompe il modello end-to-end di Internet, complica VoIP, gaming, VPN e le applicazioni che richiedono connessioni inbound. NAT è un cerotto, non una soluzione.
IPv6, definito da RFC 8200 (2017), usa indirizzi a 128 bit: 3,4 × 10³⁸ indirizzi. Per dare un’idea: si potrebbero assegnare 100 indirizzi IPv6 a ogni atomo della superficie terrestre.
L’header IPv6
Una delle scelte di design più significative di IPv6 è l’header di dimensione fissa: 40 byte. L’header IPv4 era variabile (20–60 byte) per via delle opzioni. IPv6 sposta le opzioni negli extension header, inseriti tra l’header base e il payload solo quando necessari.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| Traffic Class | Flow Label | ← 4 byte +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Length | Next Header | Hop Limit | ← 4 byte +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Source Address (128 bit) | ← 16 byte | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Destination Address (128 bit) | ← 16 byte | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Campo | Bit | Descrizione |
|---|---|---|
| Version | 4 | Sempre 0110 (6) per IPv6 |
| Traffic Class | 8 | Equivalente di DSCP+ECN in IPv4. Priorità del traffico (QoS) |
| Flow Label | 20 | Identifica un “flusso” tra sorgente e destinazione. Permette QoS senza esaminare il payload. Novità rispetto a IPv4. |
| Payload Length | 16 | Lunghezza in byte del payload (escluso header base). Max 65535 byte; con Jumbo Payload extension header si superano i 4 GB. |
| Next Header | 8 | Tipo del prossimo header: protocollo superiore (58=ICMPv6, 6=TCP, 17=UDP) oppure tipo di extension header. |
| Hop Limit | 8 | Equivalente del TTL di IPv4. Decrementato di 1 a ogni hop. Pacchetto scartato quando raggiunge 0. |
| Source Address | 128 | Indirizzo IPv6 del mittente |
| Destination Address | 128 | Indirizzo IPv6 del destinatario |
In IPv6 sono stati eliminati: Header Checksum (demandato ai livelli superiori e al data link), Header Length (header fisso, non serve), Identification/Flags/Fragment Offset (la frammentazione avviene solo al sorgente, non ai router intermedi), Options (sostituite dagli extension header). Risultato: i router elaborano i pacchetti molto più velocemente.
Extension Header
Gli extension header vengono inseriti tra header base e payload solo quando servono, formando una catena: ogni header punta al successivo tramite il campo Next Header.
| Tipo | Next Header value | Uso |
|---|---|---|
| Hop-by-Hop Options | 0 | Esaminato da ogni router sul percorso (es. Jumbo Payload) |
| Routing | 43 | Source routing: specifica lista di hop intermedi |
| Fragment | 44 | Frammentazione (solo il mittente può farlo in IPv6) |
| ESP / AH | 50/51 | Sicurezza IPsec integrata nello stack IPv6 |
| Destination Options | 60 | Opzioni esaminate solo dalla destinazione finale |
Formato degli indirizzi IPv6
:). Ogni gruppo rappresenta 16 bit (2 byte).Forma completa:
2001:0DB8:0000:0000:0000:FF00:0042:8329
Regole di compressione
Scrivere sempre 32 cifre esadecimali è scomodo. Si applicano due regole:
Si possono omettere gli zeri iniziali di ogni gruppo.
0DB8 → DB8
0000 → 0
FF00 → FF00 (invariato)
Una sola sequenza contigua di gruppi tutti-zero può essere sostituita con ::.
Usabile una sola volta per indirizzo (altrimenti ambiguo).
Esempio di compressione completa:
2001:0DB8:0000:0000:0000:FF00:0042:8329 (forma completa) ↓ Regola 1: omissione zeri iniziali 2001:DB8:0:0:0:FF00:42:8329 ↓ Regola 2: :: sostituisce i tre gruppi :0:0:0: 2001:DB8::FF00:42:8329 (forma compressa)
Non si può usare :: due volte. L’indirizzo 2001::42::1 è ambiguo: non si sa quanti zeri sostituisce ciascun ::. Il tool ping6 e i parser lo rifiutano.
Indirizzi speciali
| Indirizzo | Significato |
|---|---|
::1 | Loopback (equivalente di 127.0.0.1 in IPv4) |
:: | Indirizzo non specificato (equivalente di 0.0.0.0) |
2001:DB8::/32 | Range riservato alla documentazione e agli esempi (RFC 3849) |
Tipologie di indirizzi IPv6
IPv6 introduce una distinzione fondamentale rispetto a IPv4: non esiste il broadcast. Al suo posto si usa il multicast (e il meccanismo anycast per alcuni servizi). Questo riduce il traffico non necessario su tutti i nodi della rete.
Unicast — un mittente, un destinatario
| Tipo | Prefisso | Descrizione |
|---|---|---|
| Global Unicast | 2000::/3 | Indirizzi instradabili su Internet (equivalente IP pubblico IPv4). Attualmente assegnati nel range 2000::→3FFF:FFFF:… |
| Link-Local | FE80::/10 | Validi solo sul link locale (stesso segmento). Assegnati automaticamente a ogni interfaccia. Non vengono instradati dai router. Essenziali per NDP e SLAAC. |
| Unique Local | FC00::/7 | Equivalente degli indirizzi privati IPv4 (RFC 1918). Usati in reti private, non instradati su Internet. Prefisso tipico: FD00::/8 con 40 bit pseudo-random. |
| Loopback | ::1/128 | Solo interfaccia loopback locale |
Multicast — un mittente, molti destinatari
Il multicast IPv6 ha prefisso FF00::/8. Sostituisce completamente il broadcast IPv4.
| Indirizzo | Scope | Uso |
|---|---|---|
FF02::1 | Link-local | All-nodes: tutti i nodi IPv6 sul segmento |
FF02::2 | Link-local | All-routers: tutti i router IPv6 sul segmento |
FF02::1:FFxx:xxxx | Link-local | Solicited-node multicast: usato da NDP per risolvere indirizzi (vedi L06) |
FF05::101 | Site-local | NTP servers nel sito |
Anycast — un mittente, il più vicino tra molti
Un indirizzo anycast è assegnato a più interfacce su nodi diversi. Il pacchetto viene consegnato all’interfaccia “più vicina” secondo la metrica di routing. Usato per DNS root server, CDN, servizi distribuiti. Non esiste un range specifico: un indirizzo unicast diventa anycast quando viene assegnato a più interfacce.
Autoconfigurazione: SLAAC e EUI-64
IPv6 include un meccanismo di autoconfigurazione stateless (SLAAC — Stateless Address Autoconfiguration, RFC 4862) che permette a un host di configurarsi autonomamente senza DHCP:
- L’host genera un indirizzo link-local (
FE80::+ identificatore interfaccia) - Verifica che non sia duplicato con DAD (Duplicate Address Detection)
- Invia un Router Solicitation al multicast
FF02::2 - Il router risponde con Router Advertisement: prefisso di rete (/64) e altre info
- L’host combina il prefisso ricevuto con il suo EUI-64 → indirizzo global unicast
Dato un MAC address: 00:1A:2B:3C:4D:5E
- Dividi a metà:
00:1A:2B|3C:4D:5E - Inserisci
FF:FEnel mezzo:00:1A:2B:FF:FE:3C:4D:5E - Inverti il bit U/L (bit 7 del primo byte):
00→02 - Risultato:
021A:2BFF:FE3C:4D5E
Con prefisso FE80:: → indirizzo completo: FE80::21A:2BFF:FE3C:4D5E
Coesistenza IPv4/IPv6: strategie di transizione
| Meccanismo | Come funziona | Uso tipico |
|---|---|---|
| Dual Stack | Il nodo ha sia un indirizzo IPv4 sia un IPv6. Comunica in v4 o v6 in base all’interlocutore. | Approccio preferito. Tutti i moderni SO lo supportano. |
| Tunneling (6in4) | Pacchetti IPv6 incapsulati in datagrammi IPv4 per attraversare reti solo-IPv4. | Connettere isole IPv6 attraverso backbone IPv4. |
| NAT64 + DNS64 | Traduce indirizzi IPv6 in IPv4 a livello di gateway. Permette a host solo-IPv6 di raggiungere server solo-IPv4. | Reti mobili 5G, reti “IPv6-only”. |
- IPv4 è esaurito dal 2011; NAT è un palliativo, IPv6 è la soluzione strutturale.
- L’header IPv6 è fisso a 40 byte: Version, Traffic Class, Flow Label, Payload Length, Next Header, Hop Limit, Source + Destination (128 bit ciascuno).
- Gli indirizzi IPv6 sono 128 bit scritti come 8 gruppi esadecimali. Comprimi con
::(solo una volta) e omettendo gli zeri iniziali di ciascun gruppo. - Tipologie: Global Unicast (2000::/3, instradabile), Link-Local (FE80::/10, solo segmento), Unique Local (FC00::/7, privato), Multicast (FF00::/8), Anycast.
- No broadcast in IPv6: sostituito dal multicast. Meno traffico, meno overhead.
- SLAAC + EUI-64 permettono l’autoconfigurazione stateless senza DHCP.
- Strategia di transizione raccomandata: Dual Stack.