DEEP DIVE: WEBTRANSPORT

WebTransport 详解:HTTP/3 时代的低延迟双向通信

WebSocket 有一个结构性的局限:所有数据都被塞进同一条 TCP 流。构建在 QUIC(HTTP/3)之上的新一代浏览器 API,即 WebTransport,用「多路复用的流」与「数据报(datagram)」这两件武器,试图突破这一局限。本文以与 WebSocket 的差异、与 WebRTC DataChannel 的分工为主线,详细讲解 WebTransport。

WebSocket 的局限:为什么一条流不够用

WebSocket 建立在一条 TCP 连接之上,是浏览器与服务器之间双向通信的标准手段。TCP 是一种高可靠的协议,能保证数据「按发送顺序、一字不漏地」送达,但这份保证本身恰恰也是 WebSocket 的软肋。TCP 在逻辑上是一条单一的字节流,无论在 WebSocket 上承载了多少条相互独立的消息,底层传输的实体始终只有一根管道。只要途中丢失一个数据包,TCP 就会把这个包之后的所有字节都扣在手里,直到丢失的包被重传并送达为止,才会一并交给应用层。这就是队头阻塞(Head-of-Line Blocking,HoL)。如果聊天消息、游戏状态更新、文件传输共用同一条 WebSocket 连接,一次偶然的丢包就会把它们全部一起拖住。

WebSocket 还有一个更根本的问题:它完全没有「主动放弃可靠性」这个选项。像在线游戏中玩家的坐标、实时语音的音频帧这类数据,哪怕丢掉一些也无所谓,只要最新的值能以最快速度送达,反而是重传和严格的顺序保证在拖后腿。一个过时的坐标即便被重传送达,如果此时更新的坐标早已发出,这次重传也毫无意义。然而建立在 TCP 之上的 WebSocket,并没有「主动牺牲可靠性以换取更低延迟」这个调节旋钮,应用层只能被迫等待自己根本不需要的重传。WebTransport,一个构建在 HTTP/3 之上的全新 API,正是针对这一结构性局限给出的答案。

WebTransport 是什么:构建在 HTTP/3(QUIC)之上的浏览器 API

WebTransport 是由 IETF 与 W3C 共同推进标准化的协议与浏览器 API,构建在 HTTP/3 及其底层传输协议 QUIC 之上。QUIC 最初由 Google 开发,并在 IETF 完成标准化,其最大的特点是运行在 UDP 之上而非 TCP。UDP 本身既不保证可靠性也不保证顺序,但 QUIC 在其上自行实现了流的多路复用、重传、拥塞控制与加密,从而在不继承 TCP 结构性缺陷的前提下,实现了与 TCP+TLS 相当的可靠性。WebTransport 正是把 QUIC 这些能力直接暴露给浏览器端 JavaScript 的 API。

  • 基于 UDP 的多路复用:在操作系统与网络设备看来,QUIC 的多条流全都属于同一个 UDP 连接,但每条流实际上是独立管理的,因此某条流上发生丢包并不会影响其他流。QUIC 从根本上就不存在 TCP 那种「所有数据共用一根管道」的结构,队头阻塞问题在传输层这一层就被彻底消除了。
  • 0-RTT 快速重连:若要重新连接此前已经连接过的服务器,QUIC 可以复用此前会话的信息,从第一个数据包起就直接发送数据(0-RTT),无需像 TCP+TLS 握手那样等待多轮往返。
  • 连接迁移(Connection Migration):TCP 连接由 IP 地址与端口号这一组合来标识,因此从 Wi-Fi 切换到蜂窝网络导致 IP 地址变化时,连接就会中断。QUIC 则用一个逻辑上的连接 ID 来标识连接,因此即便 IP 地址发生变化,也能保持同一个连接不中断地继续通信。
  • 内置 TLS 1.3:QUIC 从设计之初就把加密作为协议的必要组成部分,而非事后附加的可选项。其握手往返本身就与 TLS 握手融为一体,因此规范上根本不存在「未加密的 QUIC 连接」这种东西。

三种通信模式:流与数据报的取舍

WebTransport 与 WebSocket 最大的不同,在于可以根据用途选择通信的性质。在同一个连接内部,可以同时开启三种性质各异的通信通道。

双向流(Bidirectional Stream)
可靠且保证顺序的、类似 TCP 的通信通道。可以在同一个连接内同时开启多条,并且每条流都独立管理,因此某条流上发生丢包不会阻塞其他流。适合文件传输、API 请求这类「必须确实送达、且顺序不能错」的数据。
单向流(Unidirectional Stream)
与双向流一样保证可靠性与顺序,但传输方向固定为单向。适合服务器向客户端持续推送、且不需要回复的数据流,例如日志或事件通知。
数据报(Datagram)
既不保证可靠性也不保证顺序,性质接近原始 UDP 数据包的通信单元。既不重传也不重新排序,因而延迟被压到最低。但它并非完全脱离 QUIC 的管控:拥塞控制(根据网络拥堵情况调整发送速率)是在整个 QUIC 连接层面统一进行的,因此数据报会与该连接上的其他流公平地共享带宽。

取舍的直觉很简单:必须确实送达的数据放到流上发送,只有最新值才有意义、旧值被重传反而添乱的数据放到数据报上发送,大方向基本不会错。玩家的位置坐标、语音帧这类数据,既然知道下一次更新马上就会到来,与其等待丢失的那一份重传,不如直接放弃它、等待下一次更新,实际体感延迟反而更低。而聊天消息、道具拾取事件、比分结算通知这类一条都不能丢的数据,则应毫不犹豫地放到双向流上发送。能够在同一个 WebTransport 会话中,按用途同时使用这两种截然不同的通信方式,正是它最大的优势所在。

WebSocket、WebTransport、WebRTC DataChannel 对比

维度WebSocketWebTransportWebRTC DataChannel
传输层TCPQUIC(基于 UDP 的 HTTP/3)SCTP over DTLS over UDP
多路复用无(仅一条流)有(多条流独立管理)有(多个通道独立管理)
可靠性的选择始终可靠(无法选择)可按用途在流/数据报之间选择每个通道可分别配置可靠性与顺序
连接形态客户端–服务器客户端–服务器以点对点(P2P)为主要设计目标
NAT 穿透 / 信令与普通 HTTP 相同,无需与普通 HTTP 相同,无需需要NAT 穿透(ICE/STUN/TURN)与信令服务器

与 WebRTC DataChannel 的关系:分工而非竞争

WebTransport 与 WebRTC DataChannel 常被拿来比较,因为二者都提供了可选择可靠性的低延迟数据传输。但与其说二者相互竞争,不如说它们所面向的通信形态本就不同。WebRTC 的设计初衷是让浏览器之间直接进行点对点的数据交换,为此需要通过信令(signaling)交换双方的候选连接地址,还需要借助NAT 穿透(ICE/STUN/TURN)在双方各自处于不同 NAT 之后的情况下打通一条直连路径,这一整套搭建成本并不算小。相比之下,WebTransport 采用的是直截了当的客户端–服务器模型:像发起普通 HTTPS 连接一样,直接连接服务器的 URL 即可,既不需要信令,也不需要协调 NAT 穿透。

这一差异直接影响了诸如P2P 元宇宙这类系统的架构选择。如果目标是玩家之间直接交换数据的全网状(full-mesh)点对点拓扑,那么生态已经相对成熟的 WebRTC DataChannel 是自然的选择。反过来,如果架构是大量客户端与单一权威服务器(或中继服务器)通信、由服务器统一负责状态同步与 AOI(兴趣区域)管理的客户端–服务器模型,那么无需信令开销、可直接搭建在 HTTP/3 基础设施之上的 WebTransport,在实现与运维上都会更加简洁。实际系统中,将二者混合使用也完全可行:玩家之间的直接交换用 WebRTC,与权威服务器的同步用 WebTransport,二者可以并存于同一套系统之中。

主要应用场景

  • 云游戏:在保证操作输入与游戏状态回传低延迟的同时,把控制数据作为独立于音视频流的通道单独处理。
  • 直播:在低延迟传输音视频分片的同时,把观众的弹幕、互动这类双向数据整合进同一条连接。
  • 实时协同编辑:文档的操作变更(operation)必须完整送达,因此走双向流;而光标位置这类频繁更新、且更看重及时性的数据则走数据报。
  • IoT 遥测:在保持较低连接建立开销的前提下(得益于 0-RTT),高效收集大量传感器设备断续发送的测量数据。
  • 元宇宙状态同步:玩家位置、姿态这类高频且不断被新值覆盖的数据走数据报,道具拾取、聊天消息这类不允许丢失的事件走流,这一设计思路与 WebTransport 的两种通道类型天然吻合。

面临的挑战与现状

  • 标准化仍在推进中:WebTransport 正由 IETF 与 W3C 共同推进标准化,核心协议与 API 的大体轮廓已逐渐稳定,但部分相关规范长期处于草案阶段,规范细节今后仍可能发生变化,需要持续跟进。
  • 浏览器实现存在差异:主流浏览器的实现正在稳步推进,但支持程度与具体行为细节仍有差异,正式上线前必须在目标浏览器上充分验证实际行为。
  • 应对屏蔽 UDP 的网络环境:企业网络、部分移动网络等限制甚至直接屏蔽 UDP 流量的场景并不罕见。为了让通信在这类环境下依然可用,业界也在另行探讨基于 HTTP/2、提供与 WebTransport 相当语义的回退(fallback)方案。
  • 服务端生态尚显年轻:相较于 WebSocket,支持 QUIC/HTTP/3 与 WebTransport 的服务端实现、配套库以及运维经验的积累仍在发展之中,与现有基础设施集成时需要更充分的验证。

相关页面

回到 WebSocket 详解重新审视队头阻塞这一根源问题,能让 WebTransport 试图解决的困境变得更加清晰。在点对点之间直接打通路径的另一种选择是 WebRTC DataChannel,相关内容见NAT 穿透详解;而二者之间的取舍,则直接决定了P2P 元宇宙这类对实时性要求极高的应用的架构设计。

返回首页