Tôi sử dụng netstatđể kiểm tra trạng thái cổng của tôi.
Tôi đã tự hỏi sự khác biệt giữa tình trạng cảng là những gì LISTENING, TIME_WAIT, CLOSE_WAIT, FIN_WAIT1và ESTABLISHED?
Tôi sử dụng netstatđể kiểm tra trạng thái cổng của tôi.
Tôi đã tự hỏi sự khác biệt giữa tình trạng cảng là những gì LISTENING, TIME_WAIT, CLOSE_WAIT, FIN_WAIT1và ESTABLISHED?
Câu trả lời:
Các manpage của netstatcó một mô tả ngắn gọn về mỗi tiểu bang:
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.
Bạn có thể sử dụng các sơ đồ chuyển trạng thái (ví dụ ở đây , ở đây và ở đây ) để hiểu rõ hơn về các trạng thái.
Hãy xem xét hai chương trình cố gắng kết nối ổ cắm (gọi chúng avà b). Cả hai thiết lập ổ cắm và chuyển sang LISTENtrạng thái. Sau đó, một chương trình (nói a) cố gắng kết nối với chương trình kia ( b). agửi yêu cầu và vào SYN_SENTtrạng thái, và bnhận yêu cầu và vào SYN_RECVtrạng thái. Khi bthừa nhận yêu cầu, họ vào ESTABLISHEDtiểu bang và thực hiện công việc của mình. Bây giờ một vài điều có thể xảy ra:
amuốn đóng kết nối, và đi vào FIN_WAIT1. bnhận được FINyêu cầu, gửi một ACK(sau đó anhập FIN_WAIT2), nhập CLOSE_WAIT, cho biết anó đang đóng và nhập LAST_ACK. Một khi athừa nhận điều này (và nhập TIME_WAIT), bnhập CLOSE. aĐợi một chút để xem có thứ gì còn lại không, sau đó đi vào CLOSE.avà bđã kết thúc việc kinh doanh của họ và quyết định đóng kết nối (đóng đồng thời). Khi aở trong FIN_WAITvà thay vì nhận một ACKtừ b, nó sẽ nhận được FIN(như bmuốn đóng lại), anhập vào CLOSING. Nhưng vẫn còn một số tin nhắn để gửi (cái ACKmà alẽ ra phải lấy cho bản gốc của nó FIN), và một khi nó ACKđến, asẽ đi vào TIME_WAITnhư bình thường.