miércoles, 26 de marzo de 2014

Protocolo de Mensajes de Control de Internet o ICMP (Internet Control Message Protocol)

Protocolo de Mensajes de Control de Internet o ICMP (Internet Control Message Protocol)

Es el sub protocolo de control y notificación de errores del Protocolo de Internet (IP). Como tal, se usa para enviar mensajes de error, indicando por ejemplo que un servicio determinado no está disponible o que un router o host no puede ser localizado. También puede ser utilizado para transmitir mensajes ICMP Query.

Type(Tipo)
El primer octeto (1 byte) de la parte de datos del datagrama es el campo de tipo ICMP; el valor de este campo determina el formato del resto de los datos. Para este caso particular, es un tipo 8, Mensaje de Eco o de Respuesta de Eco ("Echo or Echo Reply Message"), es decir, se utilizo el comando ping. La dirección del origen en un mensaje de eco será la del destino del mensaje de respuesta de eco. Para componer un mensaje de respuesta de eco, simplemente se invierten las direcciones de origen y destino, el código de tipo se cambia a 0 y se vuelve a calcular la suma de control.

Code(Código)
Corresponde al segundo octeto y es un subtipo al tipo dado. En este caso particular 0. El Tipo 8 solo tiene el Código asociado 0. Otros Tipos, tienen más opciones de Código posibles.

Checksum(Suma de control)
Es el complemento a uno de 16 bits (2 bytes) de la suma de los complementos a uno del mensaje ICMP, comenzando por el Tipo ICMP.  A la hora de calcular la suma de control, el valor inicial de este campo es cero. En este caso el valor del campo es 94A7 en hexadecimal y 1001010010100111 en binario.

Para el cálculo del Checksum se procede de la misma forma que para computar el Checksum del protocolo IP:

La cabecera ICMP mas datos tiene el siguiente valor: 080094A763580000 en hexadecimal, para realizar el cálculo se tiene que colocar el campo del Checksum en 0, es decir: 0800000063580000 y después proceder.

Se realiza la suma a 16 bits:
Operador Hexadecimal Binario
+ 0800 0000100000000000
0000 0000000000000000
Resultado: 0800 0000100000000000

Se vuelve a realizar la suma del resultado anterior con los siguientes 16 bits del datagrama:
Operador Hexadecimal Binario
+ 0800 0000100000000000
6358 0110001101011000
Resultado: 6B58 0110101101011000

Se vuelve a realizar la suma del resultado anterior con los siguientes 16 bits del datagrama:
Operador Hexadecimal Binario
+ 6B58 0110101101011000
0000 0000000000000000
Resultado: 6B58 0110101101011000

Realizando el complemento a uno del último resultado, se tiene:[94A7] 1001010010100111

Que viene a ser el valor del campo Checksum.

Identifier(Identificador) y Sequence number (Número de secuencia)
El identificador (2 bytes) y el número de secuencia (2 bytes) pueden ser usados por el emisor para corresponder con las solicitudes de Eco. Por ejemplo, el identificador podría ser utilizado como un puerto en TCP o UDP para identificar una sesión, y el número de secuencia podría ser incrementado en cada eco de solicitud enviada. El generador de ecos devuelve estos mismos valores en la respuesta de eco.

En este caso particular, al ser este datagrama una solicitud de Eco, se está utilizando el identificador de manera similar a un puerto en TCP. Por ejemplo, si tenemos dos aplicaciones ping corriendo, la única manera de saber a qué aplicación pertenece un datagrama es por el identificador. El número de secuencia esta en 0 y no es utilizado.

En cuanto a las abreviaturas entre paréntesis BE (Big Endian) y LE (Liitle Endian), son formatos del identificador y numero de secuencia que utiliza wireshark para que sea más fácil seguirlos cuando se incrementan de una solicitud/respuesta de Eco a la siguiente. La razón para que ambos formatos se muestren es porque a veces los campos se rellenan como Big Endian (Byte de mayor peso) o Little Endian (Byte de menor peso) y no existe una manera definitiva de saber que formato es a partir de los contenidos del datagrama.

El texto “[Response In: 8]”, no es un campo del datagrama sino información que proporciona wireshark y que quiere decir que hay una respuesta de eco (Echo Reply) en el datagrama numero 8 de la lista de protocolos capturados.

Fuentes de información:
http://es.wikipedia.org/wiki/Internet_Control_Message_Protocol
http://www.rfc-es.org/rfc/rfc0792-es.txt
http://ask.wireshark.org/questions/3172/icmp-sequence-number-be-vs-le
http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol

Enlaces de interes:
Analizando el datagrama IP