Aller au contenu
Réseaux high

ICMP — Le protocole de diagnostic réseau

18 min de lecture

Votre ping ne répond pas et vous ne savez pas pourquoi ? ICMP est le protocole qui vous donne les indices pour comprendre ce qui se passe. Ce module vous apprend à lire les messages d’erreur ICMP et à les utiliser pour diagnostiquer vos problèmes de connectivité réseau.

  • ICMP = protocole de diagnostic (ping, traceroute)
  • Timeout = pas de réponse (filtré ou machine down)
  • Destination Unreachable = réponse explicite (réseau, hôte ou port inaccessible)
  • Ping bloqué ≠ machine down : testez avec nc sur le port applicatif
  • ping -c 2 8.8.8.8 fonctionne (ou je comprends pourquoi il est bloqué)
  • Je sais distinguer timeout de “Destination Unreachable”
  • Si ping échoue, je teste avec nc -zv hôte port
Fenêtre de terminal
# 1. Test de base
ping -c 3 google.com
# 2. Traceroute (voir le chemin)
traceroute -n google.com
# 3. Si ping bloqué, tester le port applicatif
nc -zv serveur 22
  • Module 4 complété : vous comprenez le routage et traceroute
  • Module 5 complété : vous connaissez TCP et UDP
  • Une machine Linux avec accès réseau
  • Ce qu’est ICMP : le protocole de contrôle et d’erreur d’Internet
  • Echo Request/Reply : comment fonctionne ping
  • Les messages d’erreur : Destination Unreachable, TTL Exceeded
  • Interpréter les codes : pourquoi le réseau, l’hôte ou le port est inaccessible
  • ICMP et les pare-feu : pourquoi ping peut être bloqué
  • Diagnostic pratique : utiliser ICMP pour trouver la cause d’un problème

ICMP (Internet Control Message Protocol) est un protocole de diagnostic et de signalisation. Contrairement à TCP et UDP qui transportent des données applicatives, ICMP transporte des messages de contrôle :

  • “Ta destination est injoignable”
  • “Le paquet a fait trop de sauts”
  • “Ton paquet est trop gros”
  • “Es-tu vivant ?” (ping)
ProtocoleRôleExemple d’usage
TCPTransport fiableHTTP, SSH
UDPTransport rapideDNS, VoIP
ICMPDiagnostic et erreursping, traceroute

La commande ping envoie un message ICMP Echo Request et attend un Echo Reply :

Schéma ping : Echo Request de A vers B, Echo Reply de B vers A

  1. Votre machine envoie un Echo Request

    Type ICMP : 8 (Echo Request)

    Le paquet contient un identifiant et un numéro de séquence pour matcher les réponses.

  2. La destination reçoit et répond

    Type ICMP : 0 (Echo Reply)

    La machine cible renvoie le même contenu, ce qui permet de calculer le temps aller-retour (RTT).

  3. Votre machine affiche le résultat

    64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.3 ms
    • icmp_seq : numéro de séquence
    • ttl : nombre de sauts restants
    • time : temps aller-retour
Fenêtre de terminal
ping -c 4 google.com
PING google.com (142.250.185.46) 56(84) bytes of data.
64 bytes from par21s17-in-f14.1e100.net (142.250.185.46): icmp_seq=1 ttl=117 time=11.2 ms
64 bytes from par21s17-in-f14.1e100.net (142.250.185.46): icmp_seq=2 ttl=117 time=10.8 ms
64 bytes from par21s17-in-f14.1e100.net (142.250.185.46): icmp_seq=3 ttl=117 time=11.1 ms
64 bytes from par21s17-in-f14.1e100.net (142.250.185.46): icmp_seq=4 ttl=117 time=10.9 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 10.823/10.991/11.184/0.136 ms
ÉlémentSignification
64 bytesTaille du paquet reçu
icmp_seq=1Premier paquet de la séquence
ttl=117Marge restante avant expiration du paquet
time=11.2 msLatence aller-retour
0% packet lossAucun paquet perdu
rtt min/avg/maxStatistiques de latence

ICMP ne sert pas qu’à ping. Il signale les erreurs quand un paquet ne peut pas atteindre sa destination :

Messages d'erreur ICMP : le routeur informe la source que la destination est injoignable

TypeNomSignification
0Echo ReplyRéponse à un ping
3Destination UnreachableLa destination ne peut pas être atteinte
8Echo RequestDemande de ping
11Time ExceededTTL expiré (utilisé par traceroute)

Destination Unreachable (Type 3) : les codes importants

Section intitulée « Destination Unreachable (Type 3) : les codes importants »

Le Type 3 a plusieurs codes qui précisent la raison de l’échec :

CodeMessageSignificationCause probable
0Network UnreachablePas de route vers ce réseauRoutage cassé, réseau inexistant
1Host UnreachableMachine injoignableMachine éteinte, ARP échoué
3Port UnreachablePas de service sur ce port (UDP)Service non démarré
4Fragmentation NeededPaquet trop gros, DF setMTU trop petit sur le chemin
13Administratively ProhibitedBloqué par un pare-feuRègle firewall

Time Exceeded (Type 11) : comment fonctionne traceroute

Section intitulée « Time Exceeded (Type 11) : comment fonctionne traceroute »

Chaque paquet IP a un TTL (Time To Live) qui est décrémenté à chaque routeur. Quand le TTL atteint 0, le routeur jette le paquet et envoie un message ICMP Type 11 “Time Exceeded” (IANA ICMP Parameters).

Traceroute exploite ce mécanisme :

  1. Envoie un paquet avec TTL=1

    Le premier routeur décrémente TTL à 0 et renvoie ICMP “Time Exceeded”. On connaît le premier saut.

  2. Envoie un paquet avec TTL=2

    Le deuxième routeur renvoie “Time Exceeded”. On connaît le deuxième saut.

  3. Continue jusqu’à la destination

    Quand la destination est atteinte, traceroute reçoit soit un Echo Reply (si probes ICMP), soit ICMP Port Unreachable (si probes UDP vers un port élevé non écouté).

Fenêtre de terminal
traceroute google.com
traceroute to google.com (142.250.185.46), 30 hops max, 60 byte packets
1 _gateway (192.168.1.1) 0.543 ms 0.512 ms 0.503 ms
2 10.0.0.1 (10.0.0.1) 8.234 ms 8.219 ms 8.205 ms
3 * * *
4 72.14.215.85 (72.14.215.85) 11.234 ms 11.219 ms 11.205 ms
5 142.250.185.46 (142.250.185.46) 10.823 ms 10.808 ms 10.794 ms
SortieSignification
_gatewayNom DNS du routeur (si disponible)
0.543 msTemps de réponse (3 tentatives)
* * *Pas de réponse (ICMP bloqué ou timeout)
Fenêtre de terminal
ping 10.0.0.99
PING 10.0.0.99 (10.0.0.99) 56(84) bytes of data.
--- 10.0.0.99 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3062ms

Causes possibles :

  • Machine éteinte ou inexistante
  • Pare-feu qui DROP les paquets (sans répondre)
  • Problème de routage (paquets perdus)
Fenêtre de terminal
ping 192.168.99.1
From 192.168.1.1 icmp_seq=1 Destination Host Unreachable

Cause : Émis par la passerelle ou un nœud intermédiaire qui ne peut pas joindre l’hôte final (ARP échoué, machine éteinte, voisinage L2 injoignable). Notez l’IP source du message (ici 192.168.1.1) : c’est elle qui a généré l’erreur.

Fenêtre de terminal
ping 10.99.0.1
connect: Network is unreachable

Cause : Votre machine ou un routeur intermédiaire n’a pas de route vers ce réseau.

Fenêtre de terminal
ping 192.168.1.100
From 192.168.1.1: icmp_seq=1 Packet filtered

Cause : Un pare-feu a explicitement rejeté le paquet avec un message ICMP.

Les pare-feu peuvent bloquer ou limiter ICMP de plusieurs façons :

Comportement pare-feuRésultat pingSécurité
ICMP autoriséRéponse normaleFaible (expose la machine)
ICMP DROPTimeoutMoyen (machine invisible)
ICMP REJECT”Administratively Prohibited”Moyen (on sait qu’il y a un FW)
Rate limitCertains pings répondentBon compromis
Type ICMPRecommandationPourquoi
Echo Reply (0)Autoriser en sortieRéponse à vos pings
Destination Unreachable (3)Autoriser (surtout code 4)Diagnostic + PMTUD
Echo Request (8)Limiter ou bloquer en entréeÉvite les scans
Time Exceeded (11)AutoriserNécessaire pour traceroute
  1. Tester ping

    Fenêtre de terminal
    ping <ip-vm>
    # Timeout...
  2. Ne pas conclure trop vite

    Ping peut être bloqué par le Security Group.

  3. Tester le port applicatif

    Fenêtre de terminal
    nc -zv <ip-vm> 22
    # Connection to <ip-vm> 22 port [tcp/ssh] succeeded!

    La VM est bien accessible, c’est juste ICMP qui est bloqué.

Environnements modernes : Docker et Kubernetes (facultatif)

Section intitulée « Environnements modernes : Docker et Kubernetes (facultatif) »

Dans Docker, les conteneurs peuvent ne pas répondre au ping selon la configuration :

Fenêtre de terminal
# Depuis l'hôte
ping 172.17.0.2
# Timeout
# Mais le service HTTP fonctionne
curl http://172.17.0.2:8080
# OK

Causes fréquentes :

  • Capabilities manquantes : le conteneur n’a pas CAP_NET_RAW (nécessaire pour ping)
  • Règles iptables : Docker peut filtrer ICMP selon le network mode
  • Politique réseau : des règles bloquent explicitement ICMP
Fenêtre de terminal
# Depuis un pod
kubectl exec -it mypod -- ping autre-service
# Timeout ou succès selon le CNI et les NetworkPolicies

Causes fréquentes en K8s :

  • NetworkPolicy qui filtre ICMP (ex : Calico, Cilium)
  • Capabilities : le pod n’a pas CAP_NET_RAW dans son securityContext
  • PSP/PSA restrictives qui retirent les capabilities réseau
  1. Ping localhost (toujours OK)

    Fenêtre de terminal
    ping -c 2 127.0.0.1

    Notez le temps de réponse (très faible).

  2. Ping votre passerelle

    Fenêtre de terminal
    ping -c 2 $(ip route | grep default | awk '{print $3}')
  3. Ping une IP publique

    Fenêtre de terminal
    ping -c 2 8.8.8.8

    Comparez les temps de réponse.

  4. Ping une IP inexistante sur votre réseau

    Fenêtre de terminal
    ping -c 2 192.168.1.254

    Observez le message d’erreur.

  1. Traceroute vers Google

    Fenêtre de terminal
    traceroute -n google.com

    L’option -n évite la résolution DNS (plus rapide).

  2. Identifiez

    • Votre passerelle (premier saut)
    • Les routeurs de votre FAI
    • Les * * * (ICMP bloqué)
  3. Comparez avec traceroute UDP

    Fenêtre de terminal
    traceroute -U google.com

    Certains pare-feu bloquent ICMP mais pas UDP.

  1. Dans un terminal, capturez ICMP

    Fenêtre de terminal
    sudo tcpdump -i any icmp -n
  2. Dans un autre terminal, lancez ping

    Fenêtre de terminal
    ping -c 3 8.8.8.8
  3. Observez les paquets

    Vous verrez les Echo Request et Echo Reply.

  4. Testez une destination inaccessible

    Fenêtre de terminal
    ping -c 1 192.168.99.99

    Observez le message “Destination Unreachable” dans tcpdump.

En IPv6, ICMPv6 (RFC 4443) n’est pas optionnel — il porte des fonctions essentielles :

FonctionICMPv6 TypeRôle
Echo Request/Reply128/129Équivalent de ping (différent de 8/0 en IPv4)
Packet Too Big2Équivalent de Fragmentation Needed (PMTUD)
Neighbor Solicitation/Advertisement135/136Équivalent d’ARP — indispensable
Router Solicitation/Advertisement133/134Auto-configuration réseau
  • ICMP : protocole de diagnostic (pas de port, juste type + code)
  • Ping : Echo Request (type 8) → Echo Reply (type 0)
  • Traceroute : envoie des probes (UDP par défaut), reçoit ICMP Time Exceeded (type 11)
  • Destination Unreachable (type 3) : plusieurs codes selon la cause
  • Type 3 Code 4 : ne jamais bloquer — critique pour PMTUD
  • Timeout ≠ Unreachable : timeout = pas de réponse, unreachable = réponse explicite
  • Ping bloqué ≠ machine down : testez les ports applicatifs avec nc ou curl
  • ICMPv6 : encore plus critique qu’ICMPv4 (porte Neighbor Discovery)
  • Pare-feu cloud : bloquent souvent ICMP par défaut

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
10 min.
80% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre