Approfondimento tecnico
    Il Protocollo di Neighbor Discovery
Telecom Italia logo
     English | ngnet.it home >> Cos´è IPv6 >> Il protocollo IPv6 >> Il Protocollo di Neighbor Discovery  
previous next
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.


previous next