12. Ejemplos prácticos y herramientas

La teoría de la capa de transporte cobra sentido cuando se observan conexiones reales: sockets en escucha, handshakes en vivo y retransmisiones capturadas. Este tema reúne herramientas de línea de comandos y utilidades gráficas para estudiar TCP y UDP en cualquier sistema.

Veremos cómo usar netstat, ss, telnet, nc (netcat) y Wireshark para diagnosticar puertos abiertos, inspeccionar handshakes y comprender qué ocurre cuando la red pierde paquetes.

12.1 netstat y ss

netstat es el clásico para listar conexiones, mientras que ss (socket statistics) ofrece más velocidad y filtros avanzados en Linux.

netstat

netstat -tulpn           # sockets TCP/UDP en escucha
netstat -ant | grep EST  # conexiones TCP establecidas
netstat -s | grep retrans # métricas de retransmisiones

ss

ss -t state established '( sport = :443 )'
ss -u -a                 # sockets UDP activos
ss -ti dst 203.0.113.10  # incluye información de timers

Los campos timer de ss -ti revelan el RTO actual y los valores de retransmisión pendientes de cada socket, útiles para detectar problemas de desempeño.

12.2 Telnet para pruebas rápidas

Aunque quedó en desuso como protocolo seguro, telnet sigue siendo práctico para verificar si un puerto TCP responde, especialmente en servidores sin utilidades modernas.

Telnet como cliente genérico

telnet www.example.com 80
GET / HTTP/1.0
Host: www.example.com

Si el puerto está abierto, se observa el banner o la respuesta del protocolo. Si telnet no puede conectar, el problema puede ser de firewall, DNS o servicio caído.

12.3 nc (netcat) y variantes

nc es una navaja suiza para TCP/UDP: puede actuar como cliente o servidor, transferir archivos y generar tráfico sintético.

Servidor improvisado

# Escuchar en TCP 9000 y volcar lo recibido
nc -l 9000

# Escuchar en UDP 9999
nc -lu 9999

Cliente

echo "ping" | nc 198.51.100.5 9000
nc -u 198.51.100.5 9999 < archivo.bin

Muchos administradores combinan netcat con scripts para simular tráfico y comprobar balanceadores o firewalls.

12.4 Captura de handshakes con Wireshark

Wireshark permite filtrar tramas por conversación usando expresiones como tcp.stream eq 5. Un análisis típico:

  1. Aplicar el filtro tcp.flags.syn == 1 para ver los handshakes.
  2. Abrir Statistics > Conversations para identificar las IP y puertos implicados.
  3. Usar Follow > TCP Stream para reconstruir la sesión y ver los datos en texto o hex.

Las columnas “Bytes in flight” y “Calculated window size” ayudan a estimar la ventana efectiva. Activarlas facilita correlacionar control de flujo con la latencia observada.

12.5 Handshake analizado paso a paso

Un three-way handshake se interpreta así:

Paso Flag Contenido clave
1 SYN SEQ = ISN del cliente, opciones MSS/SACK.
2 SYN-ACK ACK al ISN del cliente, anuncia ISN del servidor.
3 ACK Confirma el ISN del servidor y habilita el flujo de datos.

Con Wireshark se puede seleccionar los tres paquetes, usar “Time Display Format” en microsegundos y medir la latencia exacta entre cada paso.

12.6 Ejemplo de pérdida y retransmisión

Para reproducir una retransmisión en laboratorio se puede limitar la velocidad o introducir pérdida artificial con tc netem (Linux). Una vez aplicada la condición, se observa en Wireshark:

  • Un hueco en la secuencia (Sequence Analysis marca “Previous segment not captured”).
  • ACK duplicados del receptor solicitando el byte faltante.
  • Segmento retransmitido con la misma secuencia.

Esta práctica confirma que el control de congestión y las retransmisiones funcionan como se describió en los temas anteriores.

12.7 Scripts útiles en PowerShell

Windows ofrece cmdlets para combinar diagnóstico local y remoto:

PowerShell

Test-NetConnection -ComputerName www.example.com -Port 443 -TraceRoute

Get-NetTCPConnection -State Established |
  Sort-Object -Property RemoteAddress |
  Select-Object -First 10 LocalAddress, LocalPort, RemoteAddress, State

Test-NetConnection combina ping, resolución DNS y conexión TCP, devolviendo el RTT estimado. Ordenar las conexiones establecidas permite detectar clientes que mantienen sockets abiertos durante demasiado tiempo.

12.8 Tips finales

  • Guardar perfiles de Wireshark con filtros predefinidos acelera el análisis.
  • Automatizar capturas con tshark o tcpdump permite comparar entornos y detectar regresiones.
  • Siempre documentar la hora y la configuración de la prueba para replicarla en futuras auditorías.