¿Qué son los estados CLOSE_WAIT y TIME_WAIT?

166

Cuando lo hago netstat -aen mi máquina Windows, obtengo una lista de los puertos con uno de los cuatro estados:

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED

¿Qué significan CLOSE_WAITy qué TIME_WAITsignifican?

Lazer
fuente
vea 'man netstat', desplácese hacia abajo hasta la sección de estado: linux.die.net/man/8/netstat
MaQleod
1
Vergonzoso enchufe a una respuesta en nuestra falla del servidor de la hermana .
Hennes
Cross site dupe: askubuntu.com/questions/538443/…
Mokubai

Respuestas:

179

Debido a la forma en que funciona TCP / IP, las conexiones no se pueden cerrar de inmediato. Los paquetes pueden llegar fuera de servicio o retransmitirse después de que se haya cerrado la conexión. CLOSE_WAIT indica que el punto final remoto (otro lado de la conexión) ha cerrado la conexión. TIME_WAIT indica que el punto final local (este lado) ha cerrado la conexión. La conexión se mantiene para que los paquetes retrasados ​​puedan coincidir con la conexión y manejarse adecuadamente. Las conexiones se eliminarán cuando caduquen en cuatro minutos. Ver http://en.wikipedia.org/wiki/Transmission_Control_Protocol para más detalles.

BillThor
fuente
Pero, ¿no significa esto que, incluso si los paquetes llegan después de que la función regresó, la aplicación los descartará?
MonsterMMORPG
@MonsterMMORPG Los paquetes que llegan fuera de servicio después de que se haya cerrado la conexión serán manejados por la pila de red. Por lo general, estos pueden descartarse de manera segura de acuerdo con las reglas normales de paquetes duplicados. Los paquetes que parecen estar relacionados con una conexión activa desconocida normalmente se descartan y generan una respuesta. Los estados de WAIT protegen contra este tráfico.
BillThor
29

Básicamente, los estados de "ESPERA" significan que un lado cerró la conexión pero la confirmación final del cierre está pendiente.

Consulte, por ejemplo, este diagrama de estados TCP para más detalles:

http://www.jxos.org/Projects/TCP/tcpstate.html

sleske
fuente
14
Esto describe con precisión CLOSE_WAIT pero no TIME_WAIT. TIME_WAIT indica que la aplicación local cerró la conexión, y el otro lado reconoció y envió un FIN propio. Ahora estamos esperando cualquier paquete duplicado perdido que pueda molestar a un nuevo usuario del mismo puerto.
Chris Smowton
1
@ChrisSmowton, ¿quién está usando la terminología correcta? El diagrama o netstat? ( cf. )
Pacerier
@Pacerier Creo que coinciden, ¿dónde crees que no están de acuerdo?
Chris Smowton
@ChrisSmowton Entonces, ¿esto significa que el próximo propietario del puerto puede obtener bytes adicionales y que puede romper la respuesta si establecemos TIME_WAIT = 0?
MonsterMMORPG
Posible pero muy improbable, ya que los números de secuencia tendrían que coincidir para que la aplicación vea el paquete deshonesto empalmado en el flujo, o el receptor necesitaría almacenar el paquete aparentemente fuera de servicio hasta que aparezca el número de secuencia correcto. No sé lo suficiente sobre implementaciones prácticas para decirle si esto último se hace en la práctica.
Chris Smowton
1

TIME_WAIT representa esperar el tiempo suficiente para asegurarse de que TCP remoto recibió el ACK de su solicitud FIN. Ver en.wikipedia.org/wiki/Transmission_Control_Protocol (y también RFC 793)

Denio Mariz
fuente
1
¿Qué agrega esto a la información proporcionada por las respuestas existentes?
Fixer1234
Agrega una referencia a RFC 793
Denio Mariz