Qu'est-ce que l'ICMP ? Le protocole des messages de contrôle expliqué

Comprenez l'ICMP : fonctionnement, messages d'erreur, rôle dans ping et traceroute, différences entre ICMPv4 et ICMPv6 et bonnes pratiques de filtrage.

Équipe Dig TraceÉquipe Dig Trace· Équipe d'Ingénierie Réseau7 min de lecture
Qu'est-ce que l'ICMP ? Le protocole des messages de contrôle expliqué

L'ICMP (Internet Control Message Protocol) est un protocole de la couche réseau qui accompagne IP pour signaler les erreurs et échanger des informations de diagnostic. Il ne transporte aucune donnée applicative. Son rôle se résume à dire à une source ce qui n'a pas fonctionné quand un paquet n'atteint pas sa destination, ou à répondre à une demande de mesure.

Contrairement à TCP ou UDP, ce n'est pas un protocole de transport. Pas de ports, pas de numéros de séquence, pas de retransmission. Les routeurs et les hôtes génèrent des messages ICMP en réaction à des événements de niveau IP : un paquet trop volumineux, une route inexistante, un TTL qui expire en chemin.

À quoi sert l'ICMP ?

Le protocole remplit trois fonctions principales. D'abord le signalement d'erreurs : un routeur qui ne peut pas acheminer un paquet renvoie un message Destination Unreachable à la source. Ensuite le diagnostic : les messages Echo Request et Echo Reply permettent de tester la joignabilité d'une machine, ce qui est la base de la commande ping. Enfin, la découverte du chemin : les messages Time Exceeded alimentent traceroute, et le message Packet Too Big rend possible la découverte automatique du MTU (Path MTU Discovery).

Pour IPv4, l'ICMP est défini dans la RFC 792 et porte le numéro de protocole IP 1. Pour IPv6, une spécification distincte, la RFC 4443, définit ICMPv6 avec la valeur Next Header 58. Le registre des types de messages ICMP recense aujourd'hui plusieurs dizaines de types et de codes.

Comment fonctionne l'ICMP ?

Chaque message ICMP voyage encapsulé dans un paquet IP ordinaire. L'en-tête IP identifie la charge utile comme ICMP, puis le message suit immédiatement. Il commence toujours par trois champs : un Type sur 8 bits qui identifie la catégorie du message, un Code sur 8 bits qui précise la sous-catégorie, et un checksum sur 16 bits pour vérifier l'intégrité. Le corps du message varie selon le type.

Quelques exemples concrets : le type 3 signifie Destination Unreachable, et le code 3 dans ce type signifie Port Unreachable. Le type 11 correspond à Time Exceeded, typiquement quand le TTL d'un paquet tombe à zéro. Le type 0 est la réponse Echo, le type 8 la demande Echo.

Quand un équipement signale une erreur, il inclut dans le message une copie de l'en-tête IP du paquet fautif, accompagnée d'au moins les 8 premiers octets de ses données. Ce fragment permet à la machine source de faire le lien entre l'erreur et le processus concerné.

Une règle importante évite les tempêtes de messages : aucun équipement ne doit générer d'erreur ICMP en réponse à une autre erreur ICMP. Sans cette interdiction, des messages d'erreur rebondiraient indéfiniment entre routeurs en cas de congestion.

ICMP face à TCP et UDP

La confusion est fréquente, car l'ICMP fait circuler des paquets entre hôtes comme les protocoles de transport. La différence est pourtant fondamentale. TCP établit des connexions fiables avec accusés de réception. UDP offre un transport simple sans garantie. L'ICMP ne fait ni l'un ni l'autre : il ne transporte que du contrôle et des informations d'état, jamais de charge applicative.

Cette absence de ports a une conséquence pratique pour les pare-feu. On ne peut pas filtrer l'ICMP en fermant un port, puisqu'il n'en a pas. Les règles doivent inspecter directement le champ protocole de l'en-tête IP, puis le type et le code ICMP.

ICMPv4 et ICMPv6 : quelles différences ?

En IPv4, l'ICMP est un protocole auxiliaire, en théorie facultatif. En IPv6, ICMPv6 fait partie intégrante du protocole : toute implémentation IPv6 doit le supporter. Il y fusionne d'ailleurs plusieurs rôles tenus par des protocoles séparés en IPv4.

  • Découverte de voisins : le protocole NDP (Neighbor Discovery), construit sur ICMPv6, remplace complètement ARP pour la résolution d'adresses, la détection d'adresses dupliquées et la découverte des routeurs.

  • Multicast : MLD (Multicast Listener Discovery) est intégré à ICMPv6, là où IPv4 utilise IGMP comme protocole distinct.

  • Gestion du MTU : le message Packet Too Big (type 2) est indispensable en IPv6, où les routeurs ne fragmentent plus les paquets. Le bloquer casse la Path MTU Discovery et, très souvent, la connectivité elle-même.

  • Codes d'erreur plus précis : ICMPv6 distingue par exemple une communication administrativement interdite d'un filtrage par pare-feu.

L'ICMP en pratique : ping et traceroute

Rien ne vaut un exemple pour voir le protocole à l'œuvre. Un ping vers un serveur public montre l'échange Echo Request / Echo Reply et le temps aller-retour :

$ ping -c 3 digtrace.net
PING digtrace.net (104.26.4.33) 56(84) bytes of data.
64 bytes from digtrace.net (104.26.4.33): icmp_seq=1 ttl=57 time=12.4 ms
64 bytes from digtrace.net (104.26.4.33): icmp_seq=2 ttl=57 time=11.9 ms
64 bytes from digtrace.net (104.26.4.33): icmp_seq=3 ttl=57 time=12.1 ms

Traceroute exploite un autre mécanisme : il envoie des paquets avec des TTL croissants. Chaque routeur intermédiaire qui voit son TTL tomber à zéro renvoie un message Time Exceeded, ce qui révèle un saut du chemin :

$ traceroute digtrace.net
 1  box192-168-1-1 (192.168.1.1)  1.2 ms
 2  lag-10.bar1.Paris1 (62.34.9.1)  8.7 ms
 3  ae-300.paris.core (80.81.2.5)  9.1 ms
 4  digtrace.net (104.26.4.33)  12.3 ms

Si des routeurs filtrent ces messages, la trace affiche des astérisques même quand le chemin fonctionne. Notre guide sur traceroute et MTR détaille l'interprétation de ces sorties, et l'article sur la commande ping couvre les options de mesure.

Filtrage et sécurité : ce qu'il faut retenir

Bloquer l'ICMP entièrement est une erreur classique. En IPv4, cela masque des problèmes de MTU et complique le dépannage. En IPv6, c'est pire : bloquer Packet Too Big ou les messages NDP peut rendre des sites inaccessibles. Les administrateurs autorisent donc sélectivement ces messages tout en limitant le débit des réponses Echo pour éviter les attaques par amplification.

À retenir : l'ICMP est un protocole de signalisation en « best effort ». IP ne garantit rien sur sa livraison, et les outils de monitoring doivent traiter ses messages comme des informations indicatives, jamais comme des confirmations fiables.

L'ICMP dans l'écosystème réseau

L'ICMP reste l'un des protocoles les plus anciens d'Internet et l'un des plus utiles au quotidien. Il alimente les outils de diagnostic de base, permet aux réseaux de s'adapter automatiquement à la taille des paquets et, en IPv6, assure des fonctions vitales comme la découverte de voisins. Pour aller plus loin, l'article sur les adresses IP explique la couche sur laquelle l'ICMP s'appuie, et celui sur le DNS complète la panoplie du diagnostic réseau.