色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

為什么HTTP3.0使用UDP協議

jf_78858299 ? 來源:后端技術指南針 ? 作者:后端技術指南針 ? 2023-05-18 17:08 ? 次閱讀

小黑:大白大白,聽說HTTP協議已經到3.0了?

大白:是的,已經到3.0了,甚至我還要告訴你它還是基于UDP開發的!

小黑:UDP?沒搞錯吧?!UDP可是不靠譜代言人啊,TCP不香了嗎?

大白:千真萬確,而且已經跑起來效果不錯,正在推廣呢,據說Chrome金絲雀版本已經支持了,可以搶鮮試用。

小黑:害!我這個憨憨HTTP2.0還沒整明白,3.0就來了,快快快,給俺講講這個黑科技

圖片

小黑是個爽快人,許諾大白給他講清楚了,周五就請一頓木屋燒烤,再小酌幾杯,放松一下。

大白看在小黑對知識的渴求和燒烤的份上,決定給小黑講講HTTP3.0和QUIC協議那些事。

通過本文你將了解到以下內容:

  • HTTP2.0和TCP存在的一些問題
  • QUIC協議為什么選擇UDP
  • QUIC協議的重要特性
  • HTTP3.0和QUIC協議的前景和應用效果

HTTP2.0和HTTP3.0

科技永不止步。

我們都知道互聯網中業務是不斷迭代前進的,像HTTP這種重要的網絡協議也是如此,新版本是對舊版本的揚棄。

2.1 HTTP2.0和TCP的愛恨糾葛

HTTP2.0是2015年推出的,還是比較年輕的,其重要的二進制分幀協議、多路復用、頭部壓縮、服務端推送等重要優化使HTTP協議真正上了一個新臺階。

像谷歌這種重要的公司并沒有滿足于此,而且想繼續提升HTTP的性能,花最少的時間和資源獲取極致體驗。

那么肯定要問HTTP2.0雖然性能已經不錯了,還有什么不足嗎?

  • 建立連接時間長(本質上是TCP的問題)
  • 隊頭阻塞問題
  • 移動互聯網領域表現不佳(弱網環境)
  • ......

熟悉HTTP2.0協議的同學應該知道,這些缺點基本都是由于TCP協議引起的,水能載舟亦能覆舟,其實TCP也很無辜呀!

圖片

在我們眼里,TCP是面向連接、可靠的傳輸層協議,當前幾乎所有重要的協議和應用都是基于TCP來實現的。

網絡環境的改變速度很快,但是TCP協議相對緩慢,正是這種矛盾促使谷歌做出了一個看似出乎意料的決定-基于UDP來開發新一代HTTP協議。

2.2 谷歌為什么選擇UDP

上文提到,谷歌選擇UDP是看似出乎意料的,仔細想一想其實很有道理。

我們單純地看看TCP協議的不足和UDP的一些優點:

  • 基于TCP開發的設備和協議非常多,兼容困難
  • TCP協議棧是Linux內部的重要部分,修改和升級成本很大
  • UDP本身是無連接的、沒有建鏈和拆鏈成本
  • UDP的數據包無隊頭阻塞問題
  • UDP改造成本小

從上面的對比可以知道,谷歌要想從TCP上進行改造升級絕非易事,但是UDP雖然沒有TCP為了保證可靠連接而引發的問題,但是UDP本身不可靠,又不能直接用。

圖片

綜合而知,谷歌決定在UDP基礎上改造一個具備TCP協議優點的新協議也就順理成章了,這個新協議就是QUIC協議。

2.3 QUIC協議和HTTP3.0

QUIC其實是Quick UDP Internet Connections的縮寫,直譯為快速UDP互聯網連接。

我們來看看維基百科對于QUIC協議的一些介紹:

QUIC協議最初由Google的Jim Roskind設計,實施并于2012年部署,在2013年隨著實驗的擴大而公開宣布,并向IETF進行了描述。

QUIC提高了當前正在使用TCP的面向連接的Web應用程序的性能。它在兩個端點之間使用用戶數據報協議(UDP)建立多個復用連接來實現此目的。

QUIC的次要目標包括減少連接和傳輸延遲,在每個方向進行帶寬估計以避免擁塞。它還將擁塞控制算法移動到用戶空間,而不是內核空間,此外使用前向糾錯(FEC)進行擴展,以在出現錯誤時進一步提高性能。

HTTP3.0又稱為HTTP Over QUIC,其棄用TCP協議,改為使用基于UDP協議的QUIC協議來實現。

圖片

**QUIC協議詳解

**

擇其善者而從之,其不善者而改之。

HTTP3.0既然選擇了QUIC協議,也就意味著HTTP3.0基本繼承了HTTP2.0的強大功能,并且進一步解決了HTTP2.0存在的一些問題,同時必然引入了新的問題。

圖片

QUIC協議必須要實現HTTP2.0在TCP協議上的重要功能,同時解決遺留問題,我們來看看QUIC是如何實現的。

3.1 隊頭阻塞問題

隊頭阻塞 Head-of-line blocking(縮寫為HOL blocking)是計算機網絡中是一種性能受限的現象,通俗來說就是:一個數據包影響了一堆數據包,它不來大家都走不了。

隊頭阻塞問題可能存在于HTTP層和TCP層,在HTTP1.x時兩個層次都存在該問題。

圖片

HTTP2.0協議的多路復用機制解決了HTTP層的隊頭阻塞問題,但是在TCP層仍然存在隊頭阻塞問題。

TCP協議在收到數據包之后,這部分數據可能是亂序到達的,但是TCP必須將所有數據收集排序整合后給上層使用,如果其中某個包丟失了,就必須等待重傳,從而出現某個丟包數據阻塞整個連接的數據使用。

QUIC協議是基于UDP協議實現的,在一條鏈接上可以有多個流,流與流之間是互不影響的,當一個流出現丟包影響范圍非常小,從而解決隊頭阻塞問題。

3.2 0RTT 建鏈

衡量網絡建鏈的常用指標是RTT Round-Trip Time,也就是數據包一來一回的時間消耗。

圖片

RTT包括三部分:往返傳播時延、網絡設備內排隊時延、應用程序數據處理時延。

圖片

一般來說HTTPS協議要建立完整鏈接包括:TCP握手和TLS握手,總計需要至少2-3個RTT,普通的HTTP協議也需要至少1個RTT才可以完成握手。

然而,QUIC協議可以實現在第一個包就可以包含有效的應用數據,從而實現0RTT,但這也是有條件的。

圖片

簡單來說,基于TCP協議和TLS協議的HTTP2.0在真正發送數據包之前需要花費一些時間來完成握手和加密協商,完成之后才可以真正傳輸業務數據。

但是QUIC則第一個數據包就可以發業務數據,從而在連接延時有很大優勢,可以節約數百毫秒的時間。

圖片

QUIC的0RTT也是需要條件的,對于第一次交互的客戶端和服務端0RTT也是做不到的,畢竟雙方完全陌生。

因此,QUIC協議可以分為首次連接和非首次連接,兩種情況進行討論。

3.3 首次連接和非首次連接

使用QUIC協議的客戶端和服務端要使用1RTT進行密鑰交換,使用的交換算法是DH(Diffie-Hellman)迪菲-赫爾曼算法。

DH算法開辟了密鑰交換的新思路,在之前的文章中提到的RSA算法也是基于這種思想實現的,但是DH算法和RSA的密鑰交換不完全一樣,感興趣的讀者可以看看DH算法的數學原理。

DH算法開辟了密鑰交換的新思路,在之前的文章中提到的RSA算法也是基于這種思想實現的,但是DH算法和RSA的密鑰交換不完全一樣,感興趣的讀者可以看看DH算法的數學原理。

3.3.1 首次連接

簡單來說一下,首次連接時客戶端和服務端的密鑰協商和數據傳輸過程,其中涉及了DH算法的基本過程:

  1. 客戶端對于首次連接的服務端先發送client hello請求。
  2. 服務端生成一個素數p和一個整數g,同時生成一個隨機數 (筆誤-此處應該是Ks_pri)為私鑰,然后計算出公鑰 = mod p,服務端將,p,g三個元素打包稱為config,后續發送給客戶端。
  3. 客戶端隨機生成一個自己的私鑰,再從config中讀取g和p,計算客戶端公鑰 = mod p。
  4. 客戶端使用自己的私鑰和服務端發來的config中讀取的服務端公鑰,生成后續數據加密用的密鑰K = mod p。
  5. 客戶端使用密鑰K加密業務數據,并追加自己的公鑰,都傳遞給服務端。
  6. 服務端根據自己的私鑰和客戶端公鑰生成客戶端加密用的密鑰K = mod p。
  7. 為了保證數據安全,上述生成的密鑰K只會生成使用1次,后續服務端會按照相同的規則生成一套全新的公鑰和私鑰,并使用這組公私鑰生成新的密鑰M。
  8. 服務端將新公鑰和新密鑰M加密的數據發給客戶端,客戶端根據新的服務端公鑰和自己原來的私鑰計算出本次的密鑰M,進行解密。
  9. 之后的客戶端和服務端數據交互都使用密鑰M來完成,密鑰K只使用1次。

圖片

3.3.2 非首次連接

前面提到客戶端和服務端首次連接時服務端傳遞了config包,里面包含了服務端公鑰和兩個隨機數,客戶端會將config存儲下來,后續再連接時可以直接使用,從而跳過這個1RTT,實現0RTT的業務數據交互。

客戶端保存config是有時間期限的,在config失效之后仍然需要進行首次連接時的密鑰交換。

3.4 前向安全問題

前向安全是密碼學領域的專業術語,看下百度上的解釋:

前向安全或前向保密Forward Secrecy是密碼學中通訊協議的安全屬性,指的是長期使用的主密鑰泄漏不會導致過去的會話密鑰泄漏。

前向安全能夠保護過去進行的通訊不受密碼或密鑰在未來暴露的威脅,如果系統具有前向安全性,就可以保證在主密鑰泄露時歷史通訊的安全,即使系統遭到主動攻擊也是如此。

通俗來說,前向安全指的是密鑰泄漏也不會讓之前加密的數據被泄漏,影響的只有當前,對之前的數據無影響。

前面提到QUIC協議首次連接時先后生成了兩個加密密鑰,由于config被客戶端存儲了,如果期間服務端私鑰泄漏,那么可以根據K = mod p計算出密鑰K。

如果一直使用這個密鑰進行加解密,那么就可以用K解密所有歷史消息,因此后續又生成了新密鑰,使用其進行加解密,當時完成交互時則銷毀,從而實現了前向安全。

圖片

3.5 前向糾錯

前向糾錯是通信領域的術語,看下百科的解釋:

前向糾錯也叫前向糾錯碼Forward Error Correction 簡稱FEC 是增加數據通訊可信度的方法,在單向通訊信道中,一旦錯誤被發現,其接收器將無權再請求傳輸。

FEC 是利用數據進行傳輸冗余信息的方法,當傳輸中出現錯誤,將允許接收器再建數據。

聽這段描述就是做校驗的,看看QUIC協議是如何實現的:

QUIC每發送一組數據就對這組數據進行異或運算,并將結果作為一個FEC包發送出去,接收方收到這一組數據后根據數據包和FEC包即可進行校驗和糾錯。

3.6 連接遷移

網絡切換幾乎無時無刻不在發生。

TCP協議使用五元組來表示一條唯一的連接,當我們從4G環境切換到wifi環境時,手機的IP地址就會發生變化,這時必須創建新的TCP連接才能繼續傳輸數據。

QUIC協議基于UDP實現摒棄了五元組的概念,使用64位的隨機數作為連接的ID,并使用該ID表示連接。

基于QUIC協議之下,我們在日常wifi和4G切換時,或者不同基站之間切換都不會重連,從而提高業務層的體驗。

圖片

QUIC的應用和前景

通過前面的一些介紹我們看出來QUIC協議雖然是基于UDP來實現的,但是它將TCP的重要功能都進行了實現和優化,否則使用者是不會買賬的。

QUIC協議的核心思想是將TCP協議在內核實現的諸如可靠傳輸、流量控制、擁塞控制等功能轉移到用戶態來實現,同時在加密傳輸方向的嘗試也推動了TLS1.3的發展。

但是TCP協議的勢力過于強大,很多網絡設備甚至對于UDP數據包做了很多不友好的策略,進行攔截從而導致成功連接率下降。

主導者谷歌在自家產品做了很多嘗試,國內騰訊公司也做了很多關于QUIC協議的嘗試。

其中騰訊云對QUIC協議表現了很大的興趣,并做了一些優化然后在一些重點產品中對連接遷移、QUIC成功率、弱網環境耗時等進行了實驗,給出了來自生產環境的諸多寶貴數據。

簡單看一組騰訊云在移動互聯網場景下的不同丟包率下的請求耗時分布:

圖片圖片

任何新生事物的推動都是需要時間的,出現多年的HTTP2.0和HTTPS協議的普及度都沒有預想高,IPv6也是如此,不過QUIC已經展現了強大的生命力,讓我們拭目以待吧!

本文小結

網絡協議本身就很復雜,本文只能從整體出發對重要的部分做粗淺的闡述,如果對某個點很感興趣,可以查閱相關代碼和RFC文檔。

我們之前可能遇到過這個面試題:

如何用UDP協議來實現TCP協議的主要功能。

我確實筆試遇到過這道題,可以說很抓狂,題目太宏大了。

不過現在看看QUIC協議就回答了這個問題:基于UDP主體將TCP的重要功能轉移到用戶空間來實現,從而繞開內核實現用戶態的TCP協議,但是真正實現起來還是非常復雜的。

技術進步也非朝夕之功,需要在實踐中反復錘煉。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務端
    +關注

    關注

    0

    文章

    66

    瀏覽量

    7004
  • DUP協議
    +關注

    關注

    0

    文章

    2

    瀏覽量

    909
  • http2.0
    +關注

    關注

    0

    文章

    3

    瀏覽量

    2134
收藏 人收藏

    評論

    相關推薦

    HTTP、TCP、QUIC協議詳解

    HTTP 3.0HTTP 協議的第三個主要版本,前兩個分別是 HTTP 1.0 和 HTTP
    發表于 07-25 11:58 ?1643次閱讀

    Linux下的UDP協議編程

    Linux下的UDP協議編程 介紹UDP協議,并提供一個適用于客戶端和服務器端的實例子程序。  關鍵詞:Linux;UDP
    發表于 10-16 22:22 ?3974次閱讀
    Linux下的<b class='flag-5'>UDP</b><b class='flag-5'>協議</b>編程

    UDP協議,UDP協議是什么意思

    UDP協議,UDP協議是什么意思 UDP 是User Datagram Protocol的簡稱, 中文名是用戶數據包
    發表于 03-29 17:35 ?1491次閱讀

    udp協議及包格式是什么

    也許有的讀者會問,既然UDP是一種不可靠的網絡協議,那么還有什么使用價值或必要呢?其實不然,在有些情況下UDP協議可能會變得非常有用。
    發表于 12-08 14:38 ?9893次閱讀
    <b class='flag-5'>udp</b><b class='flag-5'>協議</b>及包格式是什么

    udp協議源碼詳解

    在選擇使用協議的時候,選擇UDP必須要謹慎?在網絡質量令人不十分滿意的環境下,UDP協議數據包丟失會比較嚴重?但是由于UDP的特性:它不屬于
    發表于 12-08 16:03 ?9563次閱讀

    tcp和udp協議的異同

    UDP 協議 UDP 協議是無連接、不可靠的一個傳輸層協議。下圖是 UDP 數據報格式。 端口號
    的頭像 發表于 11-12 14:45 ?4070次閱讀
    tcp和<b class='flag-5'>udp</b><b class='flag-5'>協議</b>的異同

    通信協議中的HTTP、TCP、UDP你了解多少(上)

    TCP HTTP UDP: 都是通信協議,也就是通信時所遵守的規則,只有雙方按照這個規則“說話”,對方才能理解或為之服務。
    的頭像 發表于 02-13 14:19 ?951次閱讀
    通信<b class='flag-5'>協議</b>中的<b class='flag-5'>HTTP</b>、TCP、<b class='flag-5'>UDP</b>你了解多少(上)

    UDP協議原理詳解

    一個典型的使用UDP協議封裝的數據包,包括以太網MAC頭+網絡層IP數據頭+傳輸層UDP頭+要傳輸的數據。
    的頭像 發表于 04-24 10:54 ?2556次閱讀
    <b class='flag-5'>UDP</b><b class='flag-5'>協議</b>原理詳解

    什么是UDP協議

    UDP協議即用戶數據報協議,該協議主要為應用程序提供了一種無需建立連接就可以發送封裝的 IP 數據包的方法。nternet的傳輸層有兩個主要協議
    發表于 05-06 15:19 ?2324次閱讀

    udp協議的特性有哪些 udp的應用原理

    UDP(User Datagram Protocol)是一個獨立的傳輸層協議,不包含其他協議。它僅在IP協議上增加了端口號的概念,以便能夠將數據報正確地傳送給目標端口。
    的頭像 發表于 06-14 18:21 ?2197次閱讀

    HTTP/3 來了,它比 HTTP/1 和 HTTP/2 強在哪兒?

    前言通過這篇文章你可以了解到:1.什么是HTTP協議?2.HTTP1.1/2.0/3.0的發展變更3.HTTP1.1/2.0/
    的頭像 發表于 08-28 15:35 ?1458次閱讀
    <b class='flag-5'>HTTP</b>/3 來了,它比 <b class='flag-5'>HTTP</b>/1 和 <b class='flag-5'>HTTP</b>/2 強在哪兒?

    udp是什么協議 TCP與UDP的區別

    TCP協議提供可靠的數據傳輸,UDP協議提供盡量高效的數據傳輸。TCP協議通過使用序列號、確認應答等機制,保證數據傳輸的可靠性,而UDP
    的頭像 發表于 06-26 17:47 ?1.1w次閱讀

    UDP協議的原理

    為啥要自己寫一個mini UDP協議棧?因為我們干偷偷摸摸的事情,哈哈哈!!! 其實是為了不跑一個龐大的LWIP協議棧,通過自己寫的mini udp
    的頭像 發表于 11-10 10:08 ?872次閱讀
    <b class='flag-5'>UDP</b><b class='flag-5'>協議</b>的原理

    udp是什么協議udp協議介紹

    UDP(User Datagram Protocol,用戶數據報協議)是一種無連接的傳輸層協議,不保證數據傳輸的可靠性,只負責把數據包發送給目標地址。它提供了簡單、高效的數據傳輸方式,適合對傳輸質量
    的頭像 發表于 04-19 15:57 ?1368次閱讀

    功能強大的網絡通訊工具,支持各類TCP、UDPHTTP的通訊協議

    功能強大的網絡通訊工具,支持各類TCP、UDPHTTP的通訊協議,簡單方便,包含歷史記憶功能,體積小,服務器調試最合適
    發表于 09-05 11:51 ?0次下載
    主站蜘蛛池模板: 国产看黄网站又黄又爽又色| 为什么丈夫插我我却喜欢被打着插| 亚洲综合中文字幕无线码| 国产互换后人妻的疯狂VIDEO| 欧美亚洲高清国产| 97视频免费观看2区| 久久人人爽人人片AV人成| 亚洲人视频在线| 国产亚洲欧美高清在线| 乌克兰黄色录像| 国产成人a一在线观看| 日久精品不卡一区二区| vivoe另类| 欧美亚洲精品午夜福利AV| 99精品中文字幕在线观看| 老师你下面好紧夹死了| 在线免费看a| 久久综合久综合久久鬼色| 一级毛片免费视频网站| 久久国产乱子伦精品免费M| 亚洲熟女丰满多毛XXXXX| 海角国精产品一区一区三区糖心| 小xav导航| 国产亚洲精品久久精品录音| 亚洲 欧美 日韩 国产 视频| 国产午夜一级淫片| 亚洲精品无码葡京AV天堂| 娇喘嗯嗯 轻点啊视频福利| 亚洲视频一区在线| 亚洲精品国产精品麻豆99| 国外色幼网| 亚洲视频在线观看地址| 久久精品热在线观看85| 中文字幕亚洲第一| 暖暖 免费 高清 日本视频大全| 91亚洲 欧美 国产 制服 动漫| 男人扒开添女人下部口述| old胖老太fat bbw青年| 日本强好片久久久久久AAA| 国产白丝JK被疯狂输出视频| 午夜伦伦电影理论片费看|