PROTOCOLO de ICMP Microprocesador y Networking
I.S.T.P Francisco Antonio de Zela
Página: 4
Como ves ANTES de ICMP aparece el encapsulado el paquete IP, por eso se debería haber explicado
esto antes, pero bueno, ya no hay remedio, por otra parte ICMP es muy sencillo, así que seremos breves
Ni que decir tiene que la cabecera Ethernet la deberías saber interpretar perfectamente a estas alturas....
La cabecera ICMP (El formato del datagrama ICMP) se compone de 8 bytes + una cantidad
indeterminada de bytes que serán los bytes enviados para testear la conexión como máximo de 65535
bytes, (FF:FF) bueno a ese número se debería restar la cabecera.... (8 de ICMP y 20 de IP)
Campos Longitud
TipoCódigo Checksum 4
IdentificadorNúmero de Secuencia4
Datos Opcionales 4
Pasemos a analizar “nuestro ejemplo”
En rojo aparecen los bytes correspondientes a la Cabecera Ethernet, suficientemente explicado
En azul, corresponde los bytes del Protocolo IP, nuestro próximo reto cuando acabe esto....
En negro, los bytes que pertenecen al protocolo ICMP, lo que nos interesa ahora, olvídate de todo lo
demás....
Byte número 1, en nuestro caso es un 08, corresponde al tipo de ICMP (luego veremos)
Byte número 2, en nuestro caso es 00, es un Código utilizado por Algunos mensajes que requieran de
otro parámetro que no sea del de campo de tipo usaran este de complemento, es 00 si todo fue bien y se
puede usar para recibir las respuestas ICMP y/o para determinados mensajes no definidos por tipo.
Bytes 3 y 4, en nuestro caso 15 5C, corresponde al campo Checksum. Es una medida de seguridad para
comprobar su integridad.
Bytes 5 y 6, en nuestro ejemplo 02 00, Es un identificador que junto con el campo número de
secuencia, Sirve para identificar las respuesta de los mensajes ICMP. Es decir, el host destino y el emisor
intercambia sus mensajes ICMP según sus identificadores y sus números de secuencia, supongamos
que dos host diferentes envían un ping al destino “más o menos” a la vez. ¿Cómo responde el host
destino y a quién? Pues toma los identificadores y los números de secuencia, junto con las ip origen y
responde...
Bytes 7 y 8, en nuestro ejemplo 35 00, Es el número de secuencia que utilizará el destino para
responder, todo lo dicho para los bytes 5 y 6 (Identificador) sirve aquí...
El resto de bytes, del 9 en adelante con valores 61 62 63 64..... Corresponden a los bytes de relleno que
se envían para probar la conexión, pueden ser cualquier cosa, eso sí, como máximo 65535-28.
Recuerdas lo del famoso “ping de la muerte” pues consistía en enviar paquetes ICMP muy grandes a un
host destino vulnerable, esos host no eran capaces de “tragarse” una información tan grande (realmente
se enviaban 65510 bytes) y causaban un DoS, una negación del servicio, se desborda la pila de TCP/IP y
perdían la conectividad.
Si dispones de algún antiguo Windows 95, puedes comprobarlo, te construyes un paquete ICMP mal
intencionado y se lo envías, verás que se cuelga o se reinicia, como le pasaba a W95.