Cómo inspeccionar tráfico TCP en tiempo real con tcpdump
Aprende a usar el comando tcpdump en la línea de comandos para capturar paquetes de red, filtrar puertos específicos y diagnosticar problemas de conectividad.
Resumen
- La utilidad tcpdump intercepta el tráfico que fluye a través de una interfaz de red en el sistema operativo.
- Los filtros de puertos evitan la saturación de datos en la terminal durante el análisis.
- La correcta interpretación de flags TCP revela problemas como conexiones colgadas y pérdida de paquetes.
- Se requieren privilegios de superusuario para capturar datos sin procesar directamente desde el núcleo.
- Guardar capturas en archivos compactos permite análisis posteriores en herramientas como Wireshark.
Qué es tcpdump y por qué resulta indispensable
Cuando una aplicación falla al comunicarse con una base de datos o una API externa, el desarrollador suele quedarse a ciegas sin saber dónde se perdió el dato. En la práctica, esto significa que adivinar la causa de un fallo de red genera una pérdida de tiempo preciosa. Es exactamente en este escenario donde entra tcpdump, una utilidad de línea de comandos ligera y potente capaz de interceptar y mostrar los paquetes de datos que viajan por la red de tu servidor en tiempo real.
A diferencia de los programas complejos con interfaz gráfica, tcpdump se ejecuta directamente en la terminal, lo que lo hace perfecto para servidores remotos vía SSH donde no hay pantallas disponibles. Funciona como una escucha telefónica para los cables de red virtuales o físicos de tu ordenador. Para comprender a fondo el comportamiento de las conexiones, a menudo combinamos esta herramienta con diagnósticos de puertos, tal como explicamos en la guía sobre cómo usar el comando ss en Linux para auditar conexiones de red, garantizando una visión completa del tráfico.
Preparando el entorno y capturando tu primer paquete
Antes de comenzar a registrar datos, necesitamos identificar qué interfaz de red utiliza el sistema para comunicarse con el mundo exterior. En servidores modernos, nombres como eth0 o enp3s0 son habituales. Como la captura de paquetes requiere acceso directo al hardware o al núcleo del sistema operativo, deberás ejecutar los comandos con privilegios administrativos usando sudo.
Para realizar una captura básica y ver los datos sin procesar pasando por la pantalla, basta con ejecutar el comando apuntando a la interfaz deseada. Si deseas profundizar en tus investigaciones y aprender cómo rastrear paquetes perdidos en la red con tcpdump, el dominio de este comando básico es el primer paso obligatorio. Mira a continuación cómo iniciar una lectura simple en la interfaz predeterminada:
sudo tcpdump -i eth0Una vez que el comando se ejecute, verás una avalancha de líneas apareciendo en la pantalla. Cada línea representa un paquete de datos cruzando la tarjeta de red, conteniendo direcciones IP de origen y destino, puertos y el protocolo utilizado. Para interrumpir la ejecución, simplemente presiona las teclas Ctrl y C en tu teclado.
Filtrando puertos y direcciones específicas
Dejar tcpdump funcionando sin filtros en un servidor de producción activo es como intentar beber agua de una manguera de incendios: el volumen de información es abrumador e inútil. Por eso, la verdadera utilidad de la herramienta surge cuando aplicamos filtros para aislar únicamente el tráfico que nos interesa, como un puerto específico donde nuestro microservicio está escuchando.
Si necesitas investigar fallos de comunicación en una aplicación web que corre en el puerto 80 o 443, o en una base de datos en el puerto 5432, puedes ordenar al comando que ignore todo lo demás. Para aislar el tráfico de un puerto específico, utiliza el siguiente comando en la terminal:
sudo tcpdump -i eth0 port 5432Este filtro restringe la visualización exclusivamente a los paquetes cuyo origen o destino involucren el puerto de la base de datos PostgreSQL. De este modo, resulta mucho más fácil comprobar si las peticiones están llegando a su destino y si el servidor está respondiendo de vuelta.
Analizando flags TCP y problemas de conectividad
El protocolo TCP utiliza un sistema de confirmaciones y control de flujo basado en banderas, conocidas como flags. Cuando se establece una conexión, ocurre el famoso apretón de manos de tres vías, involucrando las señales SYN, SYN-ACK y ACK. Comprender estos mensajes ayuda a identificar exactamente dónde se está muriendo la conexión.
Si notas que una aplicación intenta hablar con otra y recibe únicamente paquetes con la flag RST, significa que el destino rechazó activamente la conexión, por lo general porque ningún servicio está escuchando en ese puerto. Para visualizar los detalles de estas flags de forma legible en la terminal, añadimos parámetros que evitan la traducción lenta de nombres de host:
sudo tcpdump -nnvv -i eth0 tcp port 80El parámetro -nn evita que el programa pierda tiempo intentando resolver direcciones IP en nombres de dominio, mientras que -vv incrementa el nivel de detalles mostrados en pantalla. Esta combinación revela el estado exacto de las conversaciones TCP, permitiendo aislar cuellos de botella que a menudo causan comportamientos inesperados en sistemas distribuidos. Para profundizar en estos conceptos arquitectónicos en producción, consulte también nuestro análisis técnico sobre Por qué los pods sufren OOM Killed en Kubernetes y cómo ajustar límites.
Guardando capturas para análisis posteriores
A menudo, el problema de red ocurre de forma intermitente y fugaz, haciendo imposible analizar la pantalla de la terminal en el momento exacto del fallo. En estos casos, la mejor estrategia es grabar el tráfico bruto directamente en un archivo para su posterior inspección detallada en herramientas visuales.
Puedes guardar el resultado de la captura en un archivo con extensión pcap utilizando el parámetro de escritura. Para almacenar los paquetes de la interfaz en un archivo seguro, ejecuta el comando abajo especificando el nombre de salida:
sudo tcpdump -i eth0 -w captura_red.pcap port 443Este archivo generado se puede transferir a tu máquina local y abrir en programas como Wireshark, permitiendo un estudio minucioso de cada byte transmitido. Dominar esta técnica garantiza total autonomía para resolver problemas complejos de infraestructura y redes sin depender de conjeturas.