Comparación entre netstat y ss para diagnóstico de redes en Linux

Comando netstat

Funcionaliadd principal

Proporciona información sobre conexiones de red, tablas de enrutamiento y estadísticas de interfaces. Soporta protocolos como TCP, UDP y sockets de dominio UNIX, y permite identificar procesos asociados a puertos.

Ejemplos de sintaxis comunes

Mostrar todas las conexiones activas

netstat -a
# Ejemplo de salida:
Proto Recv-Q Send-Q Dirección Local   Dirección Foránea  Estado      
tcp        0      0 10.0.0.1:22 172.16.0.3:12345   ESTABLECIDA

El parámetro -a lista todas las conexiones, incluyendo las en escucha y las activas.

Visualizar puertos TCP en escucha

netstat -tuln
# Ejemplo de salida:
Proto Recv-Q Send-Q Dirección Local   Estado       PID/Nombre del programa
tcp        0      0 0.0.0.0:8080    ESCUCHANDO   5678/httpd

-t endica TCP, -u para UDP, -l filtra solo puertos en escucha, y -n desactiva la resolución de nombres.

Contar conexiones por estado

netstat -ant | awk '/^tcp/ {print $6}' | sort | uniq -c
# Ejemplo de salida:
  15 ESTABLECIDA
   5 TIEMPO_ESPERA

Relacionar procesos con puertos

netstat -tulnp
# Ejemplo de salida:
tcp6       0      0 :::8080      :::*        ESCUCHANDO   5678/httpd

Comando ss

Funcionalidad principal

Herramienta moderna que reemplaza a netstat, accede directamente a los datos del kernel mediante la interfaz netlink. Ofrece mayor velocidad, soporte para filtros avanzados y visualización de estados TCP internos, como ventanas de congestión y RTT.

Ejemplos de sintaxis comunes

Listar todas las conexiones TCP

ss -at
# Ejemplo de salida:
Estado    Recv-Q   Send-Q   Dirección Local:Puerto    Dirección Par:Puerto   
ESTABLECIDA 0        0        10.0.0.1:22        172.16.0.3:12345

-a muestra todas las conexiones, -t se enfoca en TCP.

Consultar puertos en escucha

ss -tuln
# Ejemplo de salida:
Netid  Estado   Recv-Q  Send-Q  Dirección Local:Puerto  Dirección Par:Puerto 
tcp    ESCUCHANDO 0       128     *:8080                *:*              

-u es para UDP, -l filtra escuchas, -n evita resolución DNS.

Filtrar conexiones por estado

ss -t state established
# Ejemplo de salida:
Recibido-Q Enviado-Q Local:Puerto    Par:Puerto    
0          0         10.0.0.1:22     172.16.0.3:12345

Permite filtrar estados específicos como established, time-wait o closed.

Obtener información detallada de sockets y procesos

ss -tulnp
# Ejemplo de salida:
Netid  Estado   Recv-Q  Send-Q  Dirección Local:Puerto  Dirección Par:Puerto Proceso
tcp    ESCUCHANDO 0       128     *:8080                *:*              usuarios:(("httpd",pid=5678,fd=3))

El parámetro -p requiere privilegios de root para mostrar datos del proceso.

Resumen estadístico de conexiones

ss -s
# Ejemplo de salida:
Total: 50 (kernel 65)
TCP:   12 (estab 7, closed 3, orphaned 1, timewait 4)
UDP:   5

Comparación de diferencias clave

Característica netstat ss
Fuente de datos Lee archivos en /proc/net Accede al kernel vía netlink
Rendimiento Menor, puede retrasarse con muchas conexiones Alto, ideal para servidores con tráfico elevado
Complejidad funcional Simple pero con limitaciones Soporta filtros avanzados y análisis de estados TCP
Información de salida Datos básicos de conexión Metadatos detallados, como uso de memoria
Compatibilidad del sistema Preinstalado en sistemas antiguos Recmoendado para sistemas modernos (ej. CentOS 7+, Ubuntu 16+)
Visualización de procesos Requiere opción -p También la soporta, con formato más claro

Escenarios de uso recomendados

Cuándo preferir ss

  • Servidores de alta concurrencia: Necesitan estadísticas rápidas de miles de conexiones.
  • Filtrado preciso: Permite seleccionar conexiones por estado, puerto o IP.
ss -t src 10.0.0.1 and dport = 8080
  • Análisis de rendimiento TCP: Útil para inspeccionar métricas como la ventana de congestión.
ss -ti

Cuándo netstat puede ser necesario

  • Sistemas antiguos o embebidos: Donde ss no está disponible por defecto.
  • Visualización de tablas de enrutamiento: netstat -r ofrece una salida más intuitiva.
  • Estadísticas de interfaces: netstat -i muestra tráfico de red por interfaz.

Ejemplos prácticos

Caso: Identificar el proceso en el puerto 8080

Con netstat:

netstat -tulnp | grep ':8080'
# Salida:
tcp6  0  0 :::8080  :::*  ESCUCHANDO  5678/httpd

Con ss:

ss -tulnp | grep ':8080'
# Salida:
tcp  ESCUCHANDO 0 128 *:8080 *:* usuarios:(("httpd",pid=5678,fd=3))

La salida de ss es más compacta e incluye el nombre del proceso y el descriptor de archivo.

Caso: Contar conexiones en estado ESTABLECIDA

Con netstat:

netstat -ant | grep ESTABLECIDA | wc -l

Con ss:

ss -t state established | wc -l

ss filtra directamente por estado, lo que resulta en una ejecución más eficiente.

Etiquetas: netstat ss redes tcp UDP

Publicado el 8-1 01:26