0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

QUIC協(xié)議的特性、原理及應用場景

中興文檔 ? 來源:中興文檔 ? 2023-09-15 11:21 ? 次閱讀

QUIC(Quick UDP Internet Connection,快速UDP網絡連接)發(fā)音同 "quick",是 Google 公司在 2012 年提出的使用 UDP 進行多路并發(fā)傳輸?shù)膮f(xié)議。

2016 年,互聯(lián)網工程任務組 IETF 開始標準化 QUIC。

2017 年,Google 開發(fā)并部署了 QUIC 協(xié)議的初始設計 gQUIC。

2021 年,QUIC 協(xié)議的正式標準化版本 RFC900 發(fā)布。

QUIC協(xié)議的特性

從 QUIC 的命名中可以看到兩個關鍵詞——快速和 UDP。這個兩個關鍵詞概括了 QUIC 的特性,提供更快速、更可靠、更安全的數(shù)據(jù)傳輸方式。

快速:QUIC 比 TCP 更簡單,能夠更快速地連接。其安全性也不亞于 TCP+TLS。

UDP:QUIC 是建立在 UDP 之上的新型傳輸協(xié)議,一般在應用層發(fā)揮作用。

92b314aa-5376-11ee-a25d-92fbcf53809c.png

QUIC協(xié)議棧

QUIC協(xié)議的原理

一個 QUIC 數(shù)據(jù)包由頭部(Header)和數(shù)據(jù)(Data)組成。

92c812e2-5376-11ee-a25d-92fbcf53809c.png

QUIC數(shù)據(jù)格式

頭部(Header)中包含以下字段:

標志位(Flags):用來指示該數(shù)據(jù)包的類型、狀態(tài)等信息。

連接ID(Connection ID):用于唯一標識一個連接。

版本號(Version):表示使用的協(xié)議版本號。

包編號(Packet Number):表示數(shù)據(jù)包的順序。

數(shù)據(jù)(Data)被拆分成多個小的數(shù)據(jù)幀(Frame),每個數(shù)據(jù)幀都有自己的類型、長度和負載。數(shù)據(jù)幀通過 Stream ID 進行標識,以便于在多路復用時進行管理。

PING 幀:用于測試連接的可用性。

ACK 幀:用于確認收到數(shù)據(jù)包。

RESET_STREAM 幀:用于重置數(shù)據(jù)流的狀態(tài)。

STOP_SENDING 幀:用于停止向特定的數(shù)據(jù)流發(fā)送數(shù)據(jù)。

CRYPTO 幀:用于傳輸加密數(shù)據(jù)。

STREAM 幀:用于傳輸普通數(shù)據(jù)流。

92d451c4-5376-11ee-a25d-92fbcf53809c.png

STREAM幀結構

下面介紹 QUIC 協(xié)議中的三個核心特性原來:0-RTT 連接建立、無隊頭阻塞的多路復用、無歧義重傳。

0-RTT 連接建立

QUIC 協(xié)議使用了 0-RTT(零往返時間)連接建立技術,可以在客戶端發(fā)送第一個請求時就建立起安全連接,從而減少連接建立所需的時間。這個技術通過使用 TLS 的 Session Ticket,在服務端重啟后仍然保留連接狀態(tài),從而避免了重新握手的過程。

傳統(tǒng) HTTPs 握手包含了 TCP 和 TLS 握手,如下圖所示,總共需要 3 個 RTT。

92e0891c-5376-11ee-a25d-92fbcf53809c.png

TCP和TLS握手

從中可以看出,TLS 握手需要 1 個 RTT。通過 1 次 RTT,客戶端和服務端就協(xié)商好了通信密鑰。

客戶端:生成隨機數(shù) a,選擇公開的大數(shù) G 和 P,計算 A=a*G%P。發(fā)送 Client Hello 消息,將 A 和 G 傳遞給服務端。

服務端:生成隨機數(shù) b,計算 B=b*G%P。發(fā)送 Server Hello 消息。將 B 傳遞給客戶端。

客戶端:通過秘鑰加密算法生成通信密鑰 KEY = aB = ab*G%P。

服務端:通過秘鑰加密算法生成通信密鑰 KEY = bA = ba*G%P。

QUIC 的握手是基于 TLS1.3 實現(xiàn)的,建立連接時也應該需要1次 RTT,那 QUIC 的 0-RTT 連接是如何實現(xiàn)的?

首次握手后,QUIC 的客戶端緩存了 Server Hello,那么在下次建連時,可以直接使用緩存數(shù)據(jù)計算通信密鑰,如下圖所示。

9300454a-5376-11ee-a25d-92fbcf53809c.png

0-RTT連接

客戶端:生成隨機數(shù) c,選擇公開的大數(shù) G 和 P,計算 A=c*G%P。發(fā)送 Client Hello 消息,將 A 和 G 傳遞給服務器。

客戶端:直接使用緩存的 Server Hello 計算通信密鑰 KEY = cB = cb*G%P,加密并發(fā)送應用數(shù)據(jù)。

服務端:根據(jù) Client Hello 消息計算通信密鑰 KEY = bA = bc*G%P。

通過緩存 Server Hello,在生成 Client Hello 的同時,加密了應用數(shù)據(jù),所以客戶端不需要經過握手就可以發(fā)送應用數(shù)據(jù),這就是 QUIC 的 0-RTT 連接。

無隊頭阻塞的多路復用

瀏覽器限制了同一個域名下的請求數(shù)量。當請求達到最大數(shù)量時,剩余的資源需要等待其他資源請求完成后才能發(fā)起請求,這就是隊頭阻塞(Head of Line Blocking)。

在傳統(tǒng)的 HTTP/1 協(xié)議中,每個 TCP 連接只能處理唯一的請求,因此當需要請求多個資源時,需要建立多個 TCP 連接。為了解決 HTTP/1 的核心問題,在 HTTP/2 中引入了多路復用的技術,這個技術可以只通過一個 TCP 連接就可以傳輸所有的請求數(shù)據(jù),如下圖。

多路復用很好的解決了瀏覽器限制同一個域名下的請求數(shù)量的問題,從而提高網絡吞吐量。此外,QUIC 協(xié)議還支持數(shù)據(jù)流級別的擁塞控制,可以更精細地控制網絡擁塞。

930aed88-5376-11ee-a25d-92fbcf53809c.png

TCP連接

HTTP/2 雖然通過多路復用解決了 HTTP 層的隊頭阻塞,但仍然存在 TCP 層的隊頭阻塞問題。在 HTTP/2 中,如果 TCP 連接中出現(xiàn)了丟包的情況,那么整個 TCP 都要開始等待重傳,后面的所有數(shù)據(jù)都將被阻塞。在這種情況下, HTTP/2 的表現(xiàn)情況反倒不如 HTTP/1 。

QUIC 通過為每個請求流都分配一個獨立的滑動窗口,解決 TCP 層的隊頭阻塞。如下圖,A 請求流上的丟包不會影響 B 請求流上的數(shù)據(jù)發(fā)送。

931bf696-5376-11ee-a25d-92fbcf53809c.png

QUIC連接

無歧義重傳

為了保證可靠性,TCP 使用基于序號的 Sequence Number 和 Ack 來確認消息的有序到達。在 TCP 中,重傳包的 sequence number 和原始包的Sequence Number 是不變的,也正是因此這個特性,引發(fā)了 Tcp 重傳歧義問題。當超時事件 RTO 發(fā)生后,客戶端發(fā)起重傳,然后接收到了 Ack 數(shù)據(jù)。但由于 Sequence Number 是一樣的,這個接收到的 Ack 到底是原始請求的響應還是重傳請求的響應呢?這導致了 RTT 計算歧義。

932bf122-5376-11ee-a25d-92fbcf53809c.png

TCP重傳歧義性

QUIC 則是采用了單向遞增的 Packet Number 來標識數(shù)據(jù)包,因此不會像 TCP 一樣,不會因為超時重傳了同樣序列的數(shù)據(jù)包,造成 RTT 和 RTO(Retransmission Time Out,重傳超時時間)的計算不準確。每個 Packet Number 都嚴格遞增,就算 Packet N 丟失了,重傳的 Packet N 的 Packet Number 已經不是 N,而是一個比 N 大的值。

934ea258-5376-11ee-a25d-92fbcf53809c.png

QUIC的RTT計算

QUIC 對于 RTT 的計算更為準確,預估的超時時間能夠有效防止更多的重傳請求被錯誤地發(fā)送回客戶端。同時也給予了 QUIC 網絡更為快速的反應時間,及時通知客戶端重傳數(shù)據(jù)包。

但是單純依靠嚴格遞增的 Packet Number 肯定是無法保證數(shù)據(jù)的順序性和可靠性。

QUIC 引入了 Stream Offset 的概念,通過 Stream Offset 可以保證應用數(shù)據(jù)的順序。假設客戶端先后發(fā)送了 Pakcet N 和 Pakcet N+1,Stream Offset 分別是 x 和 x+y。如果 Packet N 丟失,引發(fā)重傳,重傳的 Packet Number 是 N+2,但是它的 Stream Offset 依然是 x,這樣就算 Packet N + 2 是后到的,依然可以將 Stream x 和 Stream x+y 按照順序組織起來,交給應用程序處理。

QUIC協(xié)議的應用場景

QUIC 為各種領域提供了可靠、高效和安全的數(shù)據(jù)傳輸方案,其中最具潛力的應用場景包括:

實時 Web 和移動應用

這些應用需要低延遲和可靠的數(shù)據(jù)傳輸。通過相互獨立的數(shù)據(jù)流和擁塞控制機制,QUIC 可以快速高效地發(fā)送和接收數(shù)據(jù)。在多路復用模式下,QUIC 同一連接內不同數(shù)據(jù)流之間的數(shù)據(jù)傳輸互不干擾。

物聯(lián)網設備通信

物聯(lián)網設備通常使用 TCP 和 MQTT 等協(xié)議進行通信,在受限的網絡環(huán)境中可能存在高延遲和丟包等問題。相比之下,QUIC 可以極近實現(xiàn) 0-RTT,為高延遲和丟包的網絡環(huán)境,提供了更可靠和高效的替代方案。

支付和電子商務應用

這些應用需要安全可靠的數(shù)據(jù)傳輸。QUIC 通過 TLS 加密和可靠的數(shù)據(jù)流,使其成為這些應用的理想選擇,有助于保證數(shù)據(jù)安全完整地傳輸。從用戶的角度來看,QUIC 通過保證更快、更順暢的交易,優(yōu)化了用戶體驗。

當前,QUIC 協(xié)議已經成為 IETF 標準化工作組的一個項目,并且越來越多的互聯(lián)網公司開始支持 QUIC 協(xié)議。隨著 QUIC 協(xié)議的普及,我們可以期待更快、更安全、更可靠的網絡體驗。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)傳輸

    關注

    9

    文章

    1698

    瀏覽量

    64210
  • 物聯(lián)網

    關注

    2894

    文章

    43301

    瀏覽量

    366376
  • UDP
    UDP
    +關注

    關注

    0

    文章

    317

    瀏覽量

    33801
  • Quic
    +關注

    關注

    0

    文章

    25

    瀏覽量

    7262

原文標題:三分鐘,帶你了解下一代傳輸層協(xié)議QUIC

文章出處:【微信號:ztedoc,微信公眾號:中興文檔】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AG32VF-MIPI應用場景

    的基礎上,集成了MIPI接口協(xié)議,提供了豐富的功能和特性,能夠滿足不同應用場景的需求,為用戶提供更加全面、便捷、高效的數(shù)據(jù)傳輸方案。 基本參數(shù): MIPI up to 1.5Gbps LVDS up
    發(fā)表于 01-22 08:56

    什么是QUIC協(xié)議?

    Quic
    電子學習
    發(fā)布于 :2023年02月08日 11:25:15

    MOS管的應用場景

    mos管的應用場景,你了解么?低壓MOS管可稱為金屬氧化物半導體場效應管,因為低壓MOS管具有良好的開關特性,廣泛應用在電子開關的電路中。如開關電源,電動馬達、照明調光等!下面銀聯(lián)寶科技就跟大家一起
    發(fā)表于 11-14 09:24

    =>的使用場景有哪些

    使用場景
    發(fā)表于 10-27 13:25

    幾種LED調光協(xié)議分析及具體應用場景介紹

    市面上主流幾種LED調光協(xié)議分析及具體應用場景介紹目前國內外的LED驅動已經不僅僅滿足照明需求,更多是去追求各種不同場景的應用,搭配各種數(shù)字協(xié)議,實現(xiàn)某種特定的功能,比如在汽車大燈的應
    發(fā)表于 12-31 08:04

    MS9331的應用場景是什么?

    MS9331的應用場景是什么?
    發(fā)表于 02-11 06:41

    什么是QUIC和HTTP/3呢?

    今天,QUIC和HTTP/3在我們的互聯(lián)網通信中使用率超過75%(我們將QUIC和HTTP/3統(tǒng)稱為QUIC)。QUIC已經顯著地改善多個指標,包括請求錯誤、尾延遲(Tail Late
    的頭像 發(fā)表于 11-02 10:04 ?5700次閱讀

    一文帶你了解QUIC協(xié)議

    當通過網絡傳輸數(shù)據(jù)時,一種新的協(xié)議QUIC(Quick UDP Internet Connection,快速UDP互聯(lián)網連接)正在成為FAANG的默認選擇。本篇文章描述了QUIC協(xié)議
    的頭像 發(fā)表于 09-02 09:39 ?3925次閱讀
    一文帶你了解<b class='flag-5'>QUIC</b><b class='flag-5'>協(xié)議</b>

    發(fā)明QUIC的原因以及QUIC的使用人群

    QUIC出現(xiàn)以前,TCP的主要替代選擇是UDP。簡而言之,TCP提供了可靠的互聯(lián)網傳輸,其中可以確保數(shù)據(jù)的傳輸,而UDP提供了更快、但卻非可靠的傳輸。QUIC的目的就是結合TCP的最佳特性和UDP傳輸層。
    的頭像 發(fā)表于 06-08 10:13 ?1681次閱讀

    QUIC通信協(xié)議到底講了什么?

    QUIC(Quick UDP Internet Connection)是谷歌制定的一種基于UDP的低時延的互聯(lián)網傳輸層協(xié)議,很好地解決了當今傳輸層和應用層面臨的各種需求,包括處理更多的連接,低延遲以及安全性保障等,目前QUIC
    的頭像 發(fā)表于 12-14 10:24 ?792次閱讀

    什么是QUIC,QUIC在MQTT通信場景中的應用前景

    QUIC(Quick UDP Internet Connection)是Google提出的一個基于UDP的傳輸協(xié)議,因其高效的傳輸效率和多路并發(fā)的能力,已經成為下一代互聯(lián)網協(xié)議HTTP/3的底層傳輸
    發(fā)表于 12-26 11:56 ?3456次閱讀

    QUIC是如何工作的?為什么HTTP/3要選擇QUIC協(xié)議?

    QUIC發(fā)布之前,HTTP 使用 TCP 作為傳輸數(shù)據(jù)的底層協(xié)議。隨著移動互聯(lián)網的不斷發(fā)展,人們對實時交互和多樣化網絡場景的需求越來越大。
    的頭像 發(fā)表于 08-10 17:21 ?1851次閱讀
    <b class='flag-5'>QUIC</b>是如何工作的?為什么HTTP/3要選擇<b class='flag-5'>QUIC</b><b class='flag-5'>協(xié)議</b>?

    一文讀懂QUIC協(xié)議:更快、更穩(wěn)、更高效的網絡通信

    HTTP/3 是第三個主要版本的 HTTP 協(xié)議。與其前任 HTTP/1.1 和 HTTP/2 不同,在 HTTP/3 中,棄用 TCP 協(xié)議,改為使用基于 UDP 協(xié)議QUIC
    的頭像 發(fā)表于 08-24 15:43 ?1255次閱讀
    一文讀懂<b class='flag-5'>QUIC</b><b class='flag-5'>協(xié)議</b>:更快、更穩(wěn)、更高效的網絡通信

    UDP的特性與應用場景

    一、UDP的特性與應用場景 采用UDP有3個關鍵點: 網絡帶寬需求較小,而實時性要求高 大部分應用無需維持連接 需要低功耗 應用場景: 網頁瀏覽:新浪微博就已經用了QUIC
    的頭像 發(fā)表于 11-13 15:34 ?740次閱讀
    UDP的<b class='flag-5'>特性</b>與應<b class='flag-5'>用場景</b>

    UART協(xié)議的工作原理和應用場景

    UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)傳輸器)協(xié)議是一種廣泛使用的串行通信協(xié)議,它允許計算機與外部設備之間通過串行接口進行數(shù)據(jù)傳輸。以下是對UART協(xié)議的詳
    的頭像 發(fā)表于 08-25 17:15 ?1362次閱讀