1. 程式人生 > 實用技巧 >TCP連線圖示

TCP連線圖示

1.狀態解釋

LISTEN:偵聽來自遠方的TCP埠的連線請求

SYN-SENT:再發送連線請求後等待匹配的連線請求(客戶端)

SYN-RECEIVED:再收到和傳送一個連線請求後等待對方對連線請求的確認(伺服器)

ESTABLISHED:代表一個開啟的連線

FIN-WAIT-1:等待遠端TCP連線中斷請求,或先前的連線中斷請求的確認

FIN-WAIT-2:從遠端TCP等待連線中斷請求

CLOSE-WAIT:等待從本地使用者發來的連線中斷請求

CLOSING:等待遠端TCP對連線中斷的確認

LAST-ACK:等待原來的發向遠端TCP的連線中斷請求的確認

TIME-WAIT:等待足夠的時間以確保遠端TCP接收到連線中斷請求的確認

CLOSED:沒有任何連線狀態

2.狀態變化

建立連線時的狀態變遷

建立連線之前,伺服器和客戶端的狀態都為CLOSED。

伺服器建立socket後開始監聽,變為LISTEN狀態。

客戶端請求建立連線,向伺服器傳送SYN報文,客戶端的狀態變為SYN_SENT。

伺服器收到客戶端的報文後向客戶端傳送ACK和SYN報文,此時伺服器的狀態變為SYN_RCVD。

客戶端收到ACK、SYN,就向伺服器傳送ACK,客戶端狀態變為ESTABLISHED,伺服器收到客戶端的ACK後也變為ESTABLISHED。

此時,3次握手完成,連線建立!

斷開連線時的狀態變遷

由於tcp連線是全雙工的,斷開連線會比建立連線麻煩一點。

客戶端先向伺服器傳送FIN報文,請求斷開連線,其狀態變為FIN_WAIT1。

伺服器收到FIN後向客戶端發生ACK,伺服器狀態變為CLOSE_WAIT。

客戶端收到ACK後就進入FIN_WAIT2狀態。

此時連線已經斷開了一半了,如果伺服器還有資料要傳送給客戶端,就會繼續傳送。

直到發完了,就傳送FIN報文,此時伺服器進入LAST_ACK狀態。

客戶端收到伺服器的FIN後,馬上傳送ACK給伺服器,此時客戶端進入TIME_WAIT狀態,再過了2MSL長的時間後進入CLOSED狀態。

伺服器收到客戶端的ACK就進入CLOSED狀態。

此時,4次揮手完成,連線斷開!

3.圖示

MSL是Maximum Segment Lifetime英文的縮寫,中文可以譯為“報文最大生存時間”,他是任何報文在網路上存在的最長時間,超過這個時間報文將被丟棄。