El Módulo ICMP

 

El módulo ICMP (Internet Control Message Protocol) es el responsable de proporcionar información de control sobre la capa IP. Se encarga, por ejemplo, de informar a la máquina origen de los posibles errores IP que puedan surgir a lo largo del tránsito de un datagrama. Facilita, asimismo, un sistema rudimentario de gestión de encaminamiento y control de flujo, así como unos cuantos servicios como "echo" o "TimeStamp".

El sistema ICMP, tradicionalmente, ha sido modelado al margen de la capa IP, aunque físicamente ambos módulos suelen programarse juntos debido a su estrecha colaboración. En este Proyecto hemos decidido abordar la implantación desde el punto de vista de módulos separados, fieles a un enfoque modular.

La primera versión del ICMP [RFC792] define una serie de mensajes de control que incluyen:

Al igual que con el protocolo IP, se ha definido recientemente una ampliación al ICMP para acomodarlo a las nuevas necesidades nacidas del crecimiento de Internet [RFC1885]. Se incorporan algunas mejoras, pero las funcionalidades básicas del ICMP original se mantienen. En este Proyecto Fin de Carrera hemos decidido implantar la versión ICMP 4 debido a que es la utilizada comúnmente en Internet, y la versión 6 es demasiado reciente como para poder utilizarla de forma efectiva, además de requerir la implementación de IPv6.

En [RFC1256] se define una extensión al protocolo ICMP original para posibilitar que un nodo conozca las direcciones IP de sus pasarelas vecinas. De esta forma se elimina la necesidad de utilizar tablas de configuración en cada máquina, mantenidas de forma manual.

Por último, en [RFC1788] se propone una extensión experimental al ICMP para distribuir la traducción entre direcciones IP y nombres de máquinas y reducir la carga de trabajo del dominio "IN-ADDR".


Interfaz

Este módulo ha sido diseñado especialmente para comunicarse con la capa IP. Aunque muchos de sus servicios también están disponibles a otros niveles, deben utilizarse con precaución. El hecho de que las capas superiores puedan utilizar el ICMP es una de las razones por las que IP envía hacia arriba la cabecera IP original de los datagramas que se reciben.

La comunicación con el resto de los procesos se realiza única y exclusivamente a través del intercambio de mensajes. Los procesos definidos en esta capa son:

PROC_ICMP_BC

Este proceso es el encargado de inicializar este módulo. Debe ser invocado con un mensaje "MSG_INIT" o "MSG_QUIT". La inicialización de este módulo debe ser posterior a la del módulo IP.

PROC_ICMP_SUP

Este es el proceso al que las otras capas (especialmente la capa IP) solicitan servicios. Los mensajes permitidos son:

PROC_ICMP_INF

Este es el proceso que recibe los datagramas ICMP que llegan y procesarlos adecuadamente. Espera recibir un mensaje MSG_MBUF con campo1 conteniendo la estructura de MBUFs definida por el interfaz IP. Los mensajes que genera este proceso son:


Implementación

Este módulo implementa una capa ICMP acorde a los requisitos declarados en [RFC792]. Se han omitido, no obstante, algunas funcionalidades consideradas de reducido interés en el contexto de este Proyecto (acceso a un proveedor de servicios Internet):

Cuando sea apropiado se intenta hacer llegar los mensajes ICMP al proceso adecuado. Ello se realiza en cooperación con la capa IP, que es la que conoce a qué proceso hay que informar sobre los eventos ocurridos a los datagramas de un protocolo determinado. En el caso de que el protocolo sea desconocido, los mensajes ICMP simplemente se ignoran.

Como ya se ha comentado con anterioridad, los servicios de la capa ICMP están orientados, fundamentalmente, a la capa IP. Ningún otro nivel debería hacer uso de ellos sin un conocimiento profundo de su funcionamiento y de las estructuras de datos implicadas (en especial, la cabecera IP). La excepción es MSG_ICMP_ECHO, de libre uso por parte de cualquier proceso.


Bibliografía

[RFC778]    RFC 778: "DCNET Internet Clock Service"
            D.L. Mills
            Abril 1.981

[RFC792]    RFC 792: "Internet Control Message Protocol"
            Jon Postel
            Septiembre 1.981

[RFC1122]   RFC1122: "Requirements for Internet Hosts --
            Communication Layers"
            Robert Braden
            Octubre 1.989

[RFC1256]   RFC 1256: "ICMP Router Discovery Messages"
            S. Deering
            Septiembre 1.991

[RFC1788]   RFC1788: "ICMP Domain Name Messages"
            William Allen Simpson
            Abril 1.995

[RFC1885]   RFC1885: "Internet Control Message Protocol (ICMPv6)
            for the Internet Protocol Version 6 (IPv6)
            Specification"
            S. Deering
            A. Conta
            Diciembre 1.995