ping (Packet Internet Groper)
A nivel de protocolo, ping opera directamente sobre la capa de red utilizando el Protocolo de Mensajes de Control de Internet (ICMP, definido en el RFC 792 para IPv4 y RFC 4443 para IPv6). Al invocar la herramienta, el sistema operativo genera un paquete ICMP Echo Request (Tipo 8, Código 0). Este datagrama viaja encapsulado en una cabecera IP con un identificador de proceso único, un número de secuencia incremental y una marca de tiempo en el payload de datos. El host destino, al recibirlo y verificar la suma de verificación (checksum), conmuta la dirección de origen y destino para responder inmediatamente con un paquete ICMP Echo Reply (Tipo 0, Código 0).
En entornos Cisco IOS, la arquitectura difiere levemente de la implementación estándar de Linux: Cisco no ejecuta ping de forma infinita por defecto, sino que emite una ráfaga de cinco datagramas de 100 bytes con un timeout de 2 segundos. Además, el plano de datos de un router prioriza el reenvío de tráfico sobre la respuesta a paquetes ICMP dirigidos al plano de control (Control Plane Policing - CoPP), lo que significa que una pérdida de paquetes en el ping hacia una interfaz de router no siempre indica saturación de enlace, sino una limitación deliberada de la CPU del equipo intermedio.
# Linux: Ping estándar con límites, tamaño de MTU y prevención de fragmentación
ping -c 5 -i 0.2 -s 1472 -M do 192.168.10.1
# Linux: Detección de pérdida rápida (modo inundación restringido a root)
sudo ping -f -c 1000 -n 10.0.0.1
# Cisco IOS: Ping extendido especificando interfaz de origen, DF-bit y tamaño
ping 192.168.10.1 source GigabitEthernet0/1 size 1500 df-bit repeat 50 timeout 1
- -c 5: Envía exactamente 5 paquetes y finaliza la ejecución (Linux continúa indefinidamente por defecto).
- -i 0.2: Define el intervalo de tiempo entre paquetes en segundos (en este caso, 200 ms).
- -s 1472: Especifica el tamaño del payload ICMP en bytes (1472 bytes + 8 bytes de cabecera ICMP + 20 bytes de cabecera IP = trama exacta de 1500 bytes MTU).
- -M do: Establece la bandera DF (Don't Fragment) en la cabecera IP para validar Path MTU Discovery (PMTUD). Si un salto no admite el tamaño, devolverá un error ICMP Tipo 3 Código 4.
- -f: Modo flood (inundación). Envía paquetes tan rápido como regresan o hasta 100 por segundo, útil para pruebas de estrés y detección de caída de frames.
- -n: Deshabilita la resolución DNS inversa numérica, acelerando drásticamente el reporte de salida.
- source / size / df-bit / repeat (Cisco): Parámetros del comando extendido para forzar la IP de origen, tamaño del datagrama, activar el bit de no fragmentación y alterar la cantidad de paquetes enviados.
Interpretación de resultados: El tiempo de ida y vuelta (RTT: min/avg/max/mdev) cuantifica la latencia y la fluctuación (mdev o jitter). Un salto repentino en mdev sugiere congestión en buffers (bufferbloat). En Cisco IOS, la salida utiliza caracteres de estado: el signo de exclamación (!) indica recepción exitosa de un Echo Reply; el punto (.) representa agotamiento del tiempo de espera (timeout); y la letra U indica la recepción de un ICMP Destination Unreachable (típicamente filtrado por ACL o ruta inexistente).
traceroute
El comando traceroute mapea la topología de red salto a salto manipulando el campo Time-to-Live (TTL) de la cabecera IPv4 (o Hop Limit en IPv6). Por defecto en sistemas operativos Linux y Cisco IOS, la herramienta no utiliza ICMP Echo Requests como Windows (tracert), sino datagramas UDP dirigidos a un rango de puertos altos considerados no asignados (comúnmente entre 33434 y 33534). El primer paquete se envía con TTL=1; el primer router intermedio decrementa el TTL a 0 y, al no poder reenviarlo, descarta el paquete y devuelve un paquete ICMP Time Exceeded (Tipo 11, Código 0) con su propia IP de origen.
Traceroute incrementa progresivamente el TTL (TTL=2, TTL=3, etc.) repitiendo este ciclo hasta alcanzar el host final. Cuando el destino recibe el datagrama UDP en un puerto cerrado, su kernel responde con un mensaje ICMP Destination Unreachable / Port Unreachable (Tipo 3, Código 3), lo que le indica a la herramienta que ha llegado con éxito al extremo final y debe detener el rastreo.
# Linux: Traceroute estándar omitiendo resolución inversa DNS y usando ICMP en lugar de UDP
traceroute -n -I -m 30 -q 3 8.8.8.8
# Linux: Traceroute basado en TCP SYN para atravesar cortafuegos hacia un puerto específico
sudo traceroute -n -T -p 443 172.16.1.50
# Cisco IOS: Traceroute con control de sondas y saltos máximos
traceroute 172.16.1.50 numeric ttl 1 30 probe 2 timeout 1
- -n: Muestra direcciones IP puramente numéricas, evitando latencias introducidas por timeouts de DNS inverso.
- -I: Modifica el mecanismo de transporte de UDP a ICMP Echo Request.
- -T: Utiliza paquetes TCP SYN, ideal para diagnosticar rutas bloqueadas por firewalls de inspección de estado (stateful).
- -p 443: Fija el puerto destino de destino UDP o TCP hacia el que se dirigen las sondas.
- -m 30: Establece el número máximo de saltos (TTL máximo alcanzable) antes de abortar.
- -q 3: Define el número de paquetes de prueba enviados por cada salto (por defecto 3).
- numeric / ttl / probe (Cisco): Suprime DNS, define el rango de TTL inicial/final y reduce la cantidad de pruebas por salto para agilizar la traza.
Interpretación de resultados: Cada línea representa un salto de capa 3 con sus correspondientes tiempos de respuesta por sonda. Si un salto muestra asteriscos (* * *), significa que dicho router intermedio descarta la generación de mensajes ICMP Tipo 11 o que un firewall intermedio bloquea el tráfico de retorno. La existencia de múltiples direcciones IP en una misma línea denota enrutamiento por rutas de igual costo (ECMP - Equal-Cost Multi-Path).
tcpdump
tcpdump es el analizador de paquetes por línea de comandos estándar de la industria, construido sobre la librería libpcap. Opera colocando la tarjeta de red en modo promiscuo (si el hardware y los privilegios lo permiten), interceptando las tramas que llegan al controlador antes de que sean procesadas o descartadas por la pila TCP/IP del kernel. Utiliza el motor Berkeley Packet Filter (BPF) directamente en el espacio de kernel para compilar y evaluar expresiones lógicas, garantizando que solo los paquetes que coincidan con los criterios establecidos sean copiados al espacio de usuario, minimizando la sobrecarga de CPU y la pérdida de paquetes (drops).
A nivel de protocolos, permite inspeccionar de forma granular las transacciones a nivel de enlace de datos (Ethernet II), red (IPv4/IPv6), transporte (TCP, UDP, SCTP) y aplicación. Con tcpdump es posible auditar el handshake de tres vías de TCP (SYN, SYN-ACK, ACK), la negociación de ventanas de recepción (TCP Window Scale), retransmisiones por caídas de segmento y terminaciones abruptas mediante flags RST.
# Capturar tráfico TCP específico en una interfaz, sin resolver nombres ni puertos
sudo tcpdump -i eth0 -nn -s 0 -vv -c 100 'tcp port 443 and (src 192.168.1.100 or dst 192.168.1.100)'
# Captura de paquetes que contienen flags TCP SYN exclusivamente (inicio de conexiones)
sudo tcpdump -i any -nn "tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0"
# Guardar captura completa sin truncar en formato pcap para análisis forense con Wireshark
sudo tcpdump -i eth0 -s 0 -w /tmp/incidente_red.pcap 'port 53 or port 80'
- -i eth0 / any: Especifica la interfaz física/lógica de escucha. El valor any captura en todas las interfaces activas simultáneamente.
- -nn: Desactiva la conversión de direcciones de red a nombres de host y la conversión de números de puerto a nombres de servicios.
- -s 0: Establece el snaplength (longitud de captura) en 0 (ilimitado), capturando el paquete entero en lugar de solo las cabeceras.
- -vv: Modo de máxima verbosidad; decodifica cabeceras IP adicionales como TTL, ID de fragmentación, opciones IP y TCP Flags completas.
- -c 100: Detiene la captura de manera determinista tras procesar exactamente 100 paquetes.
- -w / -r: Escribe la salida directamente en un archivo binario PCAP o lee desde un archivo previamente capturado.
Interpretación de resultados: Cada registro incluye marca de tiempo de alta precisión, protocolo de red, IP y puerto origen/destino, y en el caso de TCP, los flags activos representados simbólicamente: [S] (SYN), [.] (ACK), [P] (PUSH), [F] (FIN), [R] (RST). Observar un incremento de flags [R] indica conexiones rechazadas activamente por la aplicación o inyectadas por un firewall; segmentos duplicados con el mismo número de secuencia indican retransmisiones por congestión o pérdida.
netstat (y ss)
Tradicionalmente, netstat obtenía el estado de las conexiones de red leyendo e interpretando los archivos virtuales del sistema de archivos procfs (específicamente /proc/net/tcp, /proc/net/udp, etc.). En sistemas Linux modernos, la herramienta recomendada es ss (Socket Statistics), la cual accede directamente a la información del subsistema de red mediante sockets netlink (familia NETLINK_INET_DIAG), eliminando la degradación de rendimiento que sufre netstat al procesar tablas con decenas de miles de sockets abiertos.
Ambas herramientas permiten auditar en tiempo real la máquina de estados de TCP definida en el RFC 793 (LISTEN, SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT_1, CLOSE_WAIT, LAST_ACK, TIME_WAIT, CLOSED). Asimismo, exponen el estado de los búferes de sockets del kernel (Receive-Q y Send-Q), fundamentales para identificar aplicaciones que no leen datos a tiempo del buffer del sistema operativo.
# Netstat: Listar todos los puertos TCP/UDP en escucha con sus PID y ejecutables
sudo netstat -tulnp
# ss: Diagnóstico moderno de alto rendimiento filtrando estados TCP y procesos
sudo ss -tulpn -o state established
# ss: Identificar sockets locales con búferes de recepción saturados
sudo ss -ti '( dport = :http or sport = :http )'
- -t: Filtra exclusivamente sockets que operan sobre el protocolo TCP.
- -u: Filtra sockets que operan sobre UDP.
- -l: Muestra únicamente los sockets que se encuentran en estado pasivo o de escucha (LISTEN).
- -p: Muestra el identificador de proceso (PID) y el nombre del ejecutable propietario del descriptor del socket.
- -n: Deshabilita la resolución DNS y muestra puertos numéricos directos.
- -o: Expone la información de temporizadores internos de red (keepalive, retransmisión, tiempo restante de TIME_WAIT).
Interpretación de resultados: En sockets en estado LISTEN, una columna Recv-Q con un valor distinto de cero indica que el backlog de conexiones TCP completadas (handshake finalizado) no está siendo consumido con suficiente rapidez por la llamada accept() de la aplicación. Por el contrario, en conexiones ESTABLISHED, un valor persistente en Send-Q revela que los datos enviados no han recibido confirmación (ACK) del extremo remoto, denotando saturación de red o problemas de congestión de ventana en el cliente.
mtr (My Traceroute)
mtr combina funcionalmente la capacidad de rastreo topológico de traceroute con el análisis estadístico continuo y prolongado de ping. En lugar de emitir un conjunto finito de sondas, mtr mantiene una sesión de sondeo asíncrono constante sobre cada uno de los nodos descubiertos a lo largo del path. Utiliza paquetes ICMP Echo Requests por defecto con TTL incremental, actualizando dinámicamente una matriz estadística de calidad de enlace en tiempo real.
Desde la perspectiva de red, mtr es la herramienta idónea para aislar fallos intermitentes y microcortes. Permite diferenciar con precisión matemática si la latencia o la pérdida de paquetes es causada por congestión real en un enlace específico o si se trata simplemente de la política de limitación de tasa (rate-limiting de ICMP) de la CPU del plano de control de un router intermedio.
# MTR interactivo forzando el uso de TCP SYN al puerto 80 para evitar bloqueos ICMP
sudo mtr --tcp --port 80 -n 1.1.1.1
# MTR en modo reporte estático para documentación o tickets (100 ciclos sin DNS)
mtr -r -c 100 -n -w 8.8.8.8 > /tmp/reporte_red.txt
# MTR usando datagramas UDP con tamaño de paquete personalizado
mtr -u -s 1400 -c 50 10.10.10.1
- -r: Ejecuta mtr en modo reporte (Report Mode). En lugar de abrir la interfaz ncurses interactiva, envía el número de paquetes definidos y emite un informe final en texto plano.
- -c 100: Define la cantidad de ciclos de sondas enviados a cada salto (por defecto 10).
- -n: Desactiva las consultas DNS inversas para evitar retrasos en el reporte.
- -w: Modo "wide" (ancho); evita truncar los nombres de host o IPs largas en la visualización.
- --tcp / -u: Cambia el protocolo de sondeo de ICMP tradicional a TCP SYN o UDP, vital para atravesar dispositivos perimetrales hostiles a ICMP.
- -s 1400: Configura el tamaño del paquete transmitido para validar estabilidad con tramas grandes.
Interpretación de resultados: La regla de oro en mtr indica que la degradación real es transitiva. Si el salto 4 muestra un 30% de pérdida de paquetes (Loss%), pero los saltos 5, 6 y 7 muestran 0% de pérdida, el salto 4 no tiene un problema de conectividad; simplemente su plano de control está descartando paquetes ICMP dirigidos a sí mismo. Por el contrario, si la pérdida o el incremento anómalo de RTT (avg/best/wrst/stdev) inicia en el salto 4 y se propaga sistemáticamente hasta el destino final, el cuello de botella o problema de enlace físico se encuentra inequívocamente entre el salto 3 y el salto 4.
ip route (y show ip route)
En el kernel de Linux, el comando ip route (perteneciente a la suite iproute2) interactúa con la Forwarding Information Base (FIB) a través de la interfaz de sockets Netlink. A nivel del subsistema de red, el kernel procesa cada paquete saliente o reenviado ejecutando una búsqueda en el árbol de rutas utilizando el algoritmo de coincidencia de prefijo más largo (Longest Prefix Match - LPM). La tabla de enrutamiento determina no solo el próximo salto (next-hop) y la interfaz de salida, sino también la MTU del path, la IP de origen preferida (prefsrc) y la métrica de selección de ruta.
En routers Cisco, la base de datos de enrutamiento de la CPU (Routing Table o RIB) se compila y transfiere mediante hardware a la FIB (Forwarding Information Base) del mecanismo Cisco Express Forwarding (CEF). Esto permite que el plano de conmutación de datos realice búsquedas de conmutación de capa 3 por hardware (ASIC/TCAM) sin interrumpir el procesador central del router.
# Linux: Mostrar la tabla de enrutamiento principal con resolución precisa
ip route show
# Linux: Simular y depurar la decisión exacta que tomará el kernel para un destino
ip route get 8.8.8.8 from 192.168.1.50 iif eth0
# Linux: Añadir una ruta estática con métrica específica y pasarela
sudo ip route add 10.50.0.0/16 via 192.168.1.254 dev eth0 metric 100
# Cisco IOS: Inspección granular de la decisión de enrutamiento para una IP destino
show ip route 10.50.1.1
show ip route summary
- ip route show: Imprime las entradas activas de la tabla de enrutamiento principal (tabla ID 254).
- ip route get [IP]: Ejecuta una consulta simulada en el motor de enrutamiento del kernel de Linux; indica la interfaz de salida, la dirección IP de origen seleccionada de forma determinista y el próximo salto exacto.
- from [IP] / iif [interfaz]: Parámetros complementarios de
ip route getpara evaluar políticas de enrutamiento basadas en políticas (Policy-Based Routing - PBR). - via [IP]: Define la dirección IP del router de siguiente salto (Next-Hop Gateway).
- dev [interfaz]: Fuerza la interfaz de red física o virtual de capa 2 asociada al envío.
- metric [valor]: Asigna el coste administrativo de la ruta en el kernel; valores numéricos más bajos tienen precedencia en caso de prefijos idénticos.
Interpretación de resultados: En Linux, la presencia de la ruta default via X.X.X.X dev ethY define la pasarela por defecto (0.0.0.0/0). Al usar ip route get, la salida expone exactamente qué interfaz y qué dirección de origen asignará el kernel local al socket antes de emitir la primera trama ARP o SYN. En Cisco IOS, show ip route [IP] desglosa la distancia administrativa (AD), la métrica del protocolo de enrutamiento (OSPF, BGP, EIGRP o estática), el tiempo transcurrido desde la última actualización de la tabla y la interfaz física específica encargada del switching de la trama.

No hay comentarios.:
Publicar un comentario