ICMP (Internet Control Message Protocol) es el protocolo que utilizan los equipos y los routers para informar de errores y para hacer comprobaciones sencillas. Es la base de dos herramientas que todo técnico utiliza a diario: ping, para comprobar si un equipo responde, y traceroute, para descubrir por qué routers pasa un paquete. En este artículo se explica cómo funciona y cómo aprovecharlo para diagnosticar una red.

Qué es ICMP

ICMP está definido en la RFC 792 y viaja dentro de paquetes IP, con el número de protocolo 1. No usa puertos como TCP o UDP, y su función no es transportar datos de usuario, sino señalizar: avisar de que un destino no existe, de que un paquete se ha descartado o de que un equipo está activo. En IPv6 existe su equivalente, ICMPv6 (protocolo 58), que además es imprescindible para el funcionamiento de IPv6.

Formato del mensaje

Todo mensaje ICMP empieza con el tipo, que indica la clase de mensaje, el código, que lo detalla, y un checksum. El resto de la cabecera y los datos dependen del tipo. En los mensajes de error, los datos incluyen la cabecera IP y los primeros bytes del paquete que provocó el error, para que el origen pueda identificarlo.

Estructura de un mensaje ICMP dentro de un paquete IP
Estructura de un mensaje ICMP.

Tipos y códigos más habituales

Tipo Nombre Código Significado
0 Echo Reply 0 Respuesta a un ping
8 Echo Request 0 Petición de ping
3 Destination Unreachable 0 red · 1 host · 3 puerto · 4 fragmentación necesaria con DF · 13 filtrado administrativamente El destino o el camino no es alcanzable
11 Time Exceeded 0 TTL agotado en tránsito · 1 tiempo de reensamblado agotado El paquete se ha descartado por TTL
5 Redirect 0 a 3 Un router indica una ruta mejor
12 Parameter Problem 0 y otros Error en un campo de la cabecera IP

 

Ping: la prueba de eco

Ping envía un mensaje Echo Request (tipo 8) y espera un Echo Reply (tipo 0). Mide además el tiempo de ida y vuelta y el TTL con el que llega la respuesta. En Windows envía cuatro peticiones por defecto; en Linux sigue hasta que se detiene con Ctrl+C.

Lo que muestra Windows al fallar tiene significados distintos:

Mensaje de Windows Qué significa
Request timed out No hay respuesta: equipo apagado, tráfico filtrado o ruta rota
Destination host unreachable Un router, o el propio equipo, informa de que no hay camino o no resuelve ARP
Destination net unreachable El router no tiene ruta hacia esa red
TTL expired in transit El TTL se agotó, lo que sugiere un bucle de enrutamiento

En Cisco IOS el resultado se muestra con símbolos:

Símbolo en Cisco IOS Significado
! Respuesta recibida
. Tiempo agotado: sin respuesta
U Destino inalcanzable
& TTL agotado
? Paquete de tipo desconocido

Ten en cuenta que un ping sin respuesta no siempre significa que el equipo esté caído: muchos firewalls, incluido el de Windows en algunos perfiles, bloquean las peticiones de eco entrantes.

Traceroute: descubrir el camino

Traceroute envía paquetes con un TTL creciente (1, 2, 3…). Cada router resta uno al TTL; el que lo deja en cero descarta el paquete y devuelve un mensaje Time Exceeded (tipo 11), con lo que revela su dirección. Cuando una sonda llega por fin al destino, este responde con un Echo Reply, o con un Port Unreachable si las sondas eran UDP.

Funcionamiento de traceroute con sondas de TTL creciente y mensajes Time Exceeded
Traceroute con sondas de TTL creciente.

Los asteriscos (* * *) indican que no ha llegado respuesta en ese salto: puede haber un firewall o un router configurado para no responder, sin que el tráfico real se vea afectado. Lo importante es si los saltos posteriores sí responden.

Diagnóstico por pasos con ping

Una secuencia ordenada de pings permite localizar en qué punto falla la conectividad, avanzando desde el propio equipo hacia fuera:

Secuencia de pings para diagnosticar la conectividad, del propio equipo a un nombre de dominio
Escalera de diagnóstico con ping.

Si el cuarto paso funciona y el quinto falla, la conectividad IP es correcta y el problema está en la resolución de nombres. El servicio DNS se explica en el artículo de DHCP, DNS y ARP.

ICMP y la MTU

Los paquetes que no caben en un enlace se fragmentan, salvo que lleven el bit DF (don't fragment) activado. En ese caso, el router descarta el paquete y devuelve un ICMP de tipo 3, código 4 (fragmentation needed). Así funciona el descubrimiento de la MTU de la ruta. Si un firewall bloquea esos mensajes, algunas conexiones se quedan colgadas al transferir datos grandes aunque el ping funcione: es un fallo clásico y difícil de localizar.

Seguridad: no bloquear todo ICMP

ICMP puede usarse para reconocimiento o para ataques de inundación, y por eso a veces se bloquea por completo. Es un error: se pierden mensajes necesarios. Una política razonable es permitir los tipos esenciales (Echo Reply, Destination Unreachable y Time Exceeded), limitar la tasa de Echo Request y filtrar los tipos innecesarios, sobre todo desde el exterior. En IPv6 el filtrado debe ser todavía más cuidadoso, porque ICMPv6 es parte esencial del protocolo.

Comandos por plataforma

Plataforma ping traceroute
Windows ping 192.168.10.1 tracert 8.8.8.8
Linux ping -c 4 192.168.10.1 traceroute 8.8.8.8
Cisco IOS ping 192.168.10.1 traceroute 8.8.8.8
Huawei VRP ping 192.168.10.1 tracert 8.8.8.8
MikroTik RouterOS /ping 192.168.10.1 count=4 /tool traceroute 8.8.8.8

 

Errores frecuentes

  • Concluir que un equipo está caído solo porque no responde al ping.
  • Bloquear todo ICMP en el firewall y romper el descubrimiento de la MTU.
  • Interpretar los asteriscos de traceroute como un fallo del enlace.
  • Hacer ping solo a un nombre y no a una IP, mezclando problemas de DNS con problemas de red.
  • Olvidar que NAT, un firewall o una ACL pueden cambiar o filtrar las respuestas.
  • Fiarse del TTL de la respuesta para deducir el sistema operativo: solo da una idea aproximada.

Preguntas frecuentes

¿Por qué ping a una web funciona y la web no carga?

Ping prueba solo la conectividad IP. La web puede fallar por el puerto TCP, el firewall o el propio servicio, que ICMP no comprueba.

¿Qué significa un TTL de 64, 128 o 255?

Son los valores iniciales habituales de cada sistema operativo. El valor que se ve en la respuesta es el inicial menos los saltos recorridos.

¿Qué diferencia hay entre tracert y traceroute?

Es el mismo concepto con distinto nombre. Tracert es el comando de Windows y Huawei, que envía sondas ICMP; traceroute es el de Linux y Cisco, que por defecto envía sondas UDP.

Siguientes pasos

Los contenidos tienen carácter técnico e informativo. Antes de aplicar cambios en una red real, pruébalos en un entorno controlado y sigue los procedimientos de tu empresa u operadora.