Principe de résolution des adresses : Le protocole ARP
Le protocole ARP
(RFC 286) est un protocole associé à la couche liaison de données du modèle
OSI ou à la couche Accés Réseau du modèle
TCP/IP.
Bien que ARP soit encapsulé dans Ethernet, ce protocole appartient à la même couche. ARP ne peut pas être considéré comme un protocole appartenant à la couche Réseau car la requête s'effectue en diffusion et ne passe donc pas à travers un routeur.
1) Rôle du protocole ARP:
Le rôle du protocole ARP est de
fournir un moyen de connaître l’adresse physique (adresse
MAC: numéro de la carte Ethernet)
d’une machine alors qu’on ne connaît que son
adresse logique (adresse IP): Résoudre une adresse
physique.
En effet la connaissance de l’adresse physique
(MAC) du destinataire est le seul moyen de pouvoir communiquer sur un
réseau local.
2) Recherche des adresses MAC:
Le PC1 veut communiquer avec le PC3. Le PC1 envoie une trame de diffusion générale (broadcast). Chacune des stations présentes examine cette requête de diffusion, et le PC3 renvoie , en unicast au PC1, une trame ARP de réponse contenant son adresse réseau(MAC). Le dialogue peut alors commencer. L’adresse correspondante est stockée en dynamique dans une table de résolution.
Dans la version IPv6, les protocoles ARP et RARP ne sont plus utilisés et sont remplacés par un protocole de découverte des voisins, appelé ND (Neighbor Discovery), qui est un sous-ensemble du protocole de contrôle ICMP, que nous examinerons ultérieurement.
3)
Cache ARP:
Pour
éviter de surcharger le réseau de requêtes ARP,
chaque machine gère un cache ARP (ou table de cache
ARP) c’est à dire un espace mémoire dans
lequel est enregistrée une table comportant l’ensemble
des correspondances @physique⇔@IP des autres machines
appartenant au même réseau logique qu’elle.
Cette table est alimentée, par défaut,
dynamiquement. En effet, chaque fois qu’une machine A reçoit,
en provenance d’une machine B, une requête ARP lui étant
destinée, non seulement A renvoie une réponse avec sa
propre adresse physique mais en profite pour mettre à jour,
dans sa table de cache ARP, l’enregistrement (la ligne de
correspondance @physique de B ⇔ @IP de B) relatif à B.
Les caches ARP peuvent également être
alimentés manuellement.
4)
TimeOut:
Pour s’assurer de la validité
des informations contenues dans sa table ARP, une machine retire de
sa table toute entrée correspondant à une machine dont
elle n’a pas reçu de trame depuis un certain temps. Ce
certain temps est le timeout et vaut dans la plupart
des cas 15 minutes.
La valeur du timeout peut être
modifiée en fonction de l’implémentation de la
pile TCP/IP dans le système d’exploitation présent
sur la machine.
5)
Pas de Routage des
trames ARP:
Les
paquets
ARP ne sont pas encapsulés par le protocole IP mais dans des
trames de protocoles de couche Liaison de données
(couche 2 OSI ou couche 1 du modèle TCP/IP). On a donc une
encapsulation Ethernet et non pas une encapsulation IP.
Or le
routage est une opération qui s’effectue au niveau des
paquets IP (couche 3 OSI ou couche 2 du modèle TCP/IP).
Les trames ARP ne sont
donc pas routables, c’est à dire qu’elles ne
peuvent pas traverser un routeur.
Pour cette raison, une requête
ARP n’a de sens que si une machine A souhaite contacter une
machine B qui se trouve sur
le même réseau logique que
A. Les machines A et B doivent donc se situer sur des réseaux
d’adresse logique.
6)
Résolution des adresses pour des stations placées
dans des sous-réseaux différents :
La station consulte sa table de routage et à l'aide du masque réalise que la station destinataire appartient à un sous-réseau différent. Si son cache est vide elle fait une requête ARP pour déterminer l'adresse physique du routeur( passerelle par défaut) puis lui transmet l'information. Le routeur du côté du sous-réseau destinataire réalise une résolution ARP afin de connaître l'adresse MAC ded la station destinataire.
7) Commandes:
arp -av permet d’afficher, en mode verbeux, toutes les entrées du cache ARP
arp -nv idem mais nom d’hôte en mode numérique.
arp -d <nom_hôte> permet de supprimer l’entrée relative à nom_hôte
arp -s <nom_d_hôte> <hw_addr> ajoute une entrée dans la table ARP pour la machine nom_d_hôte (peut être une adresse IP) et dont l’adresse physique vaut hw_addr
8)
Le protocole RARP
Le RARP est utilisé par des NetWork Computers (machines sans disque dur), qui ont une MAC@, mais ne connaissent pas leur propre iP@.Dans ce cas, ces machines interrogent un serveur spécialisé. Les trames RARP ont le même format que les trames ARP. Dans une trame Ethernet, le protocole RARP est désigné par: 0x0835
9)
Encapsulation dans une
trame Etherne ARP : Le
type de trame sera 0x0806
En-tête ARP
Hardware type : 0x0001: Ethernet
Protocol Type: 0x0800 - IP :indique quel protocole utilise ARP
Hardware Address Length : 01 - Token Ring 06 - Ethernet
longueur en octets
Protocol
Address Length : 04
- IP v4
Différences
entre Trame de requête et Trame de réponse:
Soit
une machine A émettant une requête ARP pour découvrir
l’adresse physique d’une machine B.
champ Opcode
Trame de requête: valeur 0001 (demande)
Trame de réponse: valeur 0002 (réponse)
champ @ physique de l’émetteur
Trame de requête: contient l’adresse physique de la machine A
Trame de réponse: contient l’adresse physique de la machine B
champ @ logique de l’émetteur
Trame de requête: contient l’adresse logique de la machine A
Trame de réponse: contient l’adresse logique de la machine B
champ @ physique du destinataire
Trame de requête: contient que des 0 ou que des 1selon les systèmes d'exploitation
Trame de réponse: contient l’adresse physique de la machine A
champ @ logique du destinataire
Trame de requête: contient l’adresse logique de la machine B
Trame de réponse: contient l’adresse logique de la machine A
10)
Déroulement de l'envoi d'une requête ARP:
Une machine A souhaite connaître l’adresse physique d’une machine B située sur le même réseau logique que A:
1°/
La machine A, souhaitant joindre la machine B, applique son masque
réseau sur l’adresse logique (IP) de B
le résultat
du ET logique entre le masque réseau de A et
l’adresse IP de B est que la partie adresse réseau
de l’adresse IP de B est la même que la partie adresse
réseau de l’adresse IP de A.
2°/ La machine A consulte alors sa table de cache ARP et cherche, dans le champ adresse IP des enregistrements, l’adresse IP de la machine B.
3°/ N’ayant pas trouvé l’adresse IP de B dans les entrées de son cache ARP, la machine A émet en broadcast une requête ARP. La trame ARP émise ressemble à celle présentée par la figure ci-dessus. Le champ @ MAC destination vaut alors ff.ff.ff.ff.ff.ff (en hexadécimal) ce qui correspond à 48 bits (6 octets) positionnés à 1 pour l’adresse MAC de destination: une diffusion en broadcast.
4°/ Toutes les machines présentes sur le même réseau logique que A voient passer la requête ARP de A et regardent l’adresse MAC de destination contenue dans le champ @ MAC destination de la trame. En voyant que ce champ vaut 0xFF.FF.FF.FF.FF.FF elles savent alors que c’est une diffusion en broadcast. Donc elles regardent le champ Type protocole de la trame. Ce champ égal à 0x0806 confirme que c’est une trame ARP .
5°/
L’en-tête Ethernet ayant été enlevé
(il y a donc eu désencapsulation) il ne reste que le
paquet ARP. Celui-ci est passé, par le protocole
Ethernet de la couche Liaison de données, au
protocole ARP de la couche 3 (couche Réseau du modèle
OSI).
Après avoir vérifié que les
informations des 2 premiers champs Hardware Type et Protocol
Type du paquet ARP sont correctes, la machine regarde dans son
cache ARP s’il y a une entrée dont l’adresse
logique serait identique à l’adresse logique inscrite
dans le champ @ logique de l’émetteur. Si c’est
le cas, alors l’adresse physique de l’entrée
est mise à jour !!!
Le protocole ARP prévoit donc
que toutes les machines mettent à jour une partie
de leur cache ARP même lorsqu’elles ne sont pas
le destinataire de la requête.
6°/ Ensuite la machine regarde si l’adresse de destination indiquée dans le champ @ logique du destinataire correspond à sa propre adresse IP. Si c’est le cas, elle met à jour sa table de cache ARP. Cette fois-ci c’est l’enregistrement complet qui est mis à jour: adresse IP + adresse MAC de l'émetteur.
7°/ La machine regarde enfin le champ Opcode. Si ce champ vaut 0x0001 alors c’est une requête ARP et la machine va répondre.
8°/ Pour répondre, la machine utilise le même paquet ARP que la requête. Celui ci étant placé dans une mémoire tampon (buffer). Elle doit simplement remplacer les valeurs des champs @ logique de l’émetteur, @ logique du destinataire, @ physique de l’émetteur, @ physique du destinataire et Opcode
9°/ Le paquet ainsi modifié peut être transmis par le protocole ARP au protocole Ethernet qui l’enverra à la machine A
Sur
la figure, on distingue bien d’une part l’en-tête
Ethernet et d’autre part le paquet ARP.
Remarques:
Si
on compte le nombre d’octets, chaque groupe de 2 chiffres
hexadécimaux représentant un octet, on trouve 42
octets. Or une trame doit faire au moins 64 octets.
Les octets
manquants sont:
Les 4 octets de FCS de l’en-tête Ethernet. Il est fréquent que ces octets ne soient pas affichés par les sniffeurs.
Le champ données contient le paquet ARP de 28 octets. Il manque donc les 18 octets de bourrage ajoutés par le protocole Ethernet pour constituer un champ données de 46 octets(taille mini du champ de données d'une trame Ethernet. Là encore, il est fréquent que ces octets ne soient pas affichés par les sniffeurs.
Particularités:
Lorsqu’on capture le trafic réseau, à
l’aide d’un logiciel tel que Ethereal, on peut être
amené à capturer deux types particuliers de trame ARP.
Le premier type
spécifique de trame ARP présente la particularité
d’avoir, dans le champ @ physique de destination de
l’en-tête Ethernet, la valeur de l’adresse
physique de la machine de destination. Il ne s’agit donc pas
d’une diffusion en broadcast.
Pourquoi envoyer une
requête ARP en unicast alors que l’on connaît
l’adresse physique de la machine destinataire ?
Certaines
implémentations du protocole ARP au sein de la pile TCP/IP
procure un mécanisme qui envoie en unicast, à une
machine M, une requête ARP juste avant de retirer
l’enregistrement relatif à cette machine M du cache
ARP.
On a vu que si une machine A n’a pas de nouvelles
d’une machine M pendant le timeout alors
l’enregistrement, dans le cache ARP de la machine A, relatif à
la machine B est supprimé.
Il existe donc des systèmes,
qui juste avant d’effacer un enregistrement du cache ARP, font
une dernière tentative. Si une réponse à la
requête ARP est obtenue alors l’enregistrement n’est
pas effacé. Dans le cas contraire, l’enregistrement est
bel et bien effacé.
Le deuxième
type spécifique de trame ARP que l’on peut rencontrer
présente, cette fois-ci, la particularité d’avoir
dans le champ @ logique de destination de l’en-tête
ARP, la valeur de l’adresse IP de la machine qui émet
la requête !
Ce type de requête ARP est émis
lors du démarrage de la machine et a pour fonction de
découvrir d’éventuelles erreurs d’attribution
d’adresses IP.
En effet, si une réponse est
renvoyée à une telle requête, cela veut dire
qu’il y a une autre machine qui a reconnue, en l’adresse
logique du champ @ logique de destination, sa propre adresse
IP. Ce qui est tout à fait anormal puisque cette adresse IP
est déjà affectée à la machine qui a
émis la requête !
On peut donc par le biais
d’une telle requête, détecter les doublons
d’adresses IP.
Autre exemple: