Supercharge WebRTC: Accelerate TURN Services with eBPF/XDP

WebRTC依赖于全面的 NAT traversal protocol suite,其中最重要的是 TURN,以实现客户端与 NAT 和防火墙后的媒体服务器之间的互联。 随着住宅公共 IP 地址的消失,这些大规模 TURN 服务已成为 WebRTC 应用程序不可或缺的组成部分。 传统上,TURN 服务器是以multi-protocol user-space packet relays的形式实现的,资源消耗巨大。 本文提出了一种 eBPF/XDP 卸载引擎,以提高 TURN 服务器的性能。

Introduction

(因为RTC我不是很理解,所以这边放一些论文中的原文)

如今,视频会议(Google Meet、MS Teams、Discord)和云游戏(GeForce NOW)已成为我们日常生活的一部分。 大多数此类实时通信(RTC)服务都依赖于 WebRTC,这是一种用于在 Web 浏览器中处理实时媒体(如音频、视频)的广泛 API。 此外还有一系列传统协议,其中大部分是从 IP 语音(VoIP)中采用的,用于在互联网上传输媒体。

越来越多的用户通过一层或多层网络地址转换器(NAT)连接到 WebRTC 服务。 然而,作为 VoIP 的不幸遗产,WebRTC 媒体通信需要对等设备之间的直接连接。 为此,IETF 标准化了一整套 NAT traversal协议,并在浏览器和服务器端 WebRTC 框架中实施,以帮助客户端traverse NAT。 客户端和服务器使用 ICE(Interactive Connectivity Establishment,交互连接建立)协商连接参数,交换可能允许它们连接的候选 IP 地址和 UDP/TCP 端口对列表。ICE 候选者反过来又通过一组额外的协议获得;例如,STUN(Session Traversal Utilities for NAT)允许对等方在最外层的 NAT 层 "打洞",在某些幸运的情况下,这可能允许他们直接连接。当所有尝试都失败时,WebRTC 客户端和服务器会退回到 TURN(Traversal Using Relays around NAT,[16]),通过公共代理服务器中继流量。TURN 服务在 WebRTC 之外也有广泛应用,如 VPN [4]、桌面流媒体、游戏服务器等。