# Les réseaux informatiques/La traduction des adresses IP en adresses MAC : ARP et NDP

Comment savoir à quelle adresse MAC correspond telle adresse IP ? La solution à ce problème est très simple : il suffit de mémoriser les correspondances entre une IP et une adresse MAC dans une mémoire intégrée au routeur ou au matériel réseau. Cette table de correspondance est appelée le cache ARP ou la table ARP suivant le protocole utilisé.
Remplir et mettre à jour le cache ARP est très important : sans cela, certains ordinateurs deviendraient inaccessibles au moindre changement de carte réseau ou d'adresse mac. Il est possible de configurer manuellement le cache ARP des différentes machines d'un réseau, mais cela n'est pas très pratique. Le moindre changement de carte réseau demande de modifier les caches ARP de plusieurs machines, ce qui peut rapidement devenir une gêne notable. Une autre solution est de faire en sorte que le matériel du réseau gère tout cela de lui-même. La gestion du cache ARP est de la responsabilité des ordinateurs et routeurs du réseau, pas besoin de la moindre intervention humaine. Pour cela, les équipements réseaux peuvent utiliser deux protocoles relativement simples : le protocole ARP pour les adresses IPV4, ou le Neighbor Discovery Protocol pour les adresses IPV6. Ce chapitre va aborder ces deux protocoles, en commençant par le protocole ARP, conceptuellement plus simple.

## Le protocole ARP

Imaginons qu'un routeur reçoive un paquet vers une IP pour laquelle il ne connait pas l'adresse MAC (il n'a pas de correspondance IP-MAC dans son cache ARP). Il va alors utiliser une transmission ARP pour découvrir l'adresse MAC de destination. Le processus se déroule en deux étapes : d'abord le routeur envoie une demande aux autres ordinateurs, puis l'ordinateur de destination répond en envoyant son adresse MAC.
* Envoi de la demande ARP : Le routeur va envoyer un message aux ordinateurs du réseau local, sur l'adresse de broadcast. Ce message aura la signification suivante : "Quel est l'ordinateur qui a telle adresse IP ?". Ce message contient évidemment l'adresse IP en question, l'adresse MAC de l'émetteur, et quelques autres informations.
* Réponse ARP : L'ordinateur de destination (celui qui a l'IP indiquée dans la demande ARP) répond avec un message de réponse qui signifie : je suis l'ordinateur qui a cette adresse IP. Ce message contient évidemment, l'IP en question, l'adresse MAC du routeur, mais aussi et surtout l'adresse MAC de la machine émettrice. Cette adresse MAC n'est autre que l'adresse MAC qui correspond à l'IP : le routeur a juste à l'utiliser pour mettre à jour sa table ARP.
Il est possible qu'un ordinateur envoie une requête ARP à destination de lui-même, vers sa propre adresse IP ! De telles requêtes ARP sont appelées des requêtes ARP gratuites. L'intérêt de telles requêtes n'est pas de découvrir leur propre adresse MAC : chaque ordinateur y a accès à travers le pilote de la carte réseau. L'utilité est tout autre.
* Premièrement, elles servent à savoir si un autre poste est configuré avec leur adresse IP. Si cela arrive, l'ordinateur émetteur reçoit une réponse et sait que son IP doit être changée. Une telle situation n'est pas rare quand l'ordinateur émetteur s'attribue une IP ou lors d'une configuration quelconque.
* Une autre utilisation des requêtes ARP gratuites est suite à un changement de carte réseau. La requête gratuite permet de mettre à jour les caches ARP des autres machines automatiquement.

### Les segments ARP

Tout paquet ARP est structuré comme indiqué dans le schéma ci-dessous. Il contient plusieurs champs, qui font entre un et huit octets.
* Le premier champ, nommé Hardware Type, indique quel est le protocole de couche liaison utilisé. Sa valeur la plus utilisée est 01, qui indique l'usage du protocole Ethernet.
* Les deux octets suivants forment le champ Protocol Type, qui indique le protocole de couche 3 utilisé.
* Le champ Hardware Adress Length donne le nombre d'octets des adresses physiques (6 pour les adresses MAC).
* Le champ Protocol Adress Lenght précise la longueur en octets des adresses logiques (ici, des adresses IP).
* Le champ Opcode est un nombre qui code l'opération à effectuer : 01 pour une requête ARP, 02 pour une réponse.
* À la suite, on trouve les adresses physiques et logiques source et destination.
Toute requête ARP est encapsulée à l'intérieur d'une trame réseau, au même titre que les paquets IP.

### Le temps de péremption du cache ARP

Le protocole ARP permet de prendre en compte assez rapidement l'ajout d'un ordinateur dans un réseau local, en permettant de découvrir son adresse MAC. Mais il faut aussi gérer le cas où un ordinateur voit son adresse MAC changer, suite à un changement de carte réseau ou une reconfiguration quelconque. Quand cela arrive, l'ancienne association IP-MAC n'est plus valide : l'IP est restée la même, mais pas l'adresse MAC. Le cache ARP doit alors être mis à jour.
Pour gérer cette situation, le cache ARP est régulièrement purgé des associations IP-MAC trop anciennes. Dans les implémentations les plus simples, l'ensemble du cache ARP est vidé de son contenu régulièrement. Toutes les 20 minutes, le cache est remis à 0 et le protocole redécouvre les correspondances IP-MAC. Si un changement a eu lieu dans le réseau, il est pris en compte après la purge/reconstitution du cache ARP.

### L'ARP Spoofing

Le protocole ARP a quelques failles de sécurité. Notamment, strictement rien n'est fait pour s'assurer de la validité des correspondances IP - adresse MAC. Ainsi, une machine peut se faire passer pour une autre : il lui suffit de modifier une correspondance dans la table ARP en envoyant un paquet ARP au bon moment. Prenons le cas où une IP x . x . x . x est attribuée à une machine d'un réseau local. Imaginons qu'une machine du réseau local envoie un paquet ARP de son cru, dans lequel elle prétend que l'IP x . x . x . x lui appartient. Vu qu'aucun mécanisme n'est prévu pour vérifier la validité de cette correspondance, ARP n'y verra que du feu. Ainsi, toute émission vers l'IP x . x . x . x sera redirigée vers la mauvaise adresse MAC, vers la machine qui se fait passer pour l'IP x . x . x . x.Cette machine aura accès à tout ce qui est envoyé vers l'IP x . x . x . x. Si la machine en question est configurée de manière à renvoyer les paquets vers son destinataire habituel, l'attaque peut passer inaperçu durant un moment.