三次握手是TCP建立連接的基礎(chǔ)步驟
第一步是客戶端發(fā)送SYN,第二步服務(wù)器回復(fù)SYN-ACK,第三步客戶端發(fā)送ACK。還要注意三次握手中的序列號交換,這對后續(xù)的數(shù)據(jù)傳輸至關(guān)重要??赡苄枰岬矫總€SYN和ACK報文中的序列號和確認號的變化.。TCP的三次握手是建立可靠網(wǎng)絡(luò)連接的關(guān)鍵過程,其目的是確保通信雙方能夠同步初始序列號并確認雙方的收發(fā)能力正常。以下是三次握手的詳細步驟和作用:
三次握手流程
第一次握手(SYN):客戶端 → 服務(wù)器:發(fā)送一個 SYN 報文(SYN=1)。
作用:客戶端告知服務(wù)器自己的初始序列號(seq=x)。表示客戶端希望建立連接。
Client: "你好服務(wù)器,我的初始序列號是x,我們可以開始通信嗎?"
第二次握手(SYN-ACK):服務(wù)器 → 客戶端:回復(fù) SYN+ACK 報文(SYN=1, ACK=1)。
作用:服務(wù)器確認客戶端的序列號(ack=x+1)。服務(wù)器告知客戶端自己的初始序列號(seq=y)。表示服務(wù)器同意連接。
Server: "收到你的請求,你的序列號是x+1,我的初始序列號是y,可以通信了。"
第三次握手(ACK)客戶端 → 服務(wù)器:發(fā)送 ACK 報文(ACK=1)。
作用:客戶端確認服務(wù)器的序列號(ack=y+1)。雙方確認連接建立,開始傳輸數(shù)據(jù)。
Client: "收到你的確認,我們正式通信吧!"
為什么需要三次握手?
防止歷史重復(fù)連接(舊SYN干擾),若網(wǎng)絡(luò)中存在延遲的舊SYN報文(如客戶端重連),服務(wù)器通過三次握手可以區(qū)分新舊請求,避免建立無效連接。同步雙方初始序列號,序列號(seq)是TCP可靠傳輸?shù)暮诵?,用于?biāo)識數(shù)據(jù)順序和去重。三次握手確保雙方初始序列號被明確同步。
驗證雙向通信能力
第一次握手:驗證客戶端→服務(wù)器的發(fā)送能力。
第二次握手:驗證服務(wù)器→客戶端的收發(fā)能力。
第三次握手:最終確認客戶端→服務(wù)器的接收能力。
避免資源浪費
如果只有兩次握手,服務(wù)器可能因未收到客戶端的ACK而一直等待,導(dǎo)致資源被占用(如SYN洪泛攻擊)。
SYN:同步序列號(Synchronize)。
ACK:確認(Acknowledgment)。
序列號:初始序列號(ISN)是隨機生成的,防止預(yù)測攻擊。每次握手時,序列號遞增(seq=x → ack=x+1)。