Cest quoi un paquet ICMP ?

Dans le cours : Les fondements des réseaux : Les protocoles et les outils CLI

La vidéo est bloquée.

Accédez au cours complet aujourd’hui

Inscrivez-vous aujourd’hui pour accéder à plus de 20 400 cours dispensés par des formateurs experts ou achetez ce cours séparément.

S'initier au protocole ICMP

Présentons maintenant le protocole ICMP qui est un protocole qui peut être utilisé manuellement pour du dépannage, via une commande connue appelée la commande Ping mais qui est aussi utilisé dynamiquement par les différents serveurs et machines sur le réseau local. Dans un premier temps, nous allons nous intéresser aux requêtes ICMP de type Echo request, c'est-à-dire des requêtes générales avec la commande Ping. Ce type de requête permet de connaitre la joignabilité d'un hôte au niveau IP et permet de debugger la couche IP, enfin la couche réseau pour être plus précis, sur le modèle TCP/IP, et notamment le routage. Si le paquet ICMP n'arrive pas à destination, alors on en déduit que l'hôte n'est pas joignable sur le réseau. On peut aussi également avoir des réponses à une requête ICMP de la part d'un hôte qui est présent sur le réseau mais qui contiendra des éléments précisant pourquoi cet hôte n'est pas joignable à différents niveaux. Alors, dans quel cas, un paquet ne peut pas être…

Table des matières

Cest quoi un paquet ICMP ?
Cest quoi un paquet ICMP ?

Publié le 23 avril 2011 

Version PDF Version hors-ligne

ePub, Azw et Mobi

Cest quoi un paquet ICMP ?
 
Cest quoi un paquet ICMP ?
 
Cest quoi un paquet ICMP ?
 
Cest quoi un paquet ICMP ?
   &lt;/div&gt; &lt;/section&gt;&lt;/div&gt;&lt;section itemprop="articleBody" class="articleBody"&gt; &lt;h2 class="TitreSection0" id="LI"&gt;I. Le protocole ICMP&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h2&gt;&lt;div class="BlocSection0"&gt; &lt;p&gt;Tout d'abord, une première question, le protocole ICMP est-il un protocole de niveau 3 (couche réseau) ou bien de niveau 4 (couche session)&amp;nbsp;? &lt;/p&gt; &lt;p&gt;Tout dépend de la sensibilité de la personne, mais aussi des messages ICMP considérés&amp;nbsp;: &lt;/p&gt; &lt;ul class="ListeDVP"&gt; &lt;li&gt;le protocole ICMP est le protocole de signalisation du protocole IP, à ce titre, il fait partie de la couche IP et c'est donc un protocole de niveau 3&amp;nbsp;;&lt;/li&gt; &lt;li&gt;le contenu des messages ICMP contient aussi bien des informations de niveau 3 (network unreachable) ou des informations de niveau 4 (service unavailable). À ce titre, il peut être considéré comme niveau 3 ou niveau 4 suivant les informations transportées&amp;nbsp;;&lt;/li&gt; &lt;li&gt;le protocole ICMP est porté par le protocole IP. À ce titre, si on se réfère l'encapsulation des trames définie par le modèle OSI, il doit être considéré comme un protocole de niveau 4.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Comme on peut le voir, la position du protocole ICMP dans la pile de protocoles OSI est une histoire de point de vue. Personnellement, j'ai tendance à le considérer comme un protocole de niveau 4. &lt;/p&gt; &lt;p&gt;Le protocole ICMP est défini par la &lt;a target="_blank" class="lienArticle simple" href="http://tools.ietf.org/html/rfc792"&gt;RFC 792&lt;/a&gt; qui a rendu obsolète la &lt;a target="_blank" class="lienArticle simple" href="http://tools.ietf.org/html/rfc777"&gt;RFC 777&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;De même que l'IPv4 définit son protocole ICMP, l'IPv6, définit aussi un protocole ICMP appelé ICMPv6. La RFC qui définit ICMPv6 est la &lt;a target="_blank" class="lienArticle simple" href="http://tools.ietf.org/html/rfc4443"&gt;RFC 4443&lt;/a&gt; qui a rendu obsolète la &lt;a target="_blank" class="lienArticle simple" href="http://tools.ietf.org/html/rfc2463"&gt;RFC 2463&lt;/a&gt; et la &lt;a target="_blank" class="lienArticle simple" href="http://tools.ietf.org/html/rfc1885"&gt;RFC 1885&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Ce document ne traite que du protocole ICMP dans sa version 4. &lt;/p&gt; &lt;h3 class="TitreSection1" id="LI-A"&gt;I-A. Format d'une trame&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h3&gt;&lt;div class="BlocSection1"&gt; &lt;p&gt;Le format général d'un paquet ICMP est le suivant&amp;nbsp;: &lt;/p&gt; &lt;div class="code_et_titre"&gt;&lt;div class="titre_des_codes" id="IdTitreCode-d0e182"&gt;&amp;nbsp;&lt;div class="selectionner_code"&gt;&lt;span class="selectionner_code LienSelectionne" id="code-d0e182" onclick="selectionCode('contenuCoded0e182', 'IdTitreCode-d0e182');"&gt;Sélectionnez&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre class="code_uniquement" style="overflow:auto"&gt;&lt;code id="contenuCoded0e182" class="contenuCode"&gt; 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |... | |... | +---------------------------------------------------------------+&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;Les différents champs que l'on peut trouver sont les suivants&amp;nbsp;: &lt;/p&gt; &lt;ul class="ListeDVP"&gt; &lt;li&gt;le champ «&amp;nbsp;Type&amp;nbsp;» correspond au type de message ICMP. Nous verrons plus loin les différents types de messages ICMP&amp;nbsp;;&lt;/li&gt; &lt;li&gt;le champ «&amp;nbsp;Code&amp;nbsp;» sert à affiner le type du message ICMP. Nous verrons plus loin les différents codes ICMP en fonction des différents types de messages ICMP&amp;nbsp;;&lt;/li&gt; &lt;li&gt;le champ «&amp;nbsp;Checksum&amp;nbsp;» est la somme de contrôle. Ce champ est le complément à 1 sur 16 bits de la somme des compléments à 1 des octets de la trame ICMP en commençant par le champ Type ICMP. Lors du calcul de ce champ, celui-ci est initialisé à zéro. Cet algorithme peut être remplacé dans le futur. Il est défini dans la &lt;a target="_blank" class="lienArticle simple" href="http://tools.ietf.org/html/rfc1071"&gt;RFC 1071&lt;/a&gt;&amp;nbsp;;&lt;/li&gt; &lt;li&gt;le champ «&amp;nbsp;Data&amp;nbsp;» contient les données du message ICMP. L'interprétation de son contenu doit se faire en fonction du type de message ICMP.&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;h3 class="TitreSection1" id="LI-B"&gt;I-B. Les types de messages ICMP&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h3&gt;&lt;div class="BlocSection1"&gt; &lt;p&gt;Comme on a commencé à le voir dans le paragraphe précédent, il existe plusieurs types de messages ICMP. La &lt;a target="_blank" class="lienArticle simple" href="http://tools.ietf.org/html/rfc792"&gt;RFC 792&lt;/a&gt; définit les types suivants&amp;nbsp;: &lt;/p&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Echo Reply&amp;nbsp;» (valeur 0)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Ce message ICMP est la réponse à un message «&amp;nbsp;Echo&amp;nbsp;». C'est ce message qui est analysé par l'utilitaire «&amp;nbsp;ping&amp;nbsp;» pour connaitre le délai d'acheminement. &lt;/p&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Destination Unreachable&amp;nbsp;» (valeur 3)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;C'est le message le plus important dans l'analyse du diagnostic d'un problème de connexion. &lt;/p&gt; &lt;p&gt;Une machine tente d'ouvrir une connexion à destination d'une autre machine, la connexion échoue et la machine émettrice peut recevoir un message «&amp;nbsp;Destination Unreacheable&amp;nbsp;» pour l'aider à diagnostiquer la cause de cet échec de connexion. &lt;/p&gt; &lt;p&gt;Ce message ICMP contient des codes supplémentaires qui permettent d'affiner le diagnostic&amp;nbsp;: &lt;/p&gt; &lt;ul class="ListeDVP"&gt; &lt;li&gt;&lt;b&gt;net unreachable&lt;/b&gt; (code 0)&amp;nbsp;: ce message est envoyé par un routeur lorsqu'il ne sait pas comment router un paquet à destination d'un réseau inconnu&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;host unreachable&lt;/b&gt; (code 1)&amp;nbsp;: ce message est envoyé par le dernier routeur lorsqu'il ne peut pas joindre la machine cible&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;protocol unreachable&lt;/b&gt; (code 2)&amp;nbsp;: ce message est envoyé par la machine cible lorsqu'elle n'implémente pas le protocole de niveau 3 demandé dans la couche OSI&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;port unreachable&lt;/b&gt; (code 3)&amp;nbsp;: ce message est envoyé par la machine cible lorsqu'elle ne dispose pas de serveur à l'écoute sur le service demandé&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;fragmentation needed and DF set&lt;/b&gt; (code 4)&amp;nbsp;: ce message est envoyé par un routeur lorsqu'il doit fragmenter un paquet et que ce paquet interdit explicitement (par choix de l'émetteur) cette fragmentation. Le routeur n'a alors d'autre choix que de rejeter le paquet&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;source route failed&lt;/b&gt; (code 5)&amp;nbsp;: ce message est envoyé par un routeur lorsque des options spécifiques de routage par la source sont spécifiées par l'émetteur du paquet et que ce routage spécifique et demandé échoue&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;destination network unknown&lt;/b&gt; (code 6)&amp;nbsp;: ce message est envoyé par un routeur lorsqu'il ne connait pas le réseau de destination&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;destination host unknown&lt;/b&gt; (code 7)&amp;nbsp;: ce message est envoyé par un routeur lorsqu'il ne connait pas la machine de destination&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;source host isolated&lt;/b&gt; (code 8)&amp;nbsp;: ce message est envoyé par un routeur lorsque son filtrage lui interdit de router ce paquet&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;network administratively prohibited&lt;/b&gt; (code 9)&amp;nbsp;: ce message est envoyé par un routeur lorsque le réseau de destination est administrativement interdit d'accès&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;host administratively prohibited&lt;/b&gt; (code 10)&amp;nbsp;: ce message est envoyé par un routeur lorsque la machine de destination est administrativement interdite d'accès&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;network unreachable for TOS&lt;/b&gt; (code 11)&amp;nbsp;: ce message est envoyé par un routeur lorsque le réseau de destination est interdit pour des raisons de qualité de service&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;host unreachable for TOS&lt;/b&gt; (code 12)&amp;nbsp;: ce message est envoyé par un routeur lorsque la machine de destination est interdite pour des raisons de qualité de service&amp;nbsp;;&lt;/li&gt; &lt;li&gt;&lt;b&gt;communication administratively prohibited&lt;/b&gt; (code 13)&amp;nbsp;: ce message est envoyé par un routeur lorsque toute communication est administrativement interdite.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Source Quench&amp;nbsp;» (valeur 4)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Ce message est envoyé par un routeur lorsqu'il ne dispose plus de suffisamment de ressources (mémoire, CPU) pour traiter le paquet reçu. Le paquet est simplement rejeté (pour protéger le routeur) et un message ICMP de ce type est retourné. &lt;/p&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Redirect&amp;nbsp;» (valeur 5)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Ce message ICMP est envoyé par un routeur à l'émetteur du paquet pour signaler (à titre d'information) à cet émetteur qu'il existe une meilleure route pour cette destination. Le paquet est tout de même routé par le routeur même si ce n'est pas la meilleure route. &lt;/p&gt; &lt;p&gt;Les codes supplémentaires retournés dans le message peuvent être&amp;nbsp;: &lt;/p&gt; &lt;ul class="ListeDVP"&gt; &lt;li&gt;Redirect Datagram for the Network (0)&amp;nbsp;;&lt;/li&gt; &lt;li&gt;Redirect Datagram for the Host (1)&amp;nbsp;;&lt;/li&gt; &lt;li&gt;Redirect Datagram for the TOS &amp;amp; network (2)&amp;nbsp;;&lt;/li&gt; &lt;li&gt;Redirect Datagram for the TOS &amp;amp; host (3).&lt;/li&gt; &lt;/ul&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Echo&amp;nbsp;» (valeur 8)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Ce message ICMP est envoyé par un émetteur à destination d'une cible pour tester la connectivité réseau entre ces deux points. C'est ce message qui est envoyé par l'utilitaire «&amp;nbsp;ping&amp;nbsp;». &lt;/p&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Router Advertisement&amp;nbsp;» (valeur 9)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Il s'agit de message ICMP envoyés périodiquement par les routeurs sur leurs interfaces multicast pour annoncer l'adresse IP du routeur sur ce réseau. &lt;/p&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Router Solicitation&amp;nbsp;» (valeur 10)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Il s'agit d'un message ICMP envoyé par une machine pour solliciter les routeurs du réseau afin qu'ils répondent par un message «&amp;nbsp;Router Advertisement&amp;nbsp;». &lt;/p&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Time Exceeded&amp;nbsp;» (valeur 11)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Ce message est envoyé par un routeur lorsque la durée de vie d'un paquet est dépassée. &lt;/p&gt; &lt;p&gt;Ce message ICMP contient des codes supplémentaires qui permettent d'affiner le diagnostic&amp;nbsp;: &lt;/p&gt; &lt;ul class="ListeDVP"&gt; &lt;li&gt;time to live exceeded in transit (0)&amp;nbsp;: tout paquet est envoyé avec une durée de vie maximale. Si le routage fait que la durée de vie du paquet expire, le paquet est rejeté par le routeur et un paquet ICMP de ce type est renvoyé.&lt;/li&gt; &lt;li&gt;fragment reassembly time exceeded (1)&amp;nbsp;: tout paquet est envoyé avec une durée de vie maximale. Si le réassemblage du paquet (qui peut être un processus très long, car un paquet intermédiaire peut avoir été perdu) fait que la durée de vie du paquet expire, celui-ci est rejeté par la machine cible et un paquet ICMP de ce type est renvoyé.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Parameter Problem&amp;nbsp;» (valeur 12)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Ce message ICMP est envoyé quand un paramètre dans un paquet reçu pose problème ou est invalide. &lt;/p&gt; &lt;p&gt;Les codes supplémentaires retournés dans le message peuvent être&amp;nbsp;: &lt;/p&gt; &lt;ul class="ListeDVP"&gt; &lt;li&gt;Pointer indicates the error (0)&amp;nbsp;;&lt;/li&gt; &lt;li&gt;Missing a required option (1)&amp;nbsp;;&lt;/li&gt; &lt;li&gt;Bad length (2).&lt;/li&gt; &lt;/ul&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Timestamp&amp;nbsp;» (valeur 13)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Ce message ICMP permet de connaitre un peu plus précisément le délai d'acheminement entre deux machines puisque la résolution de temps utilisée est de une milliseconde. &lt;/p&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Timestamp Reply&amp;nbsp;» (valeur 14)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Ce message est la réponse ICMP à un message «&amp;nbsp;Timestamp Message&amp;nbsp;». &lt;/p&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Information Request&amp;nbsp;» (valeur 15)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Ce message ICMP est utilisé pour découvrir le numéro de réseau sur lequel on se situe (pour les machines qui ne sont pas configurées comme les stations diskless ou les terminaux X). &lt;/p&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Information Reply&amp;nbsp;» (valeur 16)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Ce message est la réponse ICMP au message «&amp;nbsp;Information Request Message&amp;nbsp;». &lt;/p&gt; &lt;p&gt;Les messages ICMP «&amp;nbsp;Information Request Message&amp;nbsp;» et «&amp;nbsp;Information Reply Message&amp;nbsp;» sont rendus obsolètes par l'utilisation des protocoles RARP et BOOTP. &lt;/p&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Address Mask Request&amp;nbsp;» (valeur 17)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Il s'agit d'un message ICMP envoyé par une machine pour connaitre le masque du réseau local. &lt;/p&gt; &lt;p&gt; &lt;b&gt; &lt;span class="mot_souligne"&gt;Le type «&amp;nbsp;Address Mask Reply&amp;nbsp;» (valeur 18)&lt;/span&gt; &lt;/b&gt; &lt;span class="mot_souligne"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;Il s'agit de la réponse ICMP au message «&amp;nbsp;Address Mask Request&amp;nbsp;». &lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;h2 class="TitreSection0" id="LII"&gt;II. Les programmes utilisant ICMP&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h2&gt;&lt;div class="BlocSection0"&gt; &lt;p&gt;Il existe différents programmes ou fonctionnalités qui tirent parti des facilités offertes par le protocole ICMP. Ces programmes sont&amp;nbsp;: &lt;/p&gt; &lt;ul class="ListeDVP"&gt; &lt;li&gt;Ping&amp;nbsp;;&lt;/li&gt; &lt;li&gt;nmap&amp;nbsp;;&lt;/li&gt; &lt;li&gt;Bing&amp;nbsp;;&lt;/li&gt; &lt;li&gt;Path MTU Discovery&amp;nbsp;;&lt;/li&gt; &lt;li&gt;Traceroute.&lt;/li&gt; &lt;/ul&gt; &lt;h3 class="TitreSection1" id="LII-A"&gt;II-A. Le programme «&amp;nbsp;ping&amp;nbsp;»&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h3&gt;&lt;div class="BlocSection1"&gt; &lt;p&gt;Le programme «&amp;nbsp;ping&amp;nbsp;» est un programme qui utilise les paquets ICMP de type «&amp;nbsp;Echo&amp;nbsp;» et «&amp;nbsp;Echo reply&amp;nbsp;». &lt;/p&gt; &lt;p&gt;Cet utilitaire permet de savoir si une machine est présente sur le réseau en lui envoyant un paquet ICMP Echo. En recevant ce paquet, la machine répond par un paquet ICMP Echo Reply. &lt;/p&gt; &lt;p&gt;Si l'on ne reçoit pas de réponse, bien souvent cela signifie que la machine n'est pas présente sur le réseau (mais il peut y avoir aussi d'autres causes à cette absence de réponse). &lt;/p&gt; &lt;p&gt;L'utilitaire «&amp;nbsp;ping&amp;nbsp;» permet aussi de spécifier la taille des données ICMP que l'on va envoyer et comme il affiche le temps entre l'émission du paquet et la réponse, il est possible de déduire la bande passante entre ces deux machines. &lt;/p&gt; &lt;p&gt;Comme l'utilitaire «&amp;nbsp;ping&amp;nbsp;» affiche le nombre de paquets émis et le nombre de paquets reçus, il est aussi possible de porter un jugement sur la qualité de la ligne entre ces deux machines. &lt;/p&gt; &lt;/div&gt; &lt;h3 class="TitreSection1" id="LII-B"&gt;II-B. Le programme «&amp;nbsp;nmap&amp;nbsp;»&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h3&gt;&lt;div class="BlocSection1"&gt; &lt;p&gt;«&amp;nbsp;nmap&amp;nbsp;» est un programme de découverte et d'analyse des machines d'un réseau développé par Fyodor (alias Gordon Lyon). &lt;/p&gt; &lt;p&gt;Une des fonctionnalités, entre autres, de ce programme est sa faculté à découvrir les services ouverts sur une machine cible. Pour cela, il envoie une demande d'ouverture de session avec un service TCP ou UDP supposé actif sur la machine cible et si la réponse est un paquet ICMP dont le type est «&amp;nbsp;Destination Unreachable&amp;nbsp;» et dont le code est «&amp;nbsp;port unreachable&amp;nbsp;», cela signifie que ce service n'est pas actif. &lt;/p&gt; &lt;/div&gt; &lt;h3 class="TitreSection1" id="LII-C"&gt;II-C. Le programme «&amp;nbsp;bing&amp;nbsp;»&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h3&gt;&lt;div class="BlocSection1"&gt; &lt;p&gt;«&amp;nbsp;bing&amp;nbsp;» est un utilitaire qui permet de mesurer la bande passante réelle entre deux points distants d'un réseau. &lt;/p&gt; &lt;p&gt;Il part du principe que si l'on connait le temps de transit (et donc la bande passante) entre la machine locale et le point A et le temps de transit entre la machine locale et le point B, il est possible de déduire la bande passante entre le point A et le point B. &lt;/p&gt; &lt;p&gt;«&amp;nbsp;bing&amp;nbsp;» mesure la bande passante réelle et pas la bande passante disponible, pour cela, il envoie des paquets ICMP «&amp;nbsp;Echo&amp;nbsp;» de taille différente aux deux extrémités A et B et analyse le temps transit des paquets et de leur réponse pour en déduire la bande passante. &lt;/p&gt; &lt;p&gt;Il semble que cet utilitaire soit un peu tombé dans les oubliettes maintenant. &lt;/p&gt; &lt;/div&gt; &lt;h3 class="TitreSection1" id="LII-D"&gt;II-D. Le programme «&amp;nbsp;Path MTU discovery&amp;nbsp;»&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h3&gt;&lt;div class="BlocSection1"&gt; &lt;p&gt;Le MTU, c'est-à-dire Maximum Transmission Unit, est la taille maximale que peut avoir un paquet entre deux points d'un réseau. Si un paquet plus grand que cette taille doit être envoyé, il doit alors être fractionné en plusieurs plus petits paquets. &lt;/p&gt; &lt;p&gt;«&amp;nbsp;Path MTU discovery&amp;nbsp;» est un programme qui recherche le plus petit MTU entre la machine locale et une destination quelconque. Le but de cette découverte est d'envoyer des paquets qui ne dépassent pas cette taille afin d'éviter le processus toujours long et couteux de fragmentation et défragmentation de paquets. &lt;/p&gt; &lt;p&gt;Pour cela, le programme envoie un paquet d'une taille arbitraire en positionnant le bit DF (Don't Fragment) dans l'entête IP et analyse une éventuelle réponse. Si cette réponse est un paquet ICMP «&amp;nbsp;Destination Unreachable&amp;nbsp;» dont le code vaut 4 (pour «&amp;nbsp;fragmentation needed and DF set&amp;nbsp;»), cela signifie que la taille initiale du paquet nécessite une fragmentation et donc que le MTU du chemin complet est plus petit. &lt;/p&gt; &lt;p&gt;En itérant ainsi plusieurs fois ou alors par dichotomie, il est possible de connaitre le plus petit MTU sur le chemin. &lt;/p&gt; &lt;/div&gt; &lt;h3 class="TitreSection1" id="LII-E"&gt;II-E. Le programme «&amp;nbsp;traceroute&amp;nbsp;»&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h3&gt;&lt;div class="BlocSection1"&gt; &lt;p&gt;«&amp;nbsp;traceroute&amp;nbsp;» est un programme qui permet de connaitre la liste des différents routeurs empruntés entre la machine locale et une destination quelconque. &lt;/p&gt; &lt;p&gt;Pour cela, le programme envoie un paquet TCP ou UDP ou ICMP avec un TTL (Time To Live) au niveau IP qui commence à 1 et qui est incrémenté jusqu'à ce que l'on atteigne la destination (bien souvent limité à 30 sauts au maximum). &lt;/p&gt; &lt;p&gt;En effet, lorsqu'un paquet est traité par un routeur, le TTL de ce paquet est diminué de 1. Lorsque ce TTL arrive à 0, le routeur retourne à l'émetteur un paquet ICMP dont le type est «&amp;nbsp;Time Exceeded&amp;nbsp;». En analysant la réponse reçue, on en déduit l'adresse IP du routeur qui a envoyé ce paquet. &lt;/p&gt; &lt;p&gt;En itérant successivement le processus, il est ainsi possible de connaitre la liste des routeurs empruntés. &lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;h2 class="TitreSection0" id="LIII"&gt;III. Les faiblesses d'ICMP&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h2&gt;&lt;div class="BlocSection0"&gt; &lt;p&gt;ICMP est un protocole qui a été inventé il y a de nombreuses années avec la genèse d'IP dans un contexte technique et un besoin de sécurité très différent de celui d'aujourd'hui. &lt;/p&gt; &lt;h3 class="TitreSection1" id="LIII-A"&gt;III-A. Les failles introduites par ICMP&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h3&gt;&lt;div class="BlocSection1"&gt; &lt;p&gt;ICMP est un protocole qui peut aussi apporter des failles, je parle ici de failles du protocole, pas de son implémentation. &lt;/p&gt; &lt;p&gt;Ces failles ont été décrites par le professeur argentin &lt;a target="_blank" class="lienArticle simple" href="http://www.gont.com.ar/advisories/index.html"&gt;Fernando Gont&lt;/a&gt;&amp;nbsp;: &lt;/p&gt; &lt;ul class="ListeDVP"&gt; &lt;li&gt;la faille «&amp;nbsp;Hard ICMP Errors&amp;nbsp;» qui donne la possibilité de fermer une connexion TCP&amp;nbsp;;&lt;/li&gt; &lt;li&gt;la faille «&amp;nbsp;Source Quenching&amp;nbsp;» qui peut faire ralentir le débit d'une connexion&amp;nbsp;;&lt;/li&gt; &lt;li&gt;la faille «&amp;nbsp;Path MTU Discovery&amp;nbsp;» qui peut faire passer la taille des paquets à 68 octets, ce qui ralentit également une connexion.&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;h3 class="TitreSection1" id="LIII-B"&gt;III-B. ICMP et les firewalls&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h3&gt;&lt;div class="BlocSection1"&gt; &lt;p&gt;En général, ICMP est un protocole qui ne franchit pas les coupe-feux, car il permet de donner énormément d'information à un agresseur externe. C'est pour cela que la plupart des firewalls maintenant refusent de générer des paquets ICMP. &lt;/p&gt; &lt;p&gt;Il est ainsi bien souvent impossible de «&amp;nbsp;pinguer&amp;nbsp;» un firewall, il n'y aura pas de réponse. &lt;/p&gt; &lt;p&gt;Si on fait une commande «&amp;nbsp;traceroute&amp;nbsp;» au travers d'un firewall, bien souvent la seule réponse obtenue pour ce point du réseau est une absence de réponse. &lt;/p&gt; &lt;p&gt;D'ailleurs maintenant, en général, les firewalls pour se cacher sur le réseau ne diminuent plus le TTL d'un paquet IP afin de ne pas montrer leur présence. &lt;/p&gt; &lt;/div&gt; &lt;h3 class="TitreSection1" id="LIII-C"&gt;III-C. ICMP et la translation d'adresse&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h3&gt;&lt;div class="BlocSection1"&gt; &lt;p&gt;Dans la plupart des paquets ICMP, dans les données, on retrouve l'entête IP du paquet initial qui a généré le problème et nécessité l'envoi d'un paquet ICMP. &lt;/p&gt; &lt;p&gt;Dans le cas de translation d'adresse (NAT), cet entête IP du paquet initial n'est absolument pas modifié par l'équipement de translation en retour et cela peut donner&amp;nbsp;: &lt;/p&gt; &lt;ul class="ListeDVP"&gt; &lt;li&gt;soit des données très difficiles à comprendre et à analyser&amp;nbsp;;&lt;/li&gt; &lt;li&gt;soit une mine d'informations pour un agresseur potentiel externe. En effet, il est possible de deviner le plan d'adressage interne derrière le mécanisme de translation d'adresse.&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt; &lt;h2 class="TitreSection0" id="LIV"&gt;IV. Conclusions&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h2&gt;&lt;div class="BlocSection0"&gt; &lt;p&gt;Voilà, ce rapide tour d'horizon du protocole ICMP est maintenant terminé et j'espère qu'il aura permis de démystifier un peu les mécanismes mis en place autour du protocole IP pour aider à diagnostiquer les problèmes. &lt;/p&gt; &lt;p&gt;N'hésitez pas à apporter votre pierre à l'édifice en apportant vos remarques et commentaires dans la discussion prévue à cet effet&amp;nbsp;: &lt;a target="_blank" class="lienforum" href="https://www.developpez.net/forums/showthread.php?t=1073779"&gt;2&amp;nbsp;commentaires&lt;/a&gt;&lt;/p&gt; &lt;h3 class="TitreSection1" id="LIV-A"&gt;IV-A. Remerciements&lt;a target="_blank" class="HautPage" href="https://ram-0000.developpez.com/tutoriels/reseau/ICMP/#" title="Haut de page"&gt;▲&lt;/a&gt;&lt;/h3&gt;&lt;div class="BlocSection1"&gt; &lt;p&gt;Je tiens à remercier &lt;a target="_blank" class="lienArticle https" href="https://www.developpez.net/forums/u83713/jacques_jean/"&gt;jacques_jean&lt;/a&gt; et &lt;a target="_blank" class="lienArticle https" href="https://www.developpez.net/forums/u166060/djug/"&gt;Djug&lt;/a&gt; pour l'aide qu'ils m'ont apportée lors de la relecture de ce document. &lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/section&gt;&lt;section class="articleBody"&gt;&lt;p&gt;Vous avez aimé ce tutoriel&amp;nbsp;? Alors partagez-le en cliquant sur les boutons suivants&amp;nbsp;: &lt;a target="_blank" title="Viadeo" href="http://www.viadeo.com/shareit/share/?url=https%3A%2F%2Fram-0000.developpez.com%2Ftutoriels%2Freseau%2FICMP%2F&amp;Title=Pr%C3%83%C2%A9sentation+du+protocole+ICMP" rel="nofollow"&gt;&lt;img alt="Viadeo" src="https://www.developpez.com/template/kit/kitbm-viadeo.png"&gt;&lt;/a&gt;&amp;nbsp;&lt;a target="_blank" title="Twitter" href="http://twitter.com/timeline/home?status=https%3A%2F%2Fram-0000.developpez.com%2Ftutoriels%2Freseau%2FICMP%2F" rel="nofollow"&gt;&lt;img alt="Twitter" src="https://www.developpez.com/template/kit/kitbm-twitter.png"&gt;&lt;/a&gt;&amp;nbsp;&lt;a target="_blank" title="Facebook" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fram-0000.developpez.com%2Ftutoriels%2Freseau%2FICMP%2F" rel="nofollow"&gt;&lt;img alt="Facebook" src="https://www.developpez.com/template/kit/kitbm-facebook.png"&gt;&lt;/a&gt;&amp;nbsp;&lt;a target="_blank" title="Google +" href="https://plus.google.com/share?url=https%3A%2F%2Fram-0000.developpez.com%2Ftutoriels%2Freseau%2FICMP%2F" onclick="javascript:window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600');return false;"&gt;&lt;img src="https://www.gstatic.com/images/icons/gplus-16.png" alt="Share on Google+"&gt;&lt;/a&gt;&amp;nbsp;&lt;script src="https://platform.linkedin.com/in.js"&gt;lang: fr_FR <script type="IN/Share" data-url="$url"> &lt;/p&gt;&lt;/section&gt;&lt;/div&gt; &lt;/section&gt; &lt;/article&gt; &lt;p class="licence"&gt;Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2011 ram-0000. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu&amp;nbsp;: textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300&amp;nbsp;000&amp;nbsp;€ de dommages et intérêts. &lt;/p&gt; &lt;script&gt; $(function() { if ($("#gabarit_pubBB").is(":hidden")) $('.contenuPage').attr('style', 'min-height:auto;padding-top:20px!important'); $("#gabarit_voiraussi").load("https://www.developpez.com/voiraussi/index/rubrique/70/"); $("#gabarit_encartemploi").load("https://www.developpez.com/ws/offres?alt=3&amp;utf8=1"); }); <img src="https://compteur.developpez.com/compter-70" alt="" width="1" height="1" style="position:absolute;left:1px;top:1px"> <img src="https://compteur.developpez.com/show_i.php/70/0" alt="" width="1" height="1" style="position:absolute;left:1px;top:1px"> <img src="https://compt.developpez.com/compter-70" alt="" width="1" height="1" style="position:absolute;left:1px;top:1px"> <script>$(function(){$("#lj70ig0a").load("/template/lj70ig0a"+'0'+".jpg");$("#uo70uy5r").load("/template/uo70uy5r"+'0'+".jpg");});

C'est quoi un paquet ICMP ?

Internet Control Message Protocol est l'un des protocoles fondamentaux constituant la suite des protocoles Internet. Il est utilisé pour véhiculer des messages de contrôle et d'erreur pour cette suite de protocoles, par exemple lorsqu'un service ou un hôte est inaccessible.

Quel est le rôle du protocole ICMP ?

Le protocole ICMP (Internet Control Message Protocol) est un protocole qui permet de gérer les informations relatives aux erreurs aux machines connectées.

Quel est l'objectif des messages ICMP ?

ICMP est utilisé pour transporter des messages de contrôle et d'erreur qui fournissent des informations concernant l'état du réseau. La commande la plus connue est la commande ping qui a pour objectif d'envoyer une requête ICMP de type Echo Request et d'attendre une réponse de type Echo Reply.

Quel est le port ICMP ?

Aucun port n'est utilisé lors d'un ping Le protocole ICMP, sur lequel repose la commande Ping, est utilisé pour véhiculer des messages au travers de paquets identifiés par un type et un code.