Tabla de contenidos
Algoritmo de encaminamiento IP
Figura: ICMP("Internet Control Message Protocol")
ICMP es un protocolo estándar con número STD 5, que además incluye IP(ver IP("Internet Protocol")) e IGMP (ver IGMP("Internet Group Management")). Su status es requerido. Se describe en el RFC 792, actualizado en el RFC 950.
"Path MTU Discovery" es un protocolo estándar provisional con status electivo. Se describe en el RFC 1191.
ICMP "Router Discovery" es un protocolo propuesto como estándar con status electivo. Es descrito en el RFC 1256.
Cuando un "router" o un host de destino debe informar al host fuente acerca del procesamiento de datagramas, utiliza el ICMP("Internet Control Message Protocol"). ICMP puede caracterizarse del modo siguiente:
Los mensajes ICMP se describen en los RFCs 792 y 950, correspondientes al STD 5 y son obligatorios.
Los mensajes ICMP se envían en datagramas IP. La cabecera IP siempre tendrá un número de protocolo de 1, indicando que se trata de ICMP y un servicio de tipo 0(rutina). El campo de datos de IP contendrá el auténtico mensaje ICMP en el formato mostrado en Figura - Formato de mensajes ICMP.
Figura: Formato de mensajes ICMP
Donde:
Cada uno de los mensajes se explica abajo.
Ver Echo (8) y Echo Reply (0).
Figure: destination unreachable o " destino inalcanzable" de ICMP
Si este mensaje es recibido de un "router" intermediario, significa que el "router" considera la dirección IP de destino como inalcanzable.
Si se recibe este mensaje del host de destino, significa que el protocolo especificado en el campo de número de protocolo del datagrama original no está activo, que ese protocolo no está activo en ese host o bien que es el puerto indicado el que no está activo(ver UDP("User Datagram Protocol") para una introducción al concepto de puerto).
El campo de código de cabecera tendrá uno de los siguientes valores:
Si un "router" implementa el protocolo de resolución de caminos MTU, el formato del mensaje "Destination unreachable" se cambia por el código 4 para incluir el MTU del enlace que no pudo aceptar el datagrama.
Figura: fragmentación de ICMP requerida con el enlace MTU
Si se recibe este mensaje de un router intermedio, significa que el "router" no dispone de suficiente espacio en el buffer para encolar los datagramas de salida para la siguiente red.
Si este mensaje procede del host de destino, significa que los datagramas entrantes llegan demasiado rápidos para ser procesados.
El código de la cabecera ICMP siempre es cero.
Si se recibe este mensaje de un "router" intermedio, significa que el host debería los siguientes datagramas para esa red al "router" cuya dirección IP se especifica en el mensaje ICMP. Este otro "router" habrá de estar siempre en la misma subred que el host que envió el datagrama y el que lo devolvió. Enviará el datagrama a su siguiente dirección de salto; si la dirección del "router" coincide con la dirección fuente del datagrama original, indica un bucle. Este mensaje ICMP no se enviará si el datagrama IP contiene un ruta fuente.
La cabecera ICMP tendrá uno de los siguientes valores:
Figura: ICMP Echo y Echo Reply
Echo se usa para detectar si otro host está activo en la red. La fuente inicializa el identificador y el número de secuencia(que se utiliza cuando se envían múltiples mensajes "echo request"), añade algunos datos al campo de datos y envía el "echo" ICMP al host de destino. El código de la cabecera ICMP es cero. El receptor cambia el tipo del mensaje a "echo reply" y devuelve el datagrama al host fuente. El comando Ping emplea este mecanismo paca determinar si es posible alcanzar a un host de destino(ver Ping).
Los mensajes ICMP 9 y 10 son opcionales. Se describen en el RFC 1256, que es electivo.
Figura: Router Advertisement de ICMP
Figure: Router Solicitation de ICMP
La cabecera ICMP es cero para ambos mensajes.
Estos dos mensajes se usan si un host o un "router" soporta el RDP("Router Discovery Protocol"). El uso del multicast está recomendado, pero se puede usar el broadcast si la interfaz no soporta el multicast. Los "router" anuncian periódicamente sus direcciones IP en subredes si han sido configurados para que lo hagan. Los anuncios se hacen en la dirección de multicast(224.0.0.1) o de broadcast limitado(255.255.255.255). El comportamiento por defecto es enviar anuncios cada 10 minutos con un TL e 1800(30 minutos). Los "routers" también responden a los mensajes de solicitud que puedan recibir. Pueden responder directamente al solicitante, o esperar un intervalo de tiempo aleatorio y relativamente corto y responder con un multicast. Los hosts pueden enviar solicitudes hasta que reciben una respuesta. Las solicitudes se envían a la dirección de multicast para todos los "routers"(224.0.0.2) o a la de broadcast limitado(255.255.255.255). Típicamente, tres mensajes de solicitud se envían a intervalos de 3 segundos. Alternativamente, un host puede esperar a los anuncios efectuados periódicamente. Cada vez que un host recibe un anuncio, actualiza su "router" por defecto si el nuevo anuncio tiene una preferencia superior y fija el TTL para que la entrada se ajuste al valor del nivel de preferencia. Cuando el host recibe un nuevo valor para su "router" por defecto actual, pone el valor TTL al del nuevo anuncio. Esto proporciona además un mecanismo para que los "router" se declaren no disponibles: envían un anuncio con un TTL de cero.
Si se recibe este mensaje de un "router" intermedio, significa que el TTL de un datagrama IP ha expirado.
Si se recibe del host de destino, significa que el TTL para ensamblar el datagrama ha expirado mientras el host esperaba uno de sus fragmentos. La cabecera ICMP puede tener uno de los siguientes valores:
Figura: Parameter Problem de ICMP
Indica que se encontró un problema durante el procesamiento de los parámetros de la cabecera IP. El campo puntero apunta al byte del datagrama original en el que se encontró el problema. La cabecera ICMP puede tener uno de los siguientes valores:
Figura: Timestamp Request y Timestamp Reply ICMP
Estos dos mensajes se emplean para medir el rendimiento y para la depuración. No se emplean para la sincronización: para eso está el NTP("Network Time Protocol")(ver Protocolos Time y Daytime).
El host fuente envía el identificador y el número de secuencia(usado si se envían múltiples mensajes "timestamp requests"), fija su sello de tiempo y se lo envía al receptor. El host receptor fija el valor de los sellos de tiempo de recepción y de envío, cambia el tipo del mensaje a "timestamp reply" y se lo devuelve al receptor. El receptor dispone de dos sellos de tiempo en caso de que haya una diferencia sensible entre los tiempos de recepción y de transmisión, aunque en la práctica la mayoría de las implementaciones efectuarán ambas operaciones(recepción y respuesta) de una sola vez, dando a los dos sellos el mismo valor. Los sellos de tiempo indican el número de milisegundos trasncurridos desde la medianoche según el meridiano de Greenwich(GMT).
Figura: Information Request e Information Reply de ICMP
El mensaje Information Request lo lanza un host para obtener una dirección IP para una red con la que está conectado. El host fuente envía la solicitud con la dirección IP de destino puesta a cero en la cabecera IP(refiriéndose a su propia red) y espera una respuesta de un servidor autorizado a asignar direcciones IP a otros hosts. La cabecera ICMP vale cero. La respuesta contendrá la direcciones IP de red en los campos de dirección fuente y dirección de destino de la cabecera IP. Este mecanismo está obsoleto. Ver RARP("Reverse Address Resolution Protocol").
Figura: Address Mask Request y Reply de ICMP
El mensaje Address Mask Request es usado por un host cuando quiere determinar qué máscara de subred usar la red a la que está conectado. La mayoría de los hosts se configurarán con su máscara de subred, pero algunos, tales como una estación de trabajo sin disco, deben obtener esta información de un servidor. Un host utiliza RARP (ver RARP("Reverse Address Resolution Protocol")) para obtener su dirección IP. Para obtener una máscara de subred, el host hace un broadcast del mensaje Address Mask Request. Cualquier host en la red que se haya configurado para enviar mensajes Address Mask Reply rellenará esta máscara, convertirá el tipo del mensaje a Address Mask Reply y se lo devolverá al host fuente. La cabecera ICMP tiene valor cero.
Hay dos aplicaciones simples y muy extendidas basadas en ICMP: el Ping y el Traceroute. El Ping usa los mensajes ICMP Echo y Echo Reply para determinar si un host es alcanzable. El Traceroute envía datagramas IP con bajos TTLs para que expiren durante la ruta que les dirige al destino. Utiliza los valores de los mensajes ICMP Time Exceeded para determinar en que parte de la red expiraron los datagramas y reconstruye así un esquema de la ruta hasta el host de destino. Estas aplicaciones se explican más detalladamente en Ping y Traceroute.
La implementación de ICMP explicada arriba es específica de la versión 4 de IP(IPv4). La versión 6 de IP(IPv6, ver IPv6P) requerirá una nueva versión de ICMP. Las definiciones de ambas no están completas aún. Ya se conocen algunas características importantes: