技術編輯:徐九丨發自 北京
SegmentFault 思否報道丨公眾號:SegmentFault
近日,微軟在其技術社區官方博客宣佈,開源自己的內部 QUIC 庫 —— MsQuic。微軟表示,MsQuic 很快將成為旗下大多數產品的一部分,例如 Windows,.NET,Microsoft 365 等。
該技術也被國際互聯網技術和標準組織 IETF 認為有可能重塑未來的互聯網。
即將到來的 HTTP/3 和 QUIC
QUIC(Quick UDP Internet Connections,快速 UDP 網絡連接)是一種實驗性的網絡傳輸協議。從網絡層級來看,QUIC 是類似於 TCP,UDP 和 SPDY 的數據傳輸協議,目前正在由 Internet 工程任務組(IETF)進行標準化。
關於 QUIC 的研究始於 2010 年代初期,由 Google 率先進行的嘗試。當時 Google 希望創建一個更快,更強調性能的數據傳輸協議來代替 TCP/IP。
QUIC 借鑑了 TCP、UDP 和 TLS(用於加密)的原理和功能,在這個基礎上優化了傳輸的速度。QUIC 的數據傳輸從第一個數據包傳送(0-RTT)開始立即開始,從而減少了應用程序延遲時間。並且可以在數據量已滿時調整管理流程(擁塞控制),從而更快更安全。QUIC 協議在登錄成功、推拉流成功的耗時,大幅低於 TCP 協議,優化百分比在 30% 以上,極端場景甚至超過 90%。
2018 年,基於 QUIC 協議的 HTTP(HTTP over QUIC)也就是 HTTP/3,正式被確定為下一代網絡規範。
微軟的 MsQuic 戰略式推進
MsQuic 作為微軟開發的 C 語言庫,唯一目的是支持其產品內部的 QUIC 數據連接。目前已經支持 Windows 和 Linux 平臺(Microsoft 的某些雲基礎架構依賴於 Linux)。
微軟程序經理丹尼爾·哈維(Daniel Havey)表示,該庫將在微軟內部進行廣泛部署,作為 Microsoft 產品處理 QUIC 連接的主要方法。例如:
- Windows 將在內核中附帶 MsQuic,以支持各種收件箱功能;
- Windows HTTP/3 堆棧是基於 MsQuic 構建的;
- Microsoft 365 正在使用 HTTP/3 測試 IIS 的預覽版,以減少延遲;
- .NET Core 已在 MsQuic 的基礎上在 Kestrel 和 HttpClient 中構建了對 HTTP/3 的支持(在 .NET Core 5.0 版本的預覽中可用)。
- Windows中 的 SMB 還將以 MsQuic 用法作為原型。
“MsQuic 為許多重要的網絡場景帶來了性能和安全性改進。我們的在線服務受益於性能改進,例如減少尾部等待時間和更快的連接設置。我們的連接將能夠無縫切換網絡,因為它們可以承受 IP 地址/端口更改的影響。這等於是在我們的邊緣設備上獲得更好的用戶體驗。”
Havey 在近日發表的博客文章中說:“微軟是 QUIC 技術的積極參與者和推動者,因此將開源我們的項目作為行業參考。”
重塑未來的互聯網技術
不久前,國際電信聯盟 ITU-T 審議了有關“新 IP,塑造未來網絡”的提案。該提案支持,應以一種新的 IP 的方式重新設計互聯網。國際互聯網技術和標準組織 IETF 主席於 3 月 30 日發表聲明,對這一提案進行了回應,並提到了我們今天所說的 QUIC 技術。
IETF 主席表示,消除不必要的延遲是 IETF 和 ITU 長期共同關注的工程目標。IETF 在這個領域的研究歷史可以追溯到上世紀 90 年代,先後提出了多種技術,例如集成服務(IntServ),資源保留協議(RSVP),多協議標籤交換(MPLS),差異化服務(DiffServ)和主動隊列管理(AQM)。
在過去的五年中,又實現了更多新技術的進展:定向 HTTP、傳輸層安全(TLS)、QUIC、確定性網絡(DetNet),以及其他低延遲、低損耗、可擴展吞吐量(L4S)技術。
那些對網絡抖動、延遲和吞吐量等屬性有嚴格要求的應用程序如今已部署在互聯網上,同時並沒有使用設想的中的緊密跨層鏈接,而都是部署在現有協議和設計約束之下。這些應用程序,包括會議、增強現實和遊戲,都是為改進網絡協議的特性提供了市場動力。
IETF 正在多個領域中開展網絡組件或協議層次之間的協調工作。希望能滿足新型實時應用的需要,包括全息通信,而無需新的網絡體系結構。
HTTP/3 作為超文本傳輸協議的下一個主要迭代版本,目前僅被全球 3% 的互聯網網站所使用。但好消息是,微軟、谷歌等科技巨頭都表現出了濃厚的興趣並付出了實際的支持行動,結合 QUIC 協議深度優化信令服務,新形態的互聯網技術,可能不用等太久了。
MsQuic GitHub 地址:
https://github.com/microsoft/msquic