TCP連線圖示
阿新 • • 發佈:2020-12-15
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英文的縮寫,中文可以譯為“報文最大生存時間”,他是任何報文在網路上存在的最長時間,超過這個時間報文將被丟棄。