ARP — Address Resolution Protocol
Couche OSI : L2 — Liaison de données
Protocole : opère entre L2 et L3 (pont entre IP et MAC)
ARP résout une adresse IP en adresse MAC sur un réseau local. Quand un hôte veut envoyer un paquet IP à une IP sur le même LAN, il doit connaître l’adresse MAC correspondante pour construire la trame Ethernet.
Pourquoi ARP est nécessaire
Machine A veut envoyer un paquet à 192.168.1.20
│
├── Construire la trame Ethernet nécessite :
│ ├── IP source : 192.168.1.10 ✅ (connue)
│ ├── IP destination : 192.168.1.20 ✅ (connue)
│ ├── MAC source : AA:BB:CC:DD:EE:FF ✅ (connue — carte réseau locale)
│ └── MAC destination : ??? ← ARP résout ça
Fonctionnement : requête/réponse
Machine A (192.168.1.10, MAC: AA:BB:CC:DD:EE:FF)
│
│── ARP Request (broadcast) ────────────────────► tous les hôtes du LAN
│ "Qui a l'IP 192.168.1.20 ? Répondez à AA:BB:CC:DD:EE:FF"
│ Destination MAC : FF:FF:FF:FF:FF:FF (broadcast)
│
│ Machine B (192.168.1.20, MAC: 11:22:33:44:55:66)
│ │
│◄── ARP Reply ──────┘
│ "C'est moi ! Mon MAC est 11:22:33:44:55:66"
│ Destination MAC : AA:BB:CC:DD:EE:FF (unicast)
│
│ Machine A met en cache : 192.168.1.20 → 11:22:33:44:55:66
└── Construit la trame Ethernet et envoie le paquet
Cache ARP
Pour éviter une requête ARP à chaque paquet, les hôtes maintiennent un cache ARP (table de correspondance IP → MAC).
# Voir le cache ARP
arp -n # Linux
arp -a # Windows/macOS
# Exemple de sortie
# Address HWtype HWaddress Flags Iface
# 192.168.1.1 ether aa:bb:cc:dd:ee:01 C eth0
# 192.168.1.20 ether 11:22:33:44:55:66 C eth0
# Vider le cache ARP
sudo ip -s -s neigh flush all # Linux
netsh interface ip delete arpcache # Windows
# Ajouter une entrée statique
sudo arp -s 192.168.1.20 11:22:33:44:55:66Les entrées ont un TTL (typiquement 20 minutes sur Linux, 2 minutes sur Windows) — expirées, elles sont rerésolues.
Gratuitous ARP (GARP)
Un hôte peut envoyer un ARP Request pour sa propre IP — c’est un Gratuitous ARP. Il sert à :
- Annoncer sa présence sur le réseau (mise à jour des caches)
- Détecter les conflits d’IP (si quelqu’un répond → IP déjà utilisée)
- Basculement en haute disponibilité (le VIP migre vers un nouveau serveur)
Serveur A prend l'IP virtuelle 192.168.1.100
→ envoie GARP : "192.168.1.100 = MAC de Serveur A"
→ tous les hôtes du LAN mettent à jour leur cache ARP
→ le trafic vers 192.168.1.100 est maintenant routé vers Serveur A
ARP Poisoning — attaque
L’ARP n’a aucun mécanisme d’authentification — n’importe qui peut envoyer de faux ARP Reply.
Attaquant envoie des ARP Reply non sollicités :
"192.168.1.1 (routeur) → MAC: attaquant" → à toutes les machines du LAN
"192.168.1.10 (Machine A) → MAC: attaquant" → au routeur
Résultat :
Machine A croit que le routeur est l'attaquant
Le routeur croit que Machine A est l'attaquant
→ Tout le trafic passe par l'attaquant (Man-in-the-Middle)
Contre-mesures :
- DAI (Dynamic ARP Inspection) sur les switches managés — vérifie les ARP contre la table DHCP
- Segmentation — VLAN pour limiter le domaine de broadcast
- 802.1X — authentification au niveau du port réseau
ARP dans Kubernetes
Dans un cluster Kubernetes, ARP est utilisé pour la communication au niveau du nœud :
# Voir les voisins ARP d'un nœud Kubernetes (remplace arp -n en Linux moderne)
ip neigh show
# Dans Kubernetes avec MetalLB (mode L2)
# MetalLB répond aux ARP Requests pour les IPs de LoadBalancer
# → les clients du LAN trouvent les IPs de services via ARPEn relation avec
- Protocoles OSI - Index — tous les protocoles par couche
- Ethernet — ARP opère dans le contexte des réseaux Ethernet
- Paquets IP et TCP — ARP fait le lien entre L3 (IP) et L2 (MAC)
- Couches OSI — ARP est à la frontière L2/L3