Die Manpage von netstatenthä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 aund b). Beide richten Steckdosen ein und gehen in den LISTENStaat über. Dann aversucht ein Programm (sagen wir ), sich mit dem anderen zu verbinden ( b). asendet eine Anfrage und tritt in den SYN_SENTZustand ein und bempfängt die Anfrage und tritt in den SYN_RECVZustand ein. Wenn bsie die Anfrage bestätigen, betreten sie den ESTABLISHEDBundesstaat und erledigen ihre Geschäfte. Nun können einige Dinge passieren:
amöchte die Verbindung schließen und tritt ein FIN_WAIT1. bEmpfängt die FINAnfrage, sendet eine ACK(dann atritt ein FIN_WAIT2), tritt ein CLOSE_WAIT, teilt mit, dass asie geschlossen wird und tritt ein LAST_ACK. Sobald adies bestätigt ist (und eintritt TIME_WAIT), btritt ein CLOSE. awartet ein wenig, um zu sehen, ob noch etwas übrig ist, und tritt dann ein CLOSE.
aund bhaben ihr Geschäft beendet und beschließen, die Verbindung zu schließen (gleichzeitiges Schließen). Wann aist in FIN_WAIT, und anstatt ein ACKvon zu erhalten b, erhält es ein FIN(wie es auch bzu schließen wünscht), atritt ein CLOSING. Aber es gibt noch einige Nachrichten zu senden (die , ACKdie aangeblich für sein Original zu erhalten FIN), und sobald dies ACKeintrifft, atreten TIME_WAITwie gewohnt.
Antworten:
Die Manpage von
netstat
enthält eine kurze Beschreibung der einzelnen Zustände: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
undb
). Beide richten Steckdosen ein und gehen in denLISTEN
Staat über. Danna
versucht ein Programm (sagen wir ), sich mit dem anderen zu verbinden (b
).a
sendet eine Anfrage und tritt in denSYN_SENT
Zustand ein undb
empfängt die Anfrage und tritt in denSYN_RECV
Zustand ein. Wennb
sie die Anfrage bestätigen, betreten sie denESTABLISHED
Bundesstaat und erledigen ihre Geschäfte. Nun können einige Dinge passieren:a
möchte die Verbindung schließen und tritt einFIN_WAIT1
.b
Empfängt dieFIN
Anfrage, sendet eineACK
(danna
tritt einFIN_WAIT2
), tritt einCLOSE_WAIT
, teilt mit, dassa
sie geschlossen wird und tritt einLAST_ACK
. Sobalda
dies bestätigt ist (und eintrittTIME_WAIT
),b
tritt einCLOSE
.a
wartet ein wenig, um zu sehen, ob noch etwas übrig ist, und tritt dann einCLOSE
.a
undb
haben ihr Geschäft beendet und beschließen, die Verbindung zu schließen (gleichzeitiges Schließen). Wanna
ist inFIN_WAIT
, und anstatt einACK
von zu erhaltenb
, erhält es einFIN
(wie es auchb
zu schließen wünscht),a
tritt einCLOSING
. Aber es gibt noch einige Nachrichten zu senden (die ,ACK
diea
angeblich für sein Original zu erhaltenFIN
), und sobald diesACK
eintrifft,a
tretenTIME_WAIT
wie gewohnt.quelle