TCP三次握手和四次揮手

    哈嘍!大家好,今天我們來共同認識一下什麼是三次握手和四次揮手,來了解一下TCP客戶端和服務器之間是如何進行通信的,又如何釋放連接的呢?i_f15.gif

其實,實際上三次握手就是指建立一個TCP連接時,需要客戶端和服務器總共發送3個包;而四次揮手則是兩者之間在數據傳輸後關閉連接的四次過程,下面就分別來介紹客戶端和服務器之間是如何進行三次握手和四次揮手。

一、TCP三次握手

三次握手的目的是連接服務器指定端口,建立TCP連接,並同步連接雙方的

序列號和確認號並交換 TCP 窗口大小信息。在socket編程中,客戶端執行connect()時,將觸發三次握手。

第一次握手:

建立連接時,客戶端A發送一個TCP的SYN標誌位置1的包指明客戶打算連接的服務器B的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段裏,並且客戶端A進入SYN-SENT狀態,等待服務器B的確認。

就比如A要告訴B兩件事:我想要和你通信;你可以用哪個序列號作爲起始數據段來回應我。

第二次握手:

服務器B發回確認包(ACK)應答。即SYN標誌位和ACK標誌位均爲1同時,將確認序號(Acknowledgement Number)設置爲客戶A的I S N加1以.即x+1,此時服務器B進入SYN-RCVD狀態。

此時就像B要告訴A兩件事:我已經收到你的請求了,你可以傳輸數據了;你可以用哪個序列號作爲數據段來回應我。

第三次握手:

客戶端A再次發送確認包(ACK) SYN標誌位爲0,ACK標誌位爲1.並且把服務器B發來ACK的序號字段+1,放在確定字段中發送給對方.並且在數據段的ISN+1。

這時A就會給B回覆:我已經收到回覆了,現在我們可以正常傳輸數據了。

這樣3次握手就完成了,客戶端A和服務器B就能傳輸數據了。

具體如圖1所示。

wKioL1mpWDyxBvZXAAJCUHK80Bg922.png

1TCP三次握手圖

二、TCP四次揮手

TCP連接的釋放需要發送四個包,因此稱爲四次揮手。客戶端或服務器均可主動發起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。

第一次揮手:

TCP客戶端發送一個FIN,用來關閉客戶端A到服務器B的數據傳送。此時客戶端A進入到FIN-WAIT1狀態。

第二次揮手:

服務器B收到這個FIN,隨後就會給客戶端A發回一個ACK,確認序號爲收到的確認號加1。此時服務器B進入到CLOSE-WAIT狀態,而客戶端A進入到FIN-WAIT2狀態。

第三次揮手:

服務器關閉與客戶端的連接,發送一個FIN給客戶端。此時服務器B進入到LAST-ACK狀態。

第四次揮手:

客戶端發回ACK報文確認,並將確認序號設置爲收到確認序號加1。而此時客戶端A進入到TIME-WAIT狀態,等待對方關閉連接。

到此,客戶端和服務器就徹底分手了(寶寶好桑心哦t_0008.gif

wKioL1mpWFWTMnyaAAOmwoVwznU280.png

 

圖2TCP四次揮手圖

經過以上步驟,TCP客戶端和服務器之間就建立起了連接,在數據傳輸後,又經過四個過程釋放了兩者的連接,完整地完成了數據從開始傳輸到傳輸結束的整個步驟。


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