作者 | Robin Marx
譯者 | 核子可樂
策劃 | 丁曉昀
超文本傳輸協議(HTTP)作為互聯網的基石,一直在網頁加載、視頻流傳輸、應用獲取數據等方方面面發揮重要作用。
去年,負責定義互聯網技術的互聯網工程任務組(IETF)將該協議的最新版本 HTTP/3 定為標準。在此之后,HTTP.3 及相關 QUIC 協議在公共網絡上迅速普及。盡管不同來源和測量方法給出的結果略有差別,但目前普遍認為全球 19% 到 50% 的 Web 服務器和網絡均已支持 HTTP/3。
由于這些新協議得到谷歌和 Meta 等大公司的廣泛應用,我們認為,當前互聯網流量中已經有很大一部分在使用 HTTP/3。
在本篇文章中,我將介紹一些背景信息,介紹 HTTP/3 解決了哪些問題、它是如何執行的、為什么能夠得到迅速普及,以及 HTTP/3 仍然面臨哪些有待克服的障礙。
1我們為什么需要 HTTP/3?
網絡協議所描述的,是數據如何在網絡上的兩個實體之間(通常是用戶設備和 Web 服務器)進行通信。因為市場上有多家公司在為網絡開發軟件,因此通信協議必須確保標準化,以便所有軟件之間都可以“互操作”。換句話說,各軟件能夠在遵循相同規則的基礎之上相互理解。
在實踐當中,我們往往不會使用單一某種協議,而是同時使用多種協議的組合。其中各項協議都有自己的作用和規則(詳見圖一)。這樣的設計是為了保障靈活性和可復用性——無論大家使用的是 Wi-Fi、固網還是 4G/5G,都能使用完全相同的 HTTP 邏輯。
圖 1 HTTP/2 與 HTTP/3 的協議棧,如何將多項協議組合起來以提供完整的互聯網功能
不少初期互聯網協議早在上世紀 80、90 年代就已經被定為標準,這意味著它們在設計上考慮的是幾十年前的需求和限制。雖然其中一些協議經受住了時間的考驗,但也有不少已經明顯有些過時了。大多數問題倒是可以通過變通和一些小技巧進行解決,可也有一些到了不得不變的時候。其中最典型的就是傳輸控制協議(TCP),它的作用是確保數據能夠可靠地在互聯網上往來傳輸。
2為什么說 TCP 已經不適合如今的 Web
HTTP/1.1 和 HTTP/2 正常運作的前提,就是以 TCP 為基礎。具體來講,在客戶端和服務器間交換 HTTP 請求 / 響應之前,必須先建立起 TCP 連接。
隨著時間推移,人們做出了不少努力來更新 TCP,并解決其中一些影響效率的問題——例如,TCP 會將網頁視為單個文件,而非由數百個獨立文件構成的集合。雖然部分更新已經取得成功,但多數影響較大的更新(例如 TCP 多路徑和 TCP Fast Open)花了近十年時間才在公共互聯網上實際落地。
革新 TCP 的主要挑戰,在于互聯網上成千上萬的設備各有各的 TCP 協議實現。除了大家第一時間能想到的手機、筆記本電腦和服務器,還有路由器、防火墻、負載均衡器等其他類型的“中間裝置”。也就是說,如果我們想要更新 TCP,就必須等待這些設備中的大部分都對自己的協議實現做更新,而這明顯是個需要耗時數年的艱辛過程。
QUIC 解決方案
面對這個幾乎無解的問題,最靠譜的辦法反而是直接出臺一種全新方案、直接替換掉 TCP。這套替代方案就是 QUIC 協議,但也有不少人半開玩笑地將其稱為 TCP 2.0。這個昵稱其實并無不妥,因為 QUIC 中確實包含許多與 TCP 相同的高級功能,只是做了一系列關鍵性調整。
其中最大的變化就是 QUIC 與傳輸層安全(TLS)協議的深度集成。TLS 負責加密網絡上的敏感數據,也就是 HTTPS 中的 S(安全)。在 TCP 協議下,TLS 僅加密實際 HTTP 數據(參見圖二);對于 QUIC,TLS 還會對 QUIC 協議本身的大部分內容進行加密。也就是說,TCP 當中對所有中間件均可見(且可更改)的元數據(例如數據包編號、連接關閉信號等),在現在的 QUIC 中將僅供客戶端和服務器使用。
圖 2 TCP+TLS 與 QUIC 之間的加密差異。可以看到,QUIC 中被加密的不僅僅是 HTTP 數據
此外,由于 QUIC 的加密程度更高,所以對它的變更或新功能添加要比 TCP 簡單得多——即只需要更新客戶端和服務器,因為中間件無論如何也無法解密元數據。這就讓 QUIC 成為一種面向未來的協議,能幫助我們快速解決種種新興挑戰。
當然,這種額外的加密機制也有助于增強新協議的總體安全性和隱私性。雖然 TCP+TLS 非常適合保護信用卡或電子郵件內容等個人敏感數據,但卻仍容易受到復雜(隱私)攻擊的影響。而且隨著 AI 技術的快速發展,這些攻擊的實施門檻也越來越低。通過進一步加密此類元數據,QUIC 協議無疑能夠更好地應對精心策劃的惡意攻擊。
QUIC 還包含諸多其他與安全相關的功能,包括防御分布式拒絕服務(DDoS)攻擊、以及防放大和 RETRY 數據包等功能。
最后,與 TCP 相比,QUIC 還帶來了大量效率和性能改進,包括更快的連接握手(參見圖三)、消除“隊頭阻塞”問題、更好的數據包丟失檢測 / 恢復,以及處理用戶切換網絡的方法(我們將在后續文章中具體介紹)。
圖 3 QUIC 在設置上擁有更快的連接速度,因為它能將“傳輸”三向握手與 TLS 加密會話相結合,性能優于 TCP+TLS 中的兩個獨立過程
3我們真正需要的并不是 HTTP/3,而是 QUIC
最初,我們也曾嘗試保留 HTTP/2 并進行增量式調整,希望能在底層用上 QUIC(畢竟當初保留這么多協作元素和可復用協議,意義也就在于此)。但很明顯,QUIC 與 TCP 之間存在著巨大差異,HTTP/2 根本無法全部兼容。因此,互聯網工程任務組才決定專門為 QUIC 制作新的 HTTP 版本,這就是現在的 HTTP/3。
HTTP/3 與 HTTP/2 幾乎相同,二者的主要區別就體現在 QUIC/TCP 之上各項功能的技術實現。但由于 HTTP/3 能夠使用 QUIC 的全部新功能,因此在加載網頁和流媒體視頻時將帶來更好的性能表現。也正是這個優勢,讓 HTTP/3 得到了市場的廣泛認可和快速接納。
原文鏈接:
https://blog.apnic.NET/2023/09/25/why-http-3-is-eating-the-world/