目錄
HTTP1.0和HTTP1.1的區別
HTTP1.1相比HTTP1.0性能上的改進:
但是HTTP1.1還是有性能瓶頸:
HTTP/2做了什么優化?
HTTP/3的優點
HTTP與HTTPS的區別
HTTPS的工作原理
1.ClientHello
2.ServerHello
3.客戶端回應
4.服務器的最后回應
三、三者協同作用:確保密鑰安全的核心邏輯
TCP與UDP的區別
1.連接
2.服務對象
3.可靠性
4.擁塞控制,流量控制
5.首部開銷
HTTP1.0和HTTP1.1的區別
HTTP1.1相比HTTP1.0性能上的改進:
使用長連接的方式改善了HTTP1.0短鏈接的性能開銷。
支持管道網絡傳輸,只要第一個請求發出去了,不必等其回來,就可以發第二個請求出去,可以減少整體的響應時間。
但是HTTP1.1還是有性能瓶頸:
- 請求/響應頭部(header)未經壓縮就發送,首部信息越多延遲越大。只能壓縮Body部分;
- 發送冗長的首部。每次互相發送相同的首部造成的浪費較多;
- 服務器是按請求的順序響應的,如果服務器響應慢,會導致客戶端一直請求不到數據,也就是對頭阻塞;
- 沒有請求優先級控制;
- 請求只能從客戶端開始,服務器只能被動響應。
HTTP/2做了什么優化?
HTTP/2協議是基于HTTPS的,所以HTTP/2的安全性也有保障的。
那HTTP/2相比HTTP/1.1性能上的改進:
- 頭部壓縮
- 二進制格式
- 并發傳輸
- 服務器主動推送資源
1.頭部壓縮:HTTP/2會壓縮頭(header)如果你同時發出多個請求,他們的頭是一樣的或相似的,那么,協議會幫你消除重復的部分。這就是所謂的HPACK算法:在客戶端和服務器同時維護一張頭信息表,所有的字段都會存入這個表,生成一個索引號,以后就不發送同樣的字段了,只發送索引號,這就提高速度了。
2.二進制格式:HTTP/2不在像HTTP1.1里的純文本形式的報文,而是全面采用了二進制格式,頭信息和數據體都是二進制,并且統稱為幀:頭信息幀和數據幀。這樣雖然對人不友好,但是對計算機非常友好,因為計算機只懂二進制,那么接收到報文后,無需再將明文的報文轉成二進制,而是直接解析二進制報文,這增加了數據傳輸的效率。
3.并發傳輸:引出了Stream的概念,多個Stream復用在一條TCP連接。解決了HTTP1.1對頭阻塞的問題;
4.服務器主動推送資源:HTTP/2還在一定程度上改善了傳統的請求-應答模型,服務端不再是被動的響應,可以總動像客戶端發送消息
在 HTTP/2 中,多個請求的幀在同一個 TCP 連接上傳輸,若某個請求的幀在傳輸過程中丟失或延遲,導致接收方無法按序接收,就會阻塞該連接上所有請求幀的接收和處理。
HTTP/3的優點
HTTP/2通過頭部壓縮,二進制編碼,多路復用,服務端推送等新特性大幅度提升了HTTP/1.1的性能,而美中不足的是HTTP/2協議是基于TCP實現的,于是存在三個缺陷。
- 對頭阻塞
- TCP與TLS的握手延遲
- 網絡遷移需要重新連接;
因為TCP是字節流協議,TCP層必須保證收到的字節數據是完整且有序的,如果我序列號較低的TCP段在網絡傳輸中丟失了,即使序列號較高的TCP段已經被接收了,應用層無法從內核中讀取到這部分數據
網絡遷移需要重新連接:一個TCP由四元組(元ip地址,源端口,目標ip地址,目標端口)確定的,這意味著如果我ip地址或者端口變動了就要tcp與tls從新握手,這樣不利于移動設備切換網絡的場景,比如4g網絡環境切換成wifi。
HTTP/3就將傳輸層從TCP替換成了UDP,并在UDP協議上開發了QUIC協議,來保證數據的可靠傳輸。
無對頭阻塞,QUIC連接上多個Stream之間并沒有依賴,都是獨立的,也不會由底層協議限制,某個流發送丟包了,只會影響該流,其他流不受影響;
建立連接速度快,因為QUIC內部包含了TLS1.3因此只需要1個RTT就可以同時完成建立連接和TLS密鑰協商,甚至第二次連接的時候,應用數據包可以和QUIC握手信息
連接遷移
QUIC 支持通過連接 ID 保持會話,即便 IP 地址或網絡切換(如 Wi - Fi 轉 4G),連接仍然有效。這種特性特別適用于移動場景,能確保數據連接的穩定性,極大改善了移動設備用戶的體驗。
HTTP與HTTPS的區別
- HTTP是超文本傳輸協議,信息是明文傳輸,存在安全風險的問題。HTTPS則解決了HTTP不安全的缺陷,在TCP和HTTP網絡層之間加入了SSL/TLS安全協議,使得報文能夠加密傳輸。
- HTTP連接建立相對簡單,TCP三次握手之后便可進行HTTP的報文傳輸。而HTTPS在TCP三次握手之后,還需進行SSL/TLS的握手過程,才可進入加密報文傳輸。
- 兩者默認的端口不一樣,HTTP默認端口號是80,HTTPS默認端口號是443.
- HTTPS協議需要先AC(證書權威機構)申請數字證書,來保證服務器的身份是可行的。
HTTPS的工作原理
1.ClientHello
首先,由客戶端向服務器發起加密通信請求,也就是ClientHello請求。在這一步,客戶端主要向服務器發送以下信息:
- 客戶端支持的SSL/TLS協議版本,如TLS1.2版本
- 客戶端生產的隨機數Client Random,后面用于生產【會話密鑰】
- 客戶端支持的密碼套件列表,如RSA加密算法。
2.ServerHello
服務器收到客戶端請求后,向往客戶端發出響應,也就是SeverHello。服務器回應的內容有如下內容:
- 確認SSL/TLS協議版本,如果瀏覽器不支持,則關閉加密通信。
- 服務器生產的隨機數(Server Random),后面用于生產【會話密鑰】
- 確認的密碼套件列表,如RSA加密算法
- 服務器的數字證書
3.客戶端回應
客戶端收到服務器的回應后,首先通過瀏覽器或者操作系統中的CA公鑰,確認服務器的數字證書的真實性。
如果證書沒有問題,客戶端會從數字證書中取出服務器的公鑰,然后使用它加密報文,向服務器發送如下信息:
- 一個隨機數。該隨機數會被服務器公鑰加密
- 加密通信算法改變通知,表示隨后的信息都將用【會話密鑰】加密通信
- 客戶端握手結束通知,表示客戶端的握手階段已經結束。這一項同時把之前所有內容的發送的數據做個摘要,用來供服務端校驗。
上面第一項的隨機數是整個握手階段的第三個隨機數,這樣服務器和客戶端就同時有三個隨機數,接著用雙方協商的加密算法,各自生成本次通信的【會話密鑰】。
4.服務器的最后回應
服務器收到客戶端的第三個隨機數之后,就通過協商的加密算法,計算出本次通信的【會話密鑰】。然后,向客戶端發送最后的信息:
- 加密通信算法改變通知,表示隨后的信息都將用【會話密鑰】加密通信
- 服務器握手結束通知,表示服務器的握手階段已經結束。這一項同時把之前所有內容的發生的數據做個摘要,用來供客戶端校驗。
至此,整個SSL/TLS的握手階段全部結束。接下來,客戶端與服務器進入加密通信,就完全是使用普通的HTTP協議,只不過使用【會話密鑰】加密內容。
三、三者協同作用:確保密鑰安全的核心邏輯
隨機性疊加:
三個隨機數的組合(ClientRandom + ServerRandom + Pre-Master Secret
)形成?高熵值的密鑰材料,即使其中一個隨機數被泄露,攻擊者也無法推導出完整密鑰(需同時破解三個隨機數)。防止重放攻擊:
每次通信的隨機數唯一,即使攻擊者截獲舊通信數據,也無法用舊隨機數重新生成當前會話的密鑰。雙向驗證與密鑰協商:
- 客戶端和服務端通過隨機數確認對方的參與(確保不是單向偽造)。
- 預主密鑰的安全傳輸(如通過服務端公鑰加密)確保只有合法通信雙方能計算出主密鑰。
TCP與UDP的區別
1.連接
- TCP是面向連接的傳輸層協議,傳輸數據前先要建立連接。
- UDP是不需要連接,即刻傳輸數據。
2.服務對象
- TCP是一對一的兩點服務,即一條連接只有兩個端點。
- UDP支持一對一,一對多,多對多的交互通信。
3.可靠性
- TCP是可靠交付數據的,數據可以無差錯,不丟失,不重復,按序到達。
- UDP是盡最大努力交付,不保證可靠交付數據。但是我們可以基于UDP傳輸協議實現一個可靠的傳輸協議,比如QUIC協議。
4.擁塞控制,流量控制
- TCP有擁塞控制和流量控制機制,保證數據傳輸的安全性。
- UDP則沒有,即使網絡非常擁堵了,也不會影響UDP的發生速率。
5.首部開銷
- TCP首部長度較長,會有一定的開銷。
- UDP首部只有8個字節,并且是固定不變的,開銷較小。