Lorsqu’un système décide d’envoyer un paquet IP, il doit encapsuler le paquet dans une trame Ethernet. Je parle souvent des poupées russes lors de mes formations pour introduire ces notions d’encapsulation / décapsulation… Si une machine doit envoyer un paquet a destination d’une adresse IP sur le réseau Ethernet, il faut que le paquet soit encapsulé dans une trame Ethernet. Seulement voilà: quelles valeurs d’adresses Ethernet mettre dans les champs prévus à cet effet dans la trame ? Pour l’adresse Ethernet source, il suffira de mettre l’adresse associée à la carte Ethernet. Mais pour l’adresse Ethernet destination ? Que doit-on mettre ? C’est le rôle du protocole ARP !
Le protocole ARP peut être considéré comme le lien entre la couche IP et la couche Ethernet. Effectivement, la couche IP utilise l’adressage logique ; alors que la couche Ethernet utilise l’adressage matériel (ou adresse MAC).
Lorsqu’un terminal doit transmettre un paquet IP sur le réseau Ethernet, il lui faut pouvoir faire l’association entre l’adresse logique et l’adresse physique. Par exemple, lorsque je tape la commande ping 192.168.1.7, la machine dispose de toutes les informations pour créer le paquet IP qui doit sortir mais elle ne sait pas quelle adresse MAC destination elle doit mettre dans le champ dédié de la trame. Elle ne le sait pas et comme l’adresse physique est totalement indépendante de l’adresse logique, l’une ne peut être déduite de l’autre et vice-versa. C’est le rôle du protocole « Address Resolution Protocol ».
Fonctionnement du protocole ARP
Lorsqu’un terminal doit créer une trame Ethernet dont l’adresse MAC destination est inconnue, il va – au préalable – diffuser une requête ARP afin d’interroger tous les systèmes présents sur le réseau. La diffusion Ethernet se fait à l’aide de l’adresse MAC destination ffff.ffff.ffff. Pour simplifier, la requête ARP pose une question: « Qui a l’adresse IP A.B.C.D? »
De façon plus précise, le contenu de requête ARP est composé de 4 champs principaux: l’adresse physique de la source, l’adresse logique de la source (c’est le système à l’origine de la requête: il connait son adresse IP et son adresse MAC), l’adresse physique de la destination (la valeur recherchée, donc la valeur 0000.0000.0000 est utilisée pour indiquer que cette valeur nous est inconnue) et l’adresse logique de la destination (donc l’adresse 192.168.1.7 pour laquelle on cherche l’adresse MAC).
Revenons sur l’adresse destination de cette requête. Elle est envoyée à l’adresse de diffusion Ethernet (ffff.ffff.ffff). Elle est donc reçue par tous les systèmes qui sont dans le même domaine de diffusion que la source, donc par tous les systèmes qui sont dans le même VLAN que la source. Il faut donc absolument que le système qui dispose de l’adresse IP 192.168.1.7 soit dans le même VLAN que la source (192.168.1.5) pour recevoir cette requête. C’est un point important à noter. C’est la raison pour laquelle, le découpage en sous-réseau IP est (sauf quelques trés rares exceptions) conforme au découpage en VLAN.
Ensuite, le système 192.168.1.7 qui reçoit la requête et reconnait son adresse IP va répondre à la requête en remplissant l’adresse MAC recherchée avec son adresse physique. Cette réponse n’est pas diffusée mais directement retournée à l’attention du système qui a envoyé la requête (la réponse est envoyée dans une trame unicast alors que la requête est envoyée dans une trame broadcast).
Table ARP
Lorsque l’information attendue est reçue, la trame Ethernet peut être finalisée et réellement émise sur le média. Cependant, pour optimiser le traffic sur le réseau, la correspondance IP/MAC est conservée dans ce que l’on appelle la table ARP du système. Sous Windows par exemple, la commande arp -a permet de faire afficher le contenu de la table.
Vous pourrez vérifier que cette table ne contient que des entrées correspondant à des systèmes qui appartiennent à votre sous-réseau. Pourtant, les échanges IP ne se font pas toujours avec des systèmes locaux mais parfois avec des systèmes distants! Oui, c’est vrai. Mais dans ce cas, la requête ARP ne cherche pas l’adresse physique du destinataire final mais plutôt du système qui va assurer l’acheminement du paquet: la passerelle par défaut.
Il y a donc une analyse préliminaire pour savoir si la trame Ethernet doit être envoyée directement au système concerné (s’il est sur le même sous-réseau IP que la source) ou bien si la trame doit être confiée à un équipement intermédiaire (je parle de boite aux lettres jaune de La Poste dans mes formations pour faire l’analogie avec l’envoi de courrier).
On parle parfois de la fonction de routage du terminal IP (une fonction de routage IP simplifiée)… mais c’est l’objet d’un autre article ! En attendant, laissez-moi vos commentaires ou questions relatives au protocole ARP dans la fenêtre de commentaire ci-dessous…
Très impressionnant vraiment, merci pour la leçon
Bonjour
Bonne vulgarisation.
Merci
L’extension de cet article à d’autres protocoles qu’ethernet (eui64, irda, fddi, …) serait intéressante
PS: Pouvoir télécharger l’article en PDF serait un plus
Cordialement
nbanba