Ich netstat
überprüfe meinen Portstatus.
Ich frage mich , was ist der Unterschied zwischen Port - Status LISTENING
, TIME_WAIT
, CLOSE_WAIT
, FIN_WAIT1
und ESTABLISHED
?
Ich netstat
überprüfe meinen Portstatus.
Ich frage mich , was ist der Unterschied zwischen Port - Status LISTENING
, TIME_WAIT
, CLOSE_WAIT
, FIN_WAIT1
und ESTABLISHED
?
Antworten:
Die Manpage von netstat
enthält eine kurze Beschreibung der einzelnen Zustände:
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.
Sie können die Zustandsübergangsdiagramme (Beispiele hier , hier und hier ) verwenden, um die Zustände besser zu verstehen.
Stellen Sie sich zwei Programme vor, die versuchen, eine Socket-Verbindung herzustellen (rufen Sie sie auf a
und b
). Beide richten Steckdosen ein und gehen in den LISTEN
Staat über. Dann a
versucht ein Programm (sagen wir ), sich mit dem anderen zu verbinden ( b
). a
sendet eine Anfrage und tritt in den SYN_SENT
Zustand ein und b
empfängt die Anfrage und tritt in den SYN_RECV
Zustand ein. Wenn b
sie die Anfrage bestätigen, betreten sie den ESTABLISHED
Bundesstaat und erledigen ihre Geschäfte. Nun können einige Dinge passieren:
a
möchte die Verbindung schließen und tritt ein FIN_WAIT1
. b
Empfängt die FIN
Anfrage, sendet eine ACK
(dann a
tritt ein FIN_WAIT2
), tritt ein CLOSE_WAIT
, teilt mit, dass a
sie geschlossen wird und tritt ein LAST_ACK
. Sobald a
dies bestätigt ist (und eintritt TIME_WAIT
), b
tritt ein CLOSE
. a
wartet ein wenig, um zu sehen, ob noch etwas übrig ist, und tritt dann ein CLOSE
.a
und b
haben ihr Geschäft beendet und beschließen, die Verbindung zu schließen (gleichzeitiges Schließen). Wann a
ist in FIN_WAIT
, und anstatt ein ACK
von zu erhalten b
, erhält es ein FIN
(wie es auch b
zu schließen wünscht), a
tritt ein CLOSING
. Aber es gibt noch einige Nachrichten zu senden (die , ACK
die a
angeblich für sein Original zu erhalten FIN
), und sobald dies ACK
eintrifft, a
treten TIME_WAIT
wie gewohnt.