TCP三次握手和四次揮手的流程,斷開連接如果只有兩次握手,會出現什麼。

TCP三次握手

爲了對每次發送的數據量進行跟蹤與協商,確保數據段的發送和接收同步,根據所接收到的數據量而確認數據發送、接收完畢後何時撤消聯繫,並建立虛連接。

第一次握手:Client將標誌位SYN置爲1,隨機產生一個值seq=J,並將該數據包發送給Server,Client進入SYN_SENT(請求連接)狀態,等待Server確認。

第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求建立連接,Server將標誌位SYN和ACK都置爲1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。

第三次握手:Client收到確認後,檢查ack是否爲J+1,ACK是否爲1,如果正確則將標誌位ACK置爲1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否爲K+1,ACK是否爲1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸數據了。


  
                        圖1: TCP三次握手圖

TCP四次揮手(連接終止協議,性質爲終止協議):

第一次揮手:TCP客戶端發送一個FIN+ACK+SEQ,用來傳輸關閉客戶端到服務端的數據。進入FIN_WAIT1狀態。
第二次揮手:服務端收到FIN,被動發送一個ACK(SEQ+1),進入CLOSE_WAIT狀態,客戶端收到服務端發送的ACK,進入FIN_WAIT2狀態。
第三次揮手:服務器關閉客戶端連接,發送一個 FIN+ACK+SEQ 給客戶端。進入 LAST_ACK 狀態。
第四次揮手:客戶端發送 ACK(ACK=SQE序號+1)報文確認,客戶端進入 TIME_WAIT 狀態,服務端收到 ACK 進入 CLOSE狀態。
  
                            圖2: TCP四次揮手

由於TCP連接是雙向的,因此每個方向都需要單獨進行關閉。原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味着這一個方向上沒有數據流動,一個 TCP連接到一個 FIN後仍能發送數據。首次執行FIN的一方主動關閉,另一方則執行被動關閉。當只握手兩次時,就只會關閉主動發起的一端,另一個仍能發送數據。

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