Tipos de conexiones en netstat y ss explicadas

En esta breve entradas buscamos entender los mensajes de estado, ofrecidos por herramientas como netstat o ss, cuando listamos las conexiones actuales en nuestros sistemas preferidos GNU/Linux

Hay que tener en cuenta que las conexiones TCP puedes divirse en tres fases. El establecimiento de la conexión es un proceso de reconocimiento de varios pasos que establece una conexión antes de entrar en la fase de transferencia de datos. Una vez que se completa la transmisión de datos, la terminación de la conexión cierra la conexión y libera todos los recursos asignados.

Diagrama conexión TCP (fuente Wikipedia: https://en.wikipedia.org/wiki/Transmission_Control_Protocol#/media/File:Tcp_state_diagram_fixed_new.svg)

Una conexión TCP es administrada por un sistema operativo, en nuestro caso GNU/Linux, a través de un recurso que representa el punto final local para las comunicaciones, el socket de Internet. Durante la vida útil de una conexión TCP, el punto final local experimenta una serie de cambios de estado, que son las siguientes:

  • ESTABLISHED: El socket tiene una conexión establecida.
  • SYN_SENT: El socket está intentando activamente establecer una conexión.
  • SYN_RECV: Se ha recibido una solicitud de conexión de la red.
  • FIN_WAIT1: El sochet está cerrado y la conexión se está cerrando.
  • FIN_WAIT2: La conexión está cerrada y el socket está esperando un apagado desde el extremo remoto.
  • TIME_WAIT: El socket está esperando después del cierre para manejar los paquetes que aún están en la red.
  • CLOSE: El socket no se está utilizando.
  • CLOSE_WAIT: La conexión remota ha finalizado, esperando que se cierre el socket.
  • LAST_ACK: La conexión remota ha finalziado y se ha cerrado el socket, se espera reconocimiento.
  • LISTEN: El conector está escuchando conexiones entrantes. Dichos sockets no se incluyen en la salida de netstat, a menos que especifique la opción --listening (-l) o --all (-a).
  • CLOSING: Ambos sockets están apagados, pero aún no se han enviado todos los datos.
  • UNKNOWN: Se desconoce el estado del socket.

A modo de ejemplo aquí tenéis una muestra de la información ofrecida por netstat -tn, con diferentes estados:

Muestra de los estados de conexión vía netstat

En cambio utilizando el comando y parámetros ss -tn, tenemos el resultado:

Muestra de salida ss donde se ven las conexiones actuales

Y esto es todo, espero que esta información os sea de utilidad en algún momento.

Fuentes consultadas

Pagina de man de netstat

Página de man de ss

Página de Wikipedia en inglés sobre TCP