Outils pour utilisateurs

Outils du site


Ethernet et ARP

Nous savons que sur un réseau local Ethernet chaque nœud dispose d'une adresse utilisée par le «Media Access Control» grâce à laquelle chaque nœud est parfaitement identifiable. Sur des architectures de type NetBIOS, des algorithmes permettaient d'établir des relations directes entre les noms des nœuds et leur adresse MAC. Avec l'arrivée d'IP, c'est une relation entre adresse IP et adresse MAC que chaque nœud doit connaître avant toute tentative de dialogue. C'est ARP qui s'en charge, et voici comment.

Relations entre MAC et IPv4

Il faut maintenant mettre en évidence la façon dont le système retrouve les adresses MAC en fonction des adresses IPv4. Nous allons espionner ce qu'il se passe sur la couche Ethernet lorsqu'un nœud ipv4 cherche à dialoguer avec un autre nœud IPv4. La commande la plus simple à utiliser pour générer un dialogue est la commande ping qui utilise le protocole ICMP que nous étudierons plus tard en détail.

L'outil d'espionnage se nomme Wireshark, c'est une référence dans le domaine. Il est distribué sous licence libre GPL.

Address Resolution Protocol

Pour rappel, soit le réseau local suivant: LAN du labo Le poste 192.168.60.127 doit lancer une impression sur 192.168.60.10, mais le poste ne connaît pas l'adresse MAC associée à 192.168.60.10. La preuve ?

arp -n

Adresse                  TypeMap AdresseMat          Indicateurs           Iface
192.168.60.254           ether   68:a3:78:86:ec:02   C                     enp1s0
192.168.60.3             ether   18:31:bf:df:a1:f0   C                     enp1s0
192.168.60.47            ether   ae:2a:a7:dd:e6:07   C                     enp1s0

Nous allons la lui faire découvrir avec un simple: ping -c1 192.168.60.10 non sans avoir placé judicieusement notre sonde wiresherk, avec un filtre1) pour éliminer les trames parasites (car il s'en passe, des choses, même sur un réseau si petit).

Voici ce que l'on obtient:

No. Source                Destination           Protocol  Info
  1 RealtekU_37:36:49     Broadcast             ARP       Who has 192.168.60.10? Tell 192.168.60.127
  2 HonHaiPr_0c:8d:48     RealtekU_37:36:49     ARP       192.168.60.10 is at f8:da:0c:0c:8d:48
  3 192.168.60.127        192.168.60.10         ICMP      Echo (ping) request  id=0x0475, seq=1/256, ttl=64 (reply in 8)
  4 192.168.60.10         192.168.60.127        ICMP      Echo (ping) reply    id=0x0475, seq=1/256, ttl=255 (request in 7)

Avant de pourvoir effectuer le ping, le système lance une recherche ARP sous forme d'un broadcast la question étant:

Who has 192.168.60.10? Tell 192.168.60.127

Tout le monde entend la question, mais seul l'intéressé répond:

192.168.60.10 is at f8:da:0c:0c:8d:48

Et à ce moment seulement ICMP lance le ping.

Voyons dans le détail de ces trames.

Trame1:

Ethernet II, Src: RealtekU_37:36:49 (52:54:00:37:36:49), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
    Destination: Broadcast (ff:ff:ff:ff:ff:ff)
    Source: RealtekU_37:36:49 (52:54:00:37:36:49)
    Type: ARP (0x0806)
Address Resolution Protocol (request)
    Hardware type: Ethernet (1)
    Protocol type: IPv4 (0x0800)
    Hardware size: 6
    Protocol size: 4
    Opcode: request (1)
    Sender MAC address: RealtekU_37:36:49 (52:54:00:37:36:49)
    Sender IP address: 192.168.60.127
    Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
    Target IP address: 192.168.60.10

  1. Au niveau 2, nous voyons l'adresse MAC de la source et l'adresse MAC de broadcast (ff:ff:ff:ff:ff:ff).
  2. Au niveau 3, nous voyons les adresses IP de la source et de la cible.

Trame 2:

Ethernet II, Src: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48), Dst: RealtekU_37:36:49 (52:54:00:37:36:49)
    Destination: RealtekU_37:36:49 (52:54:00:37:36:49)
    Source: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48)
    Type: ARP (0x0806)
Address Resolution Protocol (reply)
    Hardware type: Ethernet (1)
    Protocol type: IPv4 (0x0800)
    Hardware size: 6
    Protocol size: 4
    Opcode: reply (2)
    Sender MAC address: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48)
    Sender IP address: 192.168.60.10
    Target MAC address: RealtekU_37:36:49 (52:54:00:37:36:49)
    Target IP address: 192.168.60.127
Nous avons notre réponse et le ping va pouvoir se faire:
Ethernet II, Src: RealtekU_37:36:49 (52:54:00:37:36:49), Dst: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48)
    Destination: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48)
    Source: RealtekU_37:36:49 (52:54:00:37:36:49)
    Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 192.168.60.127, Dst: 192.168.60.10
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
        0000 00.. = Differentiated Services Codepoint: Default (0)
        .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    Total Length: 84
    Identification: 0xfe75 (65141)
    010. .... = Flags: 0x2, Don't fragment
        0... .... = Reserved bit: Not set
        .1.. .... = Don't fragment: Set
        ..0. .... = More fragments: Not set
    ...0 0000 0000 0000 = Fragment Offset: 0
    Time to Live: 64
    Protocol: ICMP (1)
    Header Checksum: 0x4259
    Source Address: 192.168.60.127
    Destination Address: 192.168.60.10
Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
    Code: 0
    Checksum: 0x26a0
    Identifier (BE): 1141 (0x0475)
    Identifier (LE): 29956 (0x7504)
    Sequence Number (BE): 1 (0x0001)
    Sequence Number (LE): 256 (0x0100)]
    Timestamp from icmp data: Mar  2, 2025 16:14:08.000000000 CET
    Data (48 bytes)

  1. Au niveau Ethernet, nous voyons les adresses MAC,
  2. au niveau Internet, les adresses IP,
  3. au niveau ICMP Nous avons un exemple de l' «echo request» et nous aurons l’occasion de revoir ceci plus en détail avec l'étude détaillée d'ICMP.

Structure du protocole ARP

Structure ARP Nous retrouvons bien dans la capture Wireshark cette structure.

Compléments d'information

  1. La durée de vie d'une entrée dans le cache ARP est limitée. Les durées sont paramétrables, mais par défaut une entrée a une durée de vie de plus ou moins 30 s (entre 15 et 45 s de façon aléatoire); Après ce temps, l'entrée est considérée comme «stale» (périmée) et sera éventuellement rafraîchie avec une nouvelle requête ARP si la table n'est pas trop volumineuse, détruite sinon. Les plus curieux iront voir le RFC 826 8-).
    Wireshark peut aussi vérifier ce comportement.
  2. le système qui a lancé la requête considère la première réponse reçue comme étant la bonne, sans aucune forme de vérification. Sur un réseau local, la technique du «man in the middle» peut permettre à un malveillant de prendre la place de la cible légitime en s'arrangeant pour répondre avant elle. En s'y prenant bien, le malveillant peut assez facilement se mettre au milieu de la conversation en interceptant les trames avant de les retransmettre à la cible légitime. Les hackers en herbe se débrouilleront tout seuls pour trouver comment s'y prendre…
  3. Nous avons vu la commande arp -a pour afficher le contenu du cache ARP, mais il existe une commande plus récente et plus fine: la fameuse commande ip (administrateur requis):
    ip -4 neigh show

    qui donnerait ici:

    192.168.60.254 dev sw0 lladdr 68:a3:78:86:ec:02 REACHABLE 
    192.168.60.10 dev sw0 lladdr f8:da:0c:0c:8d:48 STALE 
    192.168.60.3 dev sw0 lladdr 18:31:bf:df:a1:f0 REACHABLE 

Le routage

Voici comment les choses se passent. L'émetteur dispose pour envoyer son paquet:

  1. de son adresse IP,
  2. du masque de son réseau,
  3. de l'adresse de sa cible.

Au passage de la couche IP à la couche Ethernet, le calcul préliminaire est le suivant:

  • calcul d'un ET logique bit à bit entre l'adresse de la source et le masque du réseau de la source (donne l'adresse du réseau source)
  • calcul d'un ET logique bit à bit entre l'adresse de la cible et le masque du réseau de la source
    • si les 2 résultats sont identiques, c'est que source et cible sont dans le même réseau. On cherche alors l'adresse MAC de la cible.
    • si les deux résultats sont différents, c'est que la cible est dans un autre réseau. Dans le cas le plus classique, on cherchera alors l'adresse MAC de la passerelle par défaut pour que la couche Ethernet transporte la trame vers le routeur. Le reste ne dépend plus de la source.

Le cas le plus classique:

ip route show

default via 192.168.60.254 dev enp1s0
192.168.60.0/24 dev enp1s0 proto kernel scope link src 192.168.60.127

Dans un cas plus complexe:

ip route show
default via 192.168.60.254 dev sw0 
192.168.60.0/24 dev sw0 proto kernel scope link src 192.168.60.47 
192.168.61.0/24 dev sw1 proto kernel scope link src 192.168.61.254
Ce nœud dispose de deux interfaces Ethernet, chacune dans un réseau différent. Le calcul sera alors plus long. Si l'adresse de la source est dans l'un des réseaux indiqués le système devra d'abord vérifier si la cible est dans 192.168.60.0/24 ou si elle est dans 192.168.61.0/24 avent de décider de l'envoyer sur la passerelle par défaut. Ce cas de figure pourra être étudié plus loin.

1)
Le filtre de capture utilisé est icmp or arp and net 192.168.60.0/24
Ethernet et ARP: Dernière modification le: 11/09/2025 à 12:57 par prof