Pour Internet et les réseaux locaux, le protocole Internet est un composant in­dis­pen­sable. En effet, pour garantir le transport des in­for­ma­tions nu­mé­riques et l’envoi des paquets de données ap­pro­priés à l’hôte cible conforme, un certain nombre de pro­to­coles d’aide et de routage sup­plé­men­taires sont né­ces­saires. C’est pourquoi on parle de famille de pro­to­coles Internet ou encore de pile de pro­to­coles Internet. Tandis que le Dynamic Host Con­fi­gu­ra­tion Protocol (DHCP) par exemple, garantit que les clients reçoivent l’adresse réseau ap­pro­priée lors de la con­fi­gu­ra­tion de la connexion IP. Le protocole Neighbor Discovery Protocol (NDP) est utilisé, entre autres, pour faciliter la com­mu­ni­ca­tion avec les hôtes voisins dans les réseaux locaux et pour dé­ter­mi­ner le routeur de la pas­se­relle.

Dé­fi­ni­tion du Neighbor Discovery Protocol

Le Neighbor Discovery Protocol (en français : protocole de dé­cou­verte des voisins) est utilisé con­join­te­ment avec la nouvelle version du protocole Internet IPv6. Sa fonction prin­ci­pale est la ré­so­lu­tion des adresses IPv6 dans les adresses MAC valides : l’adresse physique sous-jacente des pé­ri­phé­riques res­pec­tifs. Dans l’IPv4, c’est l’Address Re­so­lu­tion Protocol (ARP) qui exécute cette fonction. Toutes les adresses dé­ter­mi­nées sont stockées en tant qu’in­for­ma­tions dans le Neighbor cache (nommé aussi cache de Voisinage). Cette mémoire cache permet non seulement d’informer les par­ti­ci­pants du réseau sur les adresses locales des clients voisins, mais aussi de leur fournir des in­for­ma­tions sup­plé­men­taires né­ces­saires à la vé­ri­fi­ca­tion de l’ac­ces­si­bi­lité (dis­po­ni­bi­lité), par exemple. De plus, comme nous l’avons déjà mentionné, le NPD est également très impliqué dans l’at­tri­bu­tion de la pas­se­relle standard (Standard Gateway). Avec l’ajout du Router Ad­ver­ti­se­ment Protocol (RA), il est possible de dé­ter­mi­ner à la fois le routeur par défaut et les préfixes réseau valides, qui sont deux pa­ra­mètres de con­fi­gu­ra­tion de base du réseau. Enfin, le protocole réseau, qui échange des données uni­que­ment au sein d’un réseau, fonc­tionne aussi comme protocole de support pour la con­fi­gu­ra­tion d’adresses dy­na­miques. Ce processus est également connu sous le nom de Stateless Automatic Address Con­fi­gu­ra­tion (SLAAC) ou con­fi­gu­ra­tion au­to­ma­tique des adresses sans état.

Comment fonc­tionne le NDP ?

Chaque pé­ri­phé­rique, qui utilise le Neighbor Discovery Protocol pour les com­mu­ni­ca­tions réseau réseau, gère son propre Neighbor Cache. Dans ce cas de figure, tous les pé­ri­phé­riques du réseau connu sont ré­per­to­riés et peuvent être vérifiés à l’aide de leurs adresses uniques (MAC). Vous pouvez ainsi y voir si l’adresse mise en cache ap­par­tient à un simple client ou bien à un routeur, par exemple. Toutefois le Neighbor Cache n’est pas le seul, mais seulement l’un des quatre caches qui rem­plis­sent les fonctions du protocole NPD. Les trois autres com­po­sants, qui sont également traités sé­pa­ré­ment par chaque appareil ou pé­ri­phé­rique, sont lui suivants :

  • Des­ti­na­tion cache : le cache de « des­ti­na­tion» contient les entrées pour tous les hôtes du réseau qui ont déjà reçu des paquets de données. Chacune de ces entrées, à son tour, renvoie un lien d’adresse dans le cache voisin qui devrait être utilisé comme « next hop » ou prochain saut (station in­ter­mé­diaire) lors de l’envoi de paquets de données à l’hôte de des­ti­na­tion désiré.

  • Prefix cache : le Prefix cache ou liste de préfixes est utilisé pour gérer tous les préfixes qui s’ap­pli­quent au réseau dans lequel le client se trouve. Ce ré­fé­ren­ce­ment est né­ces­saire, d’une part car IPv6 prend en charge le multi-hé­ber­ge­ment, c’est à dire l‘ac­ces­si­bi­lité du réseau via deux four­nis­seurs dif­fé­rents. D’autre part, il permet de diviser l’espace d’adressage en dif­fé­rents préfixes. En utilisant les entrées du cache préfixe, NDP s’assure que l’hôte cible se trouve bien sur le même sous-réseau. Chaque préfixe, à l’exception de l’adresse MAC (ainsi que l’adresse Link Layer), a une période de validité définie de sorte que le cache reste toujours à jour.

  • Default Router List : la liste des routeurs par défaut contient tous les routeurs connus qui entrent en contact ré­gu­liè­re­ment avec le pé­ri­phé­rique. Chaque entrée de cette liste est liée à une entrée dans le Neighbor cache. Seuls les routeurs actifs sont ré­per­to­riés parce-que la date d’ex­pi­ra­tion est au­to­ma­ti­que­ment définie pour tous les re­pré­sen­tants. Le re­nou­vel­le­ment ou le ra­frai­chis­se­ment n’est possible que si le routeur est renvoyé.

Afin de créer les dif­fé­rents caches pour le NDP, un autre protocole Internet est utilisé, connu sous le nom de ICMPv6 (« Internet Control Message Protocol for the Internet Protocol Version 6 »).

Le NPD est basé sur ces cinq types d’ICMPv6

Dans la version actuelle de la famille de pro­to­coles Internet, ICMPv6 est gé­né­ra­le­ment utilisé comme trans­met­teur pour les messages d’erreur et d’in­for­ma­tion, mais il est aussi utilisé par le Neighbor Discovery Protocol sous la forme de cinq dif­fé­rents types ICMPv6. Selon le type, certaines no­ti­fi­ca­tions sont utilisées pour cons­ti­tuer des listes ou un en­re­gis­tre­ment tem­po­raire (mise en cache).

Type 134 : Router Ad­ver­ti­se­ment (RA)

Les routeurs envoient ré­gu­liè­re­ment des « Router Ad­ver­ti­se­ment », ou messages ICMPv6 de type 134, pour informer les par­ti­ci­pants au réseau de leur présence. Ils dis­tri­buent notamment leurs in­for­ma­tions de routage et les pa­ra­mètres né­ces­saires à la con­fi­gu­ra­tion au­to­ma­tique des IP. La cible du message est gé­né­ra­le­ment la plage d’adresse multicast par défaut « ff02::01 », qui est utilisée pour adresser tous les hôtes jugés valides. De cette manière, ils reçoivent aussi l’adresse du routeur (default gateway) et le préfixe sous-réseau à utiliser. Le schéma du Router Ad­ver­ti­se­ment est le suivant :

Ce type de message a une longueur standard de 128 bits, ce qui permet d’ajouter des bits sup­plé­men­taires pour les options. Les options valides com­pren­nent l’adresse MAC du routeur, la spé­ci­fi­ca­tion de la taille maximale du paquet : MUT (Maximum Trans­mis­sion Unit) et toutes les in­for­ma­tions de préfixe per­ti­nentes.

Le champ « Type » est défini sur la valeur 134 selon le message, le champ « code » est toujours défini sur 0. Il est suivit d’une somme de contrôle ICMP 16 bits et d’une spé­ci­fi­ca­tion de longueur 8 bits Hop limit, qui peut contenir les stations re­com­man­dées par le routeur.

Après cela, les bits in­di­vi­duels four­nis­sent des in­for­ma­tions sur les points suivants :

  • Si les adresses IP peuvent être obtenues via DHCPv6 dynamique (M)
  • Et si des in­for­ma­tions com­plé­men­taires d’adresse peuvent être obtenues via le DHCPv6 dynamique (O).

Le champ « Reservé » reste inutilisé et est ignoré par le des­ti­na­taire. En outre, le Router Ad­ver­ti­se­ment contient des données sur :

  • Le temps en secondes pendant lequel le routeur doit rester dans la liste des routeurs par défaut (durée de vie du routeur, 16 bits entiers, maximum 655353);
  • Le temps en mil­li­se­condes qu’une adresse dans le Neighbors cache doit encore être dis­po­nible après avoir atteint la dis­po­ni­bi­lité (Ac­ces­si­bi­lity time out, 32 bits entiers, maximum environ 50 jours)
  • Ainsi que le temps en mil­li­se­condes après lequel un message Neighbor So­li­ci­ta­tion (voir ci-dessous) doit à nouveau être envoyé (Re­so­lu­tion time out, 32 bits entiers).

Type 133 : Router So­li­ci­ta­tion (RS)

Routeur So­li­ci­ta­tion (RS) sont des messages qu’un hôte peut envoyer pour demander à tous les routeurs du réseau d’envoyer des Router Ad­ver­ti­se­ment. Ceux-ci répondent alors avec un message de type 134, soit ex­clu­si­ve­ment à l’hôte demandeur (unicast), soit à tous les abonnés du réseau (multicast). Avec ce type de message, comme une connexion réseau, un hôte n’a pas besoin d’attendre que le routeur réseau se notifie au­to­ma­ti­que­ment. Ce type de message ICMPv6 est structuré comme suit :

La structure standard d’un message NDP-ICMPv6 de type 133 nécessite donc une longueur minimale de 64 bits. Le champ « Type » reçoit la valeur 133 de Router So­li­ci­ta­tion, tandis que « Code » est mis sur 0. Les deux autres champs obli­ga­toires sont la somme de contrôle ICMP (16 bits) et un champ « Réservé » de 32 bits, ce dernier reste inutilisé.

La seule option possible qui peut être éven­tuel­le­ment attachée au message est l’adresse MAC de l’ex­pé­di­teur.

Type 135 : Neighbor So­li­ci­ta­tion (NS)

Les clients du réseau envoient des Neighbord So­li­ci­ta­tion (NS) afin de connaitre l’adresse MAC de l’hôte cible, en envoyant éven­tuel­le­ment leur propre adresse en retour. Les messages ICMPv6 de ce type peuvent soit trans­mettre des dis­po­si­tifs via multicast s’ils veulent dé­ter­mi­ner une adresse, soit via unicast s’ils ne font que vérifier la dis­po­ni­bi­lité d’un voisin.

Comme avec tous les types de requêtes ICMPv6, les Neighbor So­li­ci­ta­tion com­men­cent avec une iden­ti­fi­ca­tion de type 8 bits. Dans ce cas, le champ « Type » obtient la valeur 135. Ceci est suivi par le « Code » long de 8 bit, qui est mis sur 0, et la somme de contrôle de 16 bits. Le champ « réservé » reste inutilisé, comme pour les messages présentés pré­cé­dem­ment.  

Avec 128 bits, l’adresse IP ciblée, qui ne peut pas être une adresse multicast, constitue la majeure partie du message, avec une longueur totale d’au moins 192 bits. Ce type de message, qui est décisif pour le Neighbor Discovery Protocol, permet aussi de spécifier l’adresse MAC de l’ex­pé­di­teur comme spé­ci­fi­ca­tion sup­plé­men­taire op­tion­nelle.

Type 136 : Neighbor Ad­ver­ti­se­ment (NA)

Les pé­ri­phé­riques réseau envoient des Neighbor Ad­ver­ti­se­ment à la fois en réponse à des Neighbord So­li­ci­ta­tion, mais aussi de manière non sollicité pour informer d’autres par­ti­ci­pants sur les chan­ge­ments dans la con­fi­gu­ra­tion de l’adresse. La structure de ces messages est la suivante :

Les 32 premiers bits du standard 192 Neighbord Ad­ver­ti­se­ment sont basés sur le schéma de message classique ICMPv6 : 8 bits sont réservés pour « Type » (136) et « Code » (0), suivis par la somme de contrôle de 16 bits. Trois bits in­di­vi­duels com­plè­tent  alors le code de message pour lequel les con­di­tions suivantes s’ap­pli­quent :

  • R : le bit R est défini lorsque le message est envoyé par un routeur. 
  • S : si le message contient le bit « S », c’est une réponse à un Unicast Neighbor So­li­ci­ta­tion, qui confirme l‘ac­ces­si­bi­lité du par­ti­ci­pant au réseau demandeur. Ce bit ne doit pas être défini dans les réponses aux demandes multicast ou dans les Neighbhor Ad­ver­ti­se­ment initiés.
  • O : le flag « O » indique au des­ti­na­taire du message d’écraser l’entrée de cache existante.

Les 29 bits suivants sont réservés selon le modèle connu, ils restent donc inu­ti­li­sés et sont ini­tia­li­sés sur 0 et ignorés par le récepteur. L’adresse de des­ti­na­tion 128 bits est main­te­nant suivie de la partie prin­ci­pale du message : il s’agit soit de l’adresse IP à partir de laquelle le Neighbor Ad­ver­ti­se­ment a été demandée, soit de l’adresse pour laquelle une nouvelle adresse MAC doit être divulguée. En option, le routeur peut spécifier sa propre adresse, ce qui est obli­ga­toire pour répondre à une requête multicast.

Type 137 : Redirect

Les routeurs ont la capacité d’informer les hôtes du réseau sur un meilleur « hop » (saut) vers des adresses de des­ti­na­tion spé­ci­fiques. A cette fin, Ils envoient des NDP ICMPv6 Redirect, qui se dis­tin­guent par le schéma suivant :

Avec une longueur minimale de 320 bits, les « Redirect » sont les plus grands messages ICMPv6 per­ti­nents pour le fonc­tion­ne­ment du Neighbor Discovery Protocol. La structure typique avec des séquences de bits pour l’iden­ti­fi­ca­tion de type (127), le code (0), la somme de contrôle et un champ « réservé » non utilisé (32 bits) est suivie de l’adresse de saut (hop) re­com­mandé puis de l’adresse pour laquelle ces deux re­di­rec­tions sont re­com­man­dées (128 bits pour les deux). En option, le paquet de message peut contenir l’adresse MAC de la des­ti­na­tion et l’en-tête du paquet redirigé.

Aperçu des tâches et des pos­si­bi­li­tés du NDP

Il y a beaucoup à dire sur les mé­ca­nismes de mise en cache et les com­mu­ni­ca­tions du Neighbor Discovery Protocol en com­bi­nai­son avec l’Internet Control Message Protocol. Les scénarios NDP suivants il­lustrent l’in­te­rac­tion et la fonc­tion­na­lité des deux pro­to­coles :

  • Détecter le routeur et le préfixe réseau : tous les routeurs d’un réseau diffusent ré­gu­liè­re­ment des Router Ad­ver­ti­se­ment via multicast à tous les par­ti­ci­pants du réseau. Il s’agit notamment des in­for­ma­tions comme l’adresse, le préfixe réseau et le routage, qui sont utilisés pour créer la liste de routeurs par défaut et la liste de préfixes. Les clients utilisent ensuite ces entrées pour dé­ter­mi­ner la pas­se­relle et le masque de sous réseau par défaut. Comme toutes les entrées n’ont qu’une période de validité limitée, il ne reste plus que les routeurs actifs. Les messages Router Ad­ver­ti­se­ment peuvent aussi être appliqués à l’aide des Router So­li­ci­ta­tion.
  • Dé­ter­mi­ner les pa­ra­mètres im­por­tants pour la trans­mis­sion des paquets : les messages Router Ad­ver­ti­se­ment peuvent aussi inclure en option des in­for­ma­tions sur les pa­ra­mètres que les clients par­ti­ci­pants doivent utiliser lors de l’envoi de paquets. Il peut s’agir d’in­for­ma­tions très spé­ci­fiques comme la taille maximale des paquets, mais aussi des pa­ra­mètres Internet im­por­tants comme la limite fixe de stations in­ter­mé­diaires pour les paquets sortants.
  • Dé­ter­mi­ner le prochain saut (hop) : si un paquet doit être envoyé, le protocole NDP s’assure que le cache de des­ti­na­tion (Des­ti­na­tion cache) contient déjà une entrée cor­res­pon­dante pour l’hôte cible. Si ce n’est pas le cas, le protocole détermine la station in­ter­mé­diaire suivante à l’aide des in­for­ma­tions de la liste des préfixes et de la liste des routeurs pas défaut. Les nouvelles con­nais­sances sont alors stockées dans le cache de des­ti­na­tion, ce qui signifie qu’elles sont im­mé­dia­te­ment dis­po­nibles lorsqu’une nouvelle requête est réalisée. Si il n y a pas d’équi­valent dans le cache de Voisinage (Neighbor cache) pour l’entrée nou­vel­le­ment créée, elle est générée au­to­ma­ti­que­ment et la ré­so­lu­tion de l’adresse est lancée.  
  • Ré­so­lu­tion de l’adresse IP dans l’adresse MAC : pour dé­ter­mi­ner l’adresse MAC d’un hôte spé­ci­fique sur le réseau, il reçoit un Neighbor So­li­ci­ta­tion par multicast IPv6 à sa propre adresse multicast spé­ci­fique. Seul l’hôte peut répondre à cette com­bi­nai­son unique d’adresses. En réponse, Il envoie un message Neighbor Ad­ver­ti­se­ment avec l’adresse MAC qui est stocké dans le cache de Voisinage (Neighbor cache) par le client de sortie. Le Neighbor Discovery Protocol est utilisé de cette façon à la fois pour iden­ti­fier les voisins et les routeurs.
  • Détecter l’inac­ces­si­bi­lité d’un voisin : toutes les adresses MAC stockées dans le Neighbor cache doivent être vérifiées ré­gu­liè­re­ment pour s’assurer qu’elles sont bien à jour. Tant que les données TCP/IP ou les accusés de réception sont envoyés à partir d’une adresse en­re­gis­trée, on considère lo­gi­que­ment cela comme actif, ainsi l’hôte qui se cache derrière est joignable, ac­ces­sible. S’il n y a pas eu d’échange de données avec l’appareil concerné depuis longtemps et que la période de validité de l’entrée a expiré, il est alors marqué comme étant obsolète. Afin de vérifier si l’hôte respectif n’est plus ac­ces­sible, un paquet de données ordinaire est d’abord envoyé à l’adresse en­re­gis­trée. S’il n’y a pas de réponse, un dernier test est lancé via un Neighbor So­li­ci­ta­tion unicast. Si cela confirme l’inac­ces­si­bi­lité, l’entrée disparait alors du cache de Voisinage (Neighbor cache).
  • Détecter les adresses du­pli­quées : si un pé­ri­phé­rique obtient une adresse via l’auto-con­fi­gu­ra­tion, le NDP la classe comme « tentative » (pro­vi­soire). Pour que l’adresse devienne dé­fi­ni­ti­ve­ment active, elle doit d’abord être marquée comme unique. Pour ce faire, le client réseau nou­vel­le­ment connecté envoie un Neighbor So­li­ci­ta­tion à l’adresse tem­po­raire qu’il souhaite utiliser lui-même, avec une adresse d’ex­pé­di­teur tem­po­raire non spé­ci­fique. Si un autre hôte utilise déjà l’adresse, il répond avec un message Neihbhord Ad­ver­ti­se­ment à l’adresse générale multicast. De cette manière, le client vé­ri­fi­ca­teur reçoit aussi ce message qui suggère alors une nouvelle adresse.
  • Informer sur les options Redirect : le Neighbor Discovery Protocol avec le message Redirect fournit aux routeurs la pos­si­bi­lité d’optimiser le chemin entre les paquets de données vers les hôtes cibles. Comme nous l’avons mentionné plus haut, ils peuvent utiliser un ICMPv6 type 137 pour re­com­man­der des stations in­ter­mé­diaires plus ap­pro­priées à inclure dans le cache de des­ti­na­tion.

Comment inspecter le Neighbor cache de votre système

Que ce soit Windows, MacOs, Linux, iOS ou Android, les systèmes d’ex­ploi­ta­tion modernes prennent en charge IPv6 et sont donc aussi en mesure d’accéder aux pos­si­bi­li­tés du NDP dans les réseaux Ethernet. En utilisant l’ins­truc­tion ap­pro­priée, vous pouvez accéder à tout moment au Neighbor cache qui a été créé pour votre appareil via la ligne de commande.

Par exemple, sous Windows, vous pouvez lister vos voisins du réseau à l’aide du programme netsh (network shell) et de la commande suivante :

netsh interface ipv6 show neighbors

Avec la plupart des dis­tri­bu­tions Linux, il est possible d’accéder au cache de Voisinage (Neighbor cache) en utilisant iproute2 et la commande suivante :

ip -6 neigh

Sous MacOS et autres dis­tri­bu­tions basées sur BSD, vous pouvez appeler les entrées avec la commande suivante :

ndp -a
Aller au menu principal