Neighbor Discovery Protocol (NDP): che cos’è?
“Questo protocollo Internet è una componente irrinunciabile sia per Internet che per le reti in locale. Per far sì che riesca il trasporto di informazioni digitali e che i pacchetti dati inviati raggiungano l’host o gli host desiderati, l’NDP necessita di altri protocolli di aiuto e di routing: per questo si parla anche di “famiglia di protocolli Internet” o di “Internet Protocol Stack”. Mentre il Dynamic Host Configuration Protocol (DHCP) fa sì che ai client vengano assegnati gli indirizzi di rete adatti durante la connessione agli Internet Protocol, il Neighbor Discorvery Protocol (NDP) serve tra le altre cose all’intera comunicazione degli host limitrofi nelle reti locali così come alla ricerca del router gateway.
Definizione del Neighbor Discovery Protocol
Il Neighbor Discovery Protocol viene utilizzato in combinazione con la nuova versione del protocollo Internet IPv6. Il suo utilizzo principale consiste nella ritrasmissione degli indirizzi IPv6 in indirizzi MAC validi, i quali stanno alla base degli indirizzi hardware del dispositivo in uso. Nell’IPv4 questa funzione è ancora assunta dall’Address Resolution Protocol (ARP). Tutti gli indirizzi individuati vengono salvati come informazioni nella Neighbor Cache. Questa cache informa l’utente della rete non solo sugli indirizzi locali dei client vicini, ma piuttosto fornisce anche informazioni aggiuntive necessarie ad esempio per il controllo della raggiungibilità. Inoltre, come già accennato, il NDP è corresponsabile anche per il processo di attribuzione del gateway standard. Con l’aggiunta del Router Advertisement Protocol (RA) si possono stabilire anche il router standard e i prefissi di rete validi – due parametri elementari della configurazione di rete. Infine il protocollo di rete serve anche allo scambio di dati all’interno di una rete, anche come protocollo di supporto per la configurazione dinamica degli indirizzi. Ci si riferisce a questo processo anche come Stateless Automatic Address Configuration (SLAAC).
Come funziona il NDP?
Ogni dispositivo che ricorre al Neighbor Discovery Protocol per la comunicazione all’interno della rete, amministra autonomamente la propria Neighbor Cache, o cache dei vicini. All’interno di questa cache sono elencati tutti i dispositivi della rete a esso conosciuti e quindi identificabili per mezzo dei loro univoci indirizzi di dispositivo (MAC). Così facendo è possibile stabilire se l’indirizzo in memoria appartiene a un semplice client o se al contrario a un router. La Neigbor Cache non è tuttavia l’unica, piuttosto è una di quattro memorie intermediarie che servono al funzionamento del protocollo NDP. Le tre altre componenti, che allo stesso modo vengono utilizzate separatamente da ogni dispositivo, sono le seguenti:
- Cache delle destinazioni: questa cache raccoglie dati riguardo a tutti gli host della rete ai quali sono già stati inviati dei pacchetti dati. Ognuna di queste immissione dati rimanda tramite link a un indirizzo contenuto all’interno della Neighbor Cache, il quale deve essere utilizzato come prossimo Hop (salto) al momento dell’invio di pacchetti dati all’host di destinazione desiderato.
- Lista dei prefissi: nella cache contenente la lista dei prefissi vengono gestititi tutti i prefissi utili per la rete in cui si trova il client. Tale lista è da una parte necessaria perché supporta l’IPv6 Multhoming, ovvero la raggiungibilità della rete attraverso due provider distinti, e dall’altra permette la suddivisione dell’Address Space in vari prefissi. Grazie ai record in questa cache il NDP garantisce che l’host di destinazione si trovi nella stessa sottorete. Ogni prefisso, eccezione fatta per l’indirizzo MAC (anche Link Layer Address), possiede una durata di validità prestabilita, così che la cache sia sempre aggiornata.
- Lista dei router: la lista dei router di default raccoglie tutti i router conosciuti che entrano regolarmente in contatto con il dispositivo. Ogni record all’interno di questa lista è collegato con un record all’interno della cache dei vicini. Il fatto che siano elencati solamente i router attivi lo si deve al fatto che per ognuno di essi viene definito un tempo ultimo. L’estensione o il rinvio di tale scadenza avviene solo richiamando il router in questione.
Per creare le varie cache per il NDP si utilizza un altro protocollo di Internet, conosciuto come ICMPv6 (“Internet Control Message Protocol for the Internet Protocol Version 6”).
I cinque tipi di ICMPv6 sui quali si basa il NDP
Nell’attuale versione della famiglia dei protocolli di Internet l’ICMPv6 serve solitamente come trasmettitore delle comunicazioni di avviso o di errore, ma viene preso anche in considerazione dal Neighbor Discovery Protocol sotto forma di cinque diversi tipi di ICMPv6. In base al tipo vengono utilizzati diversi messaggi tramite l’aiuto dei quali prendono forma le cache e le liste contenute al loro interno.
Tipo 134: Router Advertisement
A intervalli regolari i router mandano dei cosiddetti Router Advertisement – messaggi ICMPv6 del tipo 134 – con lo scopo di informare gli utenti della rete della loro presenza. Tra le altre cose essi condividono le loro informazioni di routing e i parametri necessari per la configurazione automatica dell’IP. Di norma l’obiettivo del messaggio è l’indirizzo multicast standard “ff02::01”, attraverso il quale ci si rivolge a tutti gli host nel campo di applicazione rilevante. In questo modo essi ottengono anche l’indirizzo del router (gateway standard) e il prefisso globale. Qui di seguito vi mostriamo lo schema che segue un Routing Advertisement:
Di norma questo tipo di messaggio ha una lunghezza di 128 bit, con la possibilità di aggiungere ulteriori bit per le opzioni. Come opzioni valide sono disponibili gli indirizzi MAC del router, i dati riguardo alla dimensione massima di un pacchetto (“Maximum Transmission Unit”), così come tutte le informazioni di prefisso rilevanti.
Il campo “Tipo” viene impostato su 134, il campo “Codice” sempre su 0 (zero). A seguire ci sono 16 bit per il Checksum ICMP e informazioni per un totale di 8 bit riguardo al limite dei salti, che ogni stazione dovrebbe adottare per i propri pacchetti, valore consigliato dal router.
Inoltre seguono dei singoli bit che forniscono informazioni riguardo a:
- Se gli indirizzi IP possono essere adottati tramite un DHCPv6 dinamico (M)
- E se altre informazioni di indirizzo possono essere adottate attraverso il DHCPv6 dinamico (O).
Il campo “Riservato” rimane inutilizzato e viene ignorato dal destinatario. Inoltre il Router Advertisement contiene dati numerici riguardo:
- Il tempo, in secondi, che un router può essere mantenuto nella lista dei router (tempo di vita del router, 16 bit, valore massimo 65535);
- Il tempo, in millisecondi, di quanto debba rimanere disponibile un indirizzo nella cache dei vicini una volta stabilita la raggiungibilità (tempo di raggiungibilità; 32 bit, massimo 50 giorni);
- Così come quanto bisogna aspettare prima che venga rinviato un messaggio Neighbor Solicitation (tempo di ritrasmissione, 32 bit).
Tipo 133: Router Solicitation
I Router Solicitation sono dei messaggi attraverso i quali un host può esortare tutti i router della rete a inviare i Router Advertisement precedentemente menzionati. Questi rispondo poi a loro volta con un messaggio di tipo 134, destinato o esclusivamente all’host responsabile della richiesta (unicast) o a tutti i membri della rete (multicast). Ad esempio, nel caso di una nuova connessione, grazie all’utilizzo di questi tipi di messaggi un host non deve attendere la comunicazione automatica del router di rete. Questa tipologia di messaggi ICMPv6 è strutturata nel seguente modo:
La struttura standard di un messaggio NDP ICMPv6 del tipo 133, prevede una lunghezza minima di 64 bit. Al campo “Tipo” viene assegnato il valore di Router Solicitation 133, mentre “Codice” viene impostato su 0. Gli altri due campi obbligatori sono “Checksum” (16 bit) e “Riservato”, che deve rimanere inutilizzato, e che ha una lunghezza di 32 bit.
L’unica opzione che potete decidere se allegare al messaggio è l’indirizzo MAC del mittente.
Tipo 135: Neighbor Solicitation
I client della rete inviano i messaggi di Neighbor Solicitation, per scoprire l’indirizzo MAC dell’host di destinazione ed eventualmente comunicare a loro volta il proprio indirizzo. I messaggi ICMPv6 di questo tipo possono comunicare coi dispositivi sia tramite un invio multicast, nel caso in cui vogliano comunicare un indirizzo, o unicast, se al contrario lo scopo è unicamente quello di testare la raggiungibilità di un vicino.
Come tutti i tipi di messaggi ICMPv6 iniziano anche i Neighbor Solicitation con una etichetta per la definizione del tipo di messaggio, in questo caso il “Tipo” ha il valore 135. Segue il codice con i suoi 8 bit, che va impostato sullo 0, e i 15 bit dell’Internet Control Message Protocol. Come per tutti gli altri messaggi già presentati, “Riservato” rimane vuoto.
Con 128 bit l’indirizzo IP destinatario, che non può essere un indirizzo multicast, costituisce la parte maggiore del messaggio; il quale ha in totale una lunghezza minima di 192 bit. Anche questo tipo di messaggio vitale per il Neighbor Discovery Protocol permette di indicare in aggiunta anche l’indirizzo MAC del mittente.
Tipo 136: Neighbor Advertisement
L’invio di Neighbor Advertisement da parte dei dispositivi di rete è da un lato una reazione ai messaggi Neighbor Solicitation, ovvero una reazione di risposta, e dall’altro servono per informare i membri di una rete riguardo ai cambiamenti in atto nella configurazione degli indirizzi. La struttura di tali messaggi è la seguente:
I primi 32/192esimi di bit del Neighbor Advertisement seguono il tipico schema dei messaggi ICMPv6 come visto finora: con il valore 136 per il campo “Tipo” e 0 per il “Codice”, che collezionano 8 bit a testa, e i consueti 16 bit per la Checksum. Il codice prosegue con 3 bit singoli, per le seguenti componenti:
- R: il bit legato a “R” stabilisce se il messaggio viene inviato da un router.
- S: se il messaggio contiene il bit di “S”, si tratta di una risposta a un Neighbor Solicitation unicast, con la quale viene confermata la raggiungibilità alla componente della rete che ha inviato la domanda. In risposta a richieste multicast o a Neighbor Advertisement da voi stessi prodotti, questo bit non può essere impostato.
- O: il campo “o” ordina al destinatario del messaggio di sovrascrivere il record presente nella cache.
Gli ultimi 29 bit sono riservati al modello già presentato: rimangono quindi inutilizzati e gli viene attribuito il valore 0, venendo così ignorati dal destinatario. L’indirizzo target con i suoi 128 bit di lunghezza rappresenta la maggior parte del messaggio: si tratta o di un indirizzo IP, dal quale viene richiesto il Neighbor Advertisement, o di un indirizzo per il quale deve essere specificato un nuovo indirizzo MAC. Altrimenti come opzione il router può nominare il proprio indirizzo: questo è obbligatorio quando si tratta di una risposta a una richiesta multicast.
Tipo 137: Redirezione (Redirect)
router hanno la possibilità di informare la stazione inviante riguardo a un salto diverso, ma migliore, verso l’indirizzo target desiderato. A questo scopo essi inviano i messaggi NDP ICMPv6 Redirect, che si contraddistinguono per il seguente schema:
Con una lunghezza minima di 320 bit, i Redirect sono i messaggi ICMPv6 di maggiore dimensione tra quelli che servono per il funzionamento del Neighbor Discovery Protocol. La struttura tipica costituita dalla successione di “Tipo” (valore: 137), “Codice” (0), “Checksum” e un campo “Riservato” non utilizzato (32 bit), è seguita dall’indirizzo del salto consigliato e infine dall’indirizzo per il quale è consigliata la modifica, per un totale di 256 bit (128 ciascuno). Eventualmente il pacchetto del messaggio può contenere l’indirizzo MAC del target così come l’header del pacchetto deviato.
Panoramica dei compiti e delle possibilità del NDP
Sono molti i meccanismi di caching e i mezzi di comunicazione del Neighbor Discovery Protocol in combinazione con l’Internet Control Message Protocol. I successivi scenari relativi al NDP chiariscono la cooperazione e il funzionamento di entrambi questi protocolli:
- Riconoscere router e prefisso di rete: tutti i router di una rete trasmettono per multicast i Router Advertisement a tutti i membri della rete a intervalli regolari. Tra le altre cose questi contengono informazioni come l’indirizzo, il prefisso di rete e il routing, che servono per la creazione della Default Router List così come per la Prefix List. In base a questi dati i client comunicano perciò gli Standard Gateway e le maschere di sottorete. Essendo che tutti i record dispongono di una durata di validità limitata, solo i router realmente attivi rimangono registrati. Gli Advertisement dei router possono essere anche ottenuti forzatamente grazie all’utilizzo dei router Solicitation.
- Individuare i parametri importanti per la trasmissione dei pacchetti: all’evenienza i Router Advertisement possono contenere anche informazioni riguardo a quali parametri debbano essere utilizzati per la trasmissione dei pacchetti da parte dei client facenti parte della rete. I dati contenuti possono essere molto concreti, come le dimensioni massime del pacchetto, ma anche parametri Internet di ben più ampia portata come il limite di salti stabilito per i pacchetti in uscita.
- Stabilire il salto successivo: se deve essere inviato un pacchetto, il protocollo NDP verifica se la cache di destinazione contenga già un record dati per l’host di destinazione. Se questo non dovesse essere il caso, il protocollo comunica il prossimo salto in base alle informazioni presenti nella lista dei prefissi e in quella dei router di default. Successivamente la cache di destinazione viene aggiornata in base alle nuove informazioni ottenute, così che sia disponibile sin da subito nel caso di una nuova richiesta. Se all’interno della cache dei vicini non c’è nessun record dati corrispondente, verrà allora creato in automatico e seguirà la risoluzione dell’indirizzo.
- Risoluzione degli indirizzi IP e MAC: al fine di riuscire a identificare l’indirizzo MAC di un dato host all’interno di una rete, l’host ottiene una Neighbor Solicitation tramite IPv6-Multicast presso il suo specifico indirizzo multicast. A questa unica combinazione di indirizzi può rispondere unicamente l’host tramite l’invio di un messaggio Neighbor Advertisement contenente l’indirizzo MAC, che viene perciò salvato dal cliente di origine nella Neighbor Cache. In questo modo il Neighbor Discovery Protocol viene utilizzato sia per identificare i vicini che il router.
- Determinare l’irraggiungibilità di un vicino: l’attualità di tutti gli indirizzi MAC salvati nella Neighbor Cache deve essere regolarmente controllata. Fin quando vengono inviati dati TCP/IP o conferme di ricevimenti TCP/IP da parte di un indirizzo presente nella cache, questo viene chiaramente considerato attivo e l’host associato raggiungibile. Se invece è da tempo che non avviene nessuno scambio di dati con il dispositivo interessato e la durata di validità di un record è scaduta nel frattempo, allora questo viene segnato come desueto. Per verificare però che sia effettivamente così, e che quindi l’host non sia raggiungibile, viene inviato un pacchetto dati all’indirizzo salvato in memoria. Se non si ottiene risposta, viene fatto un ultimo tentativo tramite l’Unicast Neighbor Solicitation. Se anche questo test conferma l’irraggiungibilità, il record viene eliminato dalla cache dei vicini.
- Riconoscere gli indirizzi doppi: se un dispositivo ha ottenuto un indirizzo per autoconfigurazione, il NDP lo classifica inizialmente come “tentative”, ovvero come provvisorio. Infatti per far sì che l’indirizzo diventi veramente effettivo deve prima essere comprovata la sua unicità. A questo scopo il cliente di rete appena collegato invia un Neighbor Solicitation all’indirizzo temporaneo, con un indirizzo mittente a sua volta temporaneo e non specifico. Se un altro host utilizza già l’indirizzo, allora esso risponderà per mezzo di un messaggio Neighbor Advertisement a tutti gli indirizzi multicast. In questo modo anche il client che ha inviato la richiesta viene a conoscenza del nuovo indirizzo.
- Informare attraverso le opzioni redirect: con il messaggio redirect il Neighbor Discovery Protocol fornisce ai router la possibilità di ottimizzare il percorso dei pacchetti dati verso l’host di destinazione desiderato. Come menzionato precedentemente, questi possono utilizzare l’ICMPv6 tipo 137 per fornire consigli per salti migliori e più adatti al percorso, i quali vengono poi raccolti nella cache di destinazione.
Come sottoporre a un controllo la Neighbor Cache sul vostro sistema
Tutti i sistemi operativi moderni, Windows, macOS, Linux, iOS o Android, supportano l’IPv6 e sono quindi nella condizione di disporre delle possibilità di NDP nelle reti Ethernet. Attraverso il comando apposito potete richiamare in ogni momento la cache dei vicini creata per il vostro dispositivo.
Ad esempio con Windows viene utilizzato il programma netsh (network shell) e il seguente comando per elencare i vostri vicini di rete:
netsh interface ipv6 show neighbors
Con la maggior parte delle distribuzioni Linux si utilizza il tool iproute2 e il seguente comando per ottenere la presa di visione della Neighbor Cache.
ip -6 neigh
Con macOS e le altre distribuzioni BSD richiamate i dati salvati nella cache nel seguente modo:
ndp -a