TCP的三次握手和四次揮手

一圖勝千言,先上圖:併發

image.png

三次握手的過程

  • 首先由客戶端發起鏈接請求,客戶端將本身的序列號 seq 設爲 x 併發送 SYN 包給服務端,客戶端進入 SYN_SENT 狀態。
  • 服務端在接收到客戶端發來的 SYN 包以後,由 LISTEN 狀態轉爲 SYN_RCVD 狀態,服務端將 ack 設爲 x+1 (收到的序列號+1) 同時將本身的 seq 設爲 y ,並將 SYN-ACK 確認包發送給客戶端。
  • 客戶端收到服務端的確認以後,將 ack 設爲 y+1 (收到的序列號+1) 併發送 ACK 確認包給服務端,客戶端進入 ESTABLISHED 狀態。
  • 服務端收到客戶端發來的確認包以後,也進入 ESTABLISHED 狀態。

TCP 進行握手初始化一個鏈接的目標是:分配資源初始化序列號(通知 peer 對端個人初始序列號是多少)。整個握手過程能夠簡化爲下面的交互:spa

1)client 端首先發送一個 SYN 包告訴 Server 端個人初始序列號是 X;2)Server 端收到 SYN 包後回覆給 client 一個 ACK 確認包,告訴 client 說我收到了;3)接着 Server 端也須要告訴 client 端本身的初始序列號,因而 Server 也發送一個 SYN 包告訴 client 個人初始序列號是 Y;4)Client 收到後,回覆 Server 一個 ACK 確認包說我知道了。server

注意幾個問題:
1. Server 的 ACK 確認包和接下來的 SYN 包能夠合成一個 SYN ACK 包一塊兒發送的,不必分別單獨發送,這樣省了一次交互
2. 大部分狀況下創建鏈接須要三次握手,也不必定都是三次。有可能出現四次握手來創建鏈接的。以下圖,當 Peer 兩端同時發起 SYN 來創建鏈接的時候,就出現了四次握手來創建鏈接。

image.png

四次揮手

TCP 進行斷開鏈接的目標是:回收資源終止數據傳輸。因爲 TCP 是全雙工的,須要 Peer 兩端分別各自拆除本身通向 Peer 對端的方向的通訊信道。這樣須要四次揮手來分別拆除通訊信道:資源

1)Client 發送一個 FIN 包來告訴 Server 我已經沒數據須要發給 Server 了;2)Server 收到後回覆一個 ACK 確認包說我知道了;3)而後 server 在本身也沒數據發送給 client 後,Server 也發送一個 FIN 包給 Client 告訴 Client 我也已經沒數據發給 client 了;4)Client 收到後,就會回覆一個 ACK 確認包說我知道了。get

參考:
萬字詳文完全弄懂TCP協議:從三次握手和四次揮手提及it

相關文章
相關標籤/搜索