Internet Control Message Protocol sert, comme son nom l'indique, à passer des messages de contrôle. Hum. Voilà qui est clair. C'est le protocole utilisé, par exemple, par les fantastiques programmes ``ping'' et ``traceroute'' (accessoirement, ce dernier utilise aussi UDP). Le premier envoie des paquets à un hôte, ces paquets lui demandant ``réponds moi'' ; et cet hôte, bienveillant, lui répond ; le programme affiche lorsqu'il reçoit ces réponses, et affiche aussi le temps écoulé entre la question et la réponse. Cela permet de tester une connexion IP quand rien ne marche : si on arrive à ``pinger'' une machine mais qu'à part ça, elle ne répond pas, c'est probablement qu'elle est légèrement plantée ou qu'on lui a dit de ne pas répondre ; si on n'arrive pas à la ``pinger'', c'est qu'elle est probablement éteinte ; et enfin, si on n'arrive pas à ``pinger'' le routeur qui dessert cette machine, hum, alors c'est normal que la machine elle même ne réponde pas (à moins bien sûr que le routeur ait été informé de ne pas répondre aux pings...).
Autre utilisation d'ICMP : la transmission d'informations de routage. Si un routeur doit transmettre un paquet qui a emprunté un détour, il peut envoyer un message ICMP à l'expéditeur pour lui indiquer une route plus directe. Cela arrive, par exemple, quand le routeur reçoit un paquet venant d'un réseau, destiné à ce même réseau. Ce mécanisme n'est efficace que pour des topologies simples ; ensuite, on utilise les programmes gated ou routed, par exemple.
On peut aussi utiliser ICMP sur un firewall, lorsqu'un hôte externe essaie de contacter un hôte interne alors qu'on a bloqué l'accès : on envoie alors un message pour signifier ``accès refusé, passez votre chemin''. Cela se traduit en général par un ``no route to host''.