ping
La herramienta ping opera directamente sobre la capa de red implementando el protocolo ICMP (Internet Control Message Protocol), definido en el RFC 792 para IPv4 y RFC 4443 para IPv6. A nivel del kernel, el binario construye un paquete IP crudo (usando sockets SOCK_RAW o sockets de datagramas ICMP sin privilegios según la configuración de net.ipv4.ping_group_range) y encapsula una cabecera ICMP de tipo 8 (Echo Request) con un código 0. Dentro de la carga útil del paquete se inserta una marca de tiempo generada por el emisor y un identificador único con números de secuencia incrementales para mapear unívocamente cada solicitud enviada con su posterior respuesta.
Cuando el host de destino o una interfaz de red Cisco recibe este paquete, el subsistema IP examina la suma de verificación (checksum) y la cabecera. Si es válido, el kernel responde inmediatamente generando un mensaje ICMP de tipo 0 (Echo Reply) con el mismo identificador y número de secuencia. Al recibir el eco de vuelta, el sistema emisor extrae la marca de tiempo original y la compara con el reloj del sistema actual, calculando el Round Trip Time (RTT). Si el paquete atraviesa routers intermediarios cuyo valor de Time to Live (TTL) llega a cero antes de alcanzar el objetivo, el router descarta el paquete y devuelve un mensaje ICMP Tipo 11 (Time Exceeded), lo que permite a ping detectar anomalías en la topología.
# En Linux: Enviar 5 paquetes rápidos sin resolución DNS forzando el bit DF para descubrir MTU
ping -c 5 -i 0.2 -n -M do -s 1472 192.168.10.1
# En Cisco IOS: Prueba de saturación con tamaño variable y bit Do Not Fragment activado
ping ip 10.0.0.1 repeat 1000 size 1500 df-bit timeout 1
- -c 5 (Linux): Determina la cantidad total de paquetes ICMP Echo Request que se enviarán antes de finalizar el proceso automáticamente.
- -i 0.2 (Linux): Intervalo en segundos de espera entre cada envío; valores inferiores a 0.2 suelen requerir privilegios de superusuario.
- -n (Linux): Inhibe la resolución inversa de nombres DNS, reduciendo latencias innecesarias y evitando demoras causadas por servidores DNS caídos.
- -M do (Linux): Configura la bandera "Do Not Fragment" (DF) en la cabecera IP para forzar al paquete a no dividirse; si el tamaño excede la MTU del trayecto, el paquete será descartado devolviendo un error ICMP Tipo 3 Código 4.
- -s 1472 (Linux): Especifica el tamaño en bytes del payload ICMP (1472 bytes de datos + 8 bytes de cabecera ICMP + 20 bytes de cabecera IPv4 = 1500 bytes totales de trama MTU estándar).
- repeat 1000 (Cisco): Ejecuta un tren continuo de 1000 pings consecutivos para medir degradación y pérdida intermitente.
- size 1500 (Cisco): Establece la longitud total del paquete IP en bytes.
- df-bit (Cisco): Habilita el bit DF en la cabecera del datagrama para auditar el Maximum Transmission Unit (MTU) de la ruta.
- timeout 1 (Cisco): Define el tiempo máximo de espera por cada Echo Reply en segundos antes de considerarlo una caída.
Para interpretar los resultados en Linux, observe la línea de resumen final: un mdev (desviación media) alto indica variaciones pronunciadas de latencia (jitter), típicamente causado por congestión de buffer (bufferbloat) o colas QoS en el trayecto. En Cisco, una secuencia de signos de exclamación (!) indica éxito, puntos (.) indican expiración de timeout por descarte de tráfico o bloqueo por ACL, y la letra U señala que se recibió un mensaje ICMP de red o puerto inalcanzable (Unreachable).
traceroute
El comando traceroute deduce la topología de capa 3 salto por salto explotando intencionalmente el campo TTL (Time to Live) en la cabecera IPv4 (o Hop Limit en IPv6). Cada router que conmuta un paquete a nivel de red decrementa este contador en 1. Cuando un router recibe un paquete con un TTL de 1 y necesita enrutarlo hacia el siguiente salto, decrementa el valor a 0, descarta el datagrama y despacha de vuelta hacia la dirección origen un mensaje ICMP Tipo 11, Código 0 (Time-to-Live Exceeded in Transit). La dirección IP de origen de este mensaje ICMP revela la interfaz entrante del router intermedio.
Por defecto, la implementación clásica de Linux traceroute no usa ICMP Echo Request, sino datagramas UDP dirigidos a un rango de puertos efímeros altos poco probables (33434 a 33534). Con cada ráfaga de sondas, el comando incrementa el puerto destino y el valor TTL. Cuando la sonda finalmente alcanza el host de destino con un TTL válido, el host final intenta entregar el datagrama al puerto UDP especificado; al no encontrar ningún proceso a la escucha, su pila TCP/IP devuelve un mensaje ICMP Tipo 3, Código 3 (Destination Unreachable: Port Unreachable), señalando el término de la traza. Cisco IOS implementa un mecanismo análogo basado en UDP por omisión, mientras que las redes protegidas por cortafuegos frecuentemente requieren el uso forzado de sondas ICMP o TCP SYN para atravesar inspecciones de estado.
# En Linux: Traza usando paquetes TCP SYN al puerto 443 evitando resolución de nombres
traceroute -n -T -p 443 -q 3 -w 2 1.1.1.1
# En Cisco IOS: Traza extendida especificando interfaz de origen y timeout estricto
traceroute 172.16.1.1 source GigabitEthernet0/1 probe 2 ttl 1 20
- -n (Linux): Desactiva la resolución inversa de DNS para imprimir estrictamente las direcciones IP de cada salto, acelerando la prueba.
- -T (Linux): Fuerza el uso de sondas TCP SYN en lugar de datagramas UDP, ideal para atravesar firewalls perimetrales que filtran tráfico UDP saliente.
- -p 443 (Linux): Define el puerto de destino específico para las sondas (en este caso el puerto estándar de HTTPS).
- -q 3 (Linux): Envía exactamente 3 paquetes de sondeo por cada salto de TTL para obtener métricas comparativas de latencia.
- -w 2 (Linux): Ajusta el tiempo máximo de espera por respuesta a 2 segundos antes de marcar el intento como fallido.
- source GigabitEthernet0/1 (Cisco): Establece la dirección IP asignada a una interfaz específica como la IP de origen en la cabecera IP de la sonda.
- probe 2 (Cisco): Reduce el número de sondas por salto a dos (el valor predeterminado es 3).
- ttl 1 20 (Cisco): Fija el rango de exploración iniciando con un TTL mínimo de 1 hasta un TTL máximo de 20 saltos.
La aparición de asteriscos (* * *) en un salto específico no siempre implica una caída del enlace; en la gran mayoría de las arquitecturas de core corresponde a routers con políticas de Control Plane Policing (CoPP) o ICMP rate-limiting configuradas para ignorar la generación de paquetes ICMP Tipo 11 sin afectar el tráfico de datos en tránsito. Si los asteriscos continúan desde un salto específico hasta el final, el tráfico está siendo bloqueado por una lista de control de acceso (ACL) o una regla de filtrado de estado.
tcpdump
tcpdump es un analizador de paquetes de línea de comandos que opera interactuando con la biblioteca libpcap y la infraestructura de sockets de red AF_PACKET del kernel de Linux. Al activarse, tcpdump instruye al controlador de interfaz de red (NIC) para ingresar en modo promiscuo si es requerido, permitiendo que la interfaz capture todas las tramas que circulan por el segmento físico local, incluso aquellas cuya dirección MAC de destino no coincide con la del host local. Las tramas capturadas se copian directamente desde la memoria del anillo de recepción del driver (RX ring buffer) hacia el espacio de usuario.
Para evitar la saturación de la CPU procesando volúmenes masivos de datos innecesarios, tcpdump utiliza el motor BPF (Berkeley Packet Filter) dentro del kernel. Las expresiones de filtrado pasadas por la línea de comandos son compiladas en instrucciones de un bytecode elemental que se ejecuta en el espacio del kernel; de esta manera, solo los paquetes que satisfacen la condición lógica son copiados a la aplicación en el espacio de usuario, minimizando cambios de contexto y descarte de paquetes por desbordamiento de búfer.
# Capturar tráfico HTTPS en interfaz eth0, sin truncar, omitiendo DNS y puertos
tcpdump -nn -i eth0 -s 0 -vv -c 50 'tcp and port 443 and (tcp[tcpflags] & (tcp-syn|tcp-fin) != 0)'
# Captura de paquetes ICMP excluyendo la IP de administración local
tcpdump -nn -i any icmp and not host 192.168.1.50 -w captura_problema.pcap
- -n: Evita la resolución de direcciones IP a nombres de host.
- -nn: Evita tanto la resolución de direcciones IP a nombres como la conversión de números de puerto a nombres de servicio de transporte (ej. muestra 443 en vez de https).
- -i eth0 / any: Especifica la interfaz lógica o física de escucha; la palabra clave
anycaptura en todas las interfaces activas simultáneamente a través de un pseudo-dispositivo. - -s 0: Ajusta el snaplen (longitud de captura) al tamaño total del paquete (equivalente a 65535 bytes), garantizando que las cargas útiles no queden truncadas.
- -vv: Habilita el modo de salida muy detallado, analizando cabeceras IP, campos TTL, identificadores de fragmentación y opciones TCP.
- -c 50: Detiene la ejecución automáticamente después de capturar exactamente 50 paquetes que coincidan con el filtro BPF.
- -w archivo.pcap: Escribe los paquetes crudos capturados directamente en un archivo binario compatible con Wireshark en lugar de imprimirlos en pantalla.
Al analizar la salida, preste atención a las banderas de control TCP representadas entre corchetes: [S] para paquetes de sincronización (SYN), [.] para acuses de recibo (ACK), [P] para Push (envío inmediato de datos), y [F] para finalización limpia de conexión (FIN). Una abundancia de banderas [R] (RST) indica que las conexiones están siendo reseteadas abruptamente, lo que apunta a un puerto cerrado, caídas por un cortafuegos con inspección de estado o desincronización en la máquina de estados de TCP.
netstat
La suite tradicional netstat (y su contraparte moderna de alto rendimiento ss) proporciona visibilidad del subsistema de transporte TCP/IP inspeccionando las tablas internas de sockets del kernel. Históricamente, netstat obtenía esta información analizando archivos pseudo-jerárquicos en el sistema de archivos virtual, fundamentalmente /proc/net/tcp, /proc/net/udp y /proc/net/raw. Estas interfaces exponen las estructuras de datos del kernel struct sock y struct inet_sock, revelando el estado de las conexiones, los puertos de enlace local y remoto, y las colas de transmisión y recepción asignadas.
Dado que la lectura y conversión del formato de texto en /proc introduce un cuello de botella severo cuando existen decenas de miles de conexiones abiertas simultáneamente, se suele recurrir a ss, el cual utiliza la interfaz Netlink del kernel (mediante la familia NETLINK_INET_DIAG). Esto permite volcar la información de los sockets en estructuras binarias directamente desde el núcleo a la memoria de usuario, permitiendo medir de forma no intrusiva el estado de los búferes TCP (Send-Q y Recv-Q) y los temporizadores del protocolo.
# Verificación de sockets a la escucha con procesos asociados y sin resolución
netstat -tulpen
# Alternativa moderna mediante 'ss' con temporizadores y sockets en memoria
ss -tulpn -o state established '( dport = :https or sport = :https )'
- -t: Filtra y muestra exclusivamente sockets asociados al protocolo orientado a conexión TCP.
- -u: Incluye en la visualización sockets del protocolo de datagramas UDP.
- -l: Muestra únicamente los sockets que se encuentran en estado de escucha pasiva (LISTEN), omitiendo conexiones establecidas.
- -p: Muestra el identificador de proceso (PID) y el nombre del programa propietario de la estructura del socket (requiere privilegios de root).
- -e: Muestra información extendida, incluyendo el identificador de usuario (UID) dueño del socket y el número de inodo en el kernel.
- -n: Muestra direcciones IP y números de puerto numéricamente, evitando bloqueos por resolución DNS o búsquedas en /etc/services.
- -o (ss): Muestra información de temporizadores internos de red, tales como el tiempo restante de keepalive o retransmisión TCP.
- state established (ss): Expresión de filtrado que selecciona únicamente sockets en el estado de conexión ESTABLISHED.
La interpretación de las columnas Recv-Q y Send-Q es crítica durante caídas de servicio: para un socket en estado LISTEN, Recv-Q indica la cantidad de conexiones que ya completaron el handshake de tres vías pero que aún no han sido aceptadas por la aplicación mediante la llamada al sistema accept(). Un valor de Recv-Q consistentemente alto en un servidor web indica que el proceso de la aplicación está bloqueado o saturado. Para sockets en estado ESTABLISHED, un número alto en Send-Q denota que los datos están retenidos en el búfer de salida del kernel debido a congestión en la red o a que el receptor ha cerrado su ventana TCP (Window Size = 0).
mtr
mtr (My Traceroute) unifica el análisis de salto por salto de traceroute con la capacidad de muestreo continuo y estadístico de ping. Internamente, la herramienta ejecuta un bucle de eventos asíncrono que despacha ráfagas sucesivas de paquetes con TTLs progresivos hacia todos los nodos de la ruta identificada. A diferencia de un traceroute estándar que analiza la traza una única vez de manera secuencial, mtr sondea constantemente cada salto de manera concurrente para generar una muestra estadística válida a lo largo del tiempo.
A nivel de socket, mtr puede generar sondas ICMP Echo Request, paquetes UDP o paquetes TCP SYN. Mediante el seguimiento continuo de cada paquete emitido y de sus respectivas respuestas ICMP Time Exceeded o TCP ACK/RST, el motor recalcula en tiempo real el porcentaje de pérdida de paquetes, las latencias mínimas, medias y máximas, así como el jitter (desviación estándar de los tiempos de respuesta) específico para cada segmento del trayecto de capa 3.
# Ejecución en modo reporte sin DNS enviando 100 ciclos de sondeo TCP al puerto 80
mtr -n -r -c 100 --tcp -P 80 8.8.8.8
# Modo reporte ampliado con tamaño de paquete personalizado para detección de MTU
mtr -n -w -s 1400 -c 50 10.10.10.254
- -n: Fuerza al programa a mostrar únicamente las direcciones IP numéricas, sin ejecutar resoluciones DNS inversas por cada nodo.
- -r (o --report): Activa el modo no interactivo; mtr recopila los datos de los ciclos especificados y genera un reporte en texto plano formateado por la salida estándar.
- -c 100: Determina el número exacto de ciclos de sondeo completos que se ejecutarán antes de emitir el reporte final.
- --tcp: Modifica el mecanismo de sondeo de ICMP tradicional a sondas de transporte TCP SYN, evadiendo filtros de borde que penalizan ICMP.
- -P 80: Define el puerto TCP de destino para las sondas emitidas mediante el motor TCP.
- -w (o --report-wide): Impide que los nombres de host o IPs se trunquen en la salida del reporte, imprimiendo cada salto en una línea limpia sin cortes visuales.
- -s 1400: Ajusta el tamaño de la carga útil del paquete en bytes para simular tráfico real con tramas de longitud media.
Para diagnosticar problemas mediante mtr, la métrica cardinal es la columna Loss% combinada con la progresión entre saltos. Si un salto intermedio presenta un 40% de pérdida de paquetes pero el salto subsiguiente y el destino final presentan un 0% de pérdida, la aparente degradación es ficticia: el router intermedio está limitando la tasa de procesamiento de paquetes ICMP generados por su CPU de control, pero conmuta el tráfico en tránsito en hardware sin descartar paquetes. Por el contrario, si la pérdida de paquetes inicia en un salto intermedio específico y esa misma pérdida (o una mayor) persiste linealmente hasta el destino final, se ha identificado con precisión el enlace físico saturado o el nodo defectuoso.
ip route
La herramienta ip route es el componente de gestión de capa 3 del paquete iproute2 en Linux, el cual sustituyó por completo a la interfaz obsoleta route. A nivel de arquitectura del kernel, se comunica de forma bidireccional mediante sockets de la familia NETLINK_ROUTE, interactuando directamente con las tablas del subsistema FIB (Forwarding Information Base). El kernel de Linux no posee una única tabla de enrutamiento; soporta hasta 255 tablas independientes controladas mediante políticas de enrutamiento basado en reglas (Policy-Based Routing o PBR).
De forma similar a la Base de Información de Enrutamiento (RIB) en sistemas Cisco IOS, el kernel procesa la decisión de reenvío evaluando el algoritmo de coincidencia de prefijo más largo (Longest Prefix Match - LPM). Al recibir o emitir un paquete, se revisa la máscara de subred más restrictiva aplicable. Si existen múltiples rutas válidas con la misma longitud de prefijo hacia un mismo destino, el kernel pondera el valor administrativo de la métrica (metric) para determinar la interfaz y el siguiente salto de salida. En Cisco, este proceso se gestiona mediante la Distancia Administrativa (AD) combinada con el costo de la métrica del protocolo de enrutamiento activo (como OSPF o BGP).
# En Linux: Consultar la tabla de enrutamiento principal con métricas explícitas
ip route show table main
# En Linux: Simular la decisión de reenvío que tomará el kernel para un paquete
ip route get 192.168.50.10 from 10.0.0.5 iif eth1
# En Cisco IOS: Inspeccionar la RIB buscando rutas de subred específicas
show ip route 192.168.50.0 255.255.255.0 longer-prefixes
# En Cisco IOS: Verificar el próximo salto específico hacia una dirección IP externa
show ip route 8.8.8.8
- show (Linux): Ordena al subsistema volcar el contenido actual de las entradas de enrutamiento almacenadas en la base de datos de reenvío (FIB).
- table main (Linux): Especifica explícitamente la tabla de enrutamiento por defecto del sistema (ID 254), aislando la consulta de tablas de enlace local o tablas VRF personalizadas.
- get (Linux): Realiza una búsqueda simulada de resolución de ruta en el kernel, resolviendo la interfaz de salida, la IP origen que se seleccionará por omisión y la dirección del gateway según las políticas actuales.
- from 10.0.0.5 (Linux): Simula el origen de la dirección IP emisora dentro del comando
ip route getpara probar reglas de enrutamiento de origen (source routing). - iif eth1 (Linux): Informa al kernel que el paquete simulado ingresa al sistema a través de la interfaz física eth1 (Input Interface).
- longer-prefixes (Cisco): Filtra la tabla de enrutamiento global mostrando únicamente aquellas redes que posean una longitud de máscara igual o más específica que la subred provista.
Al analizar la salida de ip route show en Linux, una entrada estructurada como default via 192.168.1.1 dev eth0 proto dhcp metric 100 indica que el gateway predeterminado es alcanzable mediante la interfaz eth0, asignado por un cliente DHCP dinámico, y posee una métrica de 100. En Cisco IOS, la sintaxis O 10.20.0.0/24 [110/2] via 172.16.0.2, 00:14:22, GigabitEthernet0/0 documenta que la ruta fue aprendida mediante OSPF (código O), con una Distancia Administrativa de 110 y una métrica de costo de 2, transmitiéndose hacia el siguiente salto 172.16.0.2 a través del puerto GigabitEthernet0/0. Si la resolución muestra valores de métrica inesperadamente altos o interfaces de salida incorrectas, existirá asimetría en el tráfico o caída de paquetes debido a filtros de ruta inversa (rp_filter) en el kernel.

