5. ICMP (Internet Control Message Protocol)

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.

5.1 Propósito: diagnóstico, control y notificación

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:

  • Notificar errores: informan que un paquete no llegó porque la red estaba congestionada, el puerto destino estaba cerrado o la ruta no existía.
  • Controlar el tráfico: mensajes como Source Quench (obsoleto) o los avisos de redireccionamiento ayudan a ajustar el flujo.
  • Medir disponibilidad: herramientas como ping y traceroute dependen de las respuestas ICMP para verificar saltos intermedios.

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.

5.2 Tipos de mensajes ICMP

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.

5.3 Uso práctico: comandos ping y traceroute

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.

routers intermedios de una conexión

5.4 Análisis con Python

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.

5.5 Relación entre ICMP y el protocolo IP

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:

  • Encapsulamiento: ICMP se transporta como protocolo superior de IP (campo Protocol en IPv4 y Next Header en IPv6).
  • Fragmentación: los mensajes ICMP deben caber en un solo paquete. Si se fragmentan, el receptor puede perder contexto y descartar la notificación.
  • Control de errores: nunca se genera un mensaje ICMP en respuesta a otro ICMP para evitar tormentas de notificaciones.
  • Seguridad: muchos firewalls filtran ICMP para reducir superficie de ataque, pero bloquearlo por completo impide diagnósticos y descubrimientos automáticos de MTU.

En redes bien diseñadas se permite al menos Echo, Time Exceeded y Destination Unreachable, lo que equilibra seguridad y visibilidad operativa.

5.6 ICMPv6 y funcionalidades adicionales

En IPv6 el protocolo evoluciona significativamente. ICMPv6 incorpora funciones imprescindibles para que la pila moderna funcione:

  • Neighbor Discovery (ND): reemplaza a ARP combinando mensajes Router Solicitation, Router Advertisement, Neighbor Solicitation y Neighbor Advertisement.
  • Path MTU Discovery: informa al host origen la MTU óptima para evitar fragmentación intermedia.
  • Multicast Listener Discovery (MLD): administra grupos multicast y sustituye a IGMP en IPv4.

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.

5.7 Conclusión

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.