Il protocollo IP è stato standardizzato nel 1981 (RFC 791 [1]) e la versione che usiamo tuttora regolarmente è la 4 (IPv4).
Questa versione ha l'indirizzo formato da 32 bit rappresentati in 4 gruppi da 8 bit ciascuno (quindi 4 byte) suddivisi da un punto (es. 192.168.0.1) e permette all'incirca un numero di indirizzi pari a 4 miliardi di indirizzi.
Una cifra notevole eh? :) Naturalmente non esistono allo stato attuale 4 miliardi di calcolatori nel pianeta e quindi non è immediatamente comprensibile il perchè della necessità di passare in un futuro, prossimo o meno che sia, ad IPv6.
Un pò di cifre:
Classe A: 128 reti disponibili --> 16 milioni di indirizzi ciascuna Classe B: circa 16.000 reti disponibili --> 65.000 indirizzi l'una Classe C: circa 2 milioni di reti disponibili --> ciascuna grande 254 indirizzi
In data 1 Gennaio 1996 risultavano occupate 96 classi A, 5655 classi B, 87.924 classi C
E c'è da tener conto che nel 1996 Internet non era ancora un fenomeno di massa...
Comunque tutti i segni premonitori alla crisi del IPv4 c'erano gia, bastava vedere che nel gen. 93 risultavano online poco meno di un milione e mezzo di host, nel 1996 erano quasi nove milioni e mezzo.
Ma allora perchè visto che 4 miliardi di indirizzi sono tantissimi, gli IPv4 liberi stanno per finire?
Perchè sino al 1991venivano assegnate intere classi B e di questo passo si sarebbero esaurite entro il 1994.
Per questo motivo la IEFT decise di assegnare blocchi di reti contigue di classe C (le cosiddette classless), in modo da tamponare il deficit di quelle di classe B.
Naturalmente in quello stesso periodo prende forma l'IPv6....
Allo stato attuale delle cose IPv6 `ha dato vita` a 6Bone, ovvero è una rete per così dire sovrapposta ad Internet, nella quale host che hanno IPv6 (le cosiddette isole) possono comunicare tra di loro attraverso i comuni protocolli (http, ftp etc..etc..).
Questa comunicazione tra isole viene fatta attraverso `tunneling`, ovvero detto in modo semplice tutto il traffico IPv6 viene trasportato in pacchetti IPv4 (incapsulamento).
La maggior parte degli host sono dual-stack, e possono utilizzare i tunnel per instradare i pacchetti IPv6 su porzioni di rete solo IPv4 per raggiungere l'altra isola IPv6
Per utilizzare un paragone forse banale ma efficace, immaginatevi tante isole IPv6 in un mare IPv4 (internet) che usano delle barche (pacchetti IPv4) per portare gli abitanti (pacchetti IPv6) da un'isola all'altra.
Naturalmente tutto questo viene effettuato tramite l'incapsulamento di pacchetti IPv6 in pacchetti IPv4. Allo stato attuale questo viene fatto dal SIT (Simple Internet Transition) (ora saprete cos'è sit0 :PP)
Caratteristiche principali del SIT:
Box dual-stack (dette anche IPv4/IPv6)
Incapsulamento di pacchetti IPv6 in pacchetti IPv4 per attraversare parti di rete ancora solo IPv4
Perchè viene utilizzato questo sistema? Come dice il nome stesso per effettuare la transizione in modo meno traumatico possibile. Magari l'unica cosa necessaria è un server DNS dual stack per risolvere i nomi sia IPv4 che IPv6, però tutto il resto è completamente decentrato.
Infatti ad esempio non è necessario che i router del vostro provider siano aggiornati ad IPv6 per averlo (ad esempio se usate dialup). Basta che mettiate il dual-stack nella vostra box, usate come gateway/router IPv4/IPv6 quello fornitovi dal vostro tunnel broker, e così potrete utilizzare in modo ottimale IPv6 (irc, web etc..). Naturalmente non disturbando in alcun modo la vostra `normale` connessione IPv4.
Il nuovo protocollo IP prevede indirizzi a 128 bit (il "vecchio" ipv4 ne ha 32) e la sua rappresentazione è 3ffe:13e4:1234:1aef::1
Sono stati usati 8 gruppi di 16 bit l'uno ed ogni cifra è rappresentata in esadecimale, quindi abbiamo 4 bit per cifra.
Naturalmente quella di inizio pagina è la rappresentazione abbreviata, introdotta per limitare, quando possibile, l'eccessiva lunghezza.
Se lo zero è la cifra più significativa in un gruppo(in parole povere nei casi ...:0123:..., ...:0012:..., ...:0001:...) può venire omesso.
C'è di più. Questo indirizzo 3ffe:13e4:1234:1aef::1 in realtà è la rappresentazione di 3ffe:13e4:1234:1aef:0000:0000:0000:0001. Naturalmente non è che potete eliminare zeri a destra e a manca, vediamo come fare.
Mettiamo di avere questo indirizzo 3ffe:13e4:1234:1aef:0000:1965:0000:0001 non possiamo rappresentarlo come 3ffe:13e4:1234:1aef::1965::1---> ERRATO, ma nella forma 3ffe:13e4:1234:1aef:0:1965:0:1 Mentre 3ffe:13e4:1234:1aef:0000:0000:1234:0001 può essere rappresentato come 3ffe:13e4:1234:1aef::1234:1; quindi c'è da porre particolare attenzione sulla posizione assunta dagli zeri.
Come regola generale assumiamo che gruppi contigui che abbiano SOLO zeri (o in forma ..:0000:0000:0000:0000:... oppure ...:0:0:0:0:..), possono essere "fusi" in ..::.., ma SOLO UNA VOLTA in tutto l'indirizzo :
3ffe:13e4:0000:0000:34:0000:0000:0001 non potrà mai essere visualizzato come 3ffe:13e4::34::1, ma ad esempio 3ffe:13e4::34:0:0:1
In ipv4 per individuare nodi e reti si usava la cosiddetta netmask
Ad esempio 192.168.0.0/255.255.0.0 identifica la subnetwork, quindi 16 bit per identificarla, mentre i restanti 16 bit per identificare i nodi all'interno di essa. Una notazione più agevole è 192.168.0.0/16 dove /numero indica appunto i bit della subnet.
In ipv6 il concetto di netmask non c'è più ed è sostituito da quello di prefisso; il prefisso è il numero di bit che identificano la subnet.
Ad esempio 3ffe:13e4:1234:1aef::/64 indica che i primi 64 bit identificano la subnetwork, mentre i restanti 64 bit i vari nodi all'interno della subnetwork.
Così come 3ffe:13e4:1234:1aef:abcd::/80; in questo caso avremo a dispozione 48 bit per i nodi, dato che la rete è identificata da 80 bit (in forma estesa la rappresentazione sarebbe 3ffe:13e4:1234:1aef:abcd:0000:0000:0000/80)
Indirizzi di questa subnet sarebbero ad esempio 3ffe:13e4:1234:1aef:abcd:123:124:125, 3ffe:13e4:1234:1aef:abcd:124:0:125
Infine se ad esempio abbiamo una subnet di 127 bit 3ffe:13e4:1234:1aef:dead:dead:beef:aef1/127 e quindi è formata da 2 ip, 3ffe:13e4:1234:1aef:dead:dead:beef:aef0 e 3ffe:13e4:1234:1aef:dead:dead:beef:aef1
Come avvenuto a suo tempo per IPv4, anche gli indirizzi IPv6 sono stati suddivisi per scopi differenti, si parla infatti di tipo di indirizzo.
La distinzione viene fatta attraverso un prefisso binario stabilito, tra i bit più significativi; questo prefisso è chiamato Format Prefix
L'indirizzo IPv6 in forma binaria è una seguenza di 128 cifre che possono assumere il valore "0" o il valore "1"
Il FP è dato dalla prime cifre dell'indirizzo; i più comuni sono :
1111 1110 10 - Indirizzi Link Local (FE80)
1111 1110 11 - Indirizzi Site Local (FEC0)
1111 1111 - Indirizzi Multicast (FF)
001 - Indirizzi unicast globali aggregabili
0000 0000 - Riservato
Osserviamo gli ultimi due che sono molto interessanti.
Il FP 001 è stato assegnato alla sperimentazione vera e propria su Internet.
Non entrando troppo nel dettaglio, basta sapere che 2000::/3 (in esadecimale) comprende TUTTO il traffico IPv6 in Internet.
I TLA (Top Level Aggregator) finora esistenti sono 3ffe::/16 (0011 1111 1111 1110), ovvero la rete 6Bone, 2001::/16 (0010 0000 0000 0001) per scopi commerciali ed infine 2002::/16 (0010 0000 0000 0010) ovvero TLA per i prefissi 6to4 (Attualmente solo US e JP). Per maggiori info potete consultare www.rfc.net e gli RFC 2373, 2374, 2471, 2921, 2928.
Mentre ::/32 è riservato per usi molteplici:
Indirizzo non specificato (tutti i 128 bit a "0") rappresentato come ::
Indirizzo di loopback (ultimo bit a "1") rappresentato come ::1
Indirizzi che incorporano IPv4
Vediamo in dettaglio quest'ultimi, ce ne sono di due "tipi" :
Indirizzi IPv6 compatibili IPv4 - es. ::192.168.0.1
Indirizzi IPv6 derivato da IPv4 - es. ::ffff:192.168.0.1
Il primo caso è la "rappresentazione" di IPv4 in una macchina dual-stack; quindi avrà una subnet di 96 bit (80+16), ecco perchè il vostro ifconfig vi darà come output, ad esempio, ::192.168.0.1/96.
L'altro è la "rappresentazione" in IPv6 dell'indirizzo di una macchina che non ha il dual-stack, ad esempio l'output di un netstat può essere ::ffff:192.168.0.254; 80 bit "0" + 16 ad "f".
Notare che l'indirizzo è sempre di 128 bit, 96+32 = 128, dove 32 sono i bit di IPv4.
Un altra rappresentazione di indirizzo IPv6 è la cosiddetta forma "nibble" usata per i ptr nelle reverse zone (consultare il DNS HOWTO www.linuxdoc.org).
Praticamente permette di risolvere il nome di un host, partendo dal suo indirizzo ipv6.
Per "calcolare" la forma nibble dobbiamo scrivere ogni gruppo di 4 cifre "alla rovescia", partendo dal fondo dell'indirizzo ipv6 e separando OGNI CIFRA con un punto, terminando l'indirizzo con ip6.int.
Fate attenzione che questa volta gli ZERI devo essere scritti tutti!!!
Prendiamo ad esempio l'indirizzo 3ffe:1234:5678:9abc::1, la sua forma nibble sarà:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.b.a.9.8.7.6.5.4.3.2.1.e.f.f.3.ip.int
Per controllare se avete scritto tutto giusto le cifre dovranno essere TASSATIVAMENTE 32 + ip6.int, perchè ogni cifra "vale" 4 bit e 4*32 = 128 :)
Architettura di IPv6
L'indirizzo ipv6 come nel caso di ipv4 è l'identificatore di una singola interfaccia di rete (ind. unicast), ma anche di un insieme di esse (indirizzi multicast ed anycast). Ad una interfaccia possono essere associati anche più di un indirizzo, ognuno dei quali identifica in modo univoco quell'interfaccia.
Gli indirizzi unicast e multicast hanno le stesse caratteristiche che in ipv4, mentre il tipo anycast è totalmente nuovo. I broadcast non esistono più. La loro funzione è rimplementata dagli indirizzi multicast.
Vediamo brevemente il funzionamento dei suddetti:
unicast : identificano una sola interfaccia e quindi i pacchetti mandati a quell'indirizzo giungeranno solo a quella specifica interfaccia.
multicast : identificano un gruppo di interfacce e quindi i pacchetti mandati a questi indirizzi giungeranno a tutte le interfacce del gruppo.
anycast : identificano un gruppo di interfacce ed i pacchetti mandati a questi indirizzi giungono all'interfaccia più vicina nel gruppo. Quando dico interfaccia più vicina intendo a livello di instradamento.
Altra particolarità di IPv6 è quella della sicurezza.
Breve parentesi, il TCP/IP come saprete è costituito da 4 layer (livelli)
Livello 1 : Apllicazione (telnet, ftp, ...)
Livello 2 : Trasporto (TCP, UDP)
Livello 2 : Rete IP
Livello 4 : Collegamento (interfaccia)
Con IPv4 la sicurezza poteva essere garantita solo a livello 1, ad esempio con applicazioni del tipo SSH, altrimenti tutto "viaggiava" in chiaro, ed oltretutto i pacchetti erano (diciamo cmq sono :P) facilmente manipolabili, basti pensare ad IP Spoofing o il DoS chiamato Smurf.
Con IPv6 la sicurezza è garantita al livello 3, ovvero quello di IP.
Per quanto riguarda questa parte non è ancora tutto definito al 100%, il più recente RFC da consultare è il 2401.
Essenzialmente la sicurezza è data da:
Un autentication header che ha lo scopo di garantire al destinatario l'autenticità del pacchetto ricevuto.
Encrypted Security Payload garantisce che solo il leggittimo ricevente possa leggere quel pacchetto.
Naturalmente sorgente e destinazione dovranno concordare chiave crtittografica e algoritmi; tutti questi accordi sono riporati sul RFC 2401.
Per concludere questa breve (e poco esauriente :P) carrellata sull'architettura di IPv6 ecco un altra caratteristica : l'autoconfigurazione. Non scenderò in dettaglio anche perchè è un pò complesso e non voglio appesantire troppo la lettura, inoltre esistono paper scritti da chi ha molta più esperienza di me ;)
L'autoconfigurazione permette ad un nodo di sapere automaticamente il suo indirizzo in modo da connettersi senza troppi problemi ad internet.
Innanzittutto vengono sfruttati gli indirizzi link-local; se sul nodo è presente una scheda ethernet viene garantito un indirizzo di 48 bit univoco ad esempio fe80::xxxx:xxxx:xxxx dove xxxx:xxxx:xxxx è l'indirizzo hardware della scheda. (MAC)
A questo punto si ha un indirizzo locale, per avere automaticamente un indirizzo globale (internet) esistono due modi:
Autoconfiguraziona stateless
Autoconfigurazione statefull
Stateless:
La forma + semplice, quando si avrà la possibilità di un collegamento internet il prefisso locale fe80::/80 verra sostituito dal prefisso internet assegnato dal provider (ora come ora dal tunnel broker).
Statefull:
I problemi della stateless sono che in molti casi non è possibile che restino ben 48 bit per un indirizzo, ad esempio in strutture su molti livelli; altro problema è la sicurezza
Basti pensare che chiunque potrebbe collegare una macchina con un ethernet alla LAN, ottenere un indirizzo valido e operare tranquillamente :)
Per questo c'è la versione IPv6 del DHCP che permetta di assegnare ad ogni nodo un indirizzo unicast globale. (sperimentale)
SERVER CHE SUPOPORTANO IPV6:
2001:6e0:20a:ff::6667
irc.ipv6.xs4all.nl
2001:6c0:1fff:ffd0:0:0:1:2
irc.ipv6.estpak.ee
2001:6e0:208:0:204:76ff:fe23:2024
linz.irc.at
3ffe:80c0:200:2:250:b7ff:fe14:6155
irc.missingU.com
3ffe:80c0:220:0:0:0:0:b
eu-fi.irc6.net
3ffe:8100:200:1fff::16
ircnet.wanadoo.be
2001:200:0:c00::6667 irc6.kyoto.wide.ad.jp
3ffe:8170:2:0:a00:20ff:febf:ba2d irc6.edisontel.it
2001:6b8:1:0:210:83ff:fe35:2816 irc6.ngnet.it
2001:6e8::1 irc.song.fi