大多数浏览器和
Developer App 均支持流媒体播放。
-
使用 L4S 降低网络延迟
流媒体视频、多人游戏及其他实时体验都十分依赖于响应快速且延迟较低的网络。了解低延迟、低损耗、可扩展吞吐量 (L4S) 如何降低网络延迟并改善你的 App 整体体验。我们将向你展示如何使用 L4S 设置并测试你的 App、网络及服务器。
章节
- 0:00 - Welcome
- 1:18 - Discover the benefits of L4S
- 5:44 - Learn how L4S works
- 9:01 - Prepare your app
- 11:19 - Set up your server
- 12:31 - Configure test network and devices
资源
相关视频
WWDC22
-
下载
♪ ♪
Shawn:大家好 我是 Shawn 一名 Internet Technologies 团队的工程师 今天 我们将谈谈如何利用 L4S 降低 App 中的网络延迟 L4S 是低延迟、 低损耗及可扩展吞吐量的缩写 这项技术十分强大 它可以在网络延迟影响客户体验时 显著提高 App 的性能 以几个优点为例 它能缩短 App 内容加载时间 提高视频质量 带来更顺畅的用户协作体验
接下来 我们首先会深入了解一下 L4S 的工作机制 及其降低网络延迟的原理 接着 我们会介绍 如何为 L4S 准备 App 以及如何在服务器中启用 L4S 最后我们会谈谈配置 L4S 网络 以及测试 App 的步骤 首先 我们先来深入了解一下 L4S 的优势及其工作机制
对于依赖实时音频和视频 这类功能的 App 而言 繁忙的网络将带来极大的挑战 如果多台设备同时使用同一网络 那么在此类 App 中 便很容易出现高延迟和数据包丢失 举个例子 如果你和他人 正同时使用同一网络 并且他人正在观看电影 或下载视频游戏 那么你在视频通话中 便可能遇到延迟和视频停顿的问题 为了向你展示 L4S 在如此 糟糕条件下能够起多大的作用 我们制作了一个示例 App 用于在两个设备间进行视频通话 接下来 我会使用该示例 App 向你展示两次视频通话效果 一次不启用 L4S 另一次启用 L4S 在这两次通话中 我使用了相同的低带宽受限网络 与此同时 通话过程中 还有许多 其他设备在使用着同一网络 让我们来看看实际效果如何 你可以观察到 两次通话的视频质量 存在着明显差异 启用前 视频卡顿和延迟偶尔会出现 并且在移动过程中尤为明显 但在启用 L4S 后 视频流畅并且画面连贯 没有出现明显的延迟 现在 我们来分析一下 刚刚看到的视频通话 看看到底发生了什么? 在这个演示中 L4S 显著改善了 App 内 所有的关键网络指标 我们先来看一下视频通话期间 数据包往返的时间分布 往返时间越短 表明网络延迟越低 延迟性能越好 对于这类交互式 App 尾延迟尤为重要 因为该部分反映了 用户体验的最差情况 我们所使用的测试网络 最小往返时间为 20 毫秒 然而 在未启用 L4S 情况下 数据包往返时间长达 45 毫秒 但在启用 L4S 后 即便是在最糟糕的条件下 延迟也缩短了 50% 降至 25 毫秒以下
接下来 我们来看看丢包率 丢包率越低意味着 设备间的连接越可靠 在旧版本中 丢包率超过 40% 但在启用 L4S 后 视频通话中丢包率几乎微乎其微 这就意味着由于数据丢失而导致的 丢帧或停顿大大减少了 延迟和丢包率的改善可以直接转化为 视频通话渲染指标的提升 首先 我们来看看视频停顿百分比 较低的停顿百分比意味着 视频通话期间出现的停顿次数较少 在没有启用 L4S 的情况下 App 中会偶尔出现视频停顿 但在启用 L4S 后 视频停顿便可以忽略不计了
接下来 我们来看看 接收到的视频帧速率 接收到的视频帧速率越高、越稳定 意味着视频通话视觉效果 越丰富且越流畅 在启用 L4S 的情况下 接收到的视频帧速率 基本都超过了每秒 25 帧 但是在旧版本中 该值有时会降到每秒 0 帧 也就是视频完全停顿的情况 总而言之 即使是在受限的网络中 这些改善也能够为 客户创造更好的体验 你只需采用 L4S 便可为你的 App 带来同样的改善效果 现在 我们来看看 L4S 的工作机制是什么
由于 L4S 减少了排队 并降低了丢包率 我们才可以看到明显的改善效果 首先 我们来了解一下 网络中的队列是如何形成的 当数据包从 App 中发送出去 它会在抵达服务器前 经过多个网络跃点 而数据包所经过的一组跃点 便被称为网络路径
在网络路径中 如果你只能以最慢跃点所支持的速度 进行端到端的数据传输 这就被称为瓶颈 对于大多数人而言 瓶颈就是 互联网服务商所提供的连接 并且该连接处理数据包的最高速率 决定该条路径所支持的最大吞吐量 如果发送者超出了最大吞吐量 瓶颈处就会形成队列 从而导致后续数据包的延迟 在没有启用 L4S 的情况下 该队列就会继续增长 直到无法容纳更多的数据包为止 在此情况下 数据包就会发生丢失 延迟和吞吐量也会受到损害 而 L4S 则通过客户端、服务器 及瓶颈间的协作成功解决这个问题 在启用 L4S 时 客户端或服务器需要在发送数据包 同时发送协作解决网络拥塞的信号
为了实现这一目的 具备 L4S 的发送者会使用名为 Explicit Congestion Notification 的技术 也就是 ECN 在发送数据包时 发送者会在数据包的 IP 头部 用 ECN 位表示支持 L4S 当 L4S 跃点收到这些数据包 便会对其应用 L4S 队列管理
一旦瓶颈处开始形成队列 L4S 队列管理就会对数据包设置 不同 ECN 标签提示存在拥塞 这种标签表示网络在 将数据包转发至下一跃点之前 便已经存在拥塞 接收者在接收到这些数据包后 会对含拥堵标签的数据包进行统计 并将数字返回给发送者 发送者在接收到该数字之后 会利用该反馈了解网络的拥塞情况 然后根据瓶颈的拥塞程度 调整发送速率 以确保不超过最大吞吐量 借助发送速率的调整 发送者可以避免 在瓶颈处形成大型数据包队列 这就使得 L4S 在实现 吞吐量最大化的同时 保持较低的端到端延迟 接下来 我们来谈谈你如何才能 利用这种协作为用户带来上述优势 首先 我们先从你如何 为 L4S 准备 App 开始 在 URLSession 和 Network 框架中使用网络 API 是你在 App 中采用 L4S 的最佳方式 若你的 App 在这些框架使用 HTTP/3 或 QUIC 那么你的 App 便会自动内置 L4S 支持 你无需对 App 进行任何代码更改 或者 如果你的 App 使用 HTTP/2 或 TCP iOS 17 和 macOS Sonoma 则已内置了适用于基于这些协议的下载的 L4S 支持 由于这些方式无需修改任何代码 因此均可作为你将 L4S 支持 添加到 App 中的最佳方式 但如果你的 App 使用自定义协议 那么你就需要实现一些内容 使你的 App 支持 L4S RFC 9330 便是你了解 L4S 要求一个不错的出发点 接下来 你需要实现一些新的操作 例如 你的协议需要了解 来自网络的 L4S 拥塞反馈 并据此相应调整发送速率 为此 你需要实现一种 可扩展的拥塞控制算法 并保证只有在 网络允许 ECN 位通过时 App 才能发送 L4S 流量 因此 你还需要 实现 ECN 验证机制 以检查任何 可能干扰 ECN 的网络问题 例如 ECN 漂白 在你的 App 作为接收者时 你的协议还需具备中继机制 将网络 ECN 反馈返给发送者 如果你的实现基于网络框架 那么你便可利用 数据包元数据的 ECN 属性 在自定义协议中 实现 ECN 标志的发送和接收 如果你使用的是套接字 那么便可利用设置套接字选项 或使用发送和接收的系统调用 来发送和接收 ECN 标志
刚才我们介绍了 如何为 L4S 准备 App 现在来谈谈如何设置你的服务器 若你的 App 使用 QUIC 那你的服务器在实现 QUIC 部分 需支持 L4S 和 ECN 标记 服务器端实现 QUIC 的方式很多 联系你的服务器提供商 咨询如何启用 ECN 和 L4S 如果他们暂不支持 发送 L4S 流量 你仍可启用服务器的 ECN 来接收 L4S 流量 现在是鼓励他们 全力支持 L4S 的大好时机
若你的 App 使用 TCP 那你就要在服务器 实现 TCP 的部分 增加 L4S 支持 对于基于 Linux 的服务器 你可以按照该 GitHub 页面上的说明 为服务器添加支持 此外 你也可以在 与本视频相关项目的文章中 获取更多详细信息 对于其他服务器平台 你需要向服务器提供商进行咨询 因为支持 L4S 可能需要 额外的配置或更改 刚才我们介绍了为 L4S 设置 App 和服务器的方法 接下来 我们来谈谈如何设置 L4S 网络来测试你的 App 首先 我们先来回顾一下具备 L4S 功能的网络所需满足的条件 网络不得阻塞 ECN 标记 ECN 标记旨在发送者、 瓶颈及接收者之间传递网络信息 如果你的网络干扰 ECN 标记 那么 L4S 将无法正常工作 文档中提供了你可遵循的步骤 以及可供你验证网络 是否兼容 ECN 的其他工具 其次 网络瓶颈必须支持 L4S 队列管理 这点对于你能否享受 L4S 的优势极为重要 经过验证 如果你的网络与 ECN 兼容 那么你只需将 L4S 队列管理 添加至瓶颈处即可 如果你需要设置支持 L4S 队列管理的测试网络 最佳方式便是使用 Internet Sharing
在 macOS Sonoma 中 Internet Sharing 支持 L4S 队列管理 当设备加入由 Mac 和 Internet Sharing 创建的网络后 Mac 自身便会成为 设备和服务器之间 一个额外的网络跃点 若你将 Mac 配置为网络瓶颈 那么 Mac 便可对经过的流量 应用 L4S 队列管理 你可构建出完整的 L4S 网络 如果你需要在 macOS 中 启用 Internet Sharing 浏览系统设置中 Internet Sharing 窗格 点击展开按钮 选择共享接口 以及测试设备即将连接的接口
如果你需要 让 Mac 成为该网络的瓶颈 那么便需要对其带宽进行限制 在终端使用 ifconfig 命令、 共享接口和设备即将连接的接口 将该命令中的接口名称替换为 你正在使用的接口名称 例如 en1 然后 将你的测试设备加入网络 测试 App 并体验 L4S 的优势 如果你需要 取消 Mac 中的带宽限制 重新启动 或运行 ifconfig 命令 并将带宽改为 0 而非每秒 10 兆比特即可
iOS 17 和 macOS Sonoma 将逐步向随机用户推出 L4S 为确保你的测试设备已经开启 L4S 浏览 Developer Settings 并打开 L4S 在 macOS 中 你可以在测试前 运行该默认写入命令开启 L4S 如果你的网络 或服务器不支持 L4S TCP 和 QUIC 将 在旧模式下继续工作 但无论如何 你都应该开启 L4S 并对 App 进行测试 以发现任何可能存在的问题 如果你发现了任何问题 请使用反馈助理提供反馈信息 此外 文档还提供了 有关在 App 中 调试和测试 L4S 的有用信息 我很高兴目前的 各类 App 和网络都能够支持 L4S 以降低延迟及丢包率
无论你的网络是否支持 L4S 请即刻在 iOS 17 和 macOS Sonoma 中 对你的 App 进行测试吧 若你的 App 服务器尚未支持 L4S 那么你便可与服务器 或 CDN 提供商进行合作 启用 App 服务器中的 L4S 支持 如果你在 App 中启用 L4S 时 遇到任何问题 请使用反馈助理进行报告 感谢你的观看 我期待与你携手共同使用 L4S 构建出更加出色的 App ♪ ♪
-
-
14:38 - Throttle Internet Sharing
sudo ifconfig en1 tbr 10Mbps
-
15:36 - Turn on L4S
sudo defaults write -g network_enable_l4s -bool true
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。