Outils pour utilisateurs

Outils du site


Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
050-manips-ipv4:010-arpv4 [le 05/04/2025 à 16:40] – supprimée - modification externe (Date inconnue) 127.0.0.1050-manips-ipv4:010-arpv4 [le 11/09/2025 à 12:57] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. prof
Ligne 1: Ligne 1:
 +====== 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 [[https://www.wireshark.org/|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:
 +{{ 050-manips-ipv4:lan2.svg |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 ?
 +<html><pre class="code">
 +<b>arp -n</b>
 +
 +Adresse                  TypeMap AdresseMat          Indicateurs           Iface
 +192.168.60.254           ether   68:a3:78:86:ec:02                       enp1s0
 +192.168.60.3             ether   18:31:bf:df:a1:f0                       enp1s0
 +192.168.60.47            ether   ae:2a:a7:dd:e6:07                       enp1s0
 +</pre></html>
 +
 +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 filtre((Le filtre de capture utilisé est ''icmp or arp and net 192.168.60.0/24'')) 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:
 +<html><pre class="code">
 +No. Source                Destination           Protocol  Info
 +<span class="bhly">  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</span>
 +<span class="hlg">  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)</span>
 +</pre></html>
 +
 +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:
 +<html><pre class="code">
 +<span class="hlw">Ethernet II, Src: RealtekU_37:36:49 (52:54:00:37:36:49), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
 +    <b>Destination: Broadcast (ff:ff:ff:ff:ff:ff)
 +    Source: RealtekU_37:36:49 (52:54:00:37:36:49)</b>
 +    Type: ARP (0x0806)</span>
 +<span class="hly">Address Resolution Protocol (request)
 +    Hardware type: Ethernet (1)
 +    Protocol type: IPv4 (0x0800)
 +    Hardware size: 6
 +    Protocol size: 4
 +    <b>Opcode: request (1)</b>
 +    Sender MAC address: RealtekU_37:36:49 (52:54:00:37:36:49)
 +    <b>Sender IP address: 192.168.60.127</b>
 +    Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
 +    <b>Target IP address: 192.168.60.10</b></span>
 +</pre></html>
 +  - Au niveau 2, nous voyons l'adresse MAC de la source et l'adresse MAC de broadcast (''ff:ff:ff:ff:ff:ff'').
 +  - Au niveau 3, nous voyons les adresses IP  de la source et de la cible.
 +
 +Trame 2:
 +<html><pre class="code">
 +<span class="hlw">Ethernet II, Src: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48), Dst: RealtekU_37:36:49 (52:54:00:37:36:49)
 +    <b>Destination: RealtekU_37:36:49 (52:54:00:37:36:49)
 +    Source: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48)</b>
 +    Type: ARP (0x0806)</span>
 +<span class="hly">Address Resolution Protocol (reply)
 +    Hardware type: Ethernet (1)
 +    Protocol type: IPv4 (0x0800)
 +    Hardware size: 6
 +    Protocol size: 4
 +    <b>Opcode: reply (2)</b>
 +    Sender MAC address: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48)
 +    <b>Sender IP address: 192.168.60.10</b>
 +    Target MAC address: RealtekU_37:36:49 (52:54:00:37:36:49)
 +    <b>Target IP address: 192.168.60.127</b></span>
 +</pre></html>
 +Nous avons notre réponse et le ping va pouvoir se faire:
 +<html><pre class="code">
 +<span class="hlw">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)</span>
 +<span class="hly">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</span>
 +<span class="hlb">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)</span>
 +</pre></html>
 +  - Au niveau Ethernet, nous voyons les adresses MAC,
 +  - au niveau Internet, les adresses IP,
 +  - 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 =====
 +{{ 050-manips-ipv4:structure_arp.svg |Structure ARP}}
 +Nous retrouvons bien dans la capture Wireshark cette structure.
 +===== Compléments d'information =====
 +  - 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-). <html><br></html>Wireshark peut aussi vérifier ce comportement.
 +  - 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...
 +  - 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):<code>ip -4 neigh show</code>qui donnerait ici:<code>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 </code>
 +===== Le routage =====
 +Voici comment les choses se passent.
 +L'émetteur dispose pour envoyer son paquet:
 +  - de son adresse IP,
 +  - du masque de son réseau,
 +  - 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:
 +<html><pre class="code">
 +<b>ip route show</b>
 +
 +<span class="hlo">default via 192.168.60.254 dev enp1s0</span>
 +<span class="hly">192.168.60.0/24 dev enp1s0</span> proto kernel scope link src 192.168.60.127
 +</pre></html>
 +
 +Dans un cas plus complexe:
 +<html><pre class="code">
 +ip route show
 +<span class="hlo">default via 192.168.60.254 dev sw0</span> 
 +<span class="hly">192.168.60.0/24 dev sw0</span> proto kernel scope link src 192.168.60.47 
 +<span class="hlg">192.168.61.0/24 dev sw1</span> proto kernel scope link src 192.168.61.254
 +</pre></html>
 +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.
Ethernet et ARP: Dernière modification le: 01/01/1970 à 00:00 par