1. 程式人生 > >Linux伺服器上用netstat檢視的11種網路狀態及長連線討論

Linux伺服器上用netstat檢視的11種網路狀態及長連線討論

etstat狀態分類

用netstat -an命令檢視!再stat下面有一些英文,簡單說一下這些英文具體都代表什麼:

LISTEN:(Listening for a connection.)偵聽來自遠方的TCP埠的連線請求

SYN-SENT:(Active; sent SYN. Waiting for a matching connection request after having sent a connection request.)再發送連線請求後等待匹配的連線請求

SYN-RECEIVED:(Sent and received SYN. Waiting for a confirming connection request acknowledgment after having both received and sent connection requests.)再收到和傳送一個連線請求後等待對方對連線請求的確認

ESTABLISHED:(Connection established.)代表一個開啟的連線

FIN-WAIT-1:(Closed; sent FIN.)等待遠端TCP連線中斷請求,或先前的連線中斷請求的確認

FIN-WAIT-2:(Closed; FIN is acknowledged; awaiting FIN.)從遠端TCP等待連線中斷請求

CLOSE-WAIT:(Received FIN; waiting to receive CLOSE.)等待從本地使用者發來的連線中斷請求

CLOSING:(Closed; exchanged FIN; waiting for FIN.)等待遠端TCP對連線中斷的確認

LAST-ACK:(Received FIN and CLOSE; waiting for FIN ACK.)等待原來的發向遠端TCP的連線中斷請求的確認

TIME-WAIT:(In 2 MSL (twice the maximum segment length) quiet wait after close. )等待足夠的時間以確保遠端TCP接收到連線中斷請求的確認

CLOSED:(Connection is closed.)沒有任何連線狀態

TCP連線建立

首先要說明的是要明確TCP連線建立的過程需要3次握手,下面舉例說明各種狀態存在的時刻:

1. 首先在伺服器A上開啟FTP服務,開始偵聽來自遠端TCP埠的連線請求,這個時候檢視伺服器A狀態為:LISTENING

2. 在客戶端B上向A傳送FTP連線請求,這個時候資料包同步位置1,這是TCP三次握手的第一步。在傳送後沒收到確認時,在客戶端B上其狀態為:SYN-SENT。此時客戶端B啟動連線定時器。如果在75秒內沒有收到應答,則放棄連線建立。

3. 在伺服器A上收到從B上傳送的SYN同步包後,確認,然後再向B傳送SYN的同步包,此資料包同時將TCP標記中的同步位和確認位置1,它既對第一步中的客戶端同步資料包進行確認,表示願意與客戶端同步,同時再對客戶端主機進行同步請求,這是TCP連線的第一步。這個時候在伺服器A上,狀態為:SYN-RECEIVED。此時伺服器A啟動連線定時器。如果在75秒內沒有收到應答,則放棄連線建立。

4. 在客戶端B上接收到從A上發過來的確認同步包後進行確認,此資料包中將TCP標記中的確認位置1,表示這是一個確認資料包,此時在客戶端B狀態轉換為:ESTABLISHED

5. 伺服器A接收到從B發過來的確認包後,狀態轉換為:ESTABLISHED

此時TCP連線正式建立。
TCP連線關閉

6. 應用程式在在連線不需要的時候,通過客戶端B向伺服器A傳送的終止資訊的FIN包後,客戶端B處於FIN-WAIT-1狀態。

7. 從伺服器A接收到客戶端B傳送的終止資料包,它告訴客戶端B已成功接收客戶端的上資料包,此時等待應用程式來關閉連線,此時伺服器A進入CLOSE_WAIT狀態。

8. 客戶端B接收到帶有確認位的資料包後,對此進行確認,同意關閉TCP連線此時客戶端B轉移到FIN-WAIT-2狀態。當連線從FIN-WAIT-1狀態轉移到FIN-WAIT-2狀態時,將一個FIN-WAIT-2定時器設定為10分鐘。

9. 伺服器A在應用程式同意終止連線後,向客戶端B傳送終止FIN包,此時伺服器狀態轉為LAST-ACT。

10. 客戶端B在接收到從伺服器A傳送的終止包後,同意終止連線,然後再向伺服器端傳送確認資訊,此時客戶端B轉向TIME-WAIT狀態。當連線進入TIME-WAIT狀態時,該定時器被啟用。

11. 服務端A在收到客戶端B的確認後,關閉連線,伺服器A狀態轉向CLOSED。

12. 客戶端B在TIME-WAIT定時器超時時,與該連線相關的核心資料塊被刪除,連線終止,轉向CLOSED狀態。

此時TCP連線正式關閉。
備註

1. 一個由客戶端發起的關閉TCP連線的示意圖:

2. 連線終止請求對與建立連線的雙方是可以同時發出的,在發出終止請求後,雙方都進入FIN-WAIT-1狀態,隨著定時器的超時,雙方都進入CLOSING狀態,在這個定時器再次超時後,均轉入TIME-WAIT狀態,在TIME-WAIT的定時器超時後,雙方均放棄這次連線,連線轉為CLOSE狀態。如圖示: