[...]
IV.4 IPv6
Il
protocollo IPv4 è stato standardizzato nel 1981. Come sinora discusso,
le sue caratteristiche hanno facilitato la ben nota diffusione di
Internet, ma, anche a causa di questa enorme diffusione, IPv4 appare
non essere più adeguato a soddisfare le accresciute esigenze dell'utenza.
In particolare, si è detto che la modalità senza connessione e lo
schema di indirizzamento universale di IP ne hanno determinato la
semplicità implementativa ed hanno significativamente contribuito
allo sviluppo di Internet, ma proprio questi punti di forza costituiscono
oggi i principali limiti di IPv4 e richiedono di introdurre una nuova
versione di questo protocollo. Infatti, la modalità best effort non
consente di fornire servizi con una prefissata qualità di servizio,
mentre lo spazio di indirizzi di IPv4 è in via di esaurimento. La
nuova versione di IP è denominata IP versione 6, IPv6 (la nomenclatura
versione 5 era stata temporaneamente assegnata ad un protocollo per
il supporto di flussi con requisiti di tempo reale ed è poi caduta
in disuso). IPv6 è stato anche denominato per un certo periodo come
"IP new generation", IPng. Nel seguito esporremo le caratteristiche
principali di IPv6, rimandando alle relative RFC o, ad esempio, a
[GAI97], [STA96] per maggiori dettagli. La problematica del supporto
di servizi con una prefissata qualità di servizio è stata discussa
in IV.3. La problematica dell'esaurimento dello spazio di indirizzi
è stata invece accennata in III.4.3. In particolare si è detto che
la scelta di uno schema di indirizzamento gerarchico può risultare
in indirizzi non utilizzati e quindi in sprechi. Gli indirizzi corrispondenti
alla parte Host_Id di una data rete logica, non usati dall'organizzazione
responsabile della corrispondente Net_Id, non possono essere usati
da nessun altro; ciò spiega l'attuale penuria di indirizzi IP, a fronte
dei 3 758 096 384 indirizzi teoricamente disponibili per le prime
tre classi e dei 2^32 (=4 294 967 296) possibili indirizzi totali;
penuria questa che altrimenti non apparirebbe comprensibile, visto
che l'attuale numero di host è sicuramente inferiore a questa cifra
(il numero di utenti di Internet dovrebbe essere di circa 300 milioni
entro la fine del 2000). Va però detto che il numero di utenti appare
destinato a sestuplicarsi entro la fine del 2005. Un altro fenomeno,
destinato per altro a incidere profondamente sulla organizzazione
della nostra vita domestica e lavorativa, è rappresentato dalla diffusione
di "utensili" informatici in aggiunta agli ormai tradizionali PC.
Si prevede una esigenza di elaborazione "ovunque" (ricreativi, elettrodomestici,
autoveicoli, controllori di traffico, ecc.) realizzata con "processori"
e con associati mezzi di comunicazione via Internet. La prospettiva
è trasformare "prodotti" in "servizi", consentendo una larga varietà
di applicazioni personalizzate. Si parla di un numero di "utensili"
informatici che nel 2010 potrebbe raggiungere la quota di un miliardo.
A questi si aggiungono i terminali mobili, che, in prospettiva, richiederanno
anch'essi un indirizzo IP. Gli accessi ad Internet sono inoltre destinati
ad assumere una configurazione unificata per qualunque tipo di applicazione
o di servizio (voce, dati, immagini, ecc.), magari supportati da un
DNS evoluto che distingua il tipo di servizio richiesto, indirizzando
una richiesta di comunicazione non solo verso un dato utente, ma anche
verso uno specifico apparecchio di quell'utente (cosa che in parte
avviene già oggi). Ad esempio, un utente potrebbe essere identificato
globalmente da un opportuno nome. Un DNS evoluto potrebbe provvedere
sia a rintracciare l'attuale posizione dell'utente, (tramite Mobile
IP, cfr. IV.5), sia a indirizzare una chiamata verso uno specifico
tipo di terminale appartenente a quell'utente: una chiamata vocale
verso un telefono cellulare, una posta elettronica verso il calcolatore
posizionato nel luogo di lavoro, una chiamata videotelefonica verso
un opportuno terminale, etc. La conseguenza ovvia di queste tendenze
è un incremento vertiginoso delle esigenze di indirizzamento e quindi
dello spazio di indirizzi di IPv6. La comunità Internet era conscia
di questo problema già da diversi anni; addirittura, nel 1991, si
prevedeva l'esaurimento degli indirizzi di classe B nel 1994. L'introduzione
del classless interdomain addressing (o routing) (cfr. fine del III.4.5.3)
ha alleviato il problema, rinviando tale esaurimento ad una data stimata
(forse ottimisticamente) intorno al 2010, ma, come si è detto, questa
tecnica aumenta la complessità del'instradamento IP. La conclusione
di queste considerazioni è che IP necessita di uno nuovo schema di
indirizzamento.
IV.4.1
Caratteristiche generali
Una volta riconosciuta la necessità di cambiare il protocollo di rete
di Internet, operazione sicuramente non semplice, si è deciso di introdurre
anche altri miglioramenti. Nel seguito elenchiamo gli obiettivi che
IPv6 si prefigge, ed insieme le sue caratteristiche generali [GAI97],
[STA96]. Circa la nomenclatura, IPv6 definisce con il termine "nodo"
un qualunque dispositivo che implementa IPv6, sia esso un host o un
router, mentre la sua unità di dati è denominata "pacchetto", invece
che datagramma.
IV.4.1.1
Nuovo piano di indirizzamento
Il piano di indirizzamento dovrà avere le seguenti caratteristiche:
- introduzione di una gerarchia degli indirizzi che faciliti l'assegnazione
degli stessi e le operazioni di instradamento; se lo spazio di indirizzi
è sufficientemente grande, l'assegnazione degli indirizzi risulta
più semplice ed è anche possibile che ogni sistema sia in grado di
"autoassegnarsi" un indirizzo, evitando agli utenti le operazioni
di configurazioni ed ottenendo così capacità di "plug and play" (molto
vantaggiose soprattutto per gli utenti meno esperti); un generoso
dimensionamento dello spazio degli indirizzi consente anche di introdurre
una gerarchia molto articolata, il che facilita notevolmente il compito
di individuare le strade. - introduzione di diverse tipologie di indirizzi,
ognuna delle quali pensata per una specifica funzione; - lo spazio
di indirizzi dovrà avere una dimensione tale da non rischiare futuri
esaurimenti, tenendo conto che una stima di diverse decine di indirizzi
per ogni abitante del pianeta non è irrealistica e che un indirizzamento
gerarchico conduce ad inevitabili sprechi. In accordo a queste considerazioni,
l'indirizzo di IPv6 è una stringa binaria di 128 bits. Gli indirizzi
possibili diventano quindi 2128, con un incremento di un fattore pari
a 296 rispetto a IPv4. Si tratta di un numero difficilmente apprezzabile:
si pensi che con IPv6 sarebbe possibile avere 665*10^21 indirizzi
IP per ogni metro quadro del pianeta (ed anche quest'ultimo numero
risulta non facile da immaginare). Anche se tali indirizzi saranno
assegnati in modo non efficiente, la loro numerosità sembra sufficiente.
IV.4.1.2
Miglioramenti prestazionali
L'intestazione dell'unità di dati di IPv6 si compone di una parte
"base" sempre presente e di una parte opzionale. L'intestazione base
(denominata IPv6 header) ha un numero di campi inferiore a quella
di IPv4. Diverse funzionalità di IPv6 sono realizzate mediante campi
opzionali che vengono aggiunti all'intestazione nella parte, appunto,
opzionale, solo quando sono realmente necessari (questi campi opzionali
sono denominati Extension Headers). Molti di questi campi opzionali
non sono esaminati necessariamente da tutti i nodi attraversati. Questa
scelta semplifica e velocizza il trattamento dei pacchetti di IPv6,
rispetto a IPv4 e ne aumenta la flessibilità, in quanto sarà più semplice
in futuro aggiungere opzioni attualmente non previste. L'intestazione
base di IPv6 ha una lunghezza fissa, contrariamente a IPv4; la frammentazione
dei pacchetti IP (cfr. III.4.2) è eseguita solo alla sorgente e non
più in tutti i router attraversati. Queste caratteristiche semplificano
notevolmente il cosiddetto "critical router loop", ovvero quell'insieme
di funzioni che riguardano il trattamento base dei pacchetti e quindi
tutti quei pacchetti che non hanno richieste particolari, se non quella
di giungere a destinazione (attualmente la gran parte del traffico).
E' questo insieme di funzioni quello che determina in modo significativo
le prestazioni dei router e quindi è opportuno semplificarlo il più
possibile. A titolo di raffronto, l'intestazione tipica di un datagramma
IPv4 è grande 24 bytes, di cui solo 8 sono usati per gli indirizzi
e il resto da campi che non sempre sono necessari. L'intestazione
base di IPv6 è grande 40 bytes di cui 32 sono usati per gli indirizzi.
IV.4.1.3 Supporto della qualità di servizio
IPv6 dovrà consentire di associare ogni pacchetto ad una determinata
classe di servizio. Ogni pacchetto dovrà essere quindi trattato dai
sistemi attraversati in modo da soddisfare i requisiti prestazionali
della classe a cui appartiene, introducendo opportuni politiche di
disciplina di coda e di priorità relative. Un apposito campo dell'intestazione
base di IPv6 (flow label) consente di associare un pacchetto ad un
dato flusso ovvero di identificare tutti i pacchetti che fanno parte
di uno stesso flusso. Tale campo è usato per fornire servizi con una
prefissata qualità di servizio (cfr. IV.3) (unitamente all'indirizzo
IP di sorgente e di destinazione).
IV.4.1.4
Flessibilità nell'indirizzamento
IPv4
definisce due tipologie di indirizzi "unicast" e "multicast". A queste
tipologie IPv6 aggiunge quella di "anycast". Un indirizzo anycast
è un indirizzo di gruppo a cui però risponde il nodo "più vicino"
ad un nodo dato, dove il concetto di vicinanza è espresso in un'opportuna
metrica. Questa tipologia di indirizzi è molto utile per individuare
e quindi interrogare dei servers, siano essi default router, name
servers, time servers, etc e facilita le operazioni di configurazione
dei nodi. IPv6 fornisce anche un meccanismo di indirizzamento unificato
per Internet e per le Intranet, superando alcune soluzioni transitorie
definite per IPv4. Sono previsti indirizzi di tipo globale, locale
e indirizzi che identificano un singolo "link", ovvero un singolo
collegamento (ad es., un circuito diretto numerico, una porta di un
LAN switch, etc.). Gli indirizzi globali sono quelli con significatività
nell'intera Internet, quelli locali sono usati per nodi interni alle
Intranet, mentre quelli di link sono usati dagli operatori per scopi
di gestione e di generale funzionamento dell'Internet. Sono anche
previste classi di indirizzi compatibili con indirizzi IPv4, OSI SNAP
e Novel IPX; queste ultime classi di indirizzo facilitano l'inter-lavoro
di IPv6 con tali paradigmi (si pensa che tale inter-lavoro sarà necessario
solo in un periodo di transizione, dopo il quale tutto il traffico
dovrebbe convergere verso IPv6).
IV.4.1.5
Facilitazione della conversione tra indirizzi IP e indirizzi locali
(ARP)
Si
è detto che il problema di tradurre indirizzi globali IP in indirizzi
locali è risolto in IPv4 o mediante interrogazioni diffusive o mediante
interrogazioni di opportuni servers (cfr. par. III.4.4). Una comunicazione
diffusiva è ricevuta da tutti i sistemi presenti. Ciò causa inefficienza.
IPv6 semplifica questa funzione ricorrendo in alcuni casi ad interrogazioni
di tipo multicast invece che broadcast.
IV.4.1.6
Facilitazione della configurazione dei nodi (plug and play)
La configurazione di un host connesso ad Internet non è oggi banale,
per un utente non esperto. Occorre fornire l'indirizzo IP dell'host
stesso, la maschera di sotto-rete, l'indirizzo del router di default
e del name server. Nel caso di utente connessi ad Internet tramite
un ISP, queste informazioni vengono generalmente fornite dall'ISP
stesso (cfr. fine del III.4.4). Si è anche detto (cfr. III.4.3) che
nel caso di indirizzi IPv4, invece di usare la notazione binaria si
può usare una notazione decimale. La notazione in questione si ottiene
separando i 32 bits in 4 campi di 8 bits ciascuno; questi campi si
esprimono poi in decimale invece che in binario, separandoli con un
punto. Ad esempio l'indirizzo IP di un particolare sistema, espresso
in una stringa di 32 bits e nella relativa notazione decimale è:
10010111 01100100 00001000 00010010 che equivale
a
151.100.8.18
Nel
caso di IPv6 si usa un accorgimento analogo; i 128 bits dell'indirizzo
vengono considerati come 8 numeri interi senza segno, ognuno di 16
bit; ognuno di questi numeri è scritto in esadecimale e separato dal
precedente con il segno ":". Un indirizzo IPv6 espresso in questa
notazione potrebbe essere ad esempio:
FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
La
notazione esadecimale è sicuramente più semplice rispetto ad una stringa
binaria di 128 bits, ma ciononostante risulta molto complesso e potenzialmente
fonte di errori configurare manualmente dei nodi, usando indirizzi
così lunghi. IPv4 aveva già introdotto dei meccanismi per la configurazione
automatica degli host (e.g., Dynamic Host Configuration Protocol,
DHCP). IPv6 rende ancora più sentita l'esigenza di tali meccanismi
e ne definisce nuove versioni che consentono la configurazione automatica
degli host (anche per ciò che attiene ai loro nomi, tramite un'interazione
con il DNS).
IV.4.1.7 Funzioni di sicurezza
Nell'attuale
Internet, funzioni di sicurezza possono essere implementate su una
base da estremo a estremo (e.g., Secure Socket Layer, SSL), ma la
rete stessa non le fornisce. IPv6 introduce, in rete, sia funzioni
di autenticazione (che accertano l'identità degli utenti) che di crittografia
(che proteggono da ascolti non desiderati). In altri termini, è la
rete a fornire comunicazioni sicure, anche in assenza di appositi
meccanismi implementati nei sistemi terminal.
IV.4.1.8 Supporto della mobilità
Questo tema è trattato in IV.5. Qui accenniamo solo che in IPv4 il
supporto della mobilità è realizzato mediante l'aggiunta di protocolli
ad hoc (Mobile IP). In IPv6 si vorrebbe invece che fosse lo stesso
protocollo IP a fornire, se non in modo completo tale funzionalità,
almeno degli strumenti che facilitino la mobilità di utente.
IV.4.1.9
Transizione da IPv4 a IPv6
Questa
è una delle problematiche più delicate. Più volte nel corso di questa
trattazione si è sottolineato che la cosiddetta "backward compatibility"
è un elemento chiave nel giudicare la bontà di una nuova soluzione
e che molte soluzioni, seppure valide, non hanno avuto successo perché
troppo complessa risultava la migrazione da un protocollo ad un altro.
A titolo di aneddoto, si tenga conto che la rete ARPANET originaria
usava, al posto di IP, un protocollo denominato Network Control Protocol.
Nel 1983 il Dipartimento della Difesa degli Stati Uniti decretò la
sostituzione del Network Control Protocol con TCP/IP mediante una
transizione di tipo "flag day", ovvero contemporanea in tutti i nodi
di rete. I nodi coinvolti erano abbastanza pochi e sicuramente non
paragonabili e quelli dell'Internet attuale, eppure la transizione
fu molto complessa e pose molti problemi. Si pensi a cosa significherebbe
sostituire i protocolli nell'Internet attuale in un solo giorno! Infatti,
anche se si vuole cambiare "solo" la versione del protocollo e non
l'intera filosofia di funzionamento del protocollo stesso, l'entità
delle modifiche, tra le quali soprattutto il piano di indirizzamento,
richiede di pianificare con attenzione il passaggio dalle versione
4 alla 6. In particolare si è prevista non una transizione di tipo
"flag day", ma una transizione di tipo graduale; tale transizione
può essere attuata, ad esempio, mediante un "dual stack" (pila protocollare
duale); alcuni nodi di rete implementeranno contemporaneamente le
due versioni in modo da consentire un transitorio dalla durata di
diversi mesi, se non di anni. In altre parole, alcuni sistemi di rete
cominceranno ad implementare IPv6, insieme a IPv4. Opportune funzionalità
consentiranno la coesistenza delle due versioni e, quando un significativo
numero di sistemi disporrà di IPv6, il software di IPv4 comincerà
ad essere eliminato, finché rimarrà solo IPv6. E' quindi evidente
che uno dei fattori critici di questa migrazione riguarderà le gestione
contemporanea delle due versioni. Un datagramma IPv4 o un pacchetto
IPv6 saranno riconosciuti dai sistemi che li trattano mediante la
lettura del campo Vers (o mediante un apposito campo dell'unità di
dati di strato inferiore, dalla quale sono trasportati, cfr. III.4.1).
Si noti infatti che il campo Vers e' l'unico a conservare la stessa
posizione nel pacchetto IPv6 rispetto a IPv4: cio' consente la discriminazione
dei due protocolli. Le unità dati di ognuna delle due versioni saranno
consegnate al relativo "stack" o pila protocollare. Il punto più complesso
riguarda la gestione degli indirizzi e gli instradamenti: un nodo
con il dual stack userà IPv4 e indirizzi di 32 bits per comunicare
con nodi IPv4, mentre userà IPv6 ed indirizzi di 128 bits per comunicare
con nodi IPv6. Un insieme contiguo di nodi che implementano IPv6 è
denominato isola IPv6. Affinché tale approccio possa funzionare è
necessario che le isole IPv6 (che saranno, almeno nelle fasi iniziali,
appunto "isole" in un"mare" di sistemi IPv4), siano tra loro interconnesse.
Tale interconnessione sarà realizzata, ad esempio, mediante dei "tunnel"
nell'Internet attuale e quindi in IPv4. Cioè, un pacchetto IPv6 sarà
incapsulato all'interno di un datagramma IPv4 e da questi trasportato,
rendendo quindi possibile l'instradamento di tale pacchetto nella
attuale Internet (cfr. IV.5.4, per maggiori particolare circa il concetto
di tunnel). Il numero di isole IPv6 crescerà fino a consentire l'interconnessione
diretta di alcune di esse, senza il bisogno di usare tunnel. Gli host
IPv6 avranno poi la possibilità di comunicare con host IPv4 tramite
un'opportuna classe di indirizzi IPv6, basata sull'inserimento di
un indirizzo IPv4 all'interno di un indirizzo IPv6, in cui sono posti
a zero i primi 128-32=96 bit dell'indirizzo IPv6 (cfr. IV.4.4). Il
numero di sistemi con IPv6 crescerà sempre più, finché i sistemi con
IPv4 perderanno la possibilità di essere connesse direttamente ad
Internet [GAI97]. Nonostante tali accorgimenti la complessità di questa
migrazione è tale che ad oggi il numero di sistemi con IPv6 è ancora
molto limitato ed è costituito per lo più da soluzioni sperimentali.
Recentemente l'IETF si è espressa raccomandando con forza la transizione
ad IPv6, sottolineando che: - lo spazio di indirizzi di IPv4 si sta
esaurendo ad un velocità superiore a quella sinora prevista - secondo
molte previsioni è probabile che nel 2010 tutto il traffico mondiale
sia "pacchettizzato" e che usi come protocollo di rete IP, incluso
il traffico delle attuali reti telefoniche (previsione forse ottimistica
per IP) - il bisogno di servizi con requisiti di tempo reale è sempre
più sentito. Dopo aver introdotto le caratteristiche generali di IPv6,
ne descriviamo ora le principali modalità operative.
IV.4.2
Terminologia
La
terminologia utilizzata da IPv6 differisce, in parte, da quella relativa
a IPv4. E' opportuno quindi riportare alcune definizioni, anche perché
contengono delle sfumature indicative del diverso approccio seguito
da IPv6 rispetto a IPv4. § un "Nodo" è ogni dispositivo che implementa
IPv6; § un "Router" è ogni Nodo che inoltra pacchetti IPv6 non esplicitamente
indirizzati ad uno dei suoi indirizzi IPv6; § un "Host" è ogni Nodo
che non è un Router; § si definisce "Strato Superiore" (in inglese
"upper layer") uno strato protocollare immediatamente sopra IPv6,
ad esempio i protocolli di trasporto TCP e UDP, i protocolli di controllo
come ICMP, i protocolli di instradamento come OSPF e tutti i protocolli
(sia Internet che di strato inferiore) che vengono inviati attraverso
"Tunnel" protocollari (ovvero incapsulati in IPv6) ad esempio: IPX,
AppleTalk o lo stesso IPv6; § si definisce "Link" un mezzo di comunicazione
usato da un Nodo per trasferire informazione; il relativo strato protocollare
è quello di link, ovvero lo strato immediatamente sottostante IPv6.
Esempi di link sono: reti Ethernet, collegamenti PPP, X.25, Frame
Relay, o reti ATM., ma anche dei collegamenti basati su tunnel attraverso
IPv6 o IPv4; § si definiscono "Vicini" (Neighbor) i nodi connessi
allo stesso link; § si definisce "Interfaccia" il punto di connessione
di un Nodo ad un link; § si definisce "Indirizzo" un identificatore
di strato IPv6 di una interfaccia o di un insieme di interfacce; §
si definisce IPv6 header, la parte base dell'intestazione, sempre
presente in un pacchetto; § si definisce Extension Header una parte
addizionale dell'intestazione, presente solo opzionalmente e dedicata
a specifiche funzioni.
IV.4.3
Formato dell'unità di dati
Il
pacchetto IPv6 è progettato in modo da essere analizzato e processato
il più velocemente possibile dai Router IPv6. A tal fine ed a differenza
dei datagrammi IPv4 che hanno un header di lunghezza variabile, in
IPv6 l'header è stata suddiviso in due parti, una di lunghezza fissa
che contiene lo "stretto necessario" ed una di lunghezza variabile
(eventualmente anche assente) contenente ulteriori informazioni.
[...]
Il
significato e la dimensione dei campi sono i seguenti:
Versione
(4 bits): Contiene il valore 6, per distinguere i pacchetti che usano
il protocollo IPv6 da quelli IPv4. Tale distinzione è pero tipicamente
attuata mediante un opportuno identificatore dell'unità di dati dello
strato inferiore che trasporta il pacchetto.
Priorità
(4 bits): Consente ad una sorgente di associare ai pacchetti emessi
un codice che rappresenta la classe di servizio e la priorità relativa
del pacchetto all'interno della classe. Al momento sono definiti due
gruppi di classi di servizio: con controllo di congestione, come ad
esempio il traffico TCP, e senza controllo di congestione, ad esempio
traffico UDP. All'interno di ciascuna classe di servizio sono poi
definiti diversi livelli relativi di priorità,; tali livelli di priorità
servono a classificare il traffico; questa informazione potrà poi
essere utilizzata dai Router per ottimizzare il trasporto dei pacchetti
(e per prendere opportune decisioni riguardo alle modalità con cui
servire i pacchetti, soprattutto in caso di congestione).
Flow
label (24 bits): Quando questo campo è diverso da zero identifica,
insieme al campo Source Address, un flusso. Il protocollo IPv6 non
da istruzioni specifiche riguardo a come comportarsi in base all'etichetta
di un pacchetto: è compito di altri protocolli gestire questo campo
e coordinarne l'utilizzo tra i vari Router. Anche la scelta delle
etichette da associare ai flussi (operazione eseguita dalla sorgente)
può essere fatta in accordo ad apposite regole. Tutti i pacchetti
associati allo stesso flusso dovranno avere caratteristiche comuni
in modo tale che i Router non abbiano bisogno di processare ogni volta
l'intera intestazione del pacchetto prima di prendere delle decisioni,
ma possano applicare direttamente le decisioni già prese per gli altri
pacchetti appartenenti allo stesso flusso (cfr. IV.3).
Lunghezza del Payload (16 bits): Rappresenta la lunghezza del payload,
in ottetti
Next
Header (8 bits): Indica o il tipo dell'Extension Header successivo,
se ne esiste uno, oppure il protocollo di strato superiore a cui il
pacchetto deve essere consegnato. È stato anche definito un valore
speciale (59) per rappresentare la mancanza di un ulteriore Extension
Header. E' una generalizzazione del campo Protocol di IPv4.
Hop
limit (8 bits): il campo Time To Live (TTL) di IPv4 è stato ribattezzato
Hop Limit; ricordiamo che in IPv4 la specifica iniziale del campo
Time to Live indicava quanto tempo un datagramma può rimanere all'interno
della inter-rete. Quando un host genera un datagramma, inizializza
questo campo con il valore del tempo concesso al datagramma stesso
per attraversare l'inter?rete. Questo valore viene decrementato da
ogni router incontrato nel cammino percorso dal datagramma. Quando
il valore di questo campo sarà nullo, il relativo datagramma verrà
scartato. Questa tecnica impedisce ad un datagramma di viaggiare indefinitamente
nella rete, se, a causa di errori, il suo instradamento risultasse
in un cammino chiuso o, in ogni caso, di evitare tempi di trasferimento
eccessivamente lunghi. Già in IPv4, però, il valore di questo campo
è attualmente definito non in secondi ma in "salti" (hops). Per salto
si intende l'attraversamento di un router e quindi un datagramma può
attraversare al massimo 256 routers prima di essere scartato. In IPv6
si adotta lo stesso approccio.
Source
address (128 bits)
Destinat.
Address (128 bits): Questi due campi, contengono gli indirizzi IPv6
della sorgente e del destinatario. Come già sottolineato, questi indirizzi
non identificano un sistema finale (un host o un Router), ma sono
assegnati a delle interfacce di rete. Ciascuna interfaccia può avere
più di un indirizzo "unicast", ma ogni indirizzo "unicast" è associato
ad un solo Nodo (ovviamente la corrispondenza, anche se non biunivoca,
è necessaria al fine di far arrivare i pacchetti al destinatario)
Veniamo
ora agli Extension Header. Questi campi costituiscono una delle principali
innovazioni nel formato dell'unità di dati di IPv6 e consentono di
gestire le funzionalità di rete più avanzate (dall'instradamento alla
privacy); inoltre aggiungono flessibilità al protocollo, in quanto
risulta semplice definire nuove funzionalità aggiungendo un Extension
Header che lascia immutato il resto del protocollo. Un altro aspetto
importante è che ciascun Extension Header può essere rintracciato
rapidamente (e quindi processato in modo indipendente dagli altri),
grazie al campo Next Header. Si noti che sia l'intestazione base di
IPv6 (IPv6 Header), che ogni Extension Header dispongono di un campo
Next Header, che identifica appunto l'Extension Header successivo.
L'unico Header sempre presente è quello base (IPv6 Header); se a questo
non ne seguono altri, il campo Next Header contiene tipicamente l'identificativo
del protocollo di strato superiore a cui il pacchetto deve essere
consegnato (informazione analoga al campo "Protocol" di IPv4). Viceversa,
se all'Header base seguono degli Extension Header, il campo Next Header
contiene un identificativo del prossimo Extension Header. Il processo
si ripete per ogni Extension Header presente fino all'ultimo, che
riporta l'identificativo del protocollo di strato superiore a cui
il pacchetto deve essere consegnato. Si noti che tutti gli Extension
Header sono inseriti dalla sorgente e possono essere solo modificati
ma non eliminati dai router intermedi.
Gli
Extension Header sinora definiti sono i seguenti:
Hop-by-Hop
options Header: Definisce delle opzioni che, se presenti, vanno processate
da ogni Router attraversato dal pacchetto. Questa estensione è progettata
in modo tale da funzionare come "punto di inserimento" di istruzioni
da processare in ogni Router, quindi deve fornire anche informazioni
su come il Router si deve comportare se non è in grado di gestire
l'istruzione trasportata e deve inoltre poter specificare se durante
il percorso le informazioni contenute nell'estensione possono cambiare.
In questo caso è necessario escludere la verifica di questo campo
dai sistemi di protezione e sicurezza, gestiti da estremo ad estremo.
Routing
Header: svolge una funzione simile a quella della Source Route Option
di IPv4. Contiene una lista di uno o più nodi intermedi attraverso
i quali si vuole che transiti il pacchetto; è caratterizzato anche
da un campo che indica la lunghezza dell'Extension Header stesso,
da un campo che ne specifica il tipo ed infine da un campo che indica
il numero di nodi presenti nella lista, ma che devono ancora essere
visitati. L'informazione relativa al tipo di Routing Header è importante;
finora è stato standardizzato il tipo 0. Usando questo tipo di Routing
Header, l'indirizzo di destinazione non viene posto nel campo Destination
Address dei pacchetti IPv6; al contrario in quest'ultimo campo viene
posto l'indirizzo del prossimo Router elencato nel Routing Header,
mentre l'indirizzo di destinazione viene posto come ultimo indirizzo
della lista nel Routing Header. La lista non viene consultata finché
il pacchetto non raggiunge la sua prima destinazione, a quel punto
si consulta la lista per verificare se si è giunti a destinazione,
in caso negativo si modifica di nuovo il campo Destination Address
e si aggiorna il numero di nodi che devono ancora essere visitati.
Questo modo di procedere consente un aumento di efficienza rispetto
all'esaminare il Routing Header sempre, ad ogni "salto".
Fragment
Header: Contiene informazioni per la frammentazione e la ri-aggregazione
delle unità informative. È importante sottolineare che in IPv6 tutte
le funzioni di segmentazione e di riaggregazione sono effettuate da
estremo a estremo (source e dest) e non coinvolgono i Router intermedi,
che in questo modo non si devono preoccupare di processare il contenuto
dei pacchetti, risparmiando capacità elaborative. Questo metodo di
gestione della segmentazione comporta ovviamente che i nodi agli estremi
conoscano, o almeno abbiano a disposizione dei mezzi per scoprire,
la minima MTU supportata dal collegamento.
Encapsulating Security Payload Header: Questo è uno degli Extension
Header che consentono di gestire le questioni legate alla sicurezza.
In IPv6 tali questioni sono state tenute in considerazione come specifiche
dello strato di rete (IP). In questo modo è possibile fornire un elevato
grado di sicurezza anche alle applicazioni che ignorano tali problematiche.
Le questioni legate alla sicurezza possono essere affrontate da due
punti di vista: quello della autenticazione ("Authentication") e quello
della sicurezza. Nel primo caso, si vuole accertare l'identità di
chi origina i pacchetti e la non manomissione da parte di terzi degli
stessi; nel secondo si vuole proteggere l'informazione trasmessa da
ascolti non desiderati (privacy). L'Header ESP si occupa di quest'ultima
funzionalità.
Authentication
Header: svolge le funzioni di autenticazione accennate nel punto precedente
Destination
Options Header: Contiene informazioni che possono essere esaminate
solo dai nodi di destinazione (che possono essere sia il solo destinatario,
che i Router esplicitamente inclusi nel Routing Header). Il formato
utilizzato per questo Header è lo stesso che si usa per l'hop-by-hop
options Header. Le "destination options" sono di fondamentale importanza
per gestire in modo agile i protocolli end-to-end; infatti, inserendo
i messaggi di controllo di questi protocolli direttamente in una destination
option è possibile evitare l'invio di un pacchetto di controllo ad
hoc e separato, aumentando così l'efficienza del collegamento.
Gli Extension Headers devono essere inseriti nel seguente ordine,
all'interno del pacchetto:
IPv6
Header: È la parte obbligatoria di ciascun pacchetto IPv6, come descritto
qui sopra. Viene ovviamente posta al primo posto in modo da velocizzare
le operazioni di instradamento in tutti quei casi in cui i Router
non devono compiere nessuna modifica, né alcun tipo di processamento
sulla restante parte del pacchetto IPv6.
Hop-by-Hop
options Header: Questa parte opzionale della PCI, trasporta delle
informazioni che, se presenti, devono essere esaminate da ogni Router
che processa il pacchetto. È quindi importante che tali informazioni
siano posizionate all'inizio del pacchetto IP.
Destination
options Header 1: Contiene le sole opzioni che devono essere processate
dal primo Router e da tutti i Routers elencati nel Routing Header.
Viene posto prima dell'elenco dei nodi da attraversare (contenuto
nel Routing Header) in modo da avere tempo per iniziare a processare
le opzioni mentre si riceve il resto del pacchetto.
Routing
Header: Viene inserito appositamente dopo le destination options in
modo da segnalare quali nodi devono esaminare quest'ultime
Fragment
Header: E' gestito da estremo a estremo (vedi sopra); viene quindi
posto nella parte finale dell'intestazione del pacchetto, dovendo
essere analizzato solo alla destinazione finale
Authentication Header: Consente alla rete di autenticare l'intero
pacchetto IP; essendo anche questo elemento gestito da estremo ad
estremo, non può essere usato per autenticare quei campi che possono
essere modificati durante il percorso.
Encapsulating
security payload Header: E' utilizzato al fine di proteggere il pacchetto
IP dal punto di vista della sicurezza (intesa come privacy), può agire
sia su tutto il pacchetto che sul solo payload e fornire sia riservatezza
che una verifica dell'integrità informativa.
Destination
options Header 2: Contiene le opzioni che non devono essere processate
dai Routers intermedi ma solamente dalla destinazione finale.
La
seguente figura (Fig. 45) mostra degli esempi di pacchetti IPv6. Nel
primo esempio è presente solo l'IPv6 header, che punta al protocollo
TCP, ovvero comunica che il contenuto del payload del pacchetto deve
essere consegnato a tale protocollo di strato superiore. Negli altri
due esempi sono presenti degli Extension Header e l'intestazione globale
del pacchetto è sempre conclusa con l'indicazione del protocollo TCP,
come destinatario del payload.
[...]
IV.4.4
Schema di indirizzamento
Gli
indirizzi IPv6 sono lunghi 128 bit; tale dimensionalità lascia una
grande libertà nella gestione della numerazione. Nell'allocazione
degli indirizzi IPv6 sono state tenute in considerazione anche le
necessità relative all'integrazione con diversi tipi di rete già esistenti
ed il supporto per diversi tipi di indirizzi. Sono definite tre principali
tipologie di indirizzi: unicast, anycast e multicast; il loro significato
è stato brevemente accennato in precedenza. E' stato anche detto che
la maggiore dimensionalità dello spazio di indirizzi consente di introdurre
una gerarchia più articolata di quella relativa a IPv4 e quindi di
facilitare le operazioni di instradamento. Un generico indirizzo IPv6
è quindi diviso in campi. Il primo campo è un prefisso di dimensione
variabile, il cui significato è mostrato nella Tab. 13. Tale tabella
mostra anche i possibili valori dei prefissi e la corrispondente frazione
dello spazio totale dedicato ad indirizzi che iniziano con un certo
prefisso.
Prefisso - Frazione dello spazio di indirizzamento - Allocazione
0000
0000 1/256 Riservato
0000 0001
1/256 Non assegnato
0000 001 1/128 Nsap
0000 010
1/128 Ipx
0000 011
1/128 Non assegnato
0000 1 1/32
Non assegnato
0001 1/16 Non assegnato
001 1/8
Non assegnato
010 1/8 Indirizzi Unicast basati sul provider
011 1/8
Non assegnato
100 1/8 Riservato per indirizzi Unicast su base geografica
101 1/8 Non assegnato
110 1/8 Non assegnato
1110 1/16 Non assegnato
1111 0 1/32 Non assegnato
1111 10 1/64 Non assegnato
1111 110 1/128 Non assegnato
1111 1110 0 1/512 Non assegnato
1111 1110 10 1/1024 Indirizzi per uso Locale al link
1111 1110 11 1/1024 Indirizzi per uso Locale al sito
1111 1111 1/256 Indirizzi Multicast
Gli
indirizzi il cui prefisso è costituito dal valore 1111 1111 sono indirizzi
di tipo multicast. Un indirizzo multicast identifica un insieme di
interfacce. Un pacchetto indirizzato ad un indirizzo multicast viene
consegnato a tutti i nodi facenti parte di tale insieme, ovvero a
tutti i membri di un "gruppo multicast". Oltre alla tipica funzione
di comunicazione per servizi di utente punto-multipunto (già definita
in IPv4), in IPv6 gli indirizzi Multicast sostituiscono quelli "broadcast"
in alcuni funzionalità gestionali. Si è detto che in IPv4 si usano
comunicazioni diffusive (ovvero broadcast) per alcune funzionalità
di rete (ad es. risoluzione di indirizzi, ARP) è che tale modalità
genera inefficienze in quanto una comunicazione diffusiva è ricevuta
da tutti i sistemi presenti, anche da quelli che non sono potenzialmente
interessati. IPv6 semplifica questa funzione ricorrendo ad interrogazioni
di tipo multicast invece che broadcast. In tal modo le interrogazioni
sono ricevute solo dall'insieme di nodi che hanno effettivamente necessità
di riceverle e che si sono registrati a tal fine. Inoltre, se esiste
la necessità di comunicare informazioni a tutti i nodi presenti su
un dato link o in una data sotto-rete, IPv6 può definire un indirizzo
multicast che consente di raggiungere tutti i nodi presenti su quel
link o su quella sottorete. Gli indirizzi che iniziano con un prefisso
diverso da 1111 1111 sono invece di tipo unicast o anycast. Un indirizzo
di tipo Unicast identifica una interfaccia di un Nodo. Sono stati
definiti diversi tipi di indirizzi Unicast: § indirizzi "basati" sul
provider: sono assegnati in base al provider a cui un nodo fa riferimento;
sono indirizzi con significatività globale. Dopo il prefisso sono
presenti cinque diversi campi:
-
Registry ID: identifica l'autorità di registrazione che attribuisce
il campo Provider ID dell'indirizzo ad uno specifico Provider - Provider
ID: identifica uno specifico provider che attribuisce poi il campo
Subscriber ID dell'indirizzo
-
Subscriber ID: identifica un utente del provider descritto dal campo
Provider ID
-
Subnet ID: identifica un insieme contiguo di nodi dell'utente descritto
dal campo Subscriber ID
-
Interface ID: identifica una singola interfaccia di nodo appartenente
all'insieme contiguo di nodi descritto dal campo Subnet ID.
§ indirizzi Unicast su base geografica: sono assegnati all'utente
in base alla sua posizione geografica, al momento non sono stati definiti
in dettaglio.
§
indirizzi locali al link: hanno significatività locale e non possono
essere integrati nello schema di indirizzamento globale; vengono quindi
usati per comunicare all'interno di un link o di una sottorete, tipicamente
per fini di auto-configurazione e di ricerca di nodi vicini (neighbor
discovery)
§ indirizzi locali al sito: hanno significatività locale e non possono
essere integrati nello schema di indirizzamento globale; vengono quindi
usati solo per comunicare all'interno di un determinato dominio; rispetto
ai precedenti hanno però il vantaggio che, previa solo la sostituzione
di opportuni prefissi (introducendo ad esempio la gerarchia dei prefissi
"basati" sul provider) possono acquisire significatività globale.
Questi indirizzi sono quindi indicati per dei nodi di un'organizzazione
che, in una prima fase, non sono connessi alla Internet globale ma
che in prospettiva intendono esserlo. Altri indirizzi Unicast hanno
il prefisso 0000 0000 (designato come "riservato" e da non confondere
con la dizione "non assegnato"). Tali indirizzi includono le seguenti
tipologie:
§
indirizzi IPv6 compatibili IPv4: sono indirizzi pensati appositamente
per gestire la lunga transizione tra IPv4 ed IPv6 e sono costituiti
da 96 zeri seguiti dai 32 bit dell'indirizzo IPv4. In questo modo
è molto semplice utilizzare dei tunnel in IPv4: l'indirizzo IPv4 di
uscita del tunnel può essere dedotto dall'indirizzo IPV6.
§
indirizzo loopback: questo indirizzo (0:0:0:0:0:0:0:1) viene utilizzato
dal Nodo IPv6 per inviare pacchetti a se stesso (per scopi gestionali,
i.e., di prova); pacchetti con questo indirizzo non devono mai essere
inviati al di fuori dal singolo Nodo.
§
Indirizzo non specificato (0:0:0:0:0:0:0:0): indica l'assenza di un
indirizzo, non deve mai essere assegnato ad un interfaccia e può essere
usato come indirizzo mittente di un nodo in fase di auto-configurazione.
Sono anche previste classi di indirizzi pensati per facilitare l'inter-lavoro
con indirizzi ISO/OSI NSAP (Network Service Access Point) (con prefisso
0000 001) e Novel IPX (con prefisso 0000 010); tali indirizzi sono
derivati da quelli NSAP o IPX in modo analogo a quanto appena descritto
con riferimento agli indirizzi IPv4. Un indirizzo anycast è un indirizzo
di gruppo a cui però risponde solo il nodo "più vicino" ad un nodo
dato, dove il concetto di vicinanza è espresso in un'opportuna metrica.
Un indirizzo di tipo Anycast identifica quindi un insieme di interfacce
tra loro alternative (i pacchetti sono però inviati solo ad una di
queste interfacce). Gli indirizzi Anycast sono scelti all'interno
dello stesso spazio di indirizzi scelto per gli indirizzi unicast,
è compito dei Router non solo sapere che ad un determinato indirizzo
anycast corrisponde un certo insieme di indirizzi unicast, ma anche
di scegliere, secondo la metrica prescelta, il più "vicino". Gli indirizzi
con la dizione "non assegnato" in Tab. 13, non sono ancora stati definiti.
In conclusione, sottolineiamo solo che la gerarchia appena discussa,
ed in particolare quella relativa agli indirizzi basati sul provider
e quelli assegnati su base geografica, consentono, grazie alla presenza
di diversi livelli gerarchici, di facilitare significativamente le
operazioni di instradamento.
Clicca
qui per ottenere la copia integrale di queste dispense in formato
.pdf
|