IPv6: header, formato indirizzi e tipologie

// obiettivi di apprendimento
Capire perché IPv4 è in esaurimento e quali problemi risolve IPv6
Descrivere il formato dell’header IPv6 e i vantaggi rispetto a IPv4
Leggere e scrivere indirizzi IPv6 applicando le regole di compressione
Distinguere le tipologie di indirizzi IPv6: unicast, multicast, anycast
🎬
Video
Dual stack IPv4 e IPv6
Guarda →
📄
Slides
Schema CIDR, tabella route summary, esercizi risolti
⚗️
Lab
PKT IPv6
PKT →
⚗️
Lab
PKT IPv6 dual stack 1
PKT →
⚗️
Lab
PKT IPv6 dual stack 2
PKT →
🔗
Risorse
Esercizio 1 IPv6
GitHub →
🔗
Risorse
Esercizio 1 IPv6
GitHub →

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.

// workaround IPv4

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.

// header IPv6 — 40 byte fissi
 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
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
CampoBitDescrizione
Version4Sempre 0110 (6) per IPv6
Traffic Class8Equivalente di DSCP+ECN in IPv4. Priorità del traffico (QoS)
Flow Label20Identifica un “flusso” tra sorgente e destinazione. Permette QoS senza esaminare il payload. Novità rispetto a IPv4.
Payload Length16Lunghezza in byte del payload (escluso header base). Max 65535 byte; con Jumbo Payload extension header si superano i 4 GB.
Next Header8Tipo del prossimo header: protocollo superiore (58=ICMPv6, 6=TCP, 17=UDP) oppure tipo di extension header.
Hop Limit8Equivalente del TTL di IPv4. Decrementato di 1 a ogni hop. Pacchetto scartato quando raggiunge 0.
Source Address128Indirizzo IPv6 del mittente
Destination Address128Indirizzo IPv6 del destinatario
// cos’è scomparso rispetto a IPv4

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.

TipoNext Header valueUso
Hop-by-Hop Options0Esaminato da ogni router sul percorso (es. Jumbo Payload)
Routing43Source routing: specifica lista di hop intermedi
Fragment44Frammentazione (solo il mittente può farlo in IPv6)
ESP / AH50/51Sicurezza IPsec integrata nello stack IPv6
Destination Options60Opzioni esaminate solo dalla destinazione finale

Formato degli indirizzi IPv6

// definizione formale
Un indirizzo IPv6 è composto da 128 bit, rappresentati come 8 gruppi di 4 cifre esadecimali separati da due punti (:). 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:

REGOLA 1 — ZERI INIZIALI

Si possono omettere gli zeri iniziali di ogni gruppo.

0DB8DB8
00000
FF00FF00 (invariato)

REGOLA 2 — SEQUENZA DI ZERI

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)
// errore comune

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

IndirizzoSignificato
::1Loopback (equivalente di 127.0.0.1 in IPv4)
::Indirizzo non specificato (equivalente di 0.0.0.0)
2001:DB8::/32Range 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

TipoPrefissoDescrizione
Global Unicast2000::/3Indirizzi instradabili su Internet (equivalente IP pubblico IPv4). Attualmente assegnati nel range 2000::3FFF:FFFF:…
Link-LocalFE80::/10Validi solo sul link locale (stesso segmento). Assegnati automaticamente a ogni interfaccia. Non vengono instradati dai router. Essenziali per NDP e SLAAC.
Unique LocalFC00::/7Equivalente 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/128Solo interfaccia loopback locale

Multicast — un mittente, molti destinatari

Il multicast IPv6 ha prefisso FF00::/8. Sostituisce completamente il broadcast IPv4.

IndirizzoScopeUso
FF02::1Link-localAll-nodes: tutti i nodi IPv6 sul segmento
FF02::2Link-localAll-routers: tutti i router IPv6 sul segmento
FF02::1:FFxx:xxxxLink-localSolicited-node multicast: usato da NDP per risolvere indirizzi (vedi L06)
FF05::101Site-localNTP 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:

  1. L’host genera un indirizzo link-local (FE80:: + identificatore interfaccia)
  2. Verifica che non sia duplicato con DAD (Duplicate Address Detection)
  3. Invia un Router Solicitation al multicast FF02::2
  4. Il router risponde con Router Advertisement: prefisso di rete (/64) e altre info
  5. L’host combina il prefisso ricevuto con il suo EUI-64 → indirizzo global unicast
// come si costruisce un indirizzo EUI-64

Dato un MAC address: 00:1A:2B:3C:4D:5E

  1. Dividi a metà: 00:1A:2B | 3C:4D:5E
  2. Inserisci FF:FE nel mezzo: 00:1A:2B:FF:FE:3C:4D:5E
  3. Inverti il bit U/L (bit 7 del primo byte): 0002
  4. Risultato: 021A:2BFF:FE3C:4D5E

Con prefisso FE80:: → indirizzo completo: FE80::21A:2BFF:FE3C:4D5E

Coesistenza IPv4/IPv6: strategie di transizione

MeccanismoCome funzionaUso tipico
Dual StackIl 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 + DNS64Traduce indirizzi IPv6 in IPv4 a livello di gateway. Permette a host solo-IPv6 di raggiungere server solo-IPv4.Reti mobili 5G, reti “IPv6-only”.
📌 Riepilogo — Punti chiave
  • 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.

Lascia un commento