# Internet Control Message Protocol

ICMP (Internet Control Message Protocol, Protocol de Missatges de Control d'Interxarxa) és un protocol que per al seu funcionament utilitza directament el protocol IP dins de l'arquitectura TCP/IP. La seva funció és informar de l'estat i situacions d'error en el funcionament de la capa de xarxa, sobretot en aspectes com l'encaminament, congestió, fragmentació, etc.
Els missatges ICMP es transmeten a l'interior de datagrames IP. Consten d'una capçalera de 64 bits, on apareixen camps com tipus, codi, SVT i informació variable. A continuació de la capçalera trobem l'espai per a dades.
ICMP, al contrari que TCP i UDP, no s'utilitza directament per les aplicacions d'usuari. L'excepció és l'aplicació Ping, que envia missatges de petició Echo Request (i rep missatges de resposta Echo Reply) per a determinar si un host està disponible i el temps que empren els paquets en anar i tornar a eixa màquina.

## Aspectes tècnics

El protocol ICMP forma part de la Suite IP tal com es va definir al document RFC 792. Els missatges ICMP són normalment generats en resposta a errors en els datagrames IP (segons l'especificació RFC 1122) o per a diagnòstic i encaminament.
La versió d'ICMP per a IPv4 és coneguda com a ICMPv4. IPv6 també té el seu protocol equivalent.
Els missatges ICMP són construïts al nivell de capa de xarxa, generalment d'un datagrama que ha generat una resposta ICMP. El protocol IP encapsula aquest missatge ICMP, afegint-li la mateixa capçalera IP i transmet el datagrama resultant de la forma habitual.
Com a exemple, cada màquina que reenvia un paquet IP (com un encaminador) decrementa en una unitat un camp de la capçalera IP anomenat temps de vida (TTL, Time To Live). Si aquest paquet és reenviat per moltes màquines, el valor TTL pot arribar a 0. Aleshores, es torna un missatge ICMP "Temps de vida excedit en trànsit".

### Capçalera

La capçalera ICMP comença després del bit 160 de la capçalera IP (llevat que s'usin opcions IP).
| | Bits 160-167 | 168-175 | 176-183 | 184-191 |
| 160 | Tipus | Codi | Checksum | Checksum |
| 192 | ID | ID | Seqüència | Seqüència |
* Tipus - Tipus ICMP especificat a sota.
* Codi - més concreció del tipus ICMP; i.e: un ICMP Destination Unreachable pot tenir aquest camp amb valor des de l'1 al 15, amb diferent significat cadascun.
* Checksum - Codi de comprovació d'error calculat a partir de la capçalera ICMP+dades, amb valor 0 per aquest camp.
* ID - Conté el valor de l'ID, hauria de ser retornat en cas de ECHO REPLY.
* Seqüència - Conté el valor de seqüència, hauria de ser retornat en cas de ECHO REPLY.

### Llista de missatges de control permesos (Llista incompleta)

Alguns missatges de control permesos són (llista incompleta): 0 - Echo Reply 1 - Reservat 2 - Reservat 3 - Destination Unreachable 4 - Source Quench 5 - Redirect Message 6 - Direcció Alterna de Host 7 - Reservat 8 - Echo Request 9 - Anunci de Router 10 - Sol·licitud de Router 11 - Temps Excedit 12 - Problema de Parámetre 13 - Marca de temps 14 - Resposta de Marca de temps 15 - Petició d'Informació 16 - Resposta d'Informació 17 - Petició de Máscara de Direcció 18 - Resposta de Máscara de Direcció 19 - Reservat per a seguretat 20-29 - Reservat per a experiments de resistència 30 - Traceroute 31 - Error de Conversión de Datagrama 32 - Redirecció de Host Mòbil 33 - IPv6 On ets? 34 - IPv6 On sóc? 35 - Petició de Registre de Mòbil 36 - Resposta de Registre de Mòbil 37 - Petició de Nom de Domini 38 - Resposta de Nom de Domini 39 - SKIP Protocol d'Algorisme de Descobrimient 40 - Photuris, Errors de Seguretat 41-255 - Reservat (Font: IANA ICMP Parameters)