¿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?



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

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.


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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.