ICMP (Internet Control Messages Protocol).

Introducción.

Son un tipo de mensajes que envían los Routers, encapsulados en datagramas IP, al originador de algún mensaje conflictivo (porque haya problemas para encaminar un datagrama, congestión en la red, etc.).

Básicamente tiene dos funciones:

Informar sobre errores.

Diagnosticar y obtener información

El esquema general que se sigue a la hora de empaquetar es el siguiente:

Esquema general para encapsular mensajes ICMP.

Esquema general de un mensaje ICMP.

Errores:

El formato común para todos los mensajes de error es el siguiente:

Formato general para los mensajes de error.

Formato general para los mensajes de error.

Destination Unreachable (tipo=3): Se envía cuando se descarta un mensaje. El campo de código (code) refina la causa del descarte:

'0' (Network Unreachable): la red dentro de la cual está el destino, se encuentra inalcanzable.

'1' (Host Unreachable): el host destino está inalcanzable.

'2' (Protocol Unreachable): el host destino está bien, pero el campo de protocolo del datagrama no coincide con ninguno de los protocolos del host..

En la parte opcional, se incluye la cabecera IP y los primeros 64 bits (que probablemente tengan la cabecera del nivel de transporte...) del datagrama que se descartó.

Source Quench (tipo=4): Utiliza el mismo formato aunque el código es siempre 0.

Avisa de descarte por congestión.

Time exceeded for datagram (tipo=11): Avisa de un descarte por exceso de tiempo en el sistema.

Usa el mismo formato, con dos códigos posibles:

'0': descarte por TTL=0.

'1': timeout reensamblando (no han llegado todos los trozos al destino en el tiempo esperado).

Diagnóstico:

Los mensajes de diagnóstico que estudiaremos son los de echo request y reply, que responden ambos al mismo formato (los tipos son 8 y 0 respectivamente):

Formato de los mensajes de Echo Request y Reply.

Formato de los mensajes de Echo Request y Reply.

Utilidades:

Ping: Una vez que el destino devuelve el mismo mensaje que se le envió, el origen comprueba el campo de datos recibido con el transmitido y si coinciden es que el destino es perfectamente alcanzable (la opción '-s' dice el tiempo que tarda en ir y volver el datagrama, si bien no escapa de desglosarlo y decir qué parte corresponde a la ida o a la vuelta).

Trace Route: Nos dice la ruta seguida por los datagramas en una conexión (se observa por otra parte que no es una información demasiado fiable, pues un datagrama por definición no tiene por qué seguir un camino determinado).

Para hacer esto, envía echos con TTL a 1. Esto ocasiona que el primer router envíe un ICMP de descarte por TTL=0, pero además incluirá su dirección IP. Luego se envía otro con TTL=1,2.... hasta que se reciba un reply señal de que el mensaje llegó al destino.

Así, voy recibiendo progresivamente los mensajes de error de todos los Routers atravesados a la vez que sus direcciones IP.

NOTA:

Aunque aparentemente estos mensajes de ICMP ofrecen la fiabilidad que antes decíamos que le faltaba a IP, no es así. Si un mensaje ICMP se pierde, no se vuelve a enviar otro mensaje de error. Luego pese a que ofrece más robustez, no podemos asegurar la fiabilidad.