Netstack3 - 由 Fuchsia 擁有的生鏽的 Netstack

  • 作者:ghanan@google.com、asafi@google.com
  • 專案主管:tamird@google.com
  • 區域:連線能力

問題陳述

目前的 Nettack 是以 Go 編寫而成,並非經過核准的語言 (且會經過垃圾收集),並由 gVisor 團隊擁有,而這些團隊在優先順序、用途和設計目標與 Fuchsia 不同。gVisor netstack 原本不是設計用來在實體裝置上執行、以路由器的形式運作或支援動態設定;另一隻手的 Fuchsia 是在實際裝置上執行,是以路由器的形式運作,且取決於動態設定 (gVisor 原先並未預期在執行階段變更地址、路徑、網路介面或連結狀態)。

解決方案陳述

透過開發 Fuchsia 團隊擁有的網路堆疊,我們即可以 Fuchsia 的目標做為設計目標,不需要依賴其他團隊,並處理其用途和限制。Fuchsia Netstack 團隊將設計及實作以 Rust 為基礎的 Netstack,藉此確保功能與現有 Netstack 的功能一致,同時運用 Rust 的類型和記憶體安全。

依附元件

所有使用者和元件都不應得知其底下的 netstack 切換。

風險與緩解措施

風險:

  • 網路堆疊的負載極高,因為所有工作流程和產品用途都須具備網路連線。
  • 與 netstacks 在其他平台 (Linux、BSD、Windows 等) 上的互通性。
  • 效能風險。我們還是無法預估 N3 效能來核實我們的標準。
  • 與 Posix 相容。

因應措施:

  • 使用業界標準工具/合作夥伴,確保符合 RFC 規範且互通性 (IxANVL、INTACT、NOVUS 研究室等)。
  • 運用 Netstack 和平台獨立測試,以現有 Netstack 和 Linux 的行為測試 Netstack3。
  • 評估網路堆疊 3 在疊代開發期間的效能。
  • 已逐步遷移至 Netstack3,我們的計畫會在 Netstack3 能運作時立即執行目前的 CI 工作負載。此外,在產品目標之前,將 eng/dev 目標轉換至 Netstack3。

netstack 團隊一直在規劃如何以可靠的方式測試 Netstack3,並確保與現有 Netstack 的一致性,避免在切換後發生迴歸問題;上述緩解措施就是團隊「目前正在執行」的例子。IxANVL 和 INTACT 工具不會假設基礎 Netstack 實作,上述測試也能更新,並在準備就緒後在 Netstack3 上執行。