Nacos-6--Naco的QUIC協議實現高可用的工作原理

QUIC(Quick UDP Internet Connections)是一種基于UDP的傳輸層協議,旨在減少網絡延遲、提升安全性并優化多路復用能力。它由Google開發,后被IETF標準化為HTTP/3的底層協議。

1、QUIC是什么?

QUIC(Quick UDP Internet Connections)(發音同“quick”)是由Google發起、IETF標準化的基于UDP的新一代傳輸層協議,旨在替代傳統的TCP + TLS組合,解決其性能瓶頸

目標:
降低連接延遲、提升傳輸性能、支持多路復用、避免隊頭阻塞

2、傳統HTTP/TCP/TLS的問題

在理解QUIC之前,先看傳統方案的痛點:
在這里插入圖片描述
總延遲:2~3RTT才能開始傳輸數據,移動端或高延遲網絡下體驗差

3、QUIC的核心優勢(一句話總結)

QUIC = UDP + TLS 1.3 + HTTP/3 + 多路復用 + 連接遷移,在0-RTT或1-RTT內完成安全連接并傳輸數據。

4、QUIC的架構與分層

在這里插入圖片描述
注意:QUIC運行在用戶空間(不是內核TCP),可快速迭代,無需操作系統支持。

5、QUIC的核心工作機制

1、基于UDP,避免內核TCP擁塞控制限制

  • 使用UDP作為底層傳輸,繞過操作系統內核的TCP協議棧
  • QUIC自己實現可靠傳輸、重傳、擁塞控制等邏輯(在應用層)。

優勢:可快速升級、定制擁塞算法(如BBR)、支持0-RTT。

2、加密與傳輸一體化(TLS 1.3內嵌)

QUIC將加密(TLS 1.3)直接集成在協議中:

  • 加密握手與連接建立合并,減少RTT。
  • 所有QUIC包(包括握手包)都加密,提升安全性。
  • 支持0-RTT快速重連(類似會話恢復)。

對比:

  • TCP + TLS 1.3:1-RTT(或0-RTT)
  • QUIC + TLS 1.3:首次1-RTT,重連可0-RTT

3、多路復用(Multiplexing)徹底解決隊頭阻塞

HTTP/2中,多個請求復用一個TCP連接,但一旦某個數據包丟失,所有流都阻塞(TCP層隊頭阻塞)

QUIC的解決方案:

  • 每個“流”(Stream)獨立傳輸。
  • 一個流的數據包丟失,不影響其他流。
  • 實現真正的“無隊頭阻塞”多路復用。

示例:

  • 流1:圖片加載(丟包)→ 重傳,不影響流2:JS文件加載

4、連接遷移(Connection Migration)

**傳統TCP基于四元組(源IP:端口, 目的IP:端口)**標識連接。
手機從Wi-Fi切換到4G,IP改變 → TCP連接中斷

QUIC使用連接ID(Connection ID)唯一標識連接

  • 即使IP或端口變化,只要Connection ID不變,連接可繼續
  • 實現“無縫切換網絡”。

適用于移動設備、弱網環境。

5、可插拔的擁塞控制

QUIC在用戶空間實現擁塞控制,支持動態更換算法:

  • 支持:Cubic、BBR、Reno等
  • 可根據網絡狀況動態調整

傳統TCP擁塞控制在內核中,難以修改。

6、QUIC的通信流程

1、連接建立階段

QUIC的連接建立分為兩種模式:首次連接(1-RTT)和重連(0-RTT)

1、首次連接(1-RTT)

交互示例圖:
在這里插入圖片描述
說明:

  • CH: Client Hello
  • SH: Server Hello
  • SC: Server Certificate
  • SE: Server Encrypted Extensions
  • 所有包都加密(AEAD)
  • 客戶端在第一個包就發送應用數據(1-RTT完成)

具體解釋:
(1)、客戶端發送Initial Packet
數據包含:

  • ClientHello(TLS 1.3握手消息)。
  • 客戶端支持的QUIC版本號。
  • 初始加密密鑰(TLS 1.3的Key Share擴展)。

示例:
客戶端生成臨時密鑰對(如X25519曲線),在Key Share中發送公鑰。

(2)、服務器響應Initial和Handshake Packet
服務器驗證客戶端的ClientHello,生成自己的密鑰對,并發送:

  • ServerHello(包含服務器公鑰)。
  • 證書(CERT)和完成消息(FIN)。
  • ACK確認收到客戶端的Initial Packet。

(3)、客戶端完成密鑰協商

  • 客戶端計算共享密鑰,發送Finished消息確認握手完成。
  • 此時,客戶端可發送應用數據(如HTTP請求)。

(4)、服務器確認連接

  • 服務器收到Finished后,發送ACK和HANDSHAKE_DONE,連接建立完成。
2、重連(0-RTT)

前提:客戶端和服務端之前已建立過連接,有共享密鑰。
關鍵:0-RTT數據可被重放(Replay Attack),因此只能用于冪等操作(如GET請求)

交互示例圖:
在這里插入圖片描述
具體步驟:
(1)、客戶端復用舊會話參數

  • 客戶端使用之前連接的加密參數(如PSK,預共享密鑰)直接發送Initial Packet和應用數據
  • 示例:客戶端在Initial Packet中攜帶緩存的Session Ticket(TLS 1.3的PSK擴展)。

(2)、服務器驗證并響應

  • 服務器驗證PSK后,直接接受數據并發送ACK,無需等待客戶端確認。
  • 數據傳輸立即開始,實現0-RTT連接

2、數據傳輸階段

1、多路復用流管理
  • 每個HTTP請求/響應分配唯一的流ID(Stream ID)。
  • 流類型:
    • 雙向流(Bidirectional Stream):客戶端與服務器雙向通信(如HTTP請求/響應)。
    • 單向流(Unidirectional Stream):單向傳輸(如服務器推送)。
2、流量控制
  • 滑動窗口(Flow Control):通過WINDOW_UPDATE幀動態調整接收窗口大小,防止緩沖區溢出。
  • 連接級與流級控制:每個流和整個連接獨立控制流量。
3、擁塞控制
  • 默認使用BBR(Bottleneck Bandwidth and RTT)或Cubic算法。
  • 動態調整發送速率,避免網絡擁塞。
4、丟包恢復
  • ACK幀:接收方定期發送ACK確認收到的數據包。
  • 重傳機制:未收到ACK的數據包在超時后重傳。
  • 前向糾錯(FEC):弱網環境下發送冗余數據包,減少重傳次數。

3、連接終止階段

1、優雅關閉(Graceful Shutdown)
  • 任一端發送CONNECTION_CLOSE幀,通知對方終止連接。
  • 包含錯誤碼和可選調試信息。
2、立即關閉(Immediate Close)
  • 發送PUBLIC_RESET包強制終止連接(如檢測到錯誤)。

7、QUIC 的數據包結構(簡要)

每個QUIC包包含:
在這里插入圖片描述
特點:

  • 包頭加密(除部分必要字段)
  • 支持亂序到達、獨立確認(ACK)
  • 每個STREAM Frame攜帶一個流的數據

8、QUIC與傳統協議的對比

在這里插入圖片描述

9、QUIC的應用場景

1、HTTP/3

  • QUIC是HTTP/3的傳輸層協議,顯著提升網頁加載速度(如減少TLS握手延遲)。

2、實時音視頻傳輸

  • 多路復用和FEC特性適用于低延遲、高丟包場景(如直播、視頻會議)。

3、物聯網(IoT)

  • 弱網環境下(如移動網絡),QUIC的丟包恢復和連接遷移能力保障穩定性。

4、云服務與CDN

  • 阿里云、華為云等CDN廠商已支持QUIC,優化內容分發效率(如首屏加載時間減少30%)。

10、QUIC的實現挑戰

1、NAT和防火墻兼容性

  • 傳統網絡設備可能丟棄UDP流量,需通過協議設計(如連接ID)繞過限制。

2、部署成本

  • 需要客戶端和服務端均支持QUIC(如瀏覽器集成、App集成quiche庫)。

3、調試復雜性

  • QUIC的加密和多路復用增加了抓包分析難度,需專用工具(如Wireshark)。

11、總結

QUIC核心要點:
在這里插入圖片描述
QUIC協議通過基于UDP的多路復用、0-RTT連接、內置加密和智能擁塞控制,解決了傳統TCP+TLS的性能瓶頸。
其工作流程分為連接建立、數據傳輸和終止三個階段,核心**優勢在于低延遲、高安全性和強抗丟包能力。**隨著HTTP/3的普及,QUIC將成為下一代互聯網傳輸協議的主流選擇。

向陽前行,Dare To Be!!!

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

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

相關文章

python實現pdfs合并

靈感來源于博主正在學408,在搞到視頻課對應的ppt.pdf后發現pdf是按小節的,以至于每章有5-10甚至更多,這可太繁瑣了,我想要一章一個pdf就可以了,于是淺淺查了幾個CSDN發現使用python的要么收費要么要vip,不用…

51單片機-驅動74HC595芯片實現IO口擴展模塊教程

本章概述思維導圖: 51單片機驅動74HC595芯片實現IO口擴展 74HC595芯片簡介 74HC595是一款8位串行輸入、并行輸出的移位寄存器,屬于硅結構的CMOS器件。它能將串行輸入數據轉換為并行輸出,其中并行輸出為三態輸出(即高電平、低電平…

錄音轉文字,如何做到“快、準、狠“多格式通吃?

MP3、FLAC、M4A、OGG、WAV、MP4等多種常見音頻格式,一鍵精準轉成文字,讓辦公效率翻倍提升!🔥 真實痛點場景:告別低效,迎接智能辦公緊急會議紀要,爭分奪秒!上午10點剛結束一場跨部門腦…

【秋招】2025.08.16京東秋招機考真題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍在線刷題 bishipass.com 京東 題目一:魔法水晶陣列能量優化 1??:理解逆序對的變化規律,分析區間操作對逆序對的影響 2??:選擇后綴區間避免產生新的逆序對,只最大化消除的逆序對…

RocksDB 解密可逆哈希:BijectiveHash的設計奧秘

BijectiveHash(雙射哈希,即可逆哈希)的設計精髓在于它借鑒了現代密碼學和高性能哈希函數中的核心思想,但目標并非加密,而是實現一種無沖突、可逆的置換(Permutation)。可逆哈希是什么&#xff0…

05.用戶和組管理命令

用戶和組管理命令用戶和組管理命令1. getent2. useradd3. usermod4. userdel5. id6. su7. passwd8. chage9. groupadd10. groupmod11. groupdel12. gpasswd13. groupmems用戶和組管理命令 用戶和組的主要配置文件 /etc/passwd:用戶及其屬性信息(名稱、UID、主組ID…

go 多版本共存【goup + alias方案】

一、需求背景 以go1.21為主,臨時可以快速切換到go1.23,且只有當前窗口生效 二、安裝 安裝 goup go install github.com/owenthereal/goup/cmd/gouplatest安裝 go1.23 # 注意這里是安裝新的sdk,如果你本地存在相同版本的話,應該保持統一用goup安裝的 goup…

DR200差速移動機器人的多功能感知系統與多場景應用

DR200差速移動機器人平臺是一款基于室內平地的差速轉向移動機器人底盤,主要針對教育教學、超市移動促銷、無人配送、室內倉儲、室內巡檢、物流搬運等行業。整套底盤采用了4個萬向輪和雙驅動輪差速驅動結構,間驅動輪帶直流無刷伺服電機。整套結構采用了擺…

基于ZLMediaKit的大疆上云視頻流服務集成方案

引言 隨著無人機技術的快速發展,大疆(DJI)設備產生的高清視頻流需要高效、低延遲的云端處理方案。傳統基于SRS的視頻流服務在多協議支持和并發性能上存在局限,而ZLMediaKit作為一款高性能流媒體服務框架,憑借其多協議支…

用 Python 實現一個“小型 ReAct 智能體”:思維鏈 + 工具調用 + 環境交互

在大語言模型(LLM)的應用開發中,如何讓模型具備調用外部工具的能力是一個關鍵問題。我們不希望模型只是“生成答案”,而是能像一個智能體(Agent)一樣,按照推理鏈條自主決定調用搜索、計算、或數…

集成電路學習:什么是SIFT尺度不變特征變換

SIFT:尺度不變特征變換 SIFT(尺度不變特征變換,Scale Invariant Feature Transform)是一種在圖像處理和計算機視覺領域廣泛應用的算法,由David Lowe在1999年提出。該算法能夠在圖像的不同尺度、旋轉和光照條件下保持特征不變性,從而提取出獨特的特征點,并用于圖像…

短視頻流量|基于Java+vue的短視頻流量數據分析系統(源碼+數據庫+文檔)

短視頻流量數據分析系統 基于SprinBootvue的短視頻流量數據分析系統 一、前言 二、系統設計 三、系統功能設計 系統功能模塊 管理員功能模塊實現 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取: 博主介紹&#xff…

【無標題】卷軸屏手機前瞻:三星/京東方柔性屏耐久性測試進展

卷軸屏手機前瞻:三星/京東方柔性屏耐久性測試進展卷軸屏手機的產業化突破臨近2025年全球柔性屏市場規模預計突破186億美元,其中卷軸屏技術正從概念走向量產。三星顯示近期宣布新一代柔性OLED面板通過50萬次折疊認證,日均折疊200次可使用6年以…

Git 入門指南:核心概念與常用命令全解析

Git 入門指南:核心概念與常用命令全解析前言一、Git相關概念1.1 工作目錄1.2 暫存區1.3 本地倉庫1.3 遠程倉庫1.3.1 首次提交到遠程倉庫提示輸入用戶名密碼1.3.2 解決方法二、Git常用命令2.1 配置命令2.1.1 查看當前 Git 配置的所有信息2.1.2 查看系統全局配置2.1.3…

懸賞任務網站源碼多平臺兼職賺錢搭建圖解

功能詳細說明 (一)登錄與注冊 1、登錄:打開系統用戶端,輸入已注冊的手機號和密碼進行登錄。 若為忘記密碼,可通過 “找回密碼” 功能,按提示驗證身份后重置密碼登錄。 2、注冊:點擊 “注冊” 按…

Node.js簡介及安裝

一、Nodejs簡介 1、核心定義 Node.js 是一個基于 Chrome V8 引擎的開源、跨平臺 JavaScript 運行時環境(Runtime),用于在服務器端或本地運行 JavaScript 代碼。它并非編程語言、庫或框架,而是擴展了 JavaScript 的能力&#xff0…

KINGBASE集群日常維護管理命令總結

查看集群的狀態 [kingbasenode1 bin]$ repmgr cluster show查看守護集群狀態 [kingbasenode1 bin]$ repmgr service status查看集群的事件 [kingbasenode1 etc]$ repmgr cluster event查看集群流復制狀態 esrep#select usename,application_name,client_addr,sync_state,state,…

GoLand 調參高手都在用的配置!續集:WebStorm 飛升后,Go 開發 IDE 性能炸裂的秘密

“為什么別人的 GoLand 運行 Go 項目絲滑流暢,而你的卻頻繁卡頓、編譯轉圈?秘密就藏在這個 goland64.exe.vmoptions文件里!作為 IDEA/PyCharm/WebStorm 調優系列的續集,我把我壓箱底的 ?GoLand 性能調優參數表? 分享出來—>&…

48Days-Day19 | ISBN號,kotori和迷宮,矩陣最長遞增路徑

ISBN號 ISBN號碼_牛客題霸_牛客網 算法原理 模擬,根據題意模擬就可以了,注意一下余數為10的時候要特別判斷一下是不是X就行了 代碼 import java.util.Scanner;// 注意類名必須為 Main, 不要有任何 package xxx 信息 public class Main {public stat…

Java 泛型類型擦除

📖 概述 本文檔詳細解釋了 Flink 中 TypeInformation 的作用、原理和使用方法,幫助理解為什么 Flink 需要顯式的類型信息。 🎯 核心問題:Java 泛型類型擦除 什么是類型擦除? Java 在編譯時會將泛型信息擦除&#xff0c…