Il Protocollo di Neighbor Discovery
Il protocollo di Neighbor Discovery [RFC2461]
permette la gestione delle
interazioni tra nodi diversi attraverso lo scambio di messaggi. Detti messaggi
consentono di realizzare l'autoconfigurazione degli host e la
comunicazione tra essi. Nel primo caso le procedure interessate sono:
1. Parameter Discovery, per l'apprendimento di particolari parametri e/o
opzioni riguardanti i link quali per esempio i prefissi;
2. Address Configuration, per la configurazione automatica degli
indirizzi di un'interfaccia;
3. Duplicate Address Detection: algoritmo per verificare
l'unicità di un indirizzo che si vuole assegnare.
Ai fini della comunicazione servono alle stazioni diverse informazioni oltre
all'indirizzo fisico della destinazione; queste possono essere ottenute con le
seguenti procedure:
1. Router Discovery, per la localizzazione da parte di un host
dei router che risiedono sul suo stesso link (on-link);
2. Prefix Discovery: permette a un host di scoprire l'insieme dei
prefissi on-link, cioè quelli direttamente raggiungibili a
livello data link ;
3. Address Resolution: risoluzione di un indirizzo IP in uno di
livello data link;
4. Next-hop Determination: algoritmo per la determinazione
dell'indirizzo IP del vicino che dovrà inoltrare i pacchetti alla
destinazione finale. Il next-hop può essere un router o la
destinazione stessa:
5. Neighbor Unreachability Detection: verifica la raggiungibilitá
di un vicino;
6. Redirect: come un router informa un host dell'esistenza
di un first-hop migliore per una particolare destinazione.
Per il funzionamento di questo protocollo sono stati definiti cinque tipi di
messaggi:
- Router Solicitation;
- Router Advertisement;
- Neighbor Solicitation;
- Neighbor Advertisement;
- Redirect.
Autoconfigurazione degli host
Un'interfaccia
è configurabile manualmente da chi gestisce l'amministrazione della
rete, oppure in modo automatico. Questa seconda possibilità è
diventata molto importante in IPv6 a causa della lunghezza di un indirizzo e
della necessità di rinumerare i siti più spesso.
In IPv6, ogni indirizzo ha associato un tempo di validità, in modo da
poter variare automaticamente la topologia di rete. Per ridurre l'impatto della
rinumerazione sulle applicazioni si è pensato di usare due timer per
ogni indirizzo. Inizialmente un indirizzo è preferred e
può essere usato senza restrizioni, sia come indirizzo sorgente che
destinazione. Scaduto il preferred lifetime, l'indirizzo diventa
deprecated: il suo uso è ancora permesso anche se non è
consigliabile adottarlo nelle nuove comunicazioni. Quando scade anche il
secondo timer associato (detto valid lifetime), l'indirizzo
diventa invalid e non deve più essere adoperato. In questo modo
diventa molto probabile che le applicazioni che usano un indirizzo divenuto
deprecated terminino prima che questo diventi invalid.
I meccanismi di autoconfigurazione possono essere stateless o
stateful, ma in entrambi i casi i passi fondamentali da effettuare per
configurare una stazione sono gli stessi e sono schematizzati in figura 29.

Figura 29- Autoconfigurazione degli host.
Innanzi tutto occorre creare il link-local address e verificarne
l'unicità (mediante DAD) La generazione del link-local address
avviene concatenando il prefisso FE80 che identifica tale tipo di
indirizzo con un identificatore unico sul link (per esempio l'indirizzo MAC) a
cui è collegata l'interfaccia da configurare. Se tale
operazione fornisce come risultato un indirizzo già assegnato a un'altra
interfaccia dello stesso link occorre un intervento da parte
dell'amministrazione che può scegliere se effettuare la configurazione
manuale o far ripartire quella automatica. Una volta generato l'indirizzo
link local inizia una procedura di verifica della presenza dei
router sul link. Se presenti, essi rispondono con messaggi di
Router Advertisement (si veda figura 35) in cui i flag M
(Managed Address Configuration) e O (Other
Configuration) specificano quale tipo di autoconfigurazione usare.
Le combinazioni possibili sono:
| M |
O |
Tipo configurazione |
| 0 |
x |
stateless |
| 1 |
1 |
stateless,
ma occorre contattare il DHCP server per altri parametri |
| 1 |
0 |
stateful |
I meccanismi di autoconfigurazione stateless e stateful riguardano
solo gli host e possono essere usati contemporaneamente. Una volta che
la stazione ha ottenuto un indirizzo in uno dei modi descritti deve verificarne
l'unicità con l'algoritmo DAD prima di assegnarlo a un'interfaccia.
Autoconfigurazione stateless
L'autoconfigurazione stateless [RFC2462]
avviene automaticamente non appena l'interfaccia è
abilitata e segue la generazione dell'indirizzo link-local.
La stazione inizia il processo di autoconfigurazione
iscrivendosi al gruppo multicast FF02::1 che identifica tutti i
nodi di uno stesso link, in modo da essere in grado di ricevere i messaggi
provenienti dai router che adoperano tale indirizzo di destinazione.
Invia poi un messaggio di Router Solicitation (si veda la figura 34)
utilizzando come destinazione l'indirizzo multicast FF02::2 che
identifica tutti i router sul link. All'interno di questo messaggio la
stazione può specificare solo l'opzione di source link layer,
riportata in figura 36, contenente l'indirizzo fisico dell'host
mittente. I router rispondono con un Router Advertisement in
cui l'indirizzo di destinazione è ricavato da quello fisico della
stazione e quello sorgente è il loro link local address. Inoltre
possono specificare una o più prefix option. Tale opzione (si
veda la figura 30) permette di definire un prefisso (codificato come un
indirizzo su 128 bit), la cui lunghezza è scritta in prefix length
e il tempo di validità, secondo la terminologia vista in
precedenza, in Valid e preferred lifetime. Se il flag A
(Autonomous configuration) è posto a uno l'host
può usare la configurazione stateless per costruire l'indirizzo
concatenando il prefisso fornitogli dall'opzione suddetta con l'interface
ID. Questo solo se il prefisso non è troppo lungo, altrimenti va
ignorato. Il flag L poi, gli indica se quel prefisso è da considerarsi
direttamente raggiungibile cioè on-link.

Figura 30 - Formato di prefix option.
In figura 31 è mostrato un esempio di quanto appena descritto.

Figura 31 Autoconfigurazione stateless.
Duplicate Address Detection (DAD)
Dopo
che una stazione ha ottenuto un indirizzo unicast in uno dei modi
descritti, ne deve verificare l'unicità prima di poterlo assegnare
all'interfaccia. Per far questo invia un messaggio di Neighbor Solicitation
(figura 32) in cui ha posto come indirizzo sorgente il tipo
unspecified e come destinazione il solicited-node multicast
address. Questo è un particolare tipo di indirizzo multicast
ottenuto concatenando il prefisso di 96 bit FE02:0:0:0:0::1 con gli
ultimi 32 bit dell'indirizzo IPv6 dell'interfaccia. Se vi è un nodo cui
è già stato assegnato lo stesso indirizzo unicast, questi
risponde con un Neighbor Advertisement (figura 33). Quando il
nodo che ha iniziato la procedura di DAD riceve tale messaggio, rinuncia
all'indirizzo appena ottenuto.
Address Resolution
Tale meccanismo consiste nell'inviare un messaggio di Neighbor
Solicitation (figura 32) con destinazione data dall'indirizzo
solicited-node multicast visto sopra. Nel campo target
address del pacchetto vi sono gli indirizzi di chi si vuole
sollecitare. Risponderà l'host con un Neighbor
Advertisement in cui nel campo target address metterà il
suo indirizzo IPv6 e nell'opzione target link layer address il suo
indirizzo fisico ( tale opzione ha lo stesso formato della source link
di figura 36).
Quando è ricevuto un Neighbor Advertisement (figura 33) in
risposta l'indirizzo fisico è memorizzato in una particolare tabella
chiamata tabella dei vicini.

Figura 32 - Messaggio di Neighbor Solicitation.

Figura 33 - Messaggio di Neighbor Advertisement.
Algoritmo di comunicazione di IPv6
Ogni nodo gestisce quattro tabelle che consulta quando deve inviare un pacchetto.
Esse sono :
- tabella delle destinazioni, contenente l'associazione tra un indirizzo
IPv6 di destinazione e il corrispondente indirizzo del vicino rappresentante la
prima tappa del percorso (next hop);
- tabella dei vicini, in cui vi è la corrispondenza tra indirizzo
IPv6 e indirizzo fisico del vicino;
- tabella dei prefissi, contiene la lista dei prefissi on-link
acquisiti dai messaggi di Router Advertisement;
- tabella dei router, cioè l'elenco degli indirizzi IPv6 dei
router che hanno recentemente inviato messaggi di Router
Advertisement.
Tutti i dati contenuti in queste tabelle sono soggetti a temporizzazione, allo
scadere cioè dei timer associati vengono rimossi. L'aggiornamento
è garantito dai messaggi di Neighbor Discovery.
Quando un nodo deve trasmettere un pacchetto deve per prima cosa trovare il
next hop per quella destinazione. Il next hop è un nodo
direttamente connesso al link sul quale si trova la sorgente. In molti casi
succede che la sorgente ha già inviato in precedenza un pacchetto a
quella destinazione, quindi l'indirizzo del next hop è già
memorizzato nella tabella delle destinazioni, per cui la sorgente consulta per
prima quella tabella. Se in essa non è presente l'indirizzo IPv6 del
next hop serve la procedura di next-hop determination.
Tale procedura opera nel seguente modo. Il nodo che deve trasmettere il
pacchetto effettua un'operazione di longest prefix match* utilizzando i prefissi memorizzati nella tabella dei
prefissi per determinare se il nodo è on-link. Se la destinazione
è on-link essa è anche il next hop, altrimenti il
mittente seleziona un router dalla tabella dei router e lo usa
come next hop per quella destinazione. Memorizza nella tabella delle
destinazioni l'indirizzo IPv6 di tale router in modo da riutilizzarlo
per i pacchetti successivi.
Quando la stazione deve scegliere un router che rappresenti il next
hop non adotta nessun criterio particolare per cui può succedere che
il router scelto non rappresenti la strada migliore verso la
destinazione. In questi casi il router invia un particolare messaggio
chiamato redirect che informa la sorgente della presenza di un next
hop migliore.
A questo punto è noto l'indirizzo IPv6 del vicino, ma per poter spedire
il pacchetto occorre ricavare il suo indirizzo fisico. Questo è
memorizzato nella tabella dei vicini, ma se non è presente lo si
può ricavare mediante la procedura di Address Resolution.
Una volta noto l'indirizzo fisico del next hop, la sorgente può
inviare il pacchetto.
Le informazioni riguardanti la presenza di router sul link o su quali
sono i prefissi che un host può raggiungere direttamente senza
passare per un router (cioè prefissi on-link), si ricavano
dallo scambio dei messaggi di Router Solicitation e
Advertisement il cui formato è mostrato nelle figure 34
e 35.

Figura 34 - Messaggio di Router Solicitation.

Figura 35 - Messaggio di Router Advertisement.
I router inviano periodicamente a tutti i nodi sulla rete messaggi
multicast di Router Advertisement, nei quali
specificano la loro disponibilità a instradare pacchetti e alcune
opzioni quali:
- source link-layer address, che contiene l'indirizzo fisico
dell'interfaccia mittente (figura 36);
- MTU, inviata sui link che hanno MTU variabile;
- prefix information, il cui formato è mostrato in figura 30.

Figura 36 - Formato di source link layer address
option.
Una stazione, ricevendo messaggi di Router Advertisement da tutti i
router, è in grado di tenere aggiornate le tabelle dei prefissi e
dei router. In particolare scopre quali prefissi sono on-link dal
valore del bit L posto in prefix option. Qualora (per un guasto o
perché in fase di inizializzazione), non abbia tali informazioni a
disposizione, può inviare un messaggio di Router Solicitation a
tutti i router in multicast per forzarli a inviarle un Router
Advertisement prima del timeout.
Il messaggio di redirect, il cui formato è mostrato in figura
37, è inviato da un router a un host per indicargli la
presenza di un next hop migliore per la destinazione il cui indirizzo
è riportato nel campo Destination Address. Se il contenuto di
tale campo coincide con quello posto in Target Address, allora il
next hop è la destinazione stessa. Come opzione, può
essere aggiunta la target link layer address, che contiene l'indirizzo
fisico del nuovo next hop, in modo che l'host non debba
effettuare una risoluzione di indirizzo prima di inviargli il pacchetto.

Figura 37 - Messaggio di redirect.

Figura 38 Algoritmo di trasmissione di un pacchetto.
La procedura di Neighbor Unreachability Detection si ottiene
dall'analisi delle risposte che un nodo può ricevere dalle applicazioni
di livello superiore in seguito all'invio di un pacchetto (es: i messaggi di
acknowledgement di TCP). Se queste non esistono (es. UDP), le entries
nella tabella dei vicini sono soggette a timeout e al loro scadere viene
inviato un messaggio di Neighbor Solicitation. Se la destinazione
risponde la riga corrispondente viene conservata, altrimenti è eliminata
dalla tabella. In genere viene invocata questa procedura per verificare la
validità di quelle informazioni etichettate come stale (si veda
la figura 38), ossia presenti in tabella da molto tempo anche se non
ancora scadute. Una informazione importante che si ottiene da questo meccanismo
è quando un router diventa un host. In questo caso il flag
R del messaggio di Neighbor Advertisement è posto a zero (per i
router vale 1).
Un confronto con IPv4
Da quanto visto, si può dire che Neighbor Discovery corrisponde a
una combinazione dei protocolli ARP, ICMPv4 Router Discovery e ICMP
Redirect di IPv4. Neighbor Discovery migliora molti aspetti di
questi protocolli:
- Router Discovery fa parte dell'insieme dei protocolli di
base.
- I Router Advertisement trasportano gli indirizzi fisici; non
c'è bisogno di alcun scambio aggiuntivo di pacchetti per risolvere
l'indirizzo fisico del router.
- I Router Advertisement trasportano i prefissi
on-link; non c'è bisogno di un meccanismo separato per
configurare la netmask.
- I Router Advertisement permettono l'autoconfigurazione
degli indirizzi.
- I router possono imporre agli host di usare una determinata MTU
sul link, assicurando così che tutti i nodi usino la stessa MTU sui link
per i quali questa non è ben definita.
- I messaggi per la risoluzione degli indirizzi non sono trasmessi in
broadcast ma in multicast riducendo notevolmente il
coinvolgimento di nodi che non siano quello di cui si vuole risolvere
l'indirizzo.
- I reinstradamenti contengono l'indirizzo fisico del nuovo first-hop;
non è necessaria una risoluzione d'indirizzo separata dopo la ricezione
di una ridirezione.
- Molteplici prefissi possono essere associati allo stesso link. Gli
host, di default, acquisiscono tutti i prefissi on-link
dai Router Advertisement. In questi casi gli host assumono che quelle
destinazioni siano off-link e mandano il traffico ai router.
Sarà allora il router a inviare dei messaggi di ridirezione.
- A differenza di IPv4, il ricevitore di un Redirect assume che il
nuovo next-hop sia on-link. In IPv4, un host ignora la
ridirezione verso un next-hop che non sia on-link in base alla
netmask. Ci si aspetta che sia utile in reti NBMA (Non Broadcast
Multiple Access) in cui non è desiderabile o non è possibile per
i nodi conoscere tutti i prefissi delle destinazioni on-link.
- L'uso di link-local address per identificare univocamente i
router permette agli host di mantenere la corrispondenza tra
indirizzo IP e indirizzo fisico dei router anche nel caso di una
rinumerazione del sito per usare nuovi prefissi globali.
- ICMPv6 effettua la risoluzione di indirizzo; ciò fa sì che per
svolgere tale servizio non sia più necessario avere un protocollo
diverso a seconda della tecnologia di rete su cui IP si poggia, come avviene
per IPv4. Un'altra differenza fondamentale del protocollo di risoluzione di
IPv6 rispetto all'ARP sta nel fatto che la richiesta di risoluzione è
trasmessa in multicast, anziché in broadcast. Ciò
rappresenta un'ottimizzazione: la domanda di risoluzione coinvolge solo un
gruppo di stazioni e non tutte, di conseguenza soltanto il livello IP di
ciascun host di quel gruppo dovrà vagliare se la richiesta
è relativa alla stazione stessa.
- In IPv4 i confini logici tra le reti sono vincolanti. Questi sono determinati
dal prefisso di rete IP e dalla netmask. In IPv6 invece il concetto di
sottorete logica perde di importanza. Diventa centrale il concetto di link. In
IPv4 sottoreti IP diverse possono comunicare solo attraverso i router,
anche se fanno parte della stessa rete fisica. In IPv6, la suddivisione logica
in sottoreti IP non conta: sottoreti IP che fanno parte dello stesso link
possono comunicare direttamente. In figura 39 è mostrato un esempio in
cui il link è costituito da una rete Ethernet. Questo cambiamento del
modello di comunicazione dovrebbe favorire il connubio tra IPv6 e tecnologie di
rete quali ATM: una rete può continuare ad essere amministrativamente
divisa in più sottoreti IP, senza per questo impedire la comunicazione
diretta tra i terminali ad essa connessi.

Figura 39 - Il modello di comunicazione secondo IPv4 e IPv6.
[*] Per longest prefix match si intende
quel processo con cui si determina quale prefisso include un dato indirizzo
IPv6. In caso che più prefissi includano l'indirizzo, si sceglie il
più lungo.
|