回答:
のマンページにnetstat
は、各状態の簡単な説明があります。
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.
状態遷移図(ここ、ここ、ここの例)を使用して、状態をよりよく理解できます。
ソケット接続を試みる2つのプログラムを考えてみてください(それらa
を呼び出し、およびb
)。両方ともソケットをセットアップし、LISTEN
状態に移行します。次に、1つのプログラム(たとえばa
)が他のプログラム()に接続しようとしb
ます。a
要求を送信してSYN_SENT
状態に入り、要求をb
受信してSYN_RECV
状態に入ります。場合はb
、要求を認める、彼らが入るESTABLISHED
状態を、そして彼らのビジネスを行います。今、いくつかのことが起こります:
a
接続を閉じて、を入力しFIN_WAIT1
ます。リクエストb
を受信しFIN
、ACK
(をa
入力してFIN_WAIT2
)を送信し、エンターし、終了してCLOSE_WAIT
いるa
こととエンターを通知しますLAST_ACK
。一度a
これを認識し(と入力するTIME_WAIT
)、b
入りますCLOSE
。a
何かが残っているかどうかを確認するために少し待ってから入りCLOSE
ます。a
そしてb
彼らのビジネスを終え、接続(同時閉鎖を)閉じることを決定しました。ときa
でありFIN_WAIT
、その代わりに受信ACK
からb
、それが受信するFIN
(としてb
希望が同様にそれを閉じるために)、a
入射しますCLOSING
。しかし、そこに送信するにはまだいくつかのメッセージが(あるACK
そのa
元のために取得することになっているFIN
)、これは一度ACK
到着し、a
入るTIME_WAIT
いつものように。