網絡共享

Android 13 中的更新

更新更多信息
引入 CrossDevice跨設備
引入分裂隧道拆分隧道

概述

Tethering 模塊與其他連接的客戶端設備共享 Android 設備的 Internet 連接,這些客戶端設備可以通過 Wi-Fi、USB、藍牙或以太網連接到 Tethering 設備。該模塊包括網絡共享組件(USB、Wi-Fi 接入點、藍牙等)及其依賴項(與網絡共享權利、 IpServeroffloadController的交互)。此模塊是可更新的,這意味著它可以接收正常 Android 發布週期之外的功能更新。

Tethering 模塊使整個 Android 生態系統中的 OEM 能夠使用具有以下優勢的單一標準參考實現。

  • 最終用戶在 Android 設備上獲得一致的體驗,並通過模塊更新修復互操作性問題。

  • OEM 可以滿足運營商的要求,同時還可以降低個性化定制的成本(因為他們不需要以不同的方式對相同的要求進行不同的實現)。

拆分隧道

為了支持拆分隧道用例,Android 13 添加了一個新 API 來指定排除路由。

拆分隧道是指某些流量通過 VPN 而其他流量不通過的配置。一個常見的例子是,組織希望一般網絡衝浪、帶寬密集型(例如,YouTube、Netflix)或延遲敏感的應用程序(例如, Office 365 )繞過 VPN。在拆分隧道可用之前, VpnService.Builder允許 VPN 客戶端指示只有一些子網應該路由到它(包括路由)。使用拆分隧道,您可以指定反向:將所有流量路由到 VPN,特定子網除外(排除路由)。

新拆分隧道 API 的簽名是:

public Builder excludeRoute(@NonNull IpPrefix prefix)

跨設備

在 Android 13 中引入的 CrossDevice 旨在提供使用標準協議的跨設備通信技術。它為設備發現、經過身份驗證的連接和其他跨設備體驗提供 API 和功能。

跨設備動機

  • 與 OEM 合作夥伴更緊密的合作。 OEM 可以將自己的帳戶密鑰系統與 CrossDevice 實現集成,而無需使用 Google 的解決方案。
  • 協議的更明顯的實現。 CrossDevice 模塊是開源的,為 CrossDevice 技術的實施提供了對實施細節的更多可見性和更好的隱私故事。

CrossDevice 模塊邊界

跨設備 APIpackages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
跨設備服務packages/modules/CrossDevice/service
  • NearbyService - 掃描 API

CrossDevice 封裝格式

該模塊的主要功能包含在 APEX 包中。資源打包在一個 APK 中。

跨設備依賴

CrossDevice 依賴於以下內容:

  • 無線上網
  • 藍牙
  • 超寬帶
  • modules-utils-preconditions
  • 原型庫

跨設備自定義選項

我們計劃允許 OEM 通過 RRO 自定義半張 UI。沒有定制功能的計劃。

跨設備測試策略

我們計劃添加 Android 兼容性測試套件 (CTS) 測試以驗證 CrossDevice 功能,並將跨設備測試添加到 MTS。

eBPF 網絡共享卸載

為了在不回复硬件卸載的情況下提供高速網絡共享,Android 11 提供了一種名為 eBPF 網絡共享卸載的網絡共享軟件卸載解決方案,用於 IPv6 下載(流量流向網絡設備)。

從 Android 12 開始,此功能(包括 eBPF 程序代碼)完全由 Tethering 模塊提供,該模塊支持以下功能:

  • IPv6 下載(流向系留設備的流量)
  • IPv6 上傳(來自連接設備的流量)
  • IPv4 TCP/UDP 上傳和下游(流量流入/流出綁定設備)
  • eBPF 卸載

此功能默認啟用,用戶可以通過 RRO 將config_tether_enable_bpf_offload配置覆蓋為 false。有關詳細信息,請參閱自定義

IPv4 和 IPv6 支持

Tethering 模塊支持 IPv4 和 IPv6 雙協議棧。

  • 對於 IPv4 網絡,模塊設置網絡地址轉換 (NAT),並採用動態主機配置協議 (DHCP) 進行 IP 地址分配。

  • 對於 IPv6 網絡,模塊採用 IPv6 無狀態地址自動配置 (SLAAC) 進行 IP 地址分配。

模塊邊界

對於 Android 12 及更高版本, packages/modules/Connectivity下的所有文件/文件夾都在 Tethering 模塊範圍內。

對於 Android 11 及更低版本,Tethering 模塊在packages/modules/Tethering中有以下 Android 10 文件。

  • frameworks/base/services/core/java/com/android/server/connectivity/Tethering.java
  • frameworks/base/services/core/java/com/android/server/connectivity/tethering/
  • frameworks/base/services/core/java/com/android/server/NetworkManagementService.java
  • frameworks/base/services/net/java/android/net/ip/{InterfaceController,IpServer,RouterAdvertisementDaemon}.java
  • frameworks/base/services/net/java/android/net/{netlink,dhcp}/*
  • frameworks/base/services/net/java/android/net/util/{InterfaceSet,InterfaceParams,NetdService,PrefixUtils,SharedLog,VersionedBroadcastListener}.java
  • frameworks/base/core/java/android/net/{ITetheringEventCallback,ITetheringStatsProvider}.aidl
  • frameworks/base/core/java/android/net/{NetworkUtils,util/IpUtils}.java
  • frameworks/base/core/java/com/android/internal/util/{BitUtils,IndentingPrintWriter,State,StateMachine}.java
  • frameworks/base/core/java/com/android/server/connectivity/MockableSystemProperties.java
  • frameworks/base/core/java/android/os/INetworkManagementService.aidl
  • frameworks/base/core/java/android/bluetooth/BluetoothPan.java
  • frameworks/base/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp
  • packages/apps/Settings/src/com/android/settings/wifi/tether/TetherService.java
  • packages/apps/Settings/src/com/android/settings/network/TetherProvisioningActivity.java

模塊格式

Tethering 模塊 ( com.android.tethering ) 採用 APEX 格式,可用於運行 Android 11 或更高版本的設備。

包括連接服務

從 Android 12 開始,實現 L3+ 連接的中心組件的ConnectivityService代碼被添加到 Tethering APEX。網絡共享的範圍擴展到連接模塊。

模塊依賴

Tethering 模塊具有以下依賴項:

  • 系統服務器中的公共和系統 API 方法
  • 穩定的 AIDL IPC 與系統服務器接口
  • tetheroffload HIDL(在hardware/interfaces/tetheroffload/中定義)
  • DHCP 服務器(網絡堆棧模塊的一部分)

定制

Tethering 模塊不支持自定義。

測試

Android 兼容性測試套件 (CTS) 驗證 Tethering 模塊的功能。