- 在客戶端和服務器之間進行HTTP的發送和請求的過程中,需要創建一個TCP connection(TCP鏈接)的東西。
- 因為HTTP不存在連接這個概念的,只有請求和響應這個概念,請求和響應都是數據包,需要經過一個傳輸的通道的,這個傳輸的通道就在TCP里面創建了一個從客戶端發起和服務端接收的這樣一個連接,這個連接可以一直保持在這里,http請求就是在這個連接的基礎上來發送的。因此在一個TCP連接上就可以發送多個HTTP請求。
- 在HTTP1.0中,是在創建http請求的時候就創建TCP連接,請求發送過去服務器響應以后TCP連接就關閉了。
- 在HTTP1.1中,可以聲明這個連接可以一直保持在那里,就是第一個請求發送以后這個連接不關閉,后續HTTP請求可以繼續使用這個連接。
- 因為TCP連接在創建的過程中是有三次握手這么一個消耗的。
- 在HTTP2.0里面,TCP連接中的HTTP請求是可以並發的,即一個用戶向一個服務器發起一個網絡請求的時候,只需要一個TCP連接。
1.三次握手
- 客戶端發起一個創建連接的數據包的請求。
- SYN:標志位。表示這是一個創建請求的數據包
- Seq:數字,一般為1
- 服務端接收到這個數據包。就會開啟一個TCP socket的端口,端口開啟以后返回給客戶端
- SYN:標志位。
- ACK:客戶端的SYN+1。
- Seq:服務端的Seq
- 客戶端拿到了。繼續返回
- ACK
- Seq
為什么要有三次握手:
- 防止服務端開啟無用的連接。因為網絡傳輸是有延時的,可以規避網絡延時導致服務器額外的開銷