TCP 連接建立經歷三個階段:連接建立、數據傳輸、連接釋放。三次握手發生在連接建立階段,主要目的是防止已失效的連接請求報文段突然傳送到服務端,導致資源浪費。經典場景:客戶端發出的第一個 SYN 報文在網絡節點滯留,服務端誤以為是新請求並發送 SYN+ACK,若無第三次握手確認,服務端會白白等待數據,浪費資源。三次握手確保雙方都確認對方收發能力正常。


TCP 是全雙工協議,雙方需分別關閉發送通道:
為什麼 A 要等待 2MSL? 確保最後的 ACK 到達 B。若 ACK 丟失,B 會重發 FIN,A 在 2MSL 內收到則重發 ACK 並重新計時;否則認為連接可靠關閉。
三次握手: A: SYN_SENT → ESTABLISHED B: LISTEN → SYN_RCVD → ESTABLISHED 四次揮手: A: FIN_WAIT1 → FIN_WAIT2 → TIME_WAIT → CLOSED B: CLOSE_WAIT → LAST_ACK → CLOSED
參考來源:知乎專欄