互聯網的下一代脈搏:深入理解 QUIC 協議

互聯網的下一代脈搏:深入理解 QUIC 協議

互聯網是現代社會的基石,而數據在其中高效、安全地傳輸是其運轉的關鍵。長期以來,傳輸層的 TCP(傳輸控制協議)一直是互聯網的主力軍。然而,隨著互聯網應用場景的日益豐富和對速度、安全性的更高要求,TCP 的一些固有缺陷逐漸暴露。為了應對這些挑戰,一個新的傳輸層協議應運而生——QUIC (Quick UDP Internet Connections)。

QUIC 由 Google 最初開發,并最終被 IETF 標準化為 RFC 9000 系列。它旨在顯著提高基于連接的 Web 應用性能,同時提供更高的安全性和可靠性。那么,QUIC 究竟是如何做到的?它的核心設計理念是什么?

一、TCP 面臨的挑戰:為何需要 QUIC?

在深入 QUIC 之前,我們先回顧一下 TCP 的幾個痛點:

  1. 連接建立延遲 (Connection Establishment Latency): TCP 需要經過一個“三次握手”過程才能建立連接,這至少需要一個往返時間 (Round Trip Time, RTT)。如果在此基礎上再建立 TLS (Transport Layer Security) 加密連接,還需要額外的握手過程,總共可能需要 2-3 個 RTT,增加了首次加載的延遲。

    【圖片:TCP與TCP+TLS握手過程示意圖,對比QUIC的0-RTT/1-RTT握手】

  2. 隊頭阻塞 (Head-of-Line Blocking, HOL Blocking): TCP 保證數據包的按序到達。在一個 TCP 連接上,即使不同應用流的數據包亂序或丟失,整個連接都需要等待丟失的數據包重傳并被正確排序后,才能將后續數據向上層應用交付。這就像一輛卡車在單車道上拋錨,會堵塞后面所有的車輛,即使后面的車輛是去往不同目的地的。

    【圖片:TCP隊頭阻塞示意圖,一個丟失/亂序包堵塞所有數據流】

  3. 協議僵化 (Protocol Ossification): TCP 的實現主要在操作系統內核中。要修改或升級 TCP 協議(例如改進擁塞控制算法)需要更新操作系統,這過程漫長且難以普及。這限制了協議的快速發展和創新。

  4. 連接遷移困難 (Connection Migration): TCP 連接由四元組(源 IP、源端口、目的 IP、目的端口)唯一標識。當客戶端網絡環境發生變化(例如從 Wi-Fi 切換到蜂窩網絡,導致 IP 地址或端口變化)時,TCP 連接會中斷,需要重新建立。

二、QUIC 的技術設計思路與核心原理

QUIC 的設計目標是解決 TCP 的這些問題,提供更快速、更安全、更可靠的傳輸體驗。其核心思想可以概括為:在 UDP 上構建一個可靠、安全、多路復用的傳輸協議。

為什么選擇 UDP?因為 UDP 是一個簡單的無連接協議,它不做可靠性保證、不維護連接狀態、沒有擁塞控制,非常“薄”。正因為它的簡單,UDP 幾乎不會受到中間網絡設備(如防火墻、NAT)的干擾(相比于 TCP 的復雜狀態機和標志位),這使得 QUIC 可以在應用層或用戶空間實現復雜的邏輯,繞過操作系統的限制,實現快速迭代和部署。

QUIC 在 UDP 之上重新實現了 TCP 的許多功能,并進行了大量優化和創新:

  1. 基于 UDP: QUIC 將整個傳輸層邏輯(包括可靠性、流量控制、擁塞控制、安全性等)都實現在用戶空間,運行在 UDP 協議之上。

    【圖片:協議棧對比圖,TCP/TLS/HTTP vs. UDP/QUIC/HTTP】

  2. 集成 TLS 1.3: 安全性是 QUIC 的基石。QUIC 直接集成了最新版本的 TLS 1.3。TLS 1.3 相較于舊版本大大簡化了握手過程,并且加密了更多的握手信息。

    • 快速握手: QUIC 的握手結合了傳輸層和加密層握手。對于首次連接,可以在 1 個 RTT 內完成(包括密鑰協商和認證)。對于連接過的服務器,利用緩存的會話密鑰,甚至可以實現 0-RTT (Zero Round Trip Time) 握手,客戶端在發送連接請求的同時就可以發送應用數據,極大地降低了連接建立延遲。 【圖片:QUIC 1-RTT 和 0-RTT 握手流程示意圖】
  3. 流控與多路復用 (Stream Multiplexing): 這是解決隊頭阻塞的關鍵。QUIC 連接中可以包含多條獨立的“流”(Stream)。每條流都有自己的序號和流量控制,它們在 QUIC 連接內獨立傳輸。一條流的丟失或亂序只會影響該條流數據的交付,不會阻塞同一連接中的其他流。這非常適合 HTTP/2 等需要并行請求的應用場景。

    【圖片:QUIC 多路復用示意圖,多條流并行傳輸,互不影響】

  4. 連接 ID (Connection ID): QUIC 連接不再由傳統的四元組標識。在連接建立時,會協商一個 Connection ID。客戶端和服務器都維護這個 ID。即使客戶端的 IP 地址或端口因網絡切換而改變,只要 Connection ID 不變,QUIC 連接就能維持,實現平滑的連接遷移。

    【圖片:QUIC 連接遷移示意圖,客戶端 IP/端口變化,但連接保持】

  5. 增強的擁塞控制: QUIC 的擁塞控制算法在用戶空間實現,這使得開發者可以根據應用需求或網絡狀況快速實驗和部署新的擁塞控制算法,無需等待操作系統更新。許多 QUIC 實現采用了改進的擁塞控制算法(如 BBR),在丟包和延遲較高的網絡環境下表現更好。

  6. 前向糾錯 (Forward Error Correction, FEC) (可選/早期版本特性,RFC 9000 中未強制): 雖然不是核心強制特性,但 QUIC 的設計允許實現者加入 FEC 功能,通過發送冗余數據來減少因少量丟包導致的重傳,進一步降低延遲(尤其是在丟包率較高的網絡)。

  7. 細節優化: QUIC 在很多細節上也進行了優化,例如更精細的丟包檢測和重傳機制,以及對數據包頭的壓縮等,進一步提升了效率。QUIC 的包頭設計也更簡潔,對中間設備的干擾更小。

三、QUIC 的實現原理概述

QUIC 的實現原理是將原本屬于操作系統內核 TCP/TLS 協議棧的功能,轉移到應用層的庫中實現。一個典型的 QUIC 實現包括:

  1. UDP Socket 管理: 應用程序使用標準的 UDP Socket 進行數據收發。
  2. QUIC 協議引擎: 這是核心部分,負責:
    • 處理 QUIC 數據包的解析和封裝。
    • 管理 QUIC 連接狀態(包括握手狀態、連接 ID)。
    • 管理和調度 QUIC 流。
    • 實現可靠性機制(序號、確認、重傳)。
    • 實現流量控制(窗口機制)。
    • 運行擁塞控制算法。
    • 處理連接遷移。
  3. TLS 1.3 庫: 集成的 TLS 1.3 庫負責加密、解密、密鑰協商和證書驗證等安全功能。
  4. 與上層應用接口: 提供一套 API 供應用程序調用,用于創建連接、發送/接收數據(按流)、關閉連接等。

【圖片:QUIC 軟件棧示意圖,應用層調用 QUIC 庫,QUIC 庫使用 UDP Socket】

這種用戶空間的實現方式帶來了靈活性,但也意味著應用程序或其依賴的庫需要承擔更多的協議處理工作,可能會增加一些 CPU 開銷(尤其是在處理大量加密/解密時),不過這通常可以通過硬件加速來緩解。

四、QUIC 的優勢總結

綜合其設計和原理,QUIC 協議帶來了顯著的優勢:

  • 更低的連接延遲: 1-RTT 和 0-RTT 握手顯著加速了頁面加載和首次交互。
  • 更好的抗隊頭阻塞能力: 多路復用提高了在高丟包或高延遲網絡環境下的并發性能。
  • 更高的安全性: 集成 TLS 1.3 并加密更多頭部信息,減少了中間人攻擊的可能。
  • 更強的連接遷移能力: 改變 IP 地址或端口不會中斷連接,提升了移動場景下的用戶體驗。
  • 更快的創新和部署: 用戶空間實現使得協議改進和新特性部署更加敏捷。
  • 更好的網絡適應性: 靈活的擁塞控制機制能更好地應對不同的網絡條件。

五、QUIC 的未來發展趨勢

QUIC 協議已經從最初的實驗性協議成長為被廣泛接受和部署的互聯網標準。其未來發展趨勢主要體現在以下幾個方面:

  1. 廣泛部署和普及: 越來越多的網站、應用和服務器開始支持 QUIC。大型互聯網公司(如 Google, Cloudflare, Meta, Akamai 等)是主要的推動者。主流瀏覽器(Chrome, Firefox, Edge, Safari)也已經默認或可選支持 QUIC。未來 QUIC 的流量占比會持續增長,并可能最終超越 TCP+TLS 在某些領域的應用。

  2. 操作系統和硬件支持: 隨著 QUIC 的普及,未來可能會有更多的操作系統和硬件(如網卡)提供對 QUIC 的原生支持或加速,進一步提高其性能和效率。

  3. 標準演進和擴展: RFC 9000 系列是 QUICv1 的標準。未來可能會有 QUICv2 或其他擴展協議,引入新的特性或優化,例如更好的擁塞控制、新的流管理方式、對更多應用場景的支持等。

  4. ** beyond HTTP:** QUIC 最初是為 HTTP/3 設計的傳輸層協議,但其優秀的特性使其有潛力被用于其他應用層協議。例如,IETF 正在探索基于 QUIC 的 WebTransport 協議,旨在為 Web 應用提供低延遲、雙向、多路復用的數據傳輸能力,適用于游戲、實時通信等場景。未來可能會有更多協議從 TCP 遷移到 QUIC。

  5. 生態系統完善: 圍繞 QUIC 的開發工具、測試工具、性能監控工具等生態系統將不斷完善,降低開發者使用和部署 QUIC 的門檻。

當然,QUIC 的發展也面臨一些挑戰,例如部分老舊的防火墻或網絡設備可能不理解或不友好對待基于 UDP 的 QUIC 流量(盡管這種情況正在改善),以及如何在用戶空間高效處理大規模連接等。但總的來說,QUIC 的優勢使其成為構建更快速、更安全、更可靠未來互聯網的重要基石。

六、結語

QUIC 不僅僅是一個新的傳輸協議,它是對現有互聯網傳輸體系的一次重要革新。它吸取了 TCP 的教訓,擁抱了安全和性能的核心需求,并在靈活性和可演進性上邁出了一大步。隨著 QUIC 的進一步普及,我們有理由相信,未來的互聯網連接將更加快速、更加安全、更加流暢,為各種創新應用提供堅實的基礎。QUIC 協議,這個互聯網的下一代脈搏,正以前所未有的活力跳動著。


?


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80706.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80706.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80706.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全球城市范圍30米分辨率土地覆蓋數據(1985-2020)

Global urban area 30 meter resolution land cover data (1985-2020) 時間分辨率年空間分辨率10m - 100m共享方式保護期 277 天 5 時 42 分 9 秒數據大小:8.98 GB數據時間范圍:1985-2020元數據更新時間2024-01-11 數據集摘要 1985~2020全球城市土地覆…

【Vue】單元測試(Jest/Vue Test Utils)

個人主頁:Guiat 歸屬專欄:Vue 文章目錄 1. Vue 單元測試簡介1.1 為什么需要單元測試1.2 測試工具介紹 2. 環境搭建2.1 安裝依賴2.2 配置 Jest 3. 編寫第一個測試3.1 組件示例3.2 編寫測試用例3.3 運行測試 4. Vue Test Utils 核心 API4.1 掛載組件4.2 常…

數據湖的管理系統管什么?主流產品有哪些?

一、數據湖的管理系統管什么? 數據湖的管理系統主要負責管理和優化存儲在數據湖中的大量異構數據,確保這些數據能夠被有效地存儲、處理、訪問和治理。以下是數據湖管理系統的主要職責: 數據攝入管理:管理系統需要支持從多種來源&…

英文中日期讀法

英文日期的讀法和寫法因地區(英式英語與美式英語)和正式程度有所不同,以下是詳細說明: 一、日期格式 英式英語 (日-月-年) 寫法:1(st) January 2023 或 1/1/2023讀法:"the first of January, twenty t…

衡量矩陣數值穩定性的關鍵指標:矩陣的條件數

文章目錄 1. 定義2. 為什么要定義條件數?2.1 分析線性系統 A ( x Δ x ) b Δ b A(x \Delta x) b \Delta b A(xΔx)bΔb2.2 分析線性系統 ( A Δ A ) ( x Δ x ) b (A \Delta A)(x \Delta x) b (AΔA)(xΔx)b2.3 定義矩陣的條件數 3. 性質及幾何意義3…

4月22日復盤-開始卷積神經網絡

4月24日復盤 一、CNN 視覺處理三大任務:圖像分類、目標檢測、圖像分割 上游:提取特征,CNN 下游:分類、目標、分割等,具體的業務 1. 概述 ? 卷積神經網絡是深度學習在計算機視覺領域的突破性成果。在計算機視覺領…

【網絡原理】從零開始深入理解TCP的各項特性和機制.(三)

上篇介紹了網絡原理傳輸層TCP協議的知識,本篇博客給大家帶來的是網絡原理剩余的內容, 總體來說,這部分內容沒有上兩篇文章那么重要,本篇知識有一個印象即可. 🐎文章專欄: JavaEE初階 🚀若有問題 評論區見 ? 歡迎大家點贊 評論 收藏 分享 如果你不知道分…

解決qnn htp 后端不支持boolean 數據類型的方法。

一、背景 1.1 問題原因 Qnn 模型在使用fp16的模型轉換不支持類型是boolean的cast 算子,因為 htp 后端支持量化數據類型或者fp16,不支持boolean 類型。 ${QNN_SDK_ROOT_27}/bin/x86_64-linux-clang/qnn-model-lib-generator -c ./bge_small_fp16.cpp -b …

使用Three.js搭建自己的3Dweb模型(從0到1無廢話版本)

教學視頻參考:B站——Three.js教學 教學鏈接:Three.js中文網 老陳打碼 | 麒躍科技 一.什么是Three.js? Three.js? 是一個基于 JavaScript 的 ?3D 圖形庫,用于在網頁瀏覽器中創建和渲染交互式 3D 內容。它基于 WebGL&#xff0…

PostgreSQL WAL 冪等性詳解

1. WAL簡介 WAL(Write-Ahead Logging)是PostgreSQL的核心機制之一。其基本理念是:在修改數據庫數據頁之前,必須先將這次修改操作寫入到WAL日志中。 這確保了即使發生崩潰,數據庫也可以根據WAL日志進行恢復。 恢復的核…

git提交規范記錄,常見的提交類型及模板、示例

Git提交規范是一種約定俗成的提交信息編寫標準,旨在使代碼倉庫的提交歷史更加清晰、可讀和有組織。以下是常見的Git提交類型及其對應的提交模板: 提交信息的基本結構 一個標準的Git提交信息通常包含以下三個主要部分: Header?:描…

FastAPI系列06:FastAPI響應(Response)

FastAPI響應(Response) 1、Response入門2、Response基本操作設置響應體(返回數據)設置狀態碼設置響應頭設置 Cookies 3、響應模型 response_model4、響應類型 response_classResponse派生類自定義response_class 在“FastAPI系列0…

每日一題(小白)模擬娛樂篇33

首先,理解題意是十分重要的,我們是要求最短路徑,這道題可以用dfs,但是題目給出的數據是有規律的,我們可以嘗試模擬的過程使用簡單的方法做出來。每隔w數字就會向下轉向,就比如題目上示例的w6,無…

哈希封裝unordered_map和unordered_set的模擬實現

文章目錄 (一)認識unordered_map和unordered_set(二)模擬實現unordered_map和unordered_set2.1 實現出復用哈希表的框架2.2 迭代器iterator的實現思路分析2.3 unordered_map支持[] (三)結束語 (…

Java學習-Java基礎

1.重寫與重載的區別 重寫發生在父子類之間,重載發生在同類之間構造方法不能重寫,只能重載重寫的方法返回值,參數列表,方法名必須相同重載的方法名相同,參數列表必須不同重寫的方法的訪問權限不能比父類方法的訪問權限更低 2.接口和抽象類的區別 接口是interface,抽象類是abs…

BG開發者日志0427:故事的起點

1、4月26日晚上,BG項目的gameplay部分開發完畢,后續是細節以及試玩版優化。 開發重心轉移到story部分,目前剛開始, 確切地說以前是長期擱置狀態,因為過去的四個月中gameplay部分優先開發。 --- 2、BG這個項目的起點…

頭歌實訓之游標觸發器

🌟 各位看官好,我是maomi_9526! 🌍 種一棵樹最好是十年前,其次是現在! 🚀 今天來學習C語言的相關知識。 👍 如果覺得這篇文章有幫助,歡迎您一鍵三連,分享給更…

【深度學習】多頭注意力機制的實現|pytorch

博主簡介:努力學習的22級計算機科學與技術本科生一枚🌸博主主頁: Yaoyao2024往期回顧:【深度學習】注意力機制| 基于“上下文”進行編碼,用更聰明的矩陣乘法替代笨重的全連接每日一言🌼: 路漫漫其修遠兮,吾…

java16

1.API續集 可以導入別人寫好的clone的jar包 注意:方法要有調用者,如果調用者是null就會報錯 2.如何導入別人寫好的jar包 復制jar包然后粘貼在lib里面,然后右鍵點擊jar包再點擊下面的add 3.關于打印java中的引用數據類型

PostgreSQL的擴展 credcheck

PostgreSQL的擴展 credcheck credcheck 是 PostgreSQL 的一個安全擴展,專門用于強制實施密碼策略和憑證檢查,特別適合需要符合安全合規要求的數據庫環境。 一、擴展概述 1. 主要功能 強制密碼復雜度要求防止使用常見弱密碼密碼過期策略實施密碼重復使…