成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Google等國際大公司均開始支持的HTTP3到底是什么鬼?

網絡 通信技術 開發工具
最近一段時間以來,關于HTTP/3的新聞有很多,越來越多的國際大公司已經開始使用HTTP/3了。那么,本文就來講解一下到底什么是HTTP/3?他用到了哪些技術?解決了什么問題?

最近一段時間以來,關于HTTP/3的新聞有很多,越來越多的國際大公司已經開始使用HTTP/3了。 

Google等國際大公司均開始支持的HTTP3到底是什么鬼? 
Google等國際大公司均開始支持的HTTP3到底是什么鬼?

所以,HTTP/3已經是箭在弦上了,全面使用只是個時間問題,那么,作為一線開發者,我們也是時候了解下到底什么是HTTP/3,為什么需要HTTP/3了。

那么,本文就來講解一下到底什么是HTTP/3?他用到了哪些技術?解決了什么問題?

HTTP/2 存在的問題

在撰寫本文之前,我專門寫了一篇文章《HTTP/2做錯了什么?剛剛輝煌2年就要被棄用了?》分析HTTP/2存在的問題以及背后的原因。

這里就不詳細介紹了,強烈建議大家先閱讀下這篇文章,有助于本文的學習。

在上一篇文章中我們提到過HTTP/2因為底層使用的傳輸層協議仍然是TCP,所以他存在著TCP隊頭阻塞、TCP握手延時長以及協議僵化等問題。

這導致HTTP/2雖然使用了多路復用、二進制分幀等技術,但是仍然存在著優化空間。

QUIC協議

我們知道,HTTP/2之所以"被棄用",是因為他使用的傳輸層協議仍然是TCP,所以HTTP/3首要解決的問題就是繞開TCP。

那么如果研發一種新的協議,同樣還是會因為受到中間設備僵化的影響,導致無法被大規模應用。所以,研發人員們想到了一種基于UDP實現的方式。

于是,Google是最先采用這種方式并付諸于實踐的,他們在2013年推出了一種叫做QUIC的協議,全稱是Quick UDP Internet Connections。

從名字中可以看出來,這是一種完全基于UDP的協議。

在設計之初,Google就希望使用這個協議來取代HTTPS/HTTP協議,使網頁傳輸速度加快。2015年6月,QUIC的網絡草案被正式提交至互聯網工程任務組。2018 年 10 月,互聯網工程任務組 HTTP 及 QUIC 工作小組正式將基于 QUIC 協議的 HTTP(英語:HTTP over QUIC)重命名為HTTP/3。

所以,我們現在所提到的HTTP/3,其實就是HTTP over QUIC,即基于QUIC協議實現的HTTP。

那么,想要了解HTTP/3的原理,只需要了解QUIC就可以了。

QUIC協議有以下特點:

  • 基于UDP的傳輸層協議:它使用UDP端口號來識別指定機器上的特定服務器。
  • 可靠性:雖然UDP是不可靠傳輸協議,但是QUIC在UDP的基礎上做了些改造,使得他提供了和TCP類似的可靠性。它提供了數據包重傳、擁塞控制、調整傳輸節奏以及其他一些TCP中存在的特性。
  • 實現了無序、并發字節流:QUIC的單個數據流可以保證有序交付,但多個數據流之間可能亂序,這意味著單個數據流的傳輸是按序的,但是多個數據流中接收方收到的順序可能與發送方的發送順序不同!
  • 快速握手:QUIC提供0-RTT和1-RTT的連接建立
  • 使用TLS 1.3傳輸層安全協議:與更早的TLS版本相比,TLS 1.3有著很多優點,但使用它的最主要原因是其握手所花費的往返次數更低,從而能降低協議的延遲。

那么,QUIC到底屬于TCP/IP協議族中的那一層呢?我們知道,QUIC是基于UDP實現的,并且是HTTP/3的所依賴的協議,那么,按照TCP/IP的分層來講,他是屬于傳輸層的,也就是和TCP、UDP屬于同一層。

如果更加細化一點的話,因為QUIC不僅僅承擔了傳輸層協議的職責,還具備了TLS的安全性相關能力,所以,可以通過下圖來理解QUIC在HTTP/3的實現中所處的位置。 

Google等國際大公司均開始支持的HTTP3到底是什么鬼?

接下來我們分別展開分析一下QUIC協議。先來看下他是如何建立連接的。

QUIC的連接立

我們知道,TCP這種可靠傳輸協議需要進行三次握手,也正是因為三次握手,所以需要額外消耗1.5 RTT,而如果再加上TLS的話,則需要消耗3-4個 RTT連接。

那么,QUIC是如何建立連接的呢?如何減少RTT的呢?

QUIC提出一種新的連接建立機制,基于這種連接接機制,實現了快速握手功能,一次QUIC連接建立可以實現使用 0-RTT 或者 1-RTT 來建立連接。 

Google等國際大公司均開始支持的HTTP3到底是什么鬼?
  • QUIC在握手過程中使用Diffie-Hellman算法來保證數據交互的安全性并合并了它的加密和握手過程來減小連接建立過程中的往返次數。
  • Diffie–Hellman (以下簡稱DH)密鑰交換是一個特殊的交換密鑰的方法。它是密碼學領域內最早付諸實踐的密鑰交換方法之一。DH可以讓雙方在完全缺乏對方(私有)信息的前提條件下通過不安全的信道達成一個共享的密鑰。此密鑰用于對后續信息交換進行對稱加密。
  • QUIC 連接的建立整體流程大致為:QUIC在握手過程中使用Diffie-Hellman算法協商初始密鑰,初始密鑰依賴于服務器存儲的一組配置參數,該參數會周期性的更新。初始密鑰協商成功后,服務器會提供一個臨時隨機數,雙方根據這個數再生成會話密鑰??蛻舳撕头掌鲿褂眯律牡拿荑€進行數據加解密。

以上過程主要分為兩個步驟:初始握手(Initial handshake)、最終(與重復)握手(Final (and repeat) handshake),分別介紹下這兩個過程。

初始握手(Initial handshake)

在連接開始建立時,客戶端會向服務端發送一個打招呼信息,(inchoate client hello (CHLO)),因為是初次建立,所以,服務端會返回一個拒絕消息(REJ),表明握手未建立或者密鑰已過期。 

Google等國際大公司均開始支持的HTTP3到底是什么鬼?

但是,這個拒絕消息中還會包含更多的信息(配置參數),主要有:

  • Server Config:一個服務器配置,包括服務器端的Diffie-Hellman算法的長期公鑰(long term Diffie-Hellman public value)
  • Certificate Chain:用來對服務器進行認證的信任鏈
  • Signature of the Server Config:將Server Config使用信任鏈的葉子證書的public key加密后的簽名
  • Source-Address Token:一個經過身份驗證的加密塊,包含客戶端公開可見的IP地址和服務器的時間戳。

在客戶端接收到拒絕消息(REJ)之后,客戶端會進行數據解析,簽名驗證等操作,之后會將必要的配置緩存下來。

同時,在接收到REJ之后,客戶端會為這次連接隨機產生一對自己的短期密鑰(ephemeral Diffie-Hellman private value) 和 短期公鑰(ephemeral Diffie-Hellman public value)。

之后,客戶端會將自己剛剛產生的短期公鑰打包一個Complete CHLO的消息包中,發送給服務端。這個請求的目的是將自己的短期密鑰傳輸給服務端,方便做前向保密,后面篇幅會詳細介紹。 

Google等國際大公司均開始支持的HTTP3到底是什么鬼?

在發送了Complete CHLO消息給到服務器之后,為了減少RTT,客戶端并不會等到服務器的響應,而是立刻會進行數據傳輸。

為了保證數據的安全性,客戶端會自己的短期密鑰和服務器返回的長期公鑰進行運算,得到一個初始密鑰(initial keys)。

有了這個初識密鑰之后,客戶端就可以用這個密鑰,將想要傳輸的信息進行加密,然后把他們安全的傳輸給服務端了。

 Google等國際大公司均開始支持的HTTP3到底是什么鬼?

另外一面,接收到Complete CHLO請求的服務器,解析請求之后,就同時擁有了客戶端的短期公鑰和自己保存的長期密鑰。這樣通過運算,服務端就能得到一份和客戶端一模一樣的初始密鑰(initial keys)。

接下來他接收到客戶端使用初始密鑰加密的數據之后,就可以使用這個初始密鑰進行解密了,并且可以將自己的響應再通過這個初始密鑰進行加密后返回給客戶端。

所以,從開始建立連接一直到數據傳送,只消耗了初始連接連接建立的 1 RTT

最終(與重復)握手

那么,之后的數據傳輸就可以使用初始密鑰(initial keys)加密了嗎?

其實并不完全是,因為初始密鑰畢竟是基于服務器的長期公鑰產生的,而在公鑰失效前,幾乎多有的連接使用的都是同一把公鑰,所以,這其實存在著一定的危險性。

所以,為了達到前向保密 (Forward Secrecy) 的安全性,客戶端和服務端需要使用彼此的短期公鑰和自己的短期密鑰來進行運算。

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

那么現在問題是,客戶端的短期密鑰已經發送給服務端,而服務端只把自己的長期密鑰給了客戶端,并沒有給到自己的短期密鑰。

所以,服務端在收到Complete CHLO之后,會給到服務器一個server hello(SHLO)消息,這個消息會使用初始密鑰(initial keys)進行加密。 

Google等國際大公司均開始支持的HTTP3到底是什么鬼?

這個CHLO消息包中,會包含一個服務端重新生成的短期公鑰。

這樣客戶端和服務端就都有了對方的短期公鑰(ephemeral Diffie-Hellman public value)。

這樣,客戶端和服務端都可以基于自己的短期密鑰和對方的短期公鑰做運算,產生一個僅限于本次連接使用的前向保密密鑰 (Forward-Secure Key),后續的請求發送,都基于這個密鑰進行加解密就可以了。

這樣,雙方就完成了最終的密鑰交換、連接的握手并且建立了QUIC連接。

當下一次要重新創建連接的時候,客戶端會從緩存中取出自己之前緩存下來的服務器的長期公鑰,并重新創建一個短期密鑰,重新生成一個初始密鑰,再使用這個初始密鑰對想要傳輸的數據進行加密,向服務器發送一個Complete CHLO 請求即可。這樣就達到了0 RTT的數據傳輸。

Google等國際大公司均開始支持的HTTP3到底是什么鬼?

所以,如果是有緩存的長期公鑰,那么數據傳輸就會直接進行,準備時間是0 RTT

以上,通過使用Diffie-Hellman算法協商密鑰,并且對加密和握手過程進行合并,大大減小連接過程的RTT ,使得基于QUIC的連接建立可以少到1 RTT甚至0 RTT。

以下,是Google官網上面的一張關于QUIC連接建立的流程圖,可以幫助大家理解這個過程。 

Google等國際大公司均開始支持的HTTP3到底是什么鬼?

另外,通過以上關于握手建立的過程,我們也可以知道,QUIC在整個過程中通過加解密的方式很好的保證了安全性。

多路復用

基于TCP的協議實現的HTTP有一個最大的問題那就是隊頭阻塞問題,那么,在這方面,QUIC是如何解決這個問題的呢?

TCP傳輸過程中會把數據拆分為一個個按照順序排列的數據包,這些數據包通過網絡傳輸到了接收端,接收端再按照順序將這些數據包組合成原始數據,這樣就完成了數據傳輸。 

Google等國際大公司均開始支持的HTTP3到底是什么鬼?

但是如果其中的某一個數據包沒有按照順序到達,接收端會一直保持連接等待數據包返回,這時候就會阻塞后續請求。這就發生了TCP隊頭阻塞。 

Google等國際大公司均開始支持的HTTP3到底是什么鬼?

類似于HTTP/2,QUIC在同一物理連接上可以有多個獨立的邏輯數據流,這些數據流并行在同一個連接上傳輸,且多個數據流之間間的傳輸沒有時序性要求,也不會互相影響。

數據流(Streams)在QUIC中提供了一個輕量級、有序的字節流的抽象化

QUIC的單個數據流可以保證有序交付,但多個數據流之間可能亂序。這意味著單個數據流的傳輸是按序的,但是多個數據流中接收方收到的順序可能與發送方的發送順序不同!

也就是說同一個連接上面的多個數據流之間沒有任何依賴(不要求按照順序到達),即使某一個數據包沒有達到,也只會影響自己這個數據流,并不會影響到到其他的數據流。 

Google等國際大公司均開始支持的HTTP3到底是什么鬼?

連接遷移

對于TCP連接的識別,需要通過服務器和客戶端過雙方的ip和端口四個參數進行的。在網絡切換的場景中,比如手機切換網絡,那么自身的ip就會發生變化。這就導致之前的TCP連接就會失效,就需要重新建立。

這種場景對于移動端設備普及的今天來說,還是比較頻繁的。

所以,在這一點上,QUIC進行了優化。

QUIC協議使用特有的UUID來標記每一次連接,在網絡環境發生變化的時候,只要UUID不變,就能不需要握手,繼續傳輸數據。

可靠性

TCP之所以被稱之為可靠鏈接,不僅僅是因為他有三次握手和四次關閉的過程,還因為他做了很多諸如流量控制、數據重傳、擁塞控制等可靠性保證。

這也是為什么一直以來都是以TCP作為HTTP實現的重要協議的原因。

那么,QUIC想要取代TCP,就需要在這方面也做出努力,畢竟UDP自身是不具備這些能力的。

TCP擁塞控制是TCP避免網絡擁塞的算法,是互聯網上主要的一個擁塞控制措施。經典的算法實現有很多,諸如TCP Tahoe 和 Reno、TCP Vegas、TCP Hybla、TCP New Reno、TCP Westwood和Westwood+以及TCP BIC 和 CUBIC等等。

QUIC協議同樣實現了擁塞控制。不依賴于特定的擁塞控制算法,并且提供了一個可插拔的接口,允許用戶實驗。默認使用了 TCP 協議的 Cubic 擁塞控制算法。

關于流量控制,QUIC提供了基于stream和connection兩種級別的流量控制,既需要對單個 Stream 進行控制,又需要針對所有 Stream 進行總體控制。

QUIC的連接級流控,用以限制 QUIC 接收端愿意分配給連接的總緩沖區,避免服務器為某個客戶端分配任意大的緩存。連接級流控與流級流控的過程基本相同,但轉發數據和接收數據的偏移限制是所有流中的總和。

弊端

以上,我們介紹了很多QUIC的相比較于TCP的優點,可以說這種協議相比較于TCP確實要優秀一些。

因為他是基于UDP的,并沒有改變UDP協議本身,只是做了一些增強,雖然可以避開中間設備僵化的問題,但是,在推廣上面也不是完全沒有問題的。

首先,很多企業、運營商和組織對53端口(DNS)以外的UDP流量會進行攔截或者限流,因為這些流量近來常被濫用于攻擊。

特別是一些現有的UDP協議和實現易受放大攻擊(amplification attack)威脅,攻擊者可以控制無辜的主機向受害者投放發送大量的流量。

所以,基于UDP的QUIC協議的傳輸可能會受到屏蔽。

另外,因為UDP一直以來定位都是不可靠連接,所以有很多中間設備對于他的支持和優化程度并不高,所以,出現丟包的可能性還是比較高的。

總結

下表是我總結的HTTP/2和HTTP/3的異同點,有一些本文介紹過,有一些個人認為并不是特別重要的,本文中并沒有提及,大家感興趣的可以自行學習下。 

Google等國際大公司均開始支持的HTTP3到底是什么鬼?

 

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2020-09-27 06:53:57

MavenCDNwrapper

2019-10-30 10:13:15

區塊鏈技術支付寶

2021-04-01 13:54:42

加密貨幣穩定幣比特幣

2020-12-15 10:49:14

HTTP2TCP

2016-10-21 09:58:19

WindowsKMSOEM系統

2016-11-02 07:25:02

科技新聞早報

2020-10-25 20:05:29

Pythonyield開發

2022-02-16 20:04:08

容器KubernetesShim

2021-08-13 10:16:49

等保合規網絡安全網絡攻擊

2024-12-12 14:52:47

OpenAI4o、o1產品

2010-01-25 10:27:59

國內IT業工資

2020-07-06 09:30:23

開源開發技術

2017-02-21 17:37:48

物聯網 Android Th Google

2020-03-05 10:28:19

MySQLMRR磁盤讀

2022-10-08 00:00:00

Spring數據庫項目

2009-03-25 09:45:15

美國軟件公司工作環境

2020-10-14 06:22:14

UWB技術感知

2020-09-22 08:22:28

快充

2010-11-01 01:25:36

Windows NT

2011-04-27 09:30:48

企業架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲午夜精品视频 | 国产精品色一区二区三区 | 日本爱爱视频 | 亚洲综合无码一区二区 | 欧美日韩国产一区 | 国产成人精品一区二区三区视频 | 亚洲 精品 综合 精品 自拍 | 中文字幕成人av | 宅男伊人| 一区二区三区欧美 | 第一区在线观看免费国语入口 | 最近最新中文字幕 | av在线播放网站 | 欧美性a视频 | 欧美色综合一区二区三区 | 久久精品二区 | 综合网中文字幕 | 久久久久久久久久久久久9999 | 在线欧美亚洲 | 久久久久久久久久影视 | 91免费在线视频 | 精品日韩一区二区 | 亚洲福利一区二区 | 欧美精品一区二区三区四区 在线 | 国产午夜精品久久久 | 国产日韩欧美中文字幕 | 你懂的在线视频播放 | 成人a免费 | 草草草影院| 国产精品av久久久久久毛片 | 国产精品久久久久久久久久免费看 | 国产精品美女久久久 | 精品欧美一区免费观看α√ | 国产欧美综合在线 | 亚洲免费视频在线观看 | 久久中文字幕av | 亚洲成年影院 | 激情五月婷婷综合 | 欧美女优在线观看 | 久久久久91| 一区二区三区四区av |