ARP, qui es-tu ?

Introduction

Dans les chapitres précédents nous avons étudié l’adressage IP et les notions de base du routage. A plusieurs reprises mes schémas présentaient des réseaux locaux (LAN : Local Area Network) nommés Ethernet et raccordés à des routeurs.

Sur certains schémas j’ai fait apparaître des trames de niveau 2 qui véhiculaient des paquets IP. Ces trames comportaient à priori une adresse niveau 2 ! Enfin j’ai plusieurs fois fait allusion à ARP qui permettrait de faire correspondre l’adresse de niveau 2 avec celle de niveau 3 !

Si vous êtes novices ou débutants vous avez probablement dû me haïr et me mettre au rang des mauvais formateurs qui font exprès de parler de trucs que vous connaissez pas sans vous éclairer, pour se donner un air intelligent ! Peut-être même que vous n’en avez pas dormi !

Je m’en veux de vous laisser dans cet état, et je ne supporte pas qu’on me haïsse ! Alors je vais tout vous dire … Fini les insomnies !

Dans ce chapitre, pour comprendre l’utilité d’ARP nous aborderons rapidement la notion de réseau local et d’adresse de niveau 2, puis nous étudierons le rôle d’ARP, ses mécanismes de fonctionnement et son format de paquet. Enfin, si vous êtes sages, nous aborderons également la notion de Proxy-ARP (ha ! ha ! Vous la connaissiez pas celle-là, hein ?).

C’est quoi un LAN ?

Caractéristiques

Le but de ce cours n’étant pas de présenter les LANs je citerai leurs caractéristiques essentielles :

  • couverture géographique faible (je viens de le dire !)
  • hauts débits de transmission (plusieurs Méga bits par seconde : Mbps). Leur faible couverture géographique permet d’installer des supports physiques d’excellente qualité (affaiblissement faible, peu de diaphonie et paradiaphonie, bande passante élevée) pour la transmission de données. Ces supports sont de la paire torsadée (L120, catégorie 5, etc.), de la fibre optique ou du câble coaxial (de plus en plus rare !).
  • réseau de diffusion (avant l’arrivée des switchs je sais …Mais une chose à la fois ! Pensez à ceux qui n’y connaissent rien !). C’est à dire que toute donnée émise sur le réseau est vue par tous les connectés. Lorsqu’une station envoie une trame de niveau 2 (rappelez-vous le modèle OSI ! Sur un support physique on implémente une procédure de niveau 2), cette trame est diffusée à toutes les stations présentes sur le réseau local. Cette opération est facilitée par la topologie logique (et éventuellement physique) du réseau. Les stations sont connectés à un bus ou à un anneau (pour 99% des cas !). On dit que les réseaux locaux fonctionnent sur des supports partagés. Cette caractéristique est extrêmement importante car c’est elle qui oblige à la mise en place d’un adressage au niveau 2.
  • méthode d’accès au support. Chaque type de LAN met en oeuvre une procédure particulière, et normalisée, d’accès au support afin d’émettre les trames. Cette procédure est communément appelée le MAC : Medium Access Control. D’une manière générale étant donné que le support est partagé entre toutes les stations d’un réseau local, seule une trame à la fois est véhiculée par le support. Le MAC veille donc à donner équitablement la parole à chaque station, et bien sûr détecte les éventuelles cacophonie si certaines stations ne respectent pas le jeu. Enfin le MAC défini le format de la trame de niveau 2. Vous pouvez assimilé le MAC à la procédure de niveau 2 au même titre qu’HDLC par exemple pour un réseau WAN.

Pour la suite de ce chapitre, il est important de retenir que :

 

  • un LAN est un réseau de diffusion qui partage son support entre toutes les stations présentes (technologie logique du bus).
  • un LAN implémente une procédure de niveau 2 nommée MAC qui définie un format de trame et gère la méthode d’accès au support.
  • en raison de la caractèristique de diffusion, le MAC défini un adressage de niveau 2 pour les trames (adresse de destination et adresse source)

Principaux LAN

La star incontestée est Ethernet ! Ce type de réseau local représente aujourd’hui plus de 80% du parc. Il se décline en plusieurs débit, 10, 100, 1000 et bientôt 10 000 Mbps ! Les appelations courantes sont respectivment Ethernet, Fast Ethernet, Giga Ethernet et 10 Giga Ethernet (il y a même des bruits de couloirs sur du Tera Ethernet ! Moi ça me fait peur !).

Un autre réseau local assez connu, mais en sérieuse perte de vitesse : Token Ring (Anneau à jeton). C’est une production d’IBM ! Belle technique, bonne qualité de service mais pas assez ouvert, trop complexe. N’existe que dans les environnement IBM d’ancienne génération (SNA). Il se décline en deux versions 4 et 16 Mbps.

Parfois vous entendrez parler de FDDI mais pour moi c’est un MAN (Metropolitan Area Network) offrant une couverture géographique d’une centaine de Km. Ce n’est pas un LAN. Mais il est vrai qu’il est parfois utilisé en LAN pour son débit (100 Mbps) et sa fiabilité (double-anneau à reconfiguration automatique). C’est une technologie assez chère.

L’adressage MAC

Ce qui nous préoccupe dans ce cours, c’est l’adressage de niveau 2. En effet sur un LAN, les stations voient passer toutes les trames émises, il faut donc qu’elles puissent différencier celles qui les concerne des autres. Pour cela, elles vont se baser sur l’adresse destination de la trame. Une station ne lira le contenu que des trames qui lui sont adressées.

Quand une trame est adressée à une station unique du réseau local, elle comporte un format d’adresse dit « unicast« . Mais une trame peut également être adressée à un groupe de stations ou à toutes les stations du réseau local. L’adressage est alors respectivement nommé « multicast » et « broadcast« .

La station qui reçoit une trame doit pouvoir y répondre. Chaque trame posséde donc une adresse MAC source qui permet au destinataire d’identifier l’émetteur.

Pour des raisons que je ne présenterai pas ici, l’adressage MAC garanti l’unicité mondiale d’une adresse. L’adresse d’une station est d’ailleurs inscrite « en dur » sur la carte réseau installée dans la machine.

Cette adresse est définie sur 6 octets. Les trois premiers octets indiquent le numéro du constructeur et les trois derniers indiquent le numéro de la carte dans la série du constructeur. Si demain vous voulez vous mettre à produire des cartes Ethernet, pour faire concurrence à 3Com (les fameuses EtherLink), il vous faudra d’abord demander à un organisme central (je sais plus lequel !), une adresse constructeur. Après quoi, vous vous engagez à ne pas produire deux cartes ayant le même numéro sur les toris derniers octets. Ainsi l’unicité de l’adresse est garanti ! Bien sûr si vous décidez de concurrencer Cisco il vous faudra prendre plusieurs adresses constructeurs, pour pouvoir produire toutes vos cartes ! Mais sur 6 octets c’est :

  • 224 (plus de 16 millions !) constructeurs possibles
  • 224 (plus de 16 millions !) cartes par constructeur !

En vérité, pour assurer les adressages multicast et broadcast, certains bits sont bloqués notamment sur la partie constructeur ! Mais on a de la marge !

Lorsqu’on énonce une adresse MAC, on donne sa valeur en hexadécimal pour chaque octet (Et oui ! Après le décimale et le binaire, on passe à l’hexadécimal ! Pas facile le réseau !). Par exemple : 00.00.0C.1A.BE.34 ! Super lisible non ?

Peu importe ! Retenez simplement :

  • qu’une adresse MAC se définie sur 6 octets
  • qu’il existe des adresses MAC destinations « unicast« , et « broadcast » (vous pouvez oublier le « multicast » pour ce cours !). L’adresse destination broadcast a pour valeur hexadécimale : FF.FF.FF.FF.FF.FF (tous les bits à 1 !).
  • que l’adresse est, généralement, fixée « en dur » sur la carte réseau de la machine. Autrement dit, si vous changez la carte réseau d’une machine vous allez changer d’adresse MAC !! Croyez-moi, ce n’est pas anodin si j’insiste sur ce point !

Vous n’avez pas besoin d’en savoir plus pour aborder ARP.

Rôle d’ARP

Nous avons vu qu’une station ne lisait le contenu d’une trame qu’à la condition qu’elle lui soit adressée. Or le paquet IP est justement placé dans la trame ! Lorsqu’une couche haute transmets des données à une autre machine, elle communique à la couche IP, l’adresse IP de destination.

IP formate ensuite un paquet avec une entête IP. Celle-ci comportent l’adresse de destination, transmise par la couche supérieure, et l’adresse IP source de l’émetteur. Cette dernière est connu par IP car vous l’avez initialisée lors de l’installation de la machine.

IP communique ce paquet à la couche 2 (ici le MAC) pour l’encapsuler dans une trame MAC avant émission sur le support. Mais il doit également communiquer l’adresse MAC de destination de la trame, pour que la couche 2 puisse formater correctement la trame ! D’où IP sortira-t-il cette adresse ? Il va l’inventer ? Non … ARP est là !

ARP pour Address Resolution Protocol prend en charge, comme son nom l’indique, la résolution d’adresse entre le niveau 2 et le niveau 3. Il a pour rôle de trouver l’adresse MAC correspondant à une adresse IP donnée.

Lorsqu’il a découvert cette adresse, il met à jour une table ARP !

Fonctionnement d’ARP

Nous venons de voir qu’IP doit transmettre à la couche MAC l’adresse de destination MAC de la trame qui véhiculera le paquet IP transmis. La procédure est la suivante :

  • IP scrute sa table ARP pour trouver la correspondance MAC de l’adresse IP transmise par la couche supérieure :
    • S’il n’a jamais communiqué avec la station ayant cette adresse depuis son « boot » (la table ARP est en RAM, donc volatile !), il ne connaît pas la correspondance et passe à l’étape suivante.
    • S’il trouve la correspondance il transmet l’adresse MAC à la couche MAC en même temps que son paquet IP (rappelez-vous le modèle OSI et le dialogue vertical inter-couches !) et c’est fini pour lui !

  • S’il ne trouve pas de correspondance, il transmet l’adresse IP destination au protocole ARP, en lui demandant de trouver la correspondance d’adresse MAC :
    • ARP formate un paquet ARP Request (nous verrons son format plus tard), qu’il place directement dans une trame MAC « broadcast« . Celle-ci, parce qu’elle est émise en broadcast, est lue par toutes les stations du LAN. Le paquet ARP_Request dit : « Coucou, je suis 10.0.0.1 sur 00.00.0C.1A.34.EC et je cherche 10.0.0.2. Y a quelqu’un ??« .

    • Toutes les stations actives du réseau reçoivent la trame et lisent son contenu. Elles détectent un paquet ARP-Request qu’elles transmettent à leur propre sous-programme ARP.
    • Seule la station ayant l’adresse IP indiquée dans le paquet ARP_Request répondra ! Elle émettra un paquet ARP_Reply annonçant : « Salut 10.0.0.1 ! Moi je suis bien 10.0.0.2 et j’habite à 00.00.0C.2A.32.55 ! Ecris-moi !« . Ce paquet ARP_Reply est encapsulé dans une trame émise en « unicast » à la station qui a recherchée l’adresse (adresse MAC : 00.00.0C.1A.34.EC pour notre exemple), il est, en effet, inutile d’embêter tous le monde avec la réponse ! La station en profite également pour mettre à jour sa table ARP (pour notre exemple : 10.0.0.1 = 00.00.0C.1A.34.EC).

  • La station ayant initié la séquence ARP, reçoit donc une trame MAC qui lui est adressée et contenant un paquet ARP_Response véhiculant l’adresse MAC en correspondance avec l’adresse IP sur laquelle elle a lancé la recherche. Elle met à jour sa table ARP (pour notre : 10.0.0.2 = 00.00.0C.2A.32.55).

La séquence de recherche est terminée ! Maintenant IP peut envoyer son paquet à la couche MAC en transmettant l’adresse MAC !

Vous voyez, ARP c’est très simple !

Formats des paquets ARP

ARP est encapsulé directement dans IP (il n’est pas placé dans UDP ou TCP). Il propose deux paquets :

      • La requête pour initier la recherche : ARP_Request
      • La réponse à la requête : ARP_Reply
  • Le champ HW : indique le type de réseau support sur lequel la séquence a été activée. Pour Ethernet le code est (0001)h.
  • Le champ Longueur d’adresse MAC : indique le nombre d’octets des champs d’adresse MAC des paquets ARP. La valeur est généralement (0006)h.
  • Le champ Longueur d’adresse protocolaire : indique la longueur en octets des champs d’adresse de niveau 3. Pour IP la valeur est (0004)h..
  • Le champ Code d’opération : indique le type de paquet ARP. (0001)h = ARP_Request et (0002)h = ARP_Response (appelé aussi ARP_Reply).
  • Les champs adresse MAC source et adresse protocolaire source : supportent les adresses MAC et protocolaire (IP) de l’émetteur du paquet. Dans le cas d’un paquet ARP_Request ce sont donc les adresses niveau 2 et 3 de l’initiateur de la séquence ARP. Dans le cas du paquet ARP_Reply, la station répondant à la requête ARP y place ses propres adresses niveau 2 et 3.
  • Les champs adresse MAC destination et adresse protocolaire destination : supportent les adresses MAC et protocolaire (IP) de la station à atteindre. Dans le cas d’un paquet ARP_Request ce sont donc les adresses niveau 2 et 3 de la station pour laquelle l’initiateur de la séquence ARP a lancé la recherche. Comme l’émetteur du paquet ne connait pas l’adresse niveau 2 de la station qu’il cherche à atteindre (normal ! c’est justement ce qu’il cherche à connaître !), le champ adresse MAC destination est placé à 0. Dans un paquet ARP_Request le champ adresse MAC destination est donc toujours à 0, par contre le champ adresse protocolaire destination contient toujours l’adresse niveau 3 de la station dont on veut faire la résolution d’adresse. Dans le cas du paquet ARP_Reply, la station répondant à la requête ARP remplace les valeurs de ces champs par les valeurs d’adresse de l’émetteur du paquet ARP_Request. Elle recopie en fait les champs adresse MAC source et adresse protocolaire source du paquet ARP_Request reçu dans les champs destination correspondants du paquet ARP_Reply émis en réponse.

Quelques remarques à propos d’ARP

Les problème liés à la table ARP

Je vous l’ai précédemment indiqué la table ARP est mémorisée en RAM. De plus, dans la majorité des cas il n’y a pas de timeout sur les tables ARP. Ceci veut dire que lorsqu’une correspondance MAC-IP a été réalisée elle reste mémorisée dans la station jusqu’au « reboot » de celle-ci. Et croyez-moi ! Ce n’est pas anodin !

Dans une architecture classique des stations et des serveurs partageant le même réseau local discutent ensemble. Supposons qu’un PC rencontre un problème vous allez le remplacer. La carte réseau du nouveau PC aura une adresse MAC différente. Par contre vous aurez réaffecté au PC la même adresse IP. Mais le serveur a mémorisé dans sa table ARP la correspondance « Ancienne @MAC-@IP ». S’il émet des données vers le PC celui-ci ne lira pas les trames puisque leurs adresses destinations ne correspondent pas à son adresse MAC !

Rassurez-vous ! Pour un PC ce n’est pas grave ! En effet, pour le remplacer vous avez dû le mettre hors tension. Le nouveau PC a donc une table ARP vierge. Comme un PC est plutôt client, c’est lui qui va demander des infos au serveur, ce n’est pas le serveur qui va décider de lui parler de lui-même (il a autre chose à faire, le bougre, que de faire la causette aux nouveaux qui lui demandent rien !!). Le PC va donc lancer une séquence ARP vers le serveur pour mettre à jour sa table et le serveur va en profiter pour détecter la modification d’adresse MAC et mettre à jour sa propre table !

Mais imaginons que vous remplaciez une station qui ne cause pas toute seule sans être sollicitée ! Imaginez que vous remplaciez un serveur ou un routeur !! Pensez-bien à faire rebooter les PC du LAN … Sinon … Plus de communication avec le serveur ou le routeur ! Toutes les tables ARP des stations sont fausses pour la résolution d’adresse de l’équipement que vous avez remplacé !

ARP et la passerelle par défaut

Dans les exemples de routage des chapitres précédents, et notamment dans le paragraphe « Sortir du réseau » du chapitre 6, nous avons vu qu’une station envoie son paquet à une passerelle par défaut lorsque le paquet est à destination d’un autre réseau IP.

Nous avons très succinctement évoqué le rôle d’ARP dans ce mécanisme. En effet, comment envoyer un paquet IP à destination de 12.0.0.1 en voulant le transférer à 10.0.0.254 sans changer l’adresse IP du paquet ? C’est simple … On l’envoie dans une trame ayant pour adresse destination, l’adresse MAC du routeur (passerelle).

Lorsque la station doit envoyer un paquet en dehors de son réseau IP, elle scrute sa configuration pour trouver l’adresse de Gateway Default que vous lui avez donné lors de son installation. Puis elle regarde dans sa table ARP, l’adresse MAC correspondante à l’adresse IP de la Gateway Default. Si celle-ci existe dans la table ARP, la station encapsule son paquet IP dans une trame à destination de l’adresse MAC de la passerelle. Si celle-ci n’existe pas, elle lance une procédure de résolution d’adresse ARP, telle que nous l’avons précédemment étudié !

Et le tour est joué ! La passerelle reçoit une trame qui lui est destinée et qui véhicule un paquet IP qui ne lui est pas destiné. Elle applique l’organigramme de routage tel que nous l’avons vu au chapitre 6.

La tempête du matin …

Tous le monde commence son travail entre 8 et 9 heures le matin … Enfin c’est la moyenne des bureaux … En arrivant la première opération est d’allumer son PC avant même de retirer son manteau (on espère que Windows aura fini son boot quand on sera revenu du premier café !).

Comme les tables ARP sont vides à ce moment là (rappelez-vous, elles sont stockées en RAM, donc volatile). Dès qu’on va appelé un serveur il va falloir renseigner la table ARP. Chaque fois qu’on appelle une ressource il faut de nouveau renseigner cette table.

Les requêtes sont véhiculées par des trames « broadcast« , qui sont donc lus par toutes les stations. Bien souvent seuls les serveurs sont sollicités et sont donc les seuls à répondre.

Quoiqu’il en soit, lorsque vous placez un analyseur sur un réseau LAN vous assistez à des « tempêtes de broadcast » dans ce créneau horaire. Ceci entraîne une surcharge momentanée du réseau … Il est déconseillé de procéder dans ce créneau horaire à des opérations lourdes de duplication de bases par exemple !! Vous noterez un ralentissement non négligeable !

Les serveurs doivent répondre à des centaines de requêtes ARP, le LAN véhicule deux trames par requête, toutes les stations lisent les broadcast des requêtes ARP … Et on travaille quand ?

ARP et la sécurité !

ARP est un bonheur pour les « hackers » et une plaie pour les administrateurs. En effet grâce à ARP, si vous avez les moyens d’accéder au LAN, vous pouvez connaître très rapidement l’ensemble des stations présentent sur un LAN !

Avec un peu de connaissance, vous pouvez programmer un petit utilitaire ou installer sur votre PC un analyseur qui va scruter le contenu de tous les ARP_Request et ARP_Reply émis sur le LAN. Vous aurez ainsi découvert toutes les adresses niveau 2 et 3 des équipements du LAN.

Ne reste plus qu’à faire « sauter » les protections des couches supérieures …

Vous pouvez même vous substituer à une station lorsque celle-ci aura réalisé son authentification d’accès auprès d’un serveur !! Vous attendez qu’elle entre son login/password en surveillant le trafic. Puis vous reprogrammez votre station avec l’@MAC et l’@IP de la station. Vous accédez ainsi en son nom au serveur, et lui ni voit que du feu !

Vous allez me dire qu’il faut quand même accéder au LAN ! Certes, mais les anglo-saxons estiment que 70% des actes de piratages ont pour source l’intérieur de l’entreprise. Je vous accorde qu’ils sont un peu parano, mais …

Rassurez-vous, des mécanismes de couches supérieures permettent de vaincre ce trou de sécurité, mais il existe aussi des moyens de les faire sauter !

Le proxy-ARP, c’est quoi ?

Vous avez peut-être déjà croisé ce terme en vous demandant pourquoi un ARP de proximité ? En fait c’est un ARP qui trompe !!

Supposons que votre entreprise rachète une autre entreprise (disons que vous travaillez chez Cisco, Intel ou Microsoft !). Le siège de cette nouvelle entreprise posséde un réseau local supportant l’adresse réseau 10.0.0.0. Pas de chance ! C’est la même adresse réseau que celle de votre siège ! Et bien sûr, votre PDG veut que vous interconnectiez les deux sites (heu .. Plutôt DSI ! Un PDG, ne sait pas ce que veut dire « interconnecter » ! Lui il dit : « Fusionner moi nos bases de connaissances ! »).

Vous voilà bien embêté ! Si vous placez un routeur entre les deux, il va être malade si vous placez chacune de ces interfaces dans le même réseau IP (croyez-moi, il ne se laissera pas faire ! Belliqueux l’engin !).

Mais dans votre malheur, vous avez un peu de chance (croyez-moi, profitez-en ! Parce que c’est pas souvent !). En effet, en examinant le plan d’adressage de l’entreprise achetée vous remarquez que tous les équipements de son réseau local ont pour adresses 10.1.X.X avec un masque 255.0.0.0. Or vos stations sont toutes avec une adresse 10.2.X.X/8 ! Quelle chance (croyez-moi ! J’insiste ! C’est pas souvent !) ! Vous allez vous en sortir avec Proxy-ARP, sans être obligé de reprogrammer toutes les stations (ben oui .. Vous connaissez pas DHCP alors vous en êtes pour vos frais .. C’était une petite remarque à l’attention des experts dans le fond de la salle, qui sont tordus de rire !).

Vous avez remarqué que les stations avaient un masque de réseau classe A sans sous-réseau. Autrement dit, la station 10.2.0.1 de votre siège estime que le serveur 10.1.0.1 du siège de l’entreprise achetée est sur son réseau IP ! Elle va donc tenter de le contacter directement sans passer par votre routeur installé entre les deux réseaux ! Quand elle lancera une requête ARP pour connaître l’adresse MAC du serveur, elle n’obtiendra rien puisqu’il n’est pas sur son LAN !

En installant un routeur entre les deux réseaux, qui implémente la fonction Proxy-ARP vous allez résoudre le problème ! Vous devez simplement placer chaque interface du routeur dans un sous-réseau différent :

  • L’interface branchée sur le LAN de l’entreprise achetée sera paramétrée avec l’adresse 10.1.254.254/16 (le masque indique que l’interface est dans le sous-réseau 10.1.0.0).
  • L’interface branchée sur le LAN de votre siège sera paramétrée avec l’adresse 10.2.254.254/16 (le masque indique que l’interface est dans le sous-réseau 10.2.0.0).

Si la fonction Proxy-ARP est implémentée dans le routeur, voici ce qui va se passer :

  • 10.2.0.1 va tenter de trouver l’adresse MAC de 10.1.0.1 par un ARP_Request. Cette requête est émise dans une trame MAC en broadcast (Flèche 1 sur le schéma) . Toutes les stations du réseau vont lire cette trame !
  • Le routeur, qui est une station comme les autres, va lire la trame, transférer le paquet ARP à son module ARP ! Il verra que ce n’est pas son adresse IP d’interface qu’on sollicite.
  • Mais, si le Proxy-ARP est actif, il va essayer de corréler l’adresse réseau recherchée avec celles existants dans sa table de routage. Il va donc voir qu’on cherche à joindre une station du sous-réseau 10.1.0.0 qui est sur son autre interface ! Il va alors se substituer à l’adresse demandée, en répondant à l’ARP_Request, par un ARP_Response (Flèche 2 du schéma) donnant l’adresse MAC de son interface sur le LAN 10.2.0.0.
  • La station va croire que c’est 10.1.0.1 qui lui répond et va initialiser dans sa table ARP, la correspondance 10.1.0.1 = @MAC routeur. Tous les prochains paquets émis à 10.1.0.1 seront donc placés dans des trames à destination du routeur !

Et c’est très bien comme ça ! Le routeur pourra router les paquets et tout le monde sera content !

C’est ça le Proxy-ARP !!

Conclusion du chapitre

Ouf ! C’en est fini d’ARP ! Pas compliqué, mais difficile à expliquer par écrit !! Pas trop fatiguant ce chapitre ? Normal ! On prenait des forces pour la suite …

Dans le chapitre suivant (pour se réveiller) on va fragmenter le paquet IP ! C’est sympa un paquet IP en petits morceaux, non ?

Page Précédente | Page Suivante