TCP/IP四次揮手

TCP/IP四次揮手

TCP/IP四次揮手流程圖:

圖片.png

名詞解釋:
FIN(finish)結束

TCP狀態解釋:
ESTABLISHED (表示TCP連接已經成功建立)
FIN_WAIT_1 (結束等待1:表示客戶端已向服務端發送了FIN連接釋放報文段)
FIN_WAIT_2 (結束等待2:表示客戶端已收到服務端的ACK確認報文段)
CLOSE-WAIT (關閉等待:表示服務端已向客戶端發送ACK確認報文段,正在確認是否還有數據向客戶端發送)
LAST-ACK   (最後確認:表示服務端已向客戶端發送FIN連接釋放報文段)
TIME-WAIT  (時間等待:表示客戶端已向服務端發送ACK確認報文段,正在等待2MSL時間)
CLOSED (表示連接已關閉)

其他解釋:
MSL (Maximum Segment Lifetime)(報文最大生存時間)
2MSL即兩倍的MSL,TCP的TIME_WAIT狀態也稱爲2MSL等待狀態,當客戶端發起主動關閉,在客戶端發出最後一個ACK確認報文段後,即第3次揮手完成後發送了第四次揮手的ACK確認報文段後,客戶端就進入了TIME_WAIT狀態,必須在此狀態上停留兩倍的MSL時間,等待2MSL時間主要目的是怕客戶端的最後一個ACK確認報文段服務端沒收到,那麼服務端沒收到客戶端ACK確認報文段後將重發第三次揮手的FIN連接釋放報文段,客戶端接到服務端重發的FIN連接釋放報文段後可以再發一個ACK確認報文段。如果直到2MSL結束,客戶端都沒有再次收到服務端的FIN連接釋放報文段,那麼客戶端推斷ACK已經被成功接收,則結束TCP連接。

說明:
TCP/IP四次揮手是可以兩端任意發起的,因爲TCP是全雙工通信的,下面流程以客戶端發起爲例

第一次揮手
客戶端向服務端發送(FIN=1 seq=u)連接釋放報文段,等待服務端確認,客戶端進入FIN_WAIT_1狀態。(當客戶端主動發起連接釋放報文段時,客戶端即無法發送數據給服務端

第二次揮手
服務端收到客戶端(FIN=1 seq=u)連接釋放報文段後,即發出確認報文段(ACK=1 seq=v ack=u+1),服務端進入CLOSE-WAIT狀態,此時TCP處於半關閉狀態。(客戶端已沒有數據發送到服務端,但服務端若有數據發送,客戶端依然可以接收。

第三次揮手
客戶端收到服務端(ACK=1 seq=v ack=u+1)確認報文段後,客戶端進入FIN-WAIT-2狀態,等待服務端的連接釋放報文段(此時服務端正在確認是否有數據向客戶端發送,有則發送,無則發送連接釋放報文段
服務端確認無數據發送到客戶端後,即發送連接釋放報文段(FIN=1 ACK=1 seq=w ack=u+1),服務端進入LAST-ACK狀態,等待客戶端的確認報文段。

第四次揮手
客戶端收到服務端(FIN=1 ACK=1 seq=w ack=u+1)連接釋放報文段後,即發送確認報文段(ACK=1 seq=u+1 ack=w+1),客戶端進入TIME-WAIT狀態,此時TCP未釋放,需要經過時間等待計時器設置的時間2MSL後,客戶端纔會進入CLOSED狀態,而服務端收到客戶端(ACK=1 seq=u+1 ack=w+1)確認報文段後,立即進入CLOSED狀態。(可以發現服務端比客戶端早進入CLOSED狀態,因爲客戶端還需要等待2MSL時間才能進入CLOSED狀態






























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章