關(guān)于 HTTP3,你可能還要知道這些~
公眾號關(guān)注“杰哥的IT之旅”,
選擇“星標(biāo)”,重磅干貨,第一時間送達(dá)!
一、開拓者:SPDY
1. 簡介:
2. 特性:
上一篇文章中有介紹,基本和HTTP2差不多,這里就不贅述了:
多路復(fù)用
頭部壓縮
服務(wù)器推送
請求優(yōu)先級
spdy的架構(gòu)圖:

3. 現(xiàn)狀:
二、顛覆者:QUIC
1. 前置知識:
TCP 與 UDP
2) UDP支持的應(yīng)用協(xié)議:NFS(網(wǎng)絡(luò)文件系統(tǒng))、SNMP(簡單網(wǎng)絡(luò)管理系統(tǒng))、DNS(主域名稱系統(tǒng))、TFTP(通用文件傳輸協(xié)議)等。
TCP:面向連接、傳輸可靠(保證數(shù)據(jù)正確性,保證數(shù)據(jù)順序)、用于傳輸大量數(shù)據(jù)(流模式)、速度慢,建立連接需要開銷較多(時間,系統(tǒng)資源)。
UDP:面向非連接、傳輸不可靠、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)、速度快。
Diffie-Hellman 算法

(2)客戶端選擇另一個大隨機數(shù)x,并計算A如下:A = g^x mod n
(3)客戶端將 A 發(fā)給服務(wù)端
(4)服務(wù)端選擇另一個大隨機數(shù)y,并計算B如下:B = g^y mod n
(5)服務(wù)端將B發(fā)給客戶端
(7)計算秘密密鑰K1如下:K1=B^2 mod n , 計算秘密密鑰K2如下:K2=A^y mod n , K1=K2,因此服務(wù)端和客戶端可以用其進行加解密
攻擊者知道n和g,并且截獲了A和B,但是當(dāng)它們都是非常大的數(shù)的時候,依靠這四個數(shù)來計算k1和k2非常困難,這就是離散對數(shù)數(shù)學(xué)難題。
2. 什么是QUIC?
3. 特性
a. 基于UDP建立的連接:
我們知道,基于TCP的協(xié)議,如http2,在首次建立連接的時候需要進行三次握手,即至少需要3個ntt,而考慮安全HTTPS的TLS層,又需要至少次的通信才能協(xié)商出密鑰。這在短連接的場景中極大的增加了網(wǎng)絡(luò)延遲,而這種延遲是無法避免的。

HTTPS 使用的是 TLS + SSL 的加密手段,在交換證書、協(xié)商密鑰的過程中,至少需要2次ntt進行協(xié)商通信。而quic使用了Diffie-Hellman算法,算法的原理使得客戶端和瀏覽器之間只需要1次的協(xié)商就能獲得通信密鑰,quic建立安全鏈接的詳細(xì)過程:

客戶端發(fā)起Inchoate client hello
服務(wù)器返回Rejection,包括密鑰交換算法的公鑰信息,算法信息,證書信息等被放到server config中傳給客戶端
客戶端發(fā)起client hello,包括客戶端公鑰信息
我們知道,無論是HTTP2還是SPDY,基于TCP的協(xié)議盡管實現(xiàn)了多路復(fù)用,但仍然沒有避免隊頭阻塞的問題,這個問題是由于TCP底層的實現(xiàn)造成的,即TCP的包有嚴(yán)格的順序控制,前序包如果丟失,則后續(xù)包即使返回了也不會通知到應(yīng)用層協(xié)議,從而導(dǎo)致了前序包阻塞。而quic基于UDP則天然的避免了這個問題,由于UDP沒有嚴(yán)格的包順序,一個包的阻塞只會影響它自身,并不會影響到其他資源,且quic也實現(xiàn)了類似HTTP2的多路復(fù)用,這種沒有隊頭阻塞的多路復(fù)用對延遲的降低是顯而易見的。
在以往的基于TCP的協(xié)議中,往往使用四元組(源IP,源端口,目的IP,目的端口)來標(biāo)識一條連接,當(dāng)四元組中的IP或端口任一個發(fā)生變化了連接就需要重新建立,從而不具備連接遷移的能力。
在chorme瀏覽器中,發(fā)起一個TCP請求,這個請求會同時與服務(wù)器開始建立tcp 和 quic 的連接(前提是服務(wù)器支持),如果quic連接先建立成功,則使用quic建立的連接通信,反之,則使用tcp建立的連接進行通信。具體步驟如下:
1、客戶端發(fā)出tcp請求
2、服務(wù)端如果支持quic可以通過響應(yīng)頭alt-svc告知客戶端
3、客戶端同時發(fā)起tcp連接和quic連接競賽
4、一旦quic建立連接獲勝則采用quic協(xié)議發(fā)送請求
5、如遇網(wǎng)絡(luò)或服務(wù)器不支持quic/udp,客戶端標(biāo)記quic為broken
6、傳輸中的請求通過tcp重發(fā)
7、5min后嘗試重試quic,下一次嘗試增大到10min
8、一旦再次成功采用quic并把broken標(biāo)記取消
其中,支持quic的alt-svc頭部信息如下圖示:

改進的擁塞控制 丟包恢復(fù) 底層的連接持久化 head stream 保證包順序 雙級別流量控制
三、總結(jié)與思考
往期資源回顧 需要可自取
推薦閱讀
點個[在看],是對杰哥最大的支持!
評論
圖片
表情

