基于 P4 的 SCION -- 构建太比特的未来互联网
互联网流量正在每年以指数级增长,为了更高效的处理网络流量,各个组织都在开展下一代网络的研究和实验。特别是结合了 SDN、Segment Routing、带内遥测、应用感知等机制的技术和网络架构,得到了极大的关注。这篇文章介绍了欧洲 SIDN 实验室基于 P4 和 Intel Tofino 构建的 SCION 架构网络的实验,以一种灵活的、软件定义的方式,实现太比特速率的网络路由。原文链接:Future internet at terabit speeds: SCION in P4
作为 2STiC 项目[1]的一部分,我们一直在 SIDN 实验室评估和试验未来的互联网架构,其中正在研究的一个架构是 SCION[2]。SCION 代表的是下一代网络的可扩展性、可控制性和隔离性,由瑞士苏黎世联邦理工大学及其附属公司 Anapaya Systems 开发。SCION 的目标是通过安全的域间路由和路径感知网络实现一个安全、稳定和透明的互联网。之前我们介绍了 SCION[3](推荐还不熟悉 SCION 的读者阅读这篇介绍),并在视频演示[4]中展示了该技术的实际应用。在这篇文章中,我们会介绍基于 Intel Tofino 和 P4 实现的高速 SCION 路由器的原型。我们的目标是评估是否能利用 P4(一种网络设备编程语言)提供的灵活性,在硬件上直接运行 SCION 这样复杂的协议。
SCION
SCION 实现了路径感知网络。这意味着发送方可以在自治系统(ASs,autonomous systems)级别上选择流量通过互联网的路径。这个被选择的路径,称为转发路径,并且会被包含在每个包中。转发路径由若干个所谓的 hop 字段组成。一个 hop 字段包含一个特定 AS 如何转发数据包的指令。另外,hop 字段通过加密 MAC 的保护,以确保只使用被授权的路径。正如我们在之前的文章[3]中所解释的那样,一条路径最多可以由三个路径段组成,其中每个路径段都由多个 hop 字段组合而成。组合之后,不同路径段中的 hop 字段定义了数据包将要遵循的路径。因此,路由器不再需要存储巨大的路由表[5]来转发带有特定 IP 前缀的数据包。相反,它们只需要查看包中的当前 hop 字段来决定将其转发到哪里。
P4
P4[6]是一种用于在交换机和网卡等网络设备上处理数据包的领域特定语言(DSL,Domain Specific Language)。它允许为网络设备增加对新协议的支持。这样做的好处是,我们不再需要等待供应商实现新的协议,并且可以轻松地在硬件上试验新的协议。P4 可以用来对软件交换机进行编程,但我们使用 P4 在 Intel Tofino ASIC[7]上实现 SCION 交换机。
P4 中的一个关键概念是使用匹配操作表(match-action tables),这允许我们基于当前正在处理的包中所包含的值执行特定的操作。例如,在以太网中,我们匹配包中包含的目的 MAC 地址。根据查表结果,我们要么将数据包发送到一个特定的出口端口(如果匹配到了一个表项),要么将数据包发送到所有端口。在数据平面上可以以线速进行匹配,但是,添加和删除表项会比较慢,而且需要通过控制平面完成。
实现 SCION
加密的挑战
基于 SCION 协议规范,我们开发了一个 SCION 边界路由器,负责在相邻的 AS 之间转发数据包。我们的实现包含了多个组件:P4 实现本身和若干个控制平面组件(见图 1)。当我们为 Tofino 实现 SCION 协议时,主要的挑战在于 Tofino 芯片缺乏对加密操作的支持。由于 hop 字段包含一个加密的 MAC,我们需要对所处理的每个包执行一个加密操作。一种方案是将数据包转发到控制平面进行验证,但这个流程会非常慢,将对性能造成严重的限制。幸运的是,hop 字段只用于基本 SCION 协议中的几个包。我们在当前实现中用一个静态表记录当前所有有效的 hop 字段,通过这种变通方案,我们暂时可以解决 Tofino 缺乏加密支持的问题。通过该表,我们可以验证输入报文的 hop 字段:如果在表中存在,则 hop 字段有效;否则,就认为它无效,数据包将被丢弃。为了支持这个功能,我们修改了生成 hop 字段的 SCION 控制服务器,以便在交换机上注册生成的 hop 字段。我们还需要添加对所谓的单跳路径的支持,它用于与尚未建立路径的直连节点通信。为了建立连接,第一个包不包含接收网络的有效 hop 字段,而是依赖边界路由器添加相应的字段。由于我们不能在数据平面中生成 hop 字段,所以我们用单跳路径将传入的数据包转发到交换机的控制平面。在那里,一个正确的 hop 字段会被计算出来并被添加到表中,然后更新的数据包被返回到数据平面并正常处理。最后,有一个进程会定期检查表中过期的 hop 字段并删除它们。因为我们不能很容易地检查数据平面中 hop 字段包含的时间戳,因此我们通过控制平面删除过期的 hop 字段。
图 1:控制平面与数据平面的交互
如果我们采用 SCION 信标的默认设置,即信标间隔 5 秒,有效时间约为 6 小时,我们将需要存储每个上游路径和下游接口组合的约 4250 个 hop 字段。在同时支持 IPv4 和 IPv6 的情况下,我们目前可以存储大约 16 万个 hop 字段,而在只支持 IPv4 或 IPv6 的情况下,我们可以存储大约 20 万个 hop 字段。例如,在后一种情况下,我们可以支持 3 个上游路径和 15 个下游接口。在实践中,这将取决于所使用的信标策略和设置。请注意,因为我们还没有对当前实现进行优化,所以这里可能还有改进的空间,从而可以最大限度地提高 MAC 验证表的容量。另外,如果自治系统中有多个边界路由器,则支持的 hop 数量可能会更多。还要注意,这里我们没有考虑单跳路径,但是实际网络中不太可能有很多单跳路径,而且我们可以为单跳字段设置相对较短的过期时间。
对 SCION 报头的修改
当我们开始实现时,遇到了 SCION 协议头格式的几个问题,这使得在我们的硬件上实现它变得困难或效率低下。例如,转发路径的结构相当复杂。转发路径由嵌套的列表结构组成:第一级列表包含一个信息字段,每个信息字段后面跟着另一个包含 hop 字段的列表。然后对每个路径段重复这个结构。虽然该结构在软件中编程相当简单,但在硬件上直接实现时,所有资源都需要静态分配,这是一个很大的挑战。
另一个例子是,报头包含一个字段,该字段指示用于终端主机的地址类型,例如 IPv4 地址和 IPv6 地址。这些地址类型有不同的长度。数据包中只包含这些地址的类型,而不是长度,这就意味着终端主机之间的每个节点都需要知道地址类型。但是中间节点本来只需要知道地址的长度,因为它们本身并不处理地址。我们将这些和其他观察结果反馈给 SCION 团队,并提供建议的解决方案。这些解决方案随后包含在一个新版本的 SCION 报头中。例如,转发路径结构问题的解决方案是:首先包含不同分段的所有通用信息字段,然后列出所有 hop 字段。这使我们能够更有效地实现 SCION,并在路径中支持更多的 hop 字段。新旧路径布局设计如图 2 所示。
图 2:SCION 报头中转发路径的新旧布局
原型中实现的功能
我们已经实现了 SCION 的基本转发功能。然而,我们还不支持所有的 SCION 功能。例如,我们还没有添加对等或返回 SCMP 错误消息的支持、通过为 SCION 提供额外安全性和 QoS 的 EPIC 和 COLIBRI 扩展、绑定到单个包的 hop 字段中的加密 MAC。因此,对于这些数据包,我们将不再能够使用将完整的 hop 字段存储在表中以进行验证的方案。根据使用这些扩展的数据包的数量,可以采用将它们转发到交换机的控制平面进行验证的方案,或者转发到提供硬件加密支持的外部节点。
运行原型
我们首先在 Tofino 软件模型上进行测试,以验证其功能。一旦它可以工作,我们就知道在实际硬件上运行也不会问题。为了实际运行我们的系统,我们使用了 2STiC 试验台[8],该试验台由 P4 可编程设备组成,由位于荷兰的多个 2STiC 联盟合作伙伴部署。在我们的测试中,使用了三个 Edgecore Wedge 100BF-32X[9] 交换机,它有 32 个 QSFP28 端口,每个端口支持高达 100 Gbps 的传输速率。总的来说,每个交换机的最大吞吐量为 3.2 Tbps。另外,我们正在连接一个 APS Networks 的 BF2556X-1T[10]交换机,该交换机通过其 48 个 SFP28 和 8 个 QSFP28 端口提供 2.0 Tbps 的最大吞吐量。我们在一个小型网络拓扑上运行我们的系统,该网络由三个 SCION AS 组成,位于 2STiC 试验台的不同地点,并且正在连接第四个 AS(如图 3 所示)。在我们的测试中,每个 SCION AS 都包括上面的一个可编程交换机作为边界路由器,以及一个连接到相应交换机提供其他 SCION 服务的服务器。通过测试,我们展示了该系统在实际场景中的工作情况。今后将进行包括性能分析在内的更详细的评估。
图 3:在 2STiC 测试平台上的测试网络拓扑,包括一个尚未连接的附加 AS。其中,AS112 是隔离域的核心,包含所有 AS
结论
通过我们的实现,展示了 P4 和可编程网络设备的健壮性和灵活性,这允许我们在 ASIC 上直接运行 SCION 协议的实现。同时,我们已经证明可以在硬件上高速运行 SCION。
我们的实现已经在 Github 上开源[11]。未来的工作包括优化实现以提供更高的性能,以及添加额外的功能和试验对 SCION 扩展的支持,如 EPIC 和 COLIBRI。我们将在今后的文章中更详细地讨论我们的实现和经验教训。
致谢
感谢 SURF[12]为 2STiC 测试台提供物理基础设施。这项工作是 2STiC 研究计划的一部分,这是一个由 AMS-IX、代尔夫特理工大学、NDIX、NLnet 实验室、SIDN 实验室、SURF、阿姆斯特丹大学和特文特大学合作的项目。
Reference:
[2] https://www.scion-architecture.net/
[3] https://www.sidnlabs.nl/en/news-and-blogs/new-internet-infrastructures-an-introduction-to-scion
[4] https://www.sidnlabs.nl/en/news-and-blogs/a-practical-demo-of-scion-a-new-internet-architecture
[5] https://blog.apnic.net/2021/01/05/bgp-in-2020-the-bgp-table/
[6] https://p4.org/
[8] https://www.2stic.nl/national-programmable-infrastructure.html
[9] https://www.edge-core.com/productsInfo.php?cls=1&cls2=5&cls3=181&id=335
[10] https://www.aps-networks.com/products/bf2556x-1t/
[11] https://github.com/SIDN/p4-scion[12] https://www.surf.nl/
评论