Comme nous avons vu précédemment, le protocole IP ne sait pas informer son homologue distant sur les éventuels erreurs de transmission. De plus, nos datagrammes étant routés par le protocole IP de machines en machines (pour atteindre une machine à l’autre bout de la planète par Internet nous sommes relayés), il se peut qu’une route choisie soit pour des raisons inconnues inaccessibles. Il faut alors mettre en place un mécanisme permettant d’informer l’émetteur des datagrammes pour qu’il réagisse et réémette les données. C’est dans cet esprit que travail ICMP : c’est un protocole de gestion des erreurs au même niveau qu’IP : son numéro est 1. IP est alors capable de gérer lui-même ses propres erreurs sans avoir besoin d’un informer les couches supérieurs.
Le protocole ICMP travaillant au niveau d’IP et devant avoir comme toutes autres données parcourant le réseau une adresse source et de destination, les datagrammes ICMP seront placés dans le champ DATA du datagramme IP :
Les datagrammes ICMP vont donc être routés comme les autres données sur le réseau (s’il y a une erreur sur la transmission du message ICMP, il ne se passe rien : pas d’erreur sur l’erreur !!!). La raison pour laquelle nous considérons ICMP au même niveau qu’IP est que le message ICMP travail pour IP : il gère ses erreurs et ne s’occupe en rien d’un quelconque transport, réservé au niveau supérieur. De même, pour délivrer des datagrammes à une machine derrière plusieurs relais, nous devons garder l’adressage logique IP : il est impossible de rester au niveau de la couche Réseau : ARP et RARP sont bloqués au niveau du réseau local. Examinons le format des messages ICMP :
Les informations que fournissent les messages ICMP sont du type :
Ø TYPE : il contient le code de l’erreur qui vient de se produire.
Ø CODE : il complète le champ TYPE.
Ø CHECKSUM : de la même manière que pour l’en-tête IP, ce champ permet la vérification de l’intégrité du message ICMP (uniquement le premier mot de 32 bits).
Ø De plus, ICMP fournit au destinataire de ce paquet l’en-tête IP du datagramme ayant généré une erreur, ainsi que les 8 premiers octets des DATAS de ce datagramme. Ceci permettant un meilleur diagnostic de la part de l’émetteur du datagramme originel.
Voyons maintenant quelques exemples de messages pouvant être générés par ICMP.
Ø Les plus connus sont sans aucun doute les messages de TYPE 8 : « ICMP Echo Request » (ping) et de TYPE 0 : « ICMP Echo Reply » (« pong »), générés par la commande ‘ping’ sur les systèmes UNIX ou DOS. Ce message permet de tester l’accessibilité d’une machine sur le réseau (souvent le ping est désactivé pour des raisons de sécurité). Si nous envoyons un ping (ICMP Echo Request) à une machine connectée sur le réseau, elle nous répondra par un « pong » (ICMP Echo Reply).
Ø Lorsqu’une passerelle ne peut transmettre un datagramme sur le réseau, elle envoie à l’émetteur un message de TYPE 3 : « Destination Unreachable ». Dans ce cas, la passerelle précise la raison de l’échec de transmission dans le CODE :
0 : ‘Network Unreachable’ : réseau inaccessible
1 : ‘Host Unreachable’ : machine inaccessible
2 : ‘Protocol Unreachable’ : protocole inaccessible
3 : ‘Port Unreachable’ : port inaccessible
4 : ‘Fragmentation needed and DF set’ : fragmentation de datagrammes requise : le bit DF du paquet IP devra être positionné
Ø Lorsqu’une machine reçoit est saturée et qu’elle n’arrive pas à suivre le trafic, les données vont lui arriver trop vite : elle ne pourra pas les traiter et enverra un datagramme de TYPE 4 : « Source Quench » En fait, lorsqu’une machine reçoit ce type de paquet, elle va progressivement abaisser le rythme de ses envois jusqu’à ne plus recevoir ce type de paquet. Une fois la vitesse ajustée, la machine va progressivement réaugmenter sa vitesse d’émission, tant qu’elle ne recevra pas de telles paquets. C’est donc en quelque sorte un mécanisme de régulation du trafic (cette fonction est habituellement réservée à la couche de transport : ici l’indépendance des couches n’est pas respectée.
Ø Les tables de routage des machines restent assez statiques. Il se passe souvent beaucoup de temps avant que l’administrateur ait besoin de les modifier. Cependant il se peut qu’il se produise des changements d’adresse. Les données de la table de routage s’avèreront alors incorrectes. Les passerelles qui sont beaucoup plus renseignées que les stations sur l’état du réseau et les chemins à prendre pour router un datagramme détectent ces erreurs. Ainsi elles pourront envoyer un message de TYPE 6 : « Redirect » à l’émetteur, et rediriger le paquet vers la bonne route. De la même façon que pour les messages de TYPE 3, il peut être précisé le type de redirection dans le champ CODE : 0 = Network, 1 = Host, 2 = Protocol…
Ø Les messages ICMP peuvent permettre d’obtenir ou d’annoncer des routes : TYPE 10 : « Router Solicitation » et TYPE 9 : « Router Advertisement ».
Ø Nous avons vu dans la description de l’en-tête IP que le champ TTL permettait d’éviter qu’un datagramme ne circule indéfiniment sur le réseau. Lorsque le TTL a expiré, le datagramme est supprimé, et le routeur envoie à son émetteur un message ICMP de TYPE 11 : « Time Exceeded ».
En conclusion, nous dirons que le protocole ICMP est vital pour un réseau : sans lui, aucune erreur ne serait rapportée à la station victime d’une erreur. C’est le complément de IP.