簡述
快速UDP網絡連接 ( Quick UDP Internet Connections),基于UDP的多路復用安全傳輸協議懈息。是由 Google 提出的實驗性網絡傳輸協議 歌豺,位于 OSI 模型傳輸層阻星。 QUIC 旨在解決 TCP 協議的缺陷,并最終替代 TCP 協議背镇, 以減少數據傳輸套耕,降低連接建立延遲時間,加快網頁傳輸速度上渴。
簡單來說QUIC就是UDP之上的快速握手+TLS+HTTP/2(流)
主要特點
多流控制設計;
低等待延遲喜颁;
加密性能更優(yōu)稠氮;
前向糾錯;
連接保持半开;
0-RTT
說到QUIC隔披,就不得不提0-RTT,QUIC的設置之初寂拆,就是為了減少http請求過程中握手的消耗锹锰。傳統(tǒng)的http基于tcp協議,每次創(chuàng)建連接漓库,都需要進行三次握手。對于很多短連接場景园蝠,這樣的握手延遲影響很大渺蒿,且無法消除。
stream
應用程序協議通過流(按字節(jié)順序排列)在QUIC連接上交換信息彪薛∶埃可以創(chuàng)建兩種類型的流:
雙向流怠蹂,允許兩個端點發(fā)送數據;
單向流少态,允許單個端點發(fā)送數據城侧。基于信任的方案可以用于限制流的創(chuàng)建并限制可以發(fā)送的數據量彼妻。
擁塞控制
TCP 的擁塞控制實際上包含了四個算法:慢啟動嫌佑,擁塞避免,快速重傳侨歉,快速恢復 屋摇。
相比于TCP,QUIC 協議當前默認使用了 TCP 協議的 Cubic 擁塞控制算法 [6]幽邓,同時也支持 CubicBytes, Reno, RenoBytes, BBR, PCC 等擁塞控制算法炮温。
從擁塞算法本身來看,QUIC 只是按照 TCP 協議重新實現了一遍牵舵,關于改進我們后面詳細深入了解柒啤。
安全性
QUIC默認支持TLS1.3版本,相比于TCP來說畸颅,TCP 協議頭部沒有經過任何加密和認證担巩,所以在傳輸過程中很容易被中間網絡設備篡改,注入和竊聽重斑。比如修改序列號兵睛、滑動窗口。這些行為有可能是出于性能優(yōu)化窥浪,也有可能是主動攻擊祖很。
QUIC 的 packet 可以說是武裝到了牙齒。除了個別報文比如 PUBLIC_RESET 和 CHLO漾脂,所有報文頭部都是經過認證的假颇,報文 Body 都是經過加密的。這樣只要對 QUIC 報文任何修改骨稿,接收端都能夠及時發(fā)現笨鸡,有效地降低了安全風險。
應用場景
HTTP3
5分鐘看懂HTTP3-InfoQ
SDK和支持
C/C++
Name | Version | Roles | Handshake | GitHub |
---|---|---|---|---|
Microsoft's MsQuic | draft-29/v1 | client, server | TLS 1.3 RFC | https://github.com/microsoft/msquic |
Facebook's mvfst | draft-29 | library, client, server | TLS 1.3 | https://github.com/facebookincu |
Rust
Name | Version | Roles | Handshake | GitHub |
---|---|---|---|---|
Cloudflare's quiche | draft-27, draft-28, draft-29 | library, client, server | TLSv1.3 (RFC8446) | https://github.com/cloudflare/quiche |
Mozilla/Firefox's Neqo | draft-27 through version 1 | library, client, server | TLS 1.3 | https://github.com/mozilla/neqo |
Quinn | draft-28 | library, client, server | TLS 1.3 | https://github.com/djc/quinn |
Go
Name | Version | Roles | Handshake | GitHub |
---|---|---|---|---|
quic-go | always the current draft | library, client, server | TLS 1.3 RFC | https://github.com/lucas-clemente/quic-go |
參考:RFC 9000: QUIC: A UDP-Based Multiplexed and Secure Transport (rfc-editor.org)