El Internet Control Message Protocol (ICMP) actúa como el sistema nervioso de la capa de red. Su función es reportar errores, advertir congestiones y confirmar la disponibilidad de los destinos cuando IP por sí solo no puede hacerlo.
Aunque no transporta datos de usuario, ICMP resulta esencial para diagnosticar problemas cotidianos, optimizar rutas y mantener informados a los administradores.
IP es un servicio best-effort: si un paquete no puede entregarse, simplemente se descarta. ICMP aparece para cerrar ese círculo. Entre sus objetivos principales se encuentran:
ICMP se encapsula dentro de IP (protocolo 1 para IPv4, 58 para ICMPv6) y no ofrece confiabilidad; simplemente entrega un mensaje adicional al host origen para que decida qué hacer.
Cada mensaje se identifica por un par Type y Code. Los más utilizados son:
| Tipo (Type) | Código (Code) | Nombre | Uso |
|---|---|---|---|
| 0 | 0 | Echo Reply | Respuesta a un Echo Request (ping). |
| 3 | 0-15 | Destination Unreachable | Indica que la red, host, puerto o protocolo es inaccesible. |
| 5 | 0-3 | Redirect | El router sugiere un mejor gateway para ciertos destinos. |
| 8 | 0 | Echo Request | Consulta de disponibilidad generada por ping. |
| 11 | 0-1 | Time Exceeded | TTL expiró antes de llegar al destino (usado por traceroute). |
| 13/14 | 0 | Timestamp Request/Reply | Mide diferencias horarias entre nodos. |
Cuando se recibe uno de estos mensajes, el encabezado IP del paquete original se incluye en la carga útil para que el host emisor pueda identificar la conexión afectada.
En Windows, Test-Connection y Test-NetConnection permiten aprovechar ICMP sin recurrir a herramientas externas:
Test-Connection -ComputerName reddit.com -Count 4 |
Select-Object Address, ResponseTime, IPv4Address
Este comando envía cuatro Echo Request y muestra el tiempo de respuesta y la dirección IP alcanzada. Si un nodo no responde, el mensaje Destination Unreachable o Request Timed Out ayudará a delimitar dónde se corta la comunicación.
Test-NetConnection reddit.com -TraceRoute |
Select-Object -ExpandProperty TraceRoute
El resultado enumera los routers intermedios gracias a los mensajes Time Exceeded generados al expirar el TTL. Es ideal para detectar bucles o rutas asimétricas.
Aunque capturar paquetes ICMP crudos requiere permisos elevados, podemos reutilizar el comando del sistema operativo y procesar su salida en Python para automatizar diagnósticos.
El siguiente script ejecuta ping y calcula un promedio simple de latencias:
import subprocess
import statistics
def latencia_promedio(host, repeticiones=4):
comando = ["ping", "-4", host, "-n", str(repeticiones)]
resultado = subprocess.run(comando, capture_output=True, text=True, check=True)
tiempos = []
for linea in resultado.stdout.splitlines():
linea = linea.lower()
if "time=" in linea:
parte = linea.split("time=")[1]
elif "tiempo=" in linea:
parte = linea.split("tiempo=")[1]
else:
continue
valor = parte.split("ms")[0].strip()
try:
tiempos.append(float(valor))
except ValueError:
continue
if not tiempos:
raise RuntimeError("No se pudieron obtener tiempos de ping")
return statistics.mean(tiempos)
if __name__ == "__main__":
print(latencia_promedio("google.com"))
La lógica extrae los valores Tiempo=XXms y devuelve un promedio útil para monitoreos ligeros sin instalar librerías adicionales.
ICMP depende por completo de IP para circular, pero los routers lo tratan con prioridad para reportar incidentes críticos. Algunas características clave de la interacción son:
En redes bien diseñadas se permite al menos Echo, Time Exceeded y Destination Unreachable, lo que equilibra seguridad y visibilidad operativa.
En IPv6 el protocolo evoluciona significativamente. ICMPv6 incorpora funciones imprescindibles para que la pila moderna funcione:
Por eso es imposible desactivar ICMPv6 sin romper características básicas como SLAAC. La recomendación es filtrar únicamente los tipos innecesarios en el perímetro, manteniendo habilitados los relacionados con ND y PMTU.
ICMP es el mecanismo estándar para enterarse de que algo salió mal en la capa de red. Sus mensajes enriquecen la operación diaria y proporcionan datos clave para herramientas de diagnóstico.
En el próximo tema estudiaremos ARP y RARP, protocolos complementarios que traducen direcciones IP en direcciones físicas dentro de la capa de enlace.