50 votes

Quelle est la différence entre les états des ports "LISTENING", "TIME_WAIT", "CLOSE_WAIT" et "ESTABLISHED" ?

J'utilise netstat pour vérifier le statut de mon port.

Je me demandais quelle était la différence entre le statut de port et le statut d'entreprise. LISTENING , TIME_WAIT , CLOSE_WAIT , FIN_WAIT1 y ESTABLISHED ?

66voto

muru Points 180007

En page de manuel de netstat contient une brève description de chaque État :

   ESTABLISHED
          The socket has an established connection.
   SYN_SENT
          The socket is actively attempting to establish a connection.
   SYN_RECV
          A connection request has been received from the network.
   FIN_WAIT1
          The socket is closed, and the connection is shutting down.
   FIN_WAIT2
          Connection is closed, and the socket is waiting for  a  shutdown
          from the remote end.
   TIME_WAIT
          The socket is waiting after close to handle packets still in the
          network.
   CLOSE  The socket is not being used.
   CLOSE_WAIT
          The remote end has shut down, waiting for the socket to close.
   LAST_ACK
          The remote end has shut down, and the socket is closed.  Waiting
          for acknowledgement.
   LISTEN The  socket is listening for incoming connections.  Such sockets
          are  not  included  in  the  output  unless  you   specify   the
          --listening (-l) or --all (-a) option.
   CLOSING
          Both  sockets are shut down but we still don't have all our data
          sent.
   UNKNOWN
          The state of the socket is unknown.

Vous pouvez utiliser les diagrammes de transition d'état (exemples aquí , aquí y aquí ) pour mieux comprendre les États.


Considérons deux programmes qui tentent d'établir une connexion par socket (appelons-les a y b ). Tous deux mettent en place des prises de courant et passent à l LISTEN état. Ensuite, un programme (disons a ) tente de se connecter à l'autre ( b ). a envoie une demande et entre dans le SYN_SENT l'État, et b reçoit la demande et saisit le SYN_RECV état. Quand b accuse réception de la demande, ils entrent dans le ESTABLISHED et de faire leur travail. Deux choses peuvent alors se produire :

  1. a souhaite mettre fin à la connexion et saisit FIN_WAIT1 . b reçoit le FIN envoie une demande de ACK (puis a entre FIN_WAIT2 ), entre CLOSE_WAIT , raconte a il ferme et les entrées LAST_ACK . Une fois a en prend acte (et s'engage TIME_WAIT ), b entre CLOSE . a attend un peu pour voir s'il reste quelque chose, puis entre en scène CLOSE .
  2. a y b ont terminé leur travail et décident de fermer la connexion (fermeture simultanée). Lorsque a est en FIN_WAIT et au lieu de recevoir un ACK de b il reçoit un FIN (en tant que b souhaite également le fermer), a entre CLOSING . Mais il reste encore des messages à envoyer (le ACK que a est censé obtenir pour son FIN ), et une fois que ce ACK arrive, a entre TIME_WAIT comme d'habitude.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X