TCP 三次握手的過程掌握最重要的兩點就是客戶端和服務端狀態的變化,另一個是三次握手過程標誌信息的變化,那麼掌握 TCP 的三次握手就簡單多了。下面就以動畫形式進行拆解三次握手過程。
初始狀態:客戶端處於 closed(關閉)
狀態,服務器處於 listen(監聽)
狀態。
第一次握手:客戶端發送請求報文將 SYN = 1
同步序列號和初始化序列號seq = x
發送給服務端,發送完之後客戶端處於SYN_Send
狀態。
第二次握手:服務端受到 SYN
請求報文之後,如果同意連接,會以自己的同步序列號SYN(服務端) = 1
、初始化序列號 seq = y
和確認序列號(期望下次收到的數據包)ack = x+ 1
以及確認號ACK = 1
報文作爲應答,服務器爲SYN_Receive
狀態。
第三次握手: 客戶端接收到服務端的 SYN + ACK
之後,知道可以下次可以發送了下一序列的數據包了,然後發送同步序列號 ack = y + 1
和數據包的序列號 seq = x + 1
以及確認號ACK = 1
確認包作爲應答,客戶端轉爲established
狀態。