HTTP協議中三次握手 四次揮手是什么
在HTTP協議中,“三次握手”和“四次揮手”本質是 TCP協議的連接與斷開機制(HTTP基于TCP傳輸層協議實現可靠通信,自身不涉及握手/揮手),核心是確保通信雙方“能發、能收”,避免數據丟失或連接混亂。
一、三次握手:建立可靠TCP連接
目的是確認客戶端和服務器的 發送能力、接收能力均正常,同步雙方的通信序號,為后續數據傳輸鋪路。
過程拆解(通俗版):
- 第一次(客戶端→服務器):
客戶端向服務器發送 SYN 包(同步請求),請求建立連接,同時告知服務器自己的“初始序號”。 - 第二次(服務器→客戶端):
服務器收到后,回復 SYN+ACK 包(同步+確認):
用 ACK 確認“已收到你的請求”;
用 SYN 告知客戶端自己的“初始序號”,同時確認自己的發送能力正常。
3. 第三次(客戶端→服務器):
客戶端收到回復后,發送 ACK 包(最終確認):告知服務器“已收到你的序號,連接可以正式建立”。
? 為什么是3次?
少1次會導致服務器無法確認“客戶端能收到自己的消息”(比如服務器發了回復,但客戶端沒收到,服務器會一直等);多1次則冗余,浪費資源。
二、四次揮手:斷開TCP連接
目的是確保雙方 已傳輸完所有數據,避免斷連時丟失未發送/接收的內容。
過程拆解(通俗版):
- 第一次(客戶端→服務器):“我這邊數據發完了,準備斷開。”
客戶端發送 FIN 包(結束請求),表示自己不再發送數據,但仍能接收服務器的后續數據。 - 第二次(服務器→客戶端):“好的,我知道了,等我把剩下的數據發完。”
服務器收到后,回復 ACK 包(確認收到斷開請求),此時服務器可能還在處理未發送完的數據,連接處于“半關閉”狀態(客戶端不發、服務器仍可發)。 - 第三次(服務器→客戶端):“我這邊數據也發完了,準備斷開。”
服務器處理完所有數據后,發送 FIN+ACK 包(結束+確認),表示自己也不再發送數據。 - 第四次(客戶端→服務器):“好的,收到,斷開吧!”
客戶端收到后,發送 ACK 包(最終確認),服務器收到后立即斷開連接;客戶端會等待一段時間(確保服務器收到確認),再徹底斷開。
? 為什么是4次?
因為“斷開發送能力”和“確認接收能力”是兩個獨立步驟:服務器收到客戶端的斷開請求后,不能立刻回復 FIN (可能還有數據沒發完),必須先回 ACK 確認“已知曉”,等數據發完再發 FIN ,所以需要多1次交互。
核心區別總結
場景 目的 次數 關鍵特點
三次握手 建立可靠連接 3次 同步序號、確認雙方收發能力
四次揮手 安全斷開連接 4次 分兩步確認“發送完畢”,避免數據丟失
簡單記:連接要“雙向確認就緒”(3次),斷開要“雙向確認收尾”(4次),都是為了保證TCP通信的“可靠性”。

浙公網安備 33010602011771號