Netstack3 - 基于 Fuchsia 的基于 netstack

  • 作者:ghanan@google.com、asafi@google.com
  • 项目负责人:tamird@google.com
  • 领域:连接性

问题陈述

当前的 netstack 使用 Go 编写,这种语言不是经过批准的语言(进行垃圾回收),归 gVisor 团队所有,这些团队的优先级、用例和设计目标与 Fuchsia 不同。gVisor netstack 最初并非设计为在真实设备上运行、作为路由器运行,也不支持动态配置;另一方面,Fuchsia 的确可以在真实设备上运行,像路由器一样运行并依赖于动态配置(gVisor 最初不要求地址、路由、网络接口或其链接状态在运行时发生变化)。

解决方案声明

通过开发由 Fuchsia 团队拥有的网络堆栈,我们可以根据 Fuchsia 的目标进行设计,而不必依赖其他团队并解决其用例和限制。Fuchsia Netstack 团队将设计和实现基于 Rust 的网络堆栈,该网络堆栈与现有网络堆栈实现同等功能,同时利用 Rust 的类型和内存安全性。

依赖项

所有用户和组件都应该不知道它们下面的 netstack 切换方式。

风险和缓解措施

风险:

  • netstack 承载了极大的负载,因为所有工作流和产品用例都依赖于网络连接。
  • 与其他平台(Linux、BSD、Windows 等)上的网络堆栈的互操作性。
  • 性能风险。我们仍然无法估算 N3 性能来验证我们是否相等。
  • Posix 兼容性。

缓解措施:

  • 使用行业标准工具/合作伙伴(IxANVL、INTACT、NOVUS 实验室等)确保 RFC 合规性和互操作性。
  • 利用 netstack 和独立于平台的测试,通过现有 netstack 和 Linux 的行为测试 Netstack3。
  • 衡量 Netstack 3 在迭代开发期间的性能。
  • 分阶段迁移到 Netstack3,计划在 Netstack3 能够胜任时立即开始运行当前 CI 工作负载。此外,先将 eng/dev 定位到 Netstack3,然后再定位到产品定位。

netstack 团队一直在规划如何可靠地测试 Netstack3,并确保与现有 netstack 等效,以避免在切换时出现回归问题;上述缓解措施示例说明了该团队目前正在做的工作。IxANVL 和 INTACT 工具不会对底层 netstack 实现做出假设,上述测试可以更新为在准备就绪后也可在 Netstack3 上运行。