WebSockets UDP(或替代)擴展
該存儲庫旨在表達公眾對一種技術的需求,該技術可以實現伺服器-客戶端低延遲通信,而無需底層傳輸協議的強制可靠性和/或有序交付機制。
並根據現有需求和潛在的未來應用來制定要求。為了激勵 W3C 成員、IETF 社群和瀏覽器供應商開始討論並提出 RFC,以推動解決方案的進一步開發。
歡迎 PR 和問題中的討論。請轉發,歡迎轉發。
目錄
- 概述
- 問題
- 可能的解決方案
- 1. WebSockets UDP(或替代)擴展
- 2. WebUDP(或替代方案)-新的簡單 API
- 3.WebRTC 2.0 - 簡化
- 要求
- 安全
- 傳輸協定
- 公眾討論和需求
- 潛在的第一個適配器
概述
Web 在過去幾年中發展迅速,使用以下技術改進了網路功能: WebSockets、WebRTC、HTTP/2、伺服器發送事件、QUIC 。
這些技術有自己的應用領域,並使網路平台具有:
- 瀏覽器之間的語音和視訊通訊(WebRTC)
- 點對點資料交換 (WebRTC)
- 即時伺服器-客戶端通訊 (WebSockets)
- 更快的網站交付 (HTTP/2)
- 更快的連線和資料傳輸 (QUIC)
- 高效即時更新網站內容(伺服器發送事件)
以及更多豐富而強大的體驗
近年來另一種媒介誕生: HTML5遊戲。 Adobe Flash 正在消失,HTML5 遊戲產業正在穩步成長。
這導致了 IO Games 的誕生——這是最容易上手的多人遊戲之一。一些流行的例子:agar.io、slither.io 等等。它們都依賴於目前唯一可行的即時伺服器-客戶端通訊技術 - WebSockets。伺服器-客戶端的 WebRTC 過於複雜(進一步閱讀)。
但這限制了網路功能,因為遊戲的 TCP 也有限制。值得一提的是,這不僅與遊戲有關,還有大量低延遲、不可靠和無序伺服器-客戶端通訊的用例。
問題
延遲和擁塞。 TCP 具有可靠且有序的資料包傳輸,並且是基於連線的協定。相對於 TCP 的 UDP(或替代方案)的需求不存在問題,因為許多文章都廣泛討論了 UDP(或替代方案)在不同情況下相對於 TCP 的優勢。這裡我們只是嘗試總結一下。值得一提的是,UDP 是最受歡迎的,但不是唯一的傳輸協定選項。
可靠性- 應用程式邏輯並不總是需要這一點,過時的資訊可能不再相關並且可以被忽略。 TCP 將確保資料包的傳送,這會導致擁塞,從而由於需要確認和重新傳送資料包而導致延遲峰值。 UDP(或替代方案)不保證開箱即用的可靠性,因此可以避免擁塞問題,這可以用來確保盡快傳送最新資料。
有序傳送- TCP 使用排序和確認來保證資料包的有序讀取和重新傳送。這會導致阻塞讀取,從而導致延遲峰值,如果網路環境丟包率較高,情況會變得更糟。
可能的解決方案
協議不保證可靠性和開箱即用的有序交付,允許開發人員在需要時在其之上實施任何技術或使用混合方法。這可以在不太完美的網路環境中提供穩定的傳輸時間和低延遲。透過擁塞控制來緩解網路基礎設施不堪重負的情況,從而解決安全問題。
1. WebSockets UDP(或替代)擴展
解決此問題的選項之一是使用 RFC 6455 中描述的協商機制為現有 WebSockets 協定添加新的擴充功能。這將受益於現有的基於來源的 WebSocket 安全模型,並允許開發人員遵循漸進式方法,如果任何一方(伺服器或客戶端)不支援此類擴展,他們可以回退到 TCP 邏輯。
2. WebUDP(或替代方案)-新的簡單 API
另一種方法是開發全新的 API,與 WebSocket 非常相似,它將解決 UDP(或替代)網路邏輯的獨特功能,並可能為開發人員提供額外的功能,以及如何發送訊息的細粒度選項。
3.WebRTC 2.0 - 簡化
WebRTC 的當前狀態過於複雜,主要是為點對點通訊而設計的。由於這在伺服器-客戶端通訊中沒有得到很好的採用,並且需要大量的開發人員資源。簡而言之,它不像今天的 WebSocket 那樣對單獨的 Web 開發友好。擴展規範以模組化和簡化要求的潛在選項,允許使用 WebRTC 的某些部分,使其更易於伺服器用戶端場景使用,並簡化 API,使其更易於 Web 開發人員使用。
4. 網路傳輸
WebTransport API 的草案規範允許 Web 應用程式建立互動式、雙向、多路復用的網路連接 - 支援可靠且不可靠的通訊。
要求
- 安全
- 基於來源的安全模型- 防止 UDP(或替代)探測(連接埠掃描)並適合伺服器-客戶端網路模型。
- 伺服器-客戶端- p2p 已經由 WebRTC 解決,這項工作的目標是為伺服器-客戶端通訊場景找到簡單易用的解決方案。
- 使用簡單- WebSockets 的成功很大程度上是因為它在伺服器端實作起來很簡單,而且在瀏覽器中使用起來也很容易。
- 最小標頭開銷- 可能需要透過純 UDP(或替代方案)進行一些額外的資料幀,但必須保持在最低限度。
- 最低意見或技術要求- 當 WebSocket 最小時,WebRTC 會受到複雜性和要求的影響,因為這使得各種平台和 Web 開發人員能夠快速適應。
安全
此類 API 和底層協定實作應解決安全性問題,使其網路友善:
- DDoS 攻擊- 不暴露原始協定功能將利用類似於 WebSocket 的安全實踐。
- 連接埠掃描- 使用基於來源的安全模型將需要握手和驗證標頭,以防止連接到任何 IP 和連接埠的可能性。
- 加密- 利用 HTTP/HTTPS 的現有加密機制。
- 擁塞控制-為了避免網路基礎設施溢出,底層傳輸協定必須實施擁塞控制。
API 應該解決這些安全性問題,而不會讓前端的 API 以及後端的實作過於複雜。這就是為什麼 UDPSocket 不是一個選項。
傳輸協定
可用於實現的潛在底層協定清單:
- DCCP (RFC-4340) - 是基於連接的訊息協議,可實現功能協商和擁塞控制。它不實現可靠性或有序交付作為協議的一部分,將其留給應用層。該協定還具有基於 UDP 的 DCCP-UDP (RFC-6773) 實作路徑,以便在網際網路基礎設施原生支援 DCCP 之前利用具有 UDP 功能的現有 NAT。
- QUIC (IETF 草案)- 是 Google 實現的相當新的基於連接的傳輸層協議,並且已經在 Chrome 中可用。它是在 UDP 之上實現的快速發展和發展的協議。它旨在減少連接和傳輸延遲以及頻寬。儘管它具有內建的可靠性,但這對於當前的工作來說可能是不可取的。
- SCTP (RFC-4960) - 是基於標準化訊息的協議,具有可選的可靠性和內建的有序交付以及擁塞控制。它也用於 WebRTC 中的 DataChannel。由於 WebRTC 的採用,它可以為互聯網基礎設施和作業系統層級的實作提供更好的支援。
- DTLS (RFC-6347) - 是一個可以在傳輸協定之上實現的層,以提供安全性以滿足 Web 要求。 WebRTC 實作也使用它。
公眾討論和需求
- 黑客新聞 - 關於此存儲庫主題的討論。
- 為什麼我無法從瀏覽器發送 UDP 封包? - 詳細分析瀏覽器中使用 UDP 的原因並提出替代解決方案:netcode.io。作者:格倫費德勒。
- UDP 與 TCP - 哪種協定最適合遊戲?格倫·費德勒
- 駭客新聞:WebRTC:網頁遊戲的未來 (getkey.eu) - 討論為什麼 WebRTC 不是合適的替代方案。
- 全面深入了解客戶端-伺服器網頁遊戲的 WebRTC - 從文章中可以明顯看出 WebRTC 的複雜性以及實現的困難。由於其複雜性,主要瀏覽器供應商採用它的速度很慢。但 UDP 相對於 TCP 的網路優勢從文章中顯而易見。
潛在的第一個適配器
- http://agar.io/
- http://slither.io/
- 即時數據視覺化(時間至關重要)
- 各種 HTML5 多人遊戲(例如 http://iogames.space/)
- Facebook 即時遊戲
- 請公關您的案例