网络共享

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

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 模块的功能。