大家都知道HTTP是通過三次握手建立連接配接機制和四次握手關閉連接配接機制。接下來就詳細講解一下這些流程的細節。
首先明确一下一些詞的含義。
* SYN
* seq
* ack
*
HTTP連接配接機制
最初用戶端和服務端都是處于關閉狀态,用戶端主動打開連接配接,服務端被動打開連接配接。

用戶端首先建立傳輸控制子產品TCB,然後向服務端發出連接配接請求文段,這是首部中的同步位SYN=1,初始序号seq=x。
服務端收到請求封包後,如果同意連接配接,則向用戶端發送确認,在确認封包中把SYN和ACK的都置為1,确認号ack=x+1,初始序号seq=y。
用戶端收到确認封包後,還要向服務端發出确認,确認封包的ACK=1, ack=y+1,同時初始序号seq=x+1。
當服務端收到用戶端的連接配接确認後,進入ESTABLISHED狀态。
HTTP為什麼是三次連接配接?
用戶端發送一次确認,是為了防止由于網絡延遲等原因,已失效的連接配接請求封包突然又傳送到了B,進而産生錯誤。
HTTP釋放機制
HTTP在連接配接成功後,資料進行傳輸,資料完成傳輸後,通信的雙方可以釋放。用戶端和服務端都處于ESTABLISHED狀态。用戶端首先發起釋放封包段,并停止發送資料,主動關閉連接配接。
用戶端把釋放封包首部FIN=1,seq=u。用戶端進入FIN-WAIT-1狀态,等待服務端的确認。
服務端收到釋放封包段後,發出确認封包,ack=u+1,seq=v,然後服務端進入CLOSE-WAIT狀态。
這時TCP服務仍然處于半關閉狀态,即用戶端沒有資料發送,但服務端若要發送資料,用戶端仍然要接收。
用戶端在收到服務端的确認後,進入FIN-WAIT-2狀态,等待服務端發出的連接配接釋放封包段。
用戶端向服務端發送确認封包,把ACK=1,ack=w+1,序号seq=u+1,進入TIME-WAIT狀态。經過時間等待計時器(TIME-WAIT timer)設定的時間2MS後,用戶端進入CLOSED狀态。