一、兩個問題
1、HTTP是如何使用TCP連接的
2、HTTP的連接,並行連接、keep-alive(持久連接)和管道化連接
二、TCP連接
1、什么是TCP
TCP/IP是全球計算機及網絡設備都在使用的一種常用的分組交換
網絡層協議分層協議集。客戶端應用程序可以打開一條TCP/IP連接,連接到可能運行在世界任何地方的服務器應用程序。一旦連接建立起來,在客戶端和服務器的計算機之間的交換的報文就永遠不會丟失、受損或失序。
2、瀏覽器的請求過程

3、TCP的可靠數據管道
HTTP連接實際上就是TCP連接和一些使用連接的規則。TCP連接是因特網上的可靠連接。
TCP為HTTP提供了一條可靠的比特傳輸管道。從TCP連接一段填入的字節會從另一端以原有的順序、正確的傳送出來。

4、TCP流是分段的、由IP分組傳送
TCP的數據是通過名為IP分組(或IP數據報)的小數據塊來發送的。HTTP位於TCP/IP協議棧的最頂層。

HTTP要傳送一條報文時,會以流的形式將報文數據的內容通過一條打開的TCP連接按序傳輸。TCP收到數據流之后,會將數據流砍成被稱作段的小數據塊,並將段封裝在IP分組中,通過因特網進行傳輸。所有的工作都是通過由TCP/IP軟件來處理的。
每個TCP段都是由IP分組承載,從一個IP地址發送到另一個IP地址的。每個IP分組中都包括:
1)一個IP分組首部(通常為20字節)
2)一個TCP段首部(通常為20字節)
3)一個TCP數據塊(0個或多個字節)
IP首部包含了源和目的的IP地址,長度和其他一些標記。TCP段的首部包含了TCP端口號、TCP控制標記,以及用於數據排序和完整性檢查的一些數字值。
4、保持TCP連接的正確運行
在任意時刻計算機都可以有幾條TCP連接處於打開狀態。
TCP是通過端口號來保持所有這些連接的正確運行的。TCP連接通過4個值來識別的:
<源IP地址、源端口號、目的IP地址、目的端口號>這四個值一起唯一地定義了一條連接。兩條不同的TCP連接不能擁有4個完全相同的地址組件值。

5、TCP套接字編程
操作系統提供了一些操縱其TCP連接的工具。

套接字API允許用戶創建TCP的端點數據結構,將這些端點與遠程服務器的TCP端點進行連接,並對數據流進行讀寫。TCP API隱藏了所有底層網絡協議的握手細節,以及TCP數據流與IP分組之間的分段和重裝細節。
客戶端和服務端在實現HTTP事務時所應執行的步驟:

三、HTTP的幾種連接
1、串行連接
串行事務處理時延,當你打開一個index.html頁面時,里面有包含3張圖片,那么它的HTTP事務如圖

缺點:每個事務都需要一個新的連接,那么連接時延和慢啟動時延就會疊加起來。
2、並行連接
每個事務都有自己的TCP連接,只是並行處理。

3、持久連接
HTTP/1.1允許HTTP設備在事務處理結束之后將TCP連接保持在打開狀態,以便為未來的HTTP請求重用現存的連接。在事務處理結束之后仍然保持在打開狀態的TCP連接被稱為持久連接。非持久連接會在每個事務結束之后關閉。持久連接會在不同事務之間保持打開狀態,直到客戶端或者服務器決定將其關閉。
重用對目標服務器打開的空閑持久連接,就可以避開緩慢的連接建立階段。而且,已經打開的連接還可以避免慢啟動的擁塞適應階段,以便更快速地進行數據的傳輸。

HTTP/1.0+:keep-alive連接
HTTP/1.1:persistent連接
4、管道化持久連接
HTTP/1.1允許在持久連上上可選的使用
請求管道。在響應到達之前,可以將多條請求放入隊列。當第一條請求通過網絡流向另一端的服務器時,第二條和第三條請求也可以開始發送了。早高時延網絡條件下,這樣做可以降低網絡的環回時間,提高性能。

四、學習交流
歡迎大家關注我的公眾號,一起交流、學習。