Uso netstatper controllare lo stato della mia porta.
Mi chiedevo che cosa è la differenza tra stato della porta LISTENING, TIME_WAIT, CLOSE_WAIT, FIN_WAIT1e ESTABLISHED?
Uso netstatper controllare lo stato della mia porta.
Mi chiedevo che cosa è la differenza tra stato della porta LISTENING, TIME_WAIT, CLOSE_WAIT, FIN_WAIT1e ESTABLISHED?
Risposte:
La manpage di netstatha una breve descrizione di ogni stato:
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.
È possibile utilizzare i diagrammi di transizione di stato (esempi qui , qui e qui ) per comprendere meglio gli stati.
Considera due programmi che tentano una connessione socket (chiamali ae b). Entrambi creano prese e passano allo LISTENstato. Quindi un programma (diciamo a) prova a connettersi all'altro ( b). ainvia una richiesta ed entra nello SYN_SENTstato, briceve la richiesta ed entra nello SYN_RECVstato. Quando briconosce la richiesta, entrano nello ESTABLISHEDstato e svolgono la propria attività. Ora possono succedere un paio di cose:
adesidera chiudere la connessione ed entra FIN_WAIT1. briceve la FINrichiesta, invia un ACK(poi aentra FIN_WAIT2), entra CLOSE_WAIT, dice ache sta chiudendo e entra LAST_ACK. Una volta ariconosciuto questo (ed entra TIME_WAIT), bentra CLOSE. aaspetta un po 'per vedere se è rimasto qualcosa, quindi entra CLOSE.ae bhanno terminato l'attività e decidono di chiudere la connessione (chiusura simultanea). Quando aè in FIN_WAIT, e invece di ricevere un ACKda b, riceve un FIN(come bdesidera anche chiuderlo), aentra CLOSING. Ma ci sono ancora alcuni messaggi da inviare (quello ACKche adovrebbe ottenere per il suo originale FIN), e una volta che questo ACKarriva, aentra TIME_WAITcome al solito.