由於 App 需要加快連線速度,於是我研究了 QUIC 網路傳輸層協議。基本上,我對底層技術不那麼有興趣,畢竟人家早已決定好,大家都在用且行之有年,開發者還有機會能改變什麼嗎?🤔
不過,倒是可以去了解為何會出現 QUIC,它之所以被發表出來,肯定有其時空背景所催。

QUIC (Quick UDP Internet Connections) 是 Google 提出的新一代傳輸層協定,QUIC 唸作 quick。這說明了整個協定只為了一個目的,盡可能從多個不同層面讓 QUIC 可以更快的建立連線,更快地開始傳送資料,以應對現代許多講求低延遲的應用場景,在試圖降低延遲的時候,往往 TLS + TCP 的限制會成為效能瓶頸。
TCP 協定因為多年的發展還有歷史包袱註定了這個技術不能改頭換面,解決一些設計之初沒有考慮到的缺陷,所以 QUIC 只能另尋他路,將整個協定建構在 UDP 之上。
首先來看 HTTP 發展時間軸,全局掌握前後關係,有圖示總是比較好理解與記憶。

QUIC (Quick UDP Internet Connections) 是一種新興的傳輸層協議,目的在改善網路傳輸的效率和性能。
隨著互聯網的發展,尤其是行動互聯網的加入,一方面網路變得越來越擁擠,另一方面人們對網路減少延遲的要求也越來越高。然而網路上圖片、影片等大資源也越來越多,音頻及視頻越來越普及,人們對網路傳輸的實時性要求更高,希望頁面瞬間能打開、視頻流暢不卡頓。近幾十年網路優化領域從業者都在致力於加速數據的網路傳輸的研究,終於在 2013 年,Google 向世界投下一顆驚雷:使用 QUIC 協議替代傳統的 TCP 協議,直至今天熱度依然很高。

緣由:
- 連接建立和握手效率:傳統的 TCP 協議需要進行三次握手和加密過程才能建立連接,這導致了延遲的產生。QUIC 使用了一個基於 UDP 的連接建立機制,可以在單個往返時間(RTT)內完成連接建立和安全握手,減少了延遲。
- 網路狀態切換的快速恢復:當用戶設備在 Wi-Fi 和行動網路之間切換時,TCP 的連接可能面臨重連和延遲的問題。QUIC 可以在網路狀態切換時快速恢復,避免了重新建立連接的時間浪費。
- 單連接多路徑:QUIC 支持在單個連接上進行多路徑傳輸,即同時在多個路徑上傳輸數據。這可以提高傳輸的可靠性和效率,並減少單一故障點的影響。
特點:
- 基於 UDP:QUIC 協議基於 UDP 而不是 TCP,這使得它能夠更好地應對網路狀態變化和延遲問題,並提供更快的連接建立速度。
- 效能優化:QUIC 採用了許多效能優化技術,例如,使用了0-RTT(零往返時間)連接重建、損壞快速恢復和應用層控制等,以提供更低的延遲和更高的吞吐量。
- 前向糾錯(Forward Error Correction):QUIC 引入了前向糾錯,可以在傳輸過程中對數據進行冗餘編碼,以容忍少量的丟包,從而減少了重傳的需求,提高了傳輸的效率。
- 安全性:QUIC 內置了傳輸層安全協議(TLS)支持,提供了端到端的加密和身份驗證,確保數據在傳輸過程中的安全性。

總結:QUIC 協議通過使用 UDP、優化連接建立和握手、支持多路徑傳輸等特點,提供了更高效和可靠的傳輸方案,旨在改善網路應用的性能和用戶體驗。
有什麼大廠使用 QUIC?
新的技術想要持續發展,肯定需要大廠來支持,不然就會消失於時間洪流之中。
Google 和 Facebook 旗下的 App 已大量使用 QUIC 進行通訊。那麼如今他們以及各大互聯網廠商都在 QUIC 上有哪些進展呢?
- Google:作為使用廣泛的行動作業系統 Android,其自帶瀏覽器組件 Webview 均預設支援 QUIC,Chrome 及其衍生瀏覽均支援 QUIC。還有一些和用戶生活連接緊密的 App 也會嘗試使用 QUIC,比如Youtube、Gmail、Google map、Google Play 等。這些在支援使用的場景下都會預設進行 QUIC 的傳輸。
- Facebook:Facebook、Messenger、Instagram、Whatsapp 等旗下較為知名的 App 和 Google 使用類似的 QUIC 策略。
- Apple:Apple 在 QUIC 上的策略沒有那麼激進,但已經將 QUIC 作為未來趨勢進行準備,包括 QUIC 上線所配套的 DoH 服務器。另外,蘋果已經在最新的 iCloud+ Private Relay 中使用了 QUIC 作為代理傳輸協議。
- Netflix:Netflix 是一個流媒體服務提供商,他們也在使用 QUIC 協議。QUIC 可以改善在 Netflix 平台上的影片流式傳輸,提供更好的播放性能和用戶體驗。
- Microsoft:微軟也在其產品和服務中開始採用 QUIC。他們使用 QUIC 來改進其在 Microsoft Edge 瀏覽器和 Azure 雲平台中的網絡傳輸效能。
- Cloudflare:Cloudflare 是一家網絡安全和性能優化公司,他們也開始使用 QUIC 協議。他們提供的CDN(Content Delivery Network)服務支持 QUIC,以提供更快速的內容傳遞和更低的延遲。
- Snapchat:跟隨著 Google 的腳步,這款較為風靡的聊天軟體,也大量使用了 QUIC。
- 互聯網廠商:快手、搜狐視頻主力使用 QUIC 傳輸視頻,目前是大陸推進最快的。微信、淘寶、愛奇藝、抖音、百度已在部分流量或者部分延遲場景下啟用 QUIC。使用 QUIC 逐漸成為互聯網廠商的潮流。
值得一提的是,QUIC 協議仍然處於不斷發展和演進的階段,更多的服務和公司正在採用它以提供更好的網路性能和用戶體驗。
—
那麼 App 可以怎麼做到支援 QUIC 呢?
什麼是 Cronet?
Cronet 是 Google 開發的一個開源網路庫,用於在 Android 和 iOS 平台上進行網路通訊。它提供了高性能的網路訪問能力,並支持多種協議,包括 HTTP、HTTPS 和 QUIC(Quick UDP Internet Connections)。
Cronet 的特點如下:
- 高性能:Cronet 設計旨在提供高性能的網路通訊能力。它使用了非阻塞的 I/O 模型和線程池等技術,以最大限度地減少網路操作的延遲,提供更快的網路訪問速度。
- 支持多種協議:Cronet 支持多種網路協議,包括傳統的 HTTP 和 HTTPS 協議,以及 Google 開發的QUIC 協議。QUIC 是一種基於 UDP 的傳輸層協議,旨在提供更快的連接建立和傳輸效能。
- 安全性支持:Cronet 提供了對於安全通訊的支持。它整合了安全傳輸層(TLS)協議,可以確保數據在傳輸過程中的安全性和保密性。
- 輕量級和可定制:Cronet 是一個輕量級的庫,可以方便地集成到應用程式中。它提供了豐富的 API 和配置選項,開發人員可以根據應用程式的需求進行定制和配置。
- 快取和預取功能:Cronet 提供了快取和預取的功能,可以減少重複的網路請求和數據傳輸量,提高應用程式的效能和用戶體驗。
總結:Cronet 是一個高性能、多協議支持的網路庫,旨在提供快速且安全的網路通訊能力。它適用於Android 和 iOS 平台上的應用程式開發,可以幫助開發人員優化網路訪問的效能和功能。
因為我在開發 Flutter App,想要一次搞定 iOS 和 Android,於是就搜尋到 package:cronet。閱讀原始開發人員的文章,知道其已經做到的項目內容。
原本網路通訊是使用 dart:io,若要支援 QUIC,那就得改用 package:cronet。

原始開發成員文章寫道,有些 Issue 未來要解決:
Future of package:cronet
10 weeks aren’t the end of the package:cronet. We have few (non exhaustive) future plans that we want to talk about.
- Having Async callback support in Dart FFI will help us remove the wrapper code.
- Reducing the application size.
- Addressing the issues with package distribution (e.g. providing binaries and having both dart run and flutter run capabilities in native plugins).
- Adding network request prioritization feature.
- Covering all of dart:io APIs and introducing most requested community features (if feasible).
- Discovering how we can migrate dart:io based packages (e.g. package:http) to cronet based ones.
原以為第三方套件 package:cronet 可以取代 Flutter 內建 dart:io。
我研究時,這個套件 2021/11/15 至今不再更新,也許專案已經被放棄了!?
此刻,相依套件 ffi 已經更新到 2.0.2,但這套件還停留在使用 1.1.2,當初遇到 ffi 尚無法進行非同步回調,似乎就得不到解決。
我實際整合進來,遇到問題⋯⋯
- iOS 無法編譯
- Android 可以編譯,包版 APK 檔案大小多 40MB,安裝開啟會 Crash。
96.8MB -> 135.9MB
也許要我要用原生 iOS 和 Android 來整合!?😐
此外,可以再詳細了解一下一些相關專有名詞~
傳輸層安全性(TLS)是什麼?
傳輸層安全性(Transport Layer Security,TLS)是一種用於保護網路通訊安全的協議。它是在傳輸層(Transport Layer)上提供安全性的機制,用於加密和驗證在網路上的數據傳輸。
TLS 的主要目的是確保通訊的機密性、完整性和身份驗證。它通過以下方式實現這些目標:
- 加密:TLS 使用對稱密鑰和非對稱密鑰的組合來加密通訊數據。在通訊過程中,TLS 協議將使用雙方之間協商的對稱密鑰來加密數據,以防止第三方窺視或修改數據。
- 數據完整性:TLS 使用消息摘要算法(如哈希函數)來生成數據的數字簽名。接收方可以驗證數字簽名以確保數據在傳輸過程中未被篡改。
- 身份驗證:TLS 使用公開密鑰加密(PKI)基礎設施來實現身份驗證。服務器通常會使用數字憑證來證明其身份,而客戶端可以驗證這些憑證以確定與之通訊的服務器的真實性。
TLS 的常見應用場景包括:
- 安全網頁傳輸(HTTPS):TLS 被廣泛用於保護網路瀏覽器和網站之間的數據傳輸,確保用戶在訪問網站時的隱私和安全。
- 電子郵件安全:TLS 可用於保護電子郵件傳輸,確保郵件在發送和接收過程中的安全性。
- 虛擬私人網路(VPN):TLS 可用於建立安全的 VPN 連接,確保用戶在通過公共網路訪問私有網路時的安全性。
總結,TLS 是一種保護網路通訊安全的協議,它提供了加密、數據完整性和身份驗證等機制,確保通訊的隱私和安全。它被廣泛用於保護網路應用程式中的數據傳輸。
TLS 和 SSL 之間有什麼區別?
TLS(Transport Layer Security)和 SSL(Secure Sockets Layer)是兩種用於保護網路通訊的協議,它們在設計和發展上有一些區別。
- 起源:SSL 是最早的安全通訊協議,於 1995 年首次推出。隨著時間的推移,SSL 的演進發展為 TLS,TLS 1.0 於 1999 年發布。因此,TLS 實際上是 SSL 的繼任者,TLS 的版本從 TLS 1.0 開始,最新的版本是 TLS 1.3。
- 安全性:TLS 被認為是 SSL 的安全和改進版本。TLS 在安全性方面做出了一些改進和增強,包括更強的加密算法、更嚴格的驗證流程和更好的防護機制。
- 握手過程:TLS 和 SSL 之間的主要區別之一是在握手過程中的差異。TLS 的握手過程更加嚴格和安全,包括更嚴格的證書驗證和密鑰交換方法。
- 支持的協議版本:SSL 和 TLS 支持的協議版本也有所不同。SSL 支持的版本主要是 SSL 1.0、SSL 2.0和 SSL 3.0。TLS 則支持更多的版本,從 TLS 1.0 到 TLS 1.3,每個版本都有不同的安全和性能改進。
- 開源性:TLS 相對於 SSL 具有更開放和開源的特點。TLS 的協議標準和規範可以由 IETF(Internet Engineering Task Force)進行開發和公開審查,而 SSL 則由一個私有組織負責發展和管理。
儘管有這些區別,但是在日常使用中,人們通常使用 SSL 和 TLS 這兩個術語來指稱加密和安全的網路通訊,因為它們的目的和功能基本上是相同的。
TLS 和 HTTPS 有什麼區別?
TLS(Transport Layer Security)和 HTTPS(Hypertext Transfer Protocol Secure)是兩個不同的概念,涉及到網路通訊和網站安全。
- TLS:TLS 是一種協議,用於在網路通訊中提供安全性。它是在傳輸層(Transport Layer)上運行的,用於加密和驗證數據的傳輸,確保通訊的機密性、完整性和身份驗證。TLS 使用加密和數字簽名等機制,防止第三方窺視或修改數據。
- HTTPS:HTTPS 是一種網站協議,它使用 TLS 協議來實現網站的安全通訊。HTTPS 是在標準的 HTTP 協議上添加了 TLS 的安全性功能。通常,當用戶訪問一個使用 HTTPS 的網站時,瀏覽器和網站之間的通訊將使用 TLS 進行加密,確保用戶和網站之間的數據安全。
簡而言之,TLS 是一種協議,用於提供網路通訊的安全性,而 HTTPS 是一種使用 TLS 協議保護網站通訊的方式。HTTPS 使用 TLS 對網站的數據進行加密,確保用戶與網站之間的通訊是安全的。
需要注意的是,儘管 TLS 和 HTTPS 提供了對網路通訊的保護,但它們僅確保了數據在傳輸過程中的安全性,並不能保證網站本身的安全性。網站的安全性還涉及到其他因素,如服務器的安全配置、應用程式的漏洞等。
參考:
- Google:將推動QUIC成為網路標準
- 臉書大部分流量皆已使用新協定QUIC和HTTP/3
- Flutter Package – cronet
- package:cronet, an HTTP Dart/Flutter package with dart FFI
- HTTP/3 傳輸協議 – QUIC 原理簡介
- Introducing QUIC support for HTTPS load balancing
- 【Day 02】HTTP/3, QUIC 簡介
- QUIC 協議是幹嘛的?
- Cronet網絡協議選擇之HTTP2與QUIC的競速
- QUIC is a transport protocol
- 揭開“QUIC”的神秘面紗
隨意留個言吧:)~