IPv6: Logica di indirizzamento e regole di notazione abbreviata
Abbiamo visto come IPv4, con i suoi 4,3 miliardi di indirizzi, non sia più sufficiente per coprire il fabbisogno di un mondo iper-connesso. La soluzione tecnica, ormai in fase di adozione globale, è IPv6. Tuttavia, il passaggio da un protocollo a 32 bit a uno a 128 bit porta con sé una sfida immediata: come facciamo a leggere, scrivere e ricordare numeri così spaventosamente lunghi senza commettere errori di battitura?
Se provassimo a scrivere un indirizzo a 128 bit usando il classico formato decimale a cui siamo abituati (come 192.168.1.1), otterremmo una stringa di 16 numeri separati da punti, lunga e quasi illeggibile . Per questo motivo, gli ingegneri della IETF hanno dovuto stravolgere non solo l'architettura della rete, ma anche il modo in cui rappresentiamo visivamente gli indirizzi IP.
Il formato Esadecimale: la nuova lingua di Internet
Per compattare l'informazione, gli indirizzi IPv6 abbandonano il sistema decimale in favore del sistema esadecimale (Base 16). In esadecimale, oltre ai numeri da 0 a 9, utilizziamo le lettere da a a f per rappresentare i valori da 10 a 15. Questo permette di "nascondere" un numero maggiore di bit all'interno di un singolo carattere stampato.
La struttura ufficiale di un indirizzo IPv6 prevede che i 128 bit vengano divisi in 8 gruppi (chiamati hextets o quartetti). Ogni gruppo è composto da 4 cifre esadecimali (pari a 16 bit per gruppo). Invece del punto, il separatore ufficiale diventa i due punti (:).
Ecco un esempio di indirizzo IPv6 completo e non compresso:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
L'anatomia a due facce: Rete e Dispositivo
Come accadeva per IPv4 con la Subnet Mask, anche un indirizzo IPv6 è logicamente diviso in due parti. In una tipica rete LAN o aziendale, la divisione è esattamente a metà:
I primi 64 bit (i primi 4 gruppi) rappresentano il Network Prefix. Questo prefisso viene assegnato dal provider Internet (ISP) o dall'amministratore di rete e serve ai router mondiali per capire in quale area geografica o rete aziendale deve essere consegnato il pacchetto.
Gli ultimi 64 bit (gli ultimi 4 gruppi) rappresentano l'Interface ID. Questo è l'identificativo univoco del singolo dispositivo (PC, smartphone, sensore) all'interno di quella specifica rete locale. Spesso, questo valore viene auto-generato dal dispositivo stesso [tooltip]Il processo EUI-64 è un metodo che permette a un host IPv6 di calcolare automaticamente il proprio Interface ID a partire dal suo indirizzo fisico MAC (Media Access Control) a 48 bit.[/tooltip] partendo dal suo MAC address, eliminando così la stretta necessità di un server DHCP centrale.
Le regole di compressione: rendere leggibile l'illeggibile
Osservando l'indirizzo di esempio 2001:0db8:85a3:0000:0000:8a2e:0370:7334, è evidente quanto sia scomodo da digitare sulla tastiera per configurare un router. Fortunatamente, lo standard IPv6 prevede due potentissime regole di compressione (o abbreviazione) per accorciare visivamente l'indirizzo senza alterarne il valore matematico.
Regola 1: Omissione degli zeri iniziali (Leading Zeros)
All'interno di ogni singolo gruppo (hextet), è possibile eliminare tutti gli zeri che si trovano all'inizio del blocco. Attenzione: non si possono eliminare gli zeri finali altrimenti si altererebbe il valore del numero esadecimale (un po' come dire che 05 è uguale a 5, ma 50 non è uguale a 5!).
Esempio: 0db8 diventa db8. Un gruppo fatto di soli zeri 0000 diventa un singolo 0.
Applicando la Regola 1, il nostro indirizzo diventa:
2001:db8:85a3:0:0:8a2e:370:7334
Regola 2: Compressione dei blocchi di zeri (Zero Compression)
Se ci sono due o più blocchi consecutivi formati esclusivamente da zeri (es. :0:0:), è possibile eliminarli del tutto, sostituendoli con un doppio due punti (::).
Regola d'oro della Compressione: Il doppio due punti (::) può essere utilizzato UNA SOLA VOLTA all'interno di un indirizzo IPv6. Se venisse usato due volte (es. 2001::85a3::7334), il sistema operativo o il router non avrebbero modo matematico di capire quanti blocchi di zeri ripristinare al posto del primo "::" e quanti al posto del secondo per ritornare ai 128 bit originali.
Errori comuni e casi di studio
Saper applicare le regole di compressione è fondamentale nella pratica laboratoriale. Vediamo due classici errori che si commettono configurando le interfacce di un router Cisco.
Errore di soppressione degli zeri finali: Uno studente vede l'indirizzo 2001:0db8:0120:0000:0000:0000:0000:0001.
Applica correttamente il ::, ma abbrevia 0120 in 12. Il router restituirà errore o configurerà l'IP sbagliato! L'abbreviazione corretta di 0120 è 120. Il risultato esatto è 2001:db8:120::1.
Lettura degli indirizzi Link-Local: A casa, apri il prompt dei comandi e digiti ipconfig (o ifconfig su Linux/Mac). Noterai che il tuo computer possiede un IPv6 che inizia con fe80:: seguito da un lungo codice alfanumerico. Quel :: ti dice subito che tra il blocco fe80 e l'Interface ID ci sono enormi sequenze di zeri nascoste dal sistema operativo per non intasarti lo schermo!
Sintesi applicativa e autoverifica
In questa lezione abbiamo esplorato la sintassi di IPv6. L'uso dell'esadecimale ci permette di maneggiare i 128 bit con una stringa di 32 caratteri, mentre le due regole di compressione (omissione degli zeri iniziali e l'uso dell'operatore ::) rendono la configurazione manuale umana e gestibile, facilitando l'enorme lavoro di routing a livello globale.
Prima di passare alla prossima lezione sulle tipologie di trasmissione, fai questo esercizio mentale di decompressione: supponi di essere un router che riceve l'IP di destinazione ff02::1 (un tipico indirizzo Multicast). Sapresti scriverlo per esteso, riportandolo esattamente alla sua forma a 8 gruppi da 4 cifre, per capire quanti zeri si nascondono dietro quel singolo ::?