106.1 Rappresentazione
simbolica di un indirizzo IPv6
La rappresentazione testuale
simbolica standard di un indirizzo IPv6 è nella forma:
x:x:x:x:x:x:x:x
L'indirizzo viene suddiviso
in gruppetti di 16 bit (coppie di ottetti), utilizzando
i due punti (:) come simbolo di separazione.
Questi gruppetti di 16 bit vengono rappresentati in
esadecimale, utilizzando solo le cifre che servono, dove
queste saranno al massimo quattro. Per esempio, l'indirizzo
fe80:0000:0000:0000:02a0:24ff:fe77:4997
si può ridurre semplicemente
a:
fe80:0:0:0:2a0:24ff:fe77:4997
Viene consentita anche
un'ulteriore semplificazione in presenza di gruppetti adiacenti
che risultano azzerati: una coppia di due punti (::)
rappresenta una sequenza indefinita di gruppetti azzerati
e può essere usata una volta sola in un indirizzo. In questo
modo, l'esempio precedente può essere ridotto a quello che
segue:
fe80::2a0:24ff:fe77:4997
In pratica, si deve intendere
che quello che manca per completare l'indirizzo in corrispondenza
del simbolo ::, contiene solo gruppetti di
16 bit azzerati.
106.2 Prefissi
di indirizzo
Con IPv6, il concetto di
maschera di rete è stato semplificato
e nei documenti RFC si parla piuttosto di prefisso
di un indirizzo. Il termine rende meglio l'idea del senso
che ha, in quanto porta l'attenzione a una parte iniziale
dell'indirizzo stesso per qualche scopo. Il prefisso viene
segnalato con un numero aggiunto alla fine di un indirizzo
IPv6, separato da una barra obliqua (/) che
indica il numero di bit iniziali da prendere in considerazione
per un qualche scopo. In questo modo si indica la lunghezza
del prefisso.
indirizzo_ipv6/lunghezza_prefisso
È importante osservare
che l'indirizzo IPv6 abbinato all'indicazione della lunghezza
di un prefisso, non può essere abbreviato più di quanto
si possa già fare con questo genere di indirizzi. Si prenda
in considerazione un indirizzo con l'indicazione della lunghezza
del prefisso strutturato nel modo seguente (la lettera «h»
rappresenta una cifra esadecimale diversa da zero):
hhhh:0000:0000:hhh0:0000:0000:0000:0000/60
<---- 60 bit ---->
Il prefisso si estende
per i primi 60 bit, ovvero le prime 15 cifre esadecimali.
Sono ammissibili le forme normali di abbreviazione di questa
indicazione:
hhhh:0:0:hhh0:0:0:0:0/60
hhhh::hhh0:0:0:0:0/60
hhhh:0:0:hhh0::/60
Al contrario, non sono
ammissibili queste altre:
hhhh:0:0:hhh/60 --> non è valida in generale
hhhh::hhh0/60 --> si traduce in hhhh:0:0:0:0:0:0:hhh0/60
hhhh::hhh/60 --> si traduce in hhhh:0:0:0:0:0:0:0hhh/60
106.3 Tipi
di indirizzi
Il sistema introdotto da
IPv6 richiede di distinguere gli indirizzi in tre categorie
fondamentali: unicast,
anycast
e multicast. Quello che in IPv4 era conosciuto
come indirizzo broadcast non esiste
più in IPv6.
-
unicast
L'indirizzo unicast
riguarda un'interfaccia di rete singola; in altri termini,
un indirizzo unicast serve per
raggiungere un'interfaccia di rete in modo univoco.
-
anycast
L'indirizzo anycast
serve per essere attribuito a più interfacce di rete
differenti (in linea di principio, queste dovrebbero
appartenere ad altrettanti componenti di rete distinti).
Si tratta di un indirizzo che ha le stesse caratteristiche
esteriori di quello unicast, che però viene attribuito a diverse interfacce di
altrettanti nodi, con lo scopo
di poter raggiungere semplicemente quello che risponde
prima (quello più vicino in base al protocollo di instradamento).
Per la precisione, i pacchetti inviati a un indirizzo
anycast dovrebbero raggiungere
un'unica interfaccia di rete.
-
multicast
L'indirizzo multicast
serve per essere attribuito a più interfacce di rete
differenti (in linea di principio, queste dovrebbero
appartenere ad altrettanti componenti di rete distinti).
I pacchetti inviati a un indirizzo multicast
dovrebbero raggiungere tutte le interfacce
di rete a cui questo indirizzo è stato attribuito.
106.4 Allocazione
dello spazio di indirizzamento
Così come è avvenuto con
IPv4, anche gli indirizzi IPv6 sono stati suddivisi per
scopi differenti. Si parla di tipo di indirizzo,
riferendosi a questa classificazione. Questa distinzione
avviene in base a un prefisso binario stabilito, definito
FP, ovvero Format prefix (prefisso di formato). La tabella 106.1 riporta l'elenco dei
prefissi di formato attuali (nel momento
in cui viene scritto questo capitolo). Bisogna tenere presente
che IPv6 è appena nato, per cui è necessario controllare
la produzione dei documenti RFC se si vuole rimanere aggiornati
a questo riguardo.
Prefisso |
Allocazione |
0000 00002
|
Riservato. |
0000 00012
|
Non assegnato. |
0000 0012
|
Riservato per l'allocazione
NSAP. |
0000 0102
|
Riservato per l'allocazione
IPX. |
0000 0112
|
Non assegnato. |
0000 12
|
Non assegnato. |
00012 |
Non assegnato. |
0012 |
Indirizzi unicast
globali aggregabili. |
0102 |
Non assegnato. |
0112 |
Non assegnato. |
1002 |
Non assegnato. |
1012 |
Non assegnato. |
1102 |
Non assegnato. |
11102 |
Non assegnato. |
1111 02
|
Non assegnato. |
1111 102
|
Non assegnato. |
1111 1102
|
Non assegnato. |
1111 1110 02
|
Non assegnato. |
1111 1110 102
|
Indirizzi unicast
link-local. |
1111 1110 112
|
Indirizzi unicast
site-local. |
1111 11112
|
Indirizzi multicast.
|
Tabella 106.1. Spazio
di indirizzamento di IPv6.
È importante osservare
subito che il prefisso 0000 00002 (binario),
incorpora alcuni indirizzi molto importanti: l'indirizzo
«non specificato» (0:0:0:0:0:0:0:0 o anche ::), l'indirizzo
locale di loopback (0:0:0:0:0:0:0:1 o anche ::1)
e gli indirizzi ottenuti per incorporazione di quelli IPv4.
Un altro particolare interessante
riguarda il fatto che solo gli indirizzi che iniziano per
FF16 (1111 11112) sono di tipo
multicast, mentre gli altri sono tutti unicast. Gli indirizzi anycast sono degli
indirizzi con caratteristiche uguali a quelli unicast, a cui però è stato attribuito un ruolo differente.
106.5 Indirizzi
unicast
Si è accennato al fatto
che tutti gli indirizzi, tranne quelli che iniziano per
FF16, sono di tipo unicast
(e poi eventualmente tra questi si possono definire degli
indirizzi anycast).
La caratteristica più importante
degli indirizzi unicast è quella di poter essere aggregati a una maschera di
bit continua, simile a quella di IPv4, senza il vincolo
delle classi di indirizzi (come avveniva invece con IPv4).
Un nodo
IPv6, cioè un componente collocato nella rete che riconosce
questo protocollo, può trattare l'indirizzo IPv6 come un
elemento singolo (nel suo insieme) oppure come qualcosa
formato da diverse componenti, in base al ruolo che questo
nodo ha nella rete. In pratica, a
seconda del contesto, il nodo IPv6
potrebbe vedere l'indirizzo come un numero composto da 128 bit,
| 128 bit |
|-----------------------------------------------------------------|
| indirizzo dell'interfaccia |
`-----------------------------------------------------------------'
oppure potrebbe riconoscere
un prefisso relativo a una sottorete:
| n bit | 128-n bit |
|------------------------------------------------|----------------|
| prefisso di sottorete | id-interfaccia |
`-----------------------------------------------------------------'
In questo secondo caso
si intende distinguere la parte di indirizzo relativa alla
rete in cui si trova collocata l'interfaccia del nodo
in questione, rispetto alla parte restante dell'indirizzo,
che invece indica precisamente di quale interfaccia si tratti.
Ma l'indirizzo unicast può essere visto come il risultato di un'aggregazione
molto più sofisticata, dove si inseriscono livelli successivi
di sottoreti in forma gerarchica, fino ad arrivare all'ultimo
livello che permette di raggiungere la singola interfaccia.
106.5.1 Identificatori
di interfaccia
La parte finale di un indirizzo
unicast serve a identificare l'interfaccia
nel collegamento (link),
ovvero la rete fisica in cui si trova. Questa parte dell'indirizzo,
definibile come identificatore di interfaccia
(interface identifier), deve essere univoca all'interno
del collegamento. Eventualmente, potrebbe essere univoca
anche in un ambito più grande.
La struttura di indirizzo
unicast dipende principalmente dal
tipo a cui questo appartiene, in base al prefisso di formato. In molti casi, la parte finale dell'indirizzo
destinata a identificare l'interfaccia è di 64 bit
(la metà di un indirizzo IPv6) e deve essere costruita secondo
il formato IEEE EUI-64. L'identificatore EUI-64 è un
numero di 64 bit che serve a identificare il produttore
e il «numero di serie» di un'apparecchiatura di qualche
tipo. In pratica, un produttore ottiene un numero che rappresenta
la sua azienda e questo viene usato come parte iniziale
degli identificatori EUI-64 di sua
competenza. Con tale numero potrà «marchiare» le proprie
apparecchiature, avendo l'accortezza di utilizzare sempre
numeri differenti per ogni pezzo, purché questi inizino
tutti con il prefisso che gli è stato assegnato. In condizioni
normali, un identificatore EUI-64
corretto è anche un numero univoco a livello globale.
Nel momento in cui l'interfaccia
di rete a cui si attribuisce un indirizzo unicast dispone del numero EUI-64, è
facile ottenere l'identificatore di interfaccia; quando
questo non è disponibile si utilizzano altre tecniche per
generare un numero che gli assomigli. Nel primo caso, si
intuisce che il numero utilizzato per l'identificatore di
interfaccia è anche univoco a livello globale, mentre negli
altri casi questo non può essere vero in assoluto. A questo
proposito, lo stesso numero EUI-64 contiene un bit che viene utilizzato per indicare il
fatto che si tratti di un identificatore univoco a livello
globale o meno. Si tratta del settimo bit più significativo,
che così viene sottratto dai valori che può assumere la
parte iniziale di 24 bit che identifica l'azienda (company
id).
| identificatore EUI-64 |
|ccccccuc cccccccc cccccccc|mmmmmmmm mmmmmmmm mmmmmmmm
mmmmmmmm mmmmmmmm| | azienda | numero di serie |
|ccccccuc cccccccc cccccccc|mmmmmmmm mmmmmmmm mmmmmmmm
mmmmmmmm mmmmmmmm|
^
|
Se il settimo bit più significativo è uguale a zero,
rappresenta un
indirizzo univoco a livello globale.Figura
106.1. Schema di un identificatore EUI-64
suddiviso in bit. |
Per la precisione, un indirizzo
unicast che termina con l'identificatore
di interfaccia composto dall'identificatore EUI-64, inverte il bit che serve a riconoscerlo come univoco
a livello globale. La motivazione di questa inversione è
molto semplice: si vuole evitare che un indirizzo non
univoco a livello globale debba avere per forza
quel bit a uno, cosa che costringerebbe a una notazione
dettagliata dell'indirizzo IPv6 corrispondente.
106.5.1.1 Identificatori
di interfacce Ethernet
Le interfacce Ethernet
hanno un indirizzo MAC, ovvero un indirizzo di livello 2
(secondo la stratificazione OSI/ISO) corrispondente all'identificatore
EUI-48. L'organizzazione IEEE ha stabilito una conversione
di questi identificatori nel nuovo formato EUI-64,
inserendo il codice FFFE16 subito dopo i primi
tre ottetti che identificano l'azienda (company ID).
In pratica, il codice
00-80-ad-c8-a9-81
diventa:
00-80-ad-ff-fe-c8-a9-81
Di conseguenza, tenendo
conto che il settimo bit di questo codice viene invertito,
la parte finale dell'indirizzo IPv6 che lo incorpora diventa:
xxxx:xxxx:xxxx:xxxx:0280:adff:fec8:a981
106.5.2 Indirizzo
non specificato
L'indirizzo 0:0:0:0:0:0:0:0,
ovvero quello in cui tutti i 128 bit sono azzerati,
è quello non specificato (unspecified
address). Questo indirizzo non può essere assegnato
ad alcun nodo e rappresenta l'assenza di un indirizzo.
Come regola, questo indirizzo
non può essere utilizzato come destinazione di un pacchetto
e nemmeno nella definizione delle regole
di instradamento.
106.5.3 Indirizzo
locale di loopback
L'indirizzo unicast
0:0:0:0:0:0:0:1 viene usato per identificare l'interfaccia
virtuale locale, ovvero l'interfaccia di loopback.
Come tale, non può essere utilizzato per un'interfaccia
fisica reale.
In pratica, un pacchetto
destinato a questo indirizzo non deve uscire al di fuori
del nodo (nella rete fisica esterna);
inoltre, un pacchetto destinato a un altro nodo
non può indicare come mittente questo indirizzo.
106.5.4 Indirizzi
IPv6 che incorporano indirizzi IPv4
Nella fase di transizione
da IPv4 a IPv6, oltre a tanti altri accorgimenti è stato
stabilito un modo per rappresentare un indirizzo IPv4 all'interno
di un indirizzo IPv6. Si distinguono due situazioni: gli
indirizzi «compatibili IPv4» che riguardano nodi
IPv6 e gli indirizzi che incorporano un indirizzo IPv4 riferito
a un nodo che non è in grado di gestire
IPv6.
Nel primo caso si utilizzano
una serie di 96 bit azzerati seguiti dai bit dell'indirizzo
IPv4,
| 80 bit | 16 | 32 bit |
|--------------------------------------|----|---------------------|
|0000..............................0000|0000| indirizzo IPv4 |
`-----------------------------------------------------------------'
nel secondo ci sono 80 bit
azzerati, seguiti da 16 bit a uno; in fine ci sono
i 32 bit dell'indirizzo IPv4.
| 80 bit | 16 | 32 bit |
|--------------------------------------|----|---------------------|
|0000..............................0000|FFFF| indirizzo IPv4 |
`-----------------------------------------------------------------'
In presenza di indirizzi
di questo tipo, è ammessa una notazione speciale. I due
esempi seguenti mostrano l'indirizzo IPv4 192.168.1.1 incorporato
in IPv6 nelle due situazioni descritte sopra:
::192.168.1.1
::FFFF:192.168.1.1
106.5.5 Indirizzi
link-local
Gli indirizzi link-local
si riferiscono all'ambito del collegamento in cui si trovano
connesse le interfacce di rete. Questi indirizzi rappresentano
uno spazio privato che non può essere raggiunto dall'esterno
e, di conseguenza, non può attraversare i router.
Evidentemente, tali indirizzi servono per scopi amministrativi
particolari, legati all'ambito della rete fisica.
La struttura normale di
un indirizzo link-local è molto semplice:
| 64 bit | 64 bit |
|--------------------------------|--------------------------------|
|1111 1110 10................0000| identificatore di interfaccia |
`-----------------------------------------------------------------'
Come si può vedere, i primi
10 bit servono a definire il formato dell'indirizzo,
stabilendo che si tratta del tipo link-local. A metà dell'indirizzo inizia l'identificatore di
interfaccia, ottenuto dall'identificatore EUI-64
(già descritto in precedenza), che viene determinato in
modo differente a seconda del tipo di interfaccia.
Dal momento che l'indirizzo
link-local deve essere univoco solo
all'interno del collegamento fisico in cui si trova, non
richiede la distinzione in sottoreti e può essere determinato
in modo automatico, eventualmente interrogando la rete stessa.
Di solito, in presenza di interfacce Ethernet si utilizza
il loro indirizzo MAC trasformandolo secondo la regola già
vista a proposito dell'identificatore EUI-48.
Per esempio, un'interfaccia Ethernet il cui indirizzo MAC
sia
00:80:ad:c8:a9:81
ottiene l'indirizzo IPv6
link-local
fe80:0000:0000:0000:0280:adff:fec8:a981
che si può abbreviare come
fe80::280:adff:fec8:a981
Ecco come potrebbe mostrarlo
ifconfig:
eth0 Link encap:Ethernet HWaddr 00:80:AD:C8:A9:81
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::280:adff:fec8:a981/10 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:11 Base address:0x300
In questa situazione, dal
momento che non c'è bisogno di organizzare tali indirizzi
in sottoreti, l'unico prefisso che abbia un senso è quello
dei primi 10 bit che stanno a indicarne il formato.
Di conseguenza, un indirizzo link-local che porti l'indicazione della lunghezza del prefisso,
utilizzerà normalmente il numero 10, come si vede nell'estratto
generato da ifconfig mostrato sopra.
106.5.6 Indirizzi
site-local
Gli indirizzi site-local
si riferiscono all'ambito di un sito e si possono utilizzare
liberamente senza bisogno di alcuna forma di registrazione.
Questi indirizzi rappresentano uno spazio privato che non
può essere raggiunto dalle reti esterne al sito in questione.
La struttura normale di
un indirizzo site-local è molto semplice:
| 10 bit | 54 bit | 64 bit |
|------------|--------------------|--------------------------------|
|1111 1110 11| sottoreti | identificatore di interfaccia |
`------------------------------------------------------------------'
I primi 10 bit servono
a definire il formato dell'indirizzo, stabilendo che si
tratta del tipo site-local; lo spazio
tra l'undicesimo e il 64-esimo bit può essere utilizzato
per strutturare gli indirizzi in sottoreti, in base alle
esigenze del sito. La seconda metà dell'indirizzo viene
riservata per l'identificatore di interfaccia, ottenuto
dall'identificatore EUI-64 (già descritto
in precedenza), che viene determinato in modo differente
a seconda del tipo di interfaccia.
In pratica, rispetto a
un indirizzo link-local cambia il
prefisso di formato, aggiungendo la
possibilità e la convenienza di suddividere lo spazio di
indirizzi in sottoreti.
106.5.7 Indirizzi
unicast globali aggregabili
Allo stato attuale, nel
momento in cui viene scritto questo capitolo, l'unico gruppo
di indirizzi IPv6 previsto per una gestione globale (cioè
per Internet) è quello che inizia con il prefisso 0012.
Senza entrare troppo nel dettaglio (considerato che si tratta
di una materia che non è ancora consolidata), lo schema
di indirizzamento di questi indirizzi potrebbe essere riassunto
nel modo seguente:
| 3 | 13 + 8 + 24 bit | 16 bit | 64 bit |
|---|--------------------|---------|--------------------------------|
|001| TLA + ris. + NLA | SLA | identificatore di interfaccia |
`-------------------------------------------------------------------'
Dopo il prefisso
di formato seguono 45 bit suddivisi in: un identificatore
del primo livello di aggregazione (Top level aggregation),
uno spazio di riserva e un identificatore successivo (Next
level aggregation). Subito dopo seguono altri 16 bit
la cui gestione dovrebbe essere affidata a un solo sito,
per la gestione delle proprie sottoreti. Come sempre, la
seconda metà dell'indirizzo è destinato all'identificatore
di interfaccia.
In pratica, un sito che
vuole utilizzare indirizzi IPv6 accessibili anche da Internet,
dovrebbe ottenere un lotto di indirizzi composto dei primi
48 bit dal suo ISP, ottenendo la possibilità di gestirsi
come vuole i 16 bit che precedono l'identificatore
di interfaccia.
106.6 Indirizzi
multicast
Un indirizzo IPv6 multicast
serve a identificare e a raggiungere un gruppo di nodi simultaneamente.
Gli indirizzi multicast hanno una struttura particolare:
| 8 | 4 | 4 | 112 bit |
|---------|----|----|--------------------------------------------|
|1111 1111|000T|scop| identificatore di gruppo |
`----------------------------------------------------------------'
Il prefisso di formato
è 1111 11112, ovvero FF16, a
cui seguono 4 bit di opzione. Di questi 4 bit,
è stato specificato solo il significato di quello meno significativo,
che viene indicato convenzionalmente con la lettera «T»
(gli altri devono essere azzerati fino a che verrà stabilito
qualcosa di diverso).
I 4 bit successivi
rappresentano l'ambito dell'indirizzo multicast (scope). Il significato dei valori che può
assumere questo campo sono indicati nella tabella 106.2.
Valore |
Significato |
016 |
Riservato. |
116 |
Ambito node-local.
|
216 |
Ambito link-local.
|
316 |
Non assegnato. |
416 |
Non assegnato. |
516 |
Ambito site-local.
|
616 |
Non assegnato. |
716 |
Non assegnato. |
816 |
Ambito organization-local.
|
916 |
Non assegnato. |
A16 |
Non assegnato. |
B16 |
Non assegnato. |
C16 |
Non assegnato. |
D16 |
Non assegnato. |
E16 |
Ambito globale. |
F16 |
Non assegnato. |
Tabella 106.2. Elenco
dei valori per definire l'ambito di un indirizzo multicast.
La parte finale dell'indirizzo
identifica il gruppo multicast nell'ambito stabilito dal campo scope. Tuttavia,
nel caso di indirizzi stabiliti in modo permanente, l'identificatore
di gruppo resta uguale per tutti i tipi di ambiti.
Per regola, non si
può utilizzare un indirizzo multicast come mittente nei pacchetti IPv6, inoltre questi
indirizzi non possono apparire nelle regole
di instradamento dei router.
|
106.6.1 Alcuni
indirizzi multicast già definiti
Tutti gli indirizzi multicast
del tipo ff0x:0:0:0:0:0:0:0 sono riservati e
non possono essere assegnati ad alcun gruppo multicast.
Oltre a questi sono interessanti gli indirizzi per «tutti
i nodi»:
ff01:0:0:0:0:0:0:1
ff02:0:0:0:0:0:0:1
Questi servono a identificare
i gruppi di tutti i nodi IPv6, nell'ambito 116
(node-local) e 216 (link-local). Inoltre, sono importanti gli indirizzi di «tutti
i router»:
ff01:0:0:0:0:0:0:2
ff02:0:0:0:0:0:0:2
ff05:0:0:0:0:0:0:2
Questi servono a identificare
i gruppi di tutti i router, nell'ambito 116 (node-local), 216 (link-local) e 516 (site-local).
106.7 Riferimenti
-
IEEE, Guidelines
for 64-bit global identifiers (EUI-64) registration
authority, marzo 1997
<http://standards.ieee.org/regauth/oui/tutorials/EUI64.html>
-
R. Hinden, S. Deering,
RFC 2373: IP Version 6 Addressing Architecture,
1998
<http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2373.html>
<http://www.cis.ohio-state.edu/Services/rfc/rfc-text/rfc2373.txt>
-
R. Hinden, M. O'Dell,
S. Deering, RFC 2374: An IPv6 Aggregatable Global
Unicast Address Format, 1998
<http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2374.html>
<http://www.cis.ohio-state.edu/Services/rfc/rfc-text/rfc2374.txt>
-
M. Crawford, RFC
2464: Trasmission of IPv6 Packets over Ethernet Networks,
1998
<http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2464.html>
<http://www.cis.ohio-state.edu/Services/rfc/rfc-text/rfc2464.txt>
-
Silvano Gai, IPv6,
McGraw-Hill, 1997
Articolo tratto da
http://appuntilinux.torino.linux.it
Appunti di informatica libera 2002.03.10 --- Copyright ©
2000-2002 Daniele Giacomini -- daniele @ swlibero.org
|