对于搭载 Android 12 或更高版本的设备,Android 支持 5G 网络切片,即使用网络虚拟化将单个网络连接划分为多个不同的虚拟连接,以便为不同类型的流量提供不同数量的资源。借助 5G 网络切片,网络运营商可以将一部分网络专门用于为特定客户群提供特定功能。Android 12 引入了以下 5G 企业网络切片功能,网络运营商可以向其企业客户提供这些功能
面向完全受管理设备的切片企业设备
对于向员工提供完全受管理的公司设备的企业,网络提供商可以为其提供一个或多个有效的企业网络切片,公司设备上的流量将路由到这些切片。从 Android 12 开始,Android 允许运营商通过 URSP 规则提供企业切片,而不是通过 APN 设置切片。
面向具有工作资料的设备的企业商务应用切片
对于使用工作资料解决方案的企业,Android 12 允许设备将工作资料中所有应用的流量路由到企业网络切片。企业可以通过设备策略控制器 (DPC)启用此功能。
工作资料解决方案提供企业所需的自动身份验证和访问控制级别,以确保只有来自工作资料中企业应用的流量才能路由到企业网络切片。工作资料中的应用无需进行修改即可显式请求企业网络切片。
5G 网络切片在 AOSP 中的工作原理
Android 12 通过添加到 AOSP 中电话代码库和网络共享模块中的内容来支持 5G 网络切片,从而纳入网络切片所需的现有连接 API。
Android 电话平台提供 HAL 和电话 API,以支持基于核心网络代码提出的网络请求和调制解调器中的 5G 切片功能进行切片。图 1 描述了 5G 网络切片功能的组件。
图 1. AOSP 中的 5G 网络切片架构。
电话和连接平台支持
- 将切片类别的网络请求转换为流量描述符,然后将其传递到调制解调器,以进行 URSP 流量匹配和路由选择
- 如果企业网络切片不可用,则回退到默认网络
- 将工作资料下所有应用的流量路由到相应的连接
支持企业切片
- 检测设备上是否存在工作资料
- 检查企业 IT 管理员使用的 DPC 提供的权限或路由方向
核心网络服务包括对 Android 12 中网络共享模块的以下更改
- 将大多数
android.net.*
公共或系统 API 类添加到网络共享模块 扩展网络共享模块边界以包含
f/b/core/java/android/net/…
f/b/services/net/…
f/b/services/core/java/com/android/server/connectivity/…
f/b/services/core/java/com/android/server/ConnectivityService.java
f/b/services/core/java/com/android/server/TestNetworkService.java
将 VPN 代码移出网络共享模块
Android 12 将具有以下功能的代码移至网络共享模块
- 接收来自应用的对网络连接的请求
- 接收来自系统的请求(例如,“将这些应用放在企业切片上”;在 Android 12 中引入)
- 将来自系统的请求发送到电话代码,电话代码尝试通过 HAL API 和调制解调器设置网络或切片
- 告知 netd 如何按应用路由流量(在 Android 12 中引入)
- 通过
ConnectivityManager
API(例如NetworkCallback
、getActiveNetwork
、getNetworkCapabilities
)告知应用其网络流量发生了什么。
实现
为了在设备上支持 5G 切片,设备必须具有支持 IRadio 1.6 HAL 的调制解调器,该调制解调器具有 setupDataCall_1_6
API。此 API 设置数据连接,并包含以下参数以支持 5G 切片
trafficDescriptor
:指定发送到调制解调器的流量描述符sliceInfo
:指定用于 EPDG 到 5G 切换的网络切片信息matchAllRuleAllowed
:指定是否允许使用默认的匹配所有 URSP 规则。对于默认网络,电话将其设置为 true,但对于切片则不设置为 true。匹配所有规则应用于默认网络。当应用请求不可用的特定切片时,该特定切片将报告为不可用。对于企业应用,如果企业网络不可用,电话框架可以回退到默认网络。
调制解调器还必须实现 getSlicingConfig
API,除非 getHalDeviceCapabilities
API 报告不支持该 API。
企业要求
以下描述了企业在 Android 企业部署中的设备上使用 5G 网络切片的要求。
- 确保完全受管理或使用工作资料设置的员工设备是支持 5G SA 的,并且调制解调器支持
setupDataCall_1_6
API。 - 与运营商合作伙伴协作,进行切片设置和性能或 SLA 特征分析。
在通过工作资料设置的设备上启用 5G 切片
对于通过工作资料设置的设备,默认情况下,AOSP 中 5G 网络切片处于关闭状态。要启用网络切片,企业 IT 管理员可以通过 EMM DPC 基于每位员工打开或关闭工作资料应用流量到企业网络切片的路由,EMM DPC 使用 setPreferentialNetworkServiceEnabled
方法(在 Android 12 中引入)和 DevicePolicyManager
(DPM) API。
具有自定义 DPC 的 EMM 供应商必须集成 DevicePolicyManager
API,以支持企业客户。
URSP 规则
本部分包含有关运营商为不同切片类别(包括企业、CBS、低延迟和高带宽流量)配置 URSP 规则的信息。为不同切片类别配置 URSP 规则时,运营商必须使用以下 Android 特有值。
ID | 值 | 说明 |
---|---|---|
OSId | 97a498e3-fc92-5c94-8986-0333d06e4e47 |
Android 的 OSId 是使用命名空间 ISO OID 和名称“Android”生成的版本 5 UUID。 |
运营商必须为每个切片流量配置 URSP 规则,并将流量描述符组件设置为“OS Id + OS App Id 类型”。例如,“ENTERPRISE”切片的值必须为 0x97A498E3FC925C9489860333D06E4E470A454E5445525052495345
。此值是 OSId、OSAppId 的长度 (0x0A
) 和 OSAppId 的串联。如需详细了解流量描述符组件类型,请参阅3GPP TS 24.526 表 5.2.1。
下表描述了不同切片类别的 OSAppId 值。
切片类别 | OSAppId | 说明 |
---|---|---|
企业 | 0x454E5445525052495345 |
OSAppId 是字符串“ENTERPRISE”的字节数组表示形式 |
企业 2 | 0x454E544552505249534532 |
OSAppId 是字符串“ENTERPRISE2”的字节数组表示形式 |
企业 3 | 0x454E544552505249534533 |
OSAppId 是字符串“ENTERPRISE3”的字节数组表示形式 |
企业 4 | 0x454E544552505249534534 |
OSAppId 是字符串“ENTERPRISE4”的字节数组表示形式 |
企业 5 | 0x454E544552505249534535 |
OSAppId 是字符串“ENTERPRISE5”的字节数组表示形式 |
CBS | 0x434253 |
OSAppId 是字符串“CBS”的字节数组表示形式 |
PRIORITIZE_LATENCY | 0x5052494f524954495a455f4c4154454e4359 |
OSAppId 是字符串“PRIORITIZE_LATENCY”的字节数组表示形式 |
PRIORITIZE_BANDWIDTH | 0x5052494f524954495a455f42414e445749445448 |
OSAppId 是字符串“PRIORITIZE_BANDWIDTH”的字节数组表示形式 |
URSP 规则示例
下表显示了企业、CBS、低延迟、高带宽和默认流量的 URSP 规则示例。
企业 1
Android 12 及更高版本支持企业 1。以下是 ENTERPRISE1 流量的 URSP 规则示例
URSP 规则 #1(企业 1) | |
---|---|
优先级 | 1 (0x01) |
流量描述符 #1 | |
OS Id + OS App Id 类型 | 0x97A498E3FC925C9489860333D06E4E470A454E5445525052495345 |
路由选择描述符 #1 | |
优先级 | 1 (0x01) |
组件 #1:S-NSSAI | SST:XX SD:YYYYYY |
组件 #2:DNN | 企业 |
路由选择描述符 #2 | |
优先级 | 2 (0x02) |
组件 #1:DNN | 企业 |
企业 2
Android 13 及更高版本支持企业 2。以下是 ENTERPRISE2 流量的 URSP 规则示例
URSP 规则 #2(企业 2) | |
---|---|
优先级 | 2 (0x02) |
流量描述符 #1 | |
OS Id + OS App Id 类型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534532 |
路由选择描述符 #1 | |
优先级 | 1 (0x01) |
组件 #1:S-NSSAI | SST:XX SD:YYYYYY |
组件 #2:DNN | 企业 2 |
路由选择描述符 #2 | |
优先级 | 2 (0x02) |
组件 #1:DNN | 企业 2 |
企业 3
Android 13 及更高版本支持企业 3。以下是 ENTERPRISE3 流量的 URSP 规则示例
URSP 规则 #3(企业 3) | |
---|---|
优先级 | 3 (0x03) |
流量描述符 #1 | |
OS Id + OS App Id 类型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534533 |
路由选择描述符 #1 | |
优先级 | 1 (0x01) |
组件 #1:S-NSSAI | SST:XX SD:YYYYYY |
组件 #2:DNN | 企业 3 |
路由选择描述符 #2 | |
优先级 | 2 (0x02) |
组件 #1:DNN | 企业 3 |
企业 4
Android 13 及更高版本支持企业 4。以下是 ENTERPRISE4 流量的 URSP 规则示例
URSP 规则 #4(企业 4) | |
---|---|
优先级 | 4 (0x04) |
流量描述符 #1 | |
OS Id + OS App Id 类型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534534 |
路由选择描述符 #1 | |
优先级 | 1 (0x01) |
组件 #1:S-NSSAI | SST:XX SD:YYYYYY |
组件 #2:DNN | 企业 4 |
路由选择描述符 #2 | |
优先级 | 2 (0x02) |
组件 #1:DNN | 企业 4 |
企业 5
Android 13 及更高版本支持企业 5。以下是 ENTERPRISE5 流量的 URSP 规则示例
URSP 规则 #5(企业 5) | |
---|---|
优先级 | 5 (0x05) |
流量描述符 #1 | |
OS Id + OS App Id 类型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534535 |
路由选择描述符 #1 | |
优先级 | 1 (0x01) |
组件 #1:S-NSSAI | SST:XX SD:YYYYYY |
组件 #2:DNN | 企业 5 |
路由选择描述符 #2 | |
优先级 | 2 (0x02) |
组件 #1:DNN | 企业 5 |
CBS
Android 13 及更高版本支持 CBS。以下是 CBS 流量的 URSP 规则示例
URSP 规则 #6 (CBS) | |
---|---|
优先级 | 6 (0x06) |
流量描述符 #1 | |
OS Id + OS App Id 类型 | 0x97A498E3FC925C9489860333D06E4E4703434253 |
路由选择描述符 #1 | |
优先级 | 1 (0x01) |
组件 #1:S-NSSAI | SST:XX SD:YYYYYY |
组件 #2:DNN | cbs |
路由选择描述符 #2 | |
优先级 | 2 (0x02) |
组件 #1:DNN | cbs |
低延迟
Android 13 及更高版本支持低延迟。以下是 LOW_LATENCY 流量的 URSP 规则示例
URSP 规则 #7(低延迟) | |
---|---|
优先级 | 7 (0x07) |
流量描述符 #1 | |
OS Id + OS App Id 类型 | 0x97A498E3FC925C9489860333D06E4E47125052494f524954495a455f4c4154454e4359 |
路由选择描述符 #1 | |
优先级 | 1 (0x01) |
组件 #1:S-NSSAI | SST:XX SD:YYYYYY |
组件 #2:DNN | 延迟 |
路由选择描述符 #2 | |
优先级 | 2 (0x02) |
组件 #1:DNN | 延迟 |
高带宽
Android 13 及更高版本支持高带宽。以下是 HIGH_BANDWIDTH 流量的 URSP 规则示例
URSP 规则 #8(高带宽) | |
---|---|
优先级 | 8 (0x08) |
流量描述符 #1 | |
OS Id + OS App Id 类型 | 97A498E3FC925C9489860333D06E4E47145052494f524954495a455f42414e445749445448 |
路由选择描述符 #1 | |
优先级 | 1 (0x01) |
组件 #1:S-NSSAI | SST:XX SD:YYYYYY |
组件 #2:DNN | 带宽 |
路由选择描述符 #2 | |
优先级 | 2 (0x02) |
组件 #1:DNN | 带宽 |
默认
URSP 规则 #9(默认) | |
---|---|
优先级 | 9 (0x09) |
流量描述符 #1 | |
匹配所有 | 不适用 |
路由选择描述符 #1 | |
优先级 | 1 (0x01) |
组件 #1:S-NSSAI | SST:XX SD:YYYYYY |
测试
要测试 5G 网络切片,请使用以下手动测试。
要设置设备以进行测试,请执行以下操作
确保 URSP 策略配置有非默认规则,该规则与企业类别匹配,并且相应的路由选择描述符将企业类别映射到企业切片;以及将流量定向到默认互联网切片的默认规则。
确保设备上配置了工作资料。
选择通过 DPC 使用网络切片
要测试 5G 网络切片行为,请执行以下操作
- 验证是否已建立与企业切片的 PDU 会话(例如,通过使用特定 IP 地址),以及工作资料中的应用是否使用该 PDU 会话。
- 验证是否已建立与默认互联网切片的单独 PDU 会话,以及个人资料中的应用是否使用该 PDU 会话。
5G 切片向上销售
5G 切片向上销售功能从 Android 14-QPR1 开始提供,让运营商可以通过 5G 网络切片向用户提供增强的网络功能(延迟和带宽)。
5G 切片向上销售功能使用来自运营商权利服务器的 TS.43 响应来驱动购买流程。运营商可以使用该响应来指定运营商购买 WebView 的网址、向 WebView 发送其他数据,并指示切片是否已在运营商网络上预配和可用。
运营商可以使用运营商配置自定义 5G 切片向上销售功能的行为,这些配置控制是否可以提出购买请求、何时允许应用请求高级功能,以及电话框架等待来自用户或网络的响应的时间。
5G 切片向上销售功能提供了一个名为 DataBoostWebServiceFlow
的接口,以允许 Android 和运营商 WebView 之间进行通信。
图 2 显示了 5G 切片向上销售购买流程
图 2. 5G 切片向上销售购买流程。
TS.43 权利流程
当用户请求增强的网络功能时,电话框架会请求所请求的高级服务的权利配置。如果 TS.43 响应有效,则电话框架会使用 HTTP 响应中的字段来驱动购买请求。
切片购买字段
TS.43 权利配置包括以下切片购买字段
- 权利状态
键:
EntitlementStatus
类型:
int
支持的值:
0
(已停用)、1
(已启用)、2
(不兼容)、3
(正在预配)、4
(已包含)- 预配状态
键:
ProvStatus
类型:
int
支持的值:
0
(未预配)、1
(已预配)、2
(不可用)、3
(正在进行中)
电话框架使用权利状态和预配状态的组合来确定当前的切片购买状态。结果可以是以下之一
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS
PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED
PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR
如果权利状态为 1
(已启用)且预配状态为 0
(未预配),则电话框架会向用户显示向上销售通知,以通过运营商 WebView 购买加速服务。下表描述了电话框架对于预配和权利状态值的不同组合的行为。
预配状态 | |||||
---|---|---|---|---|---|
未预配 (0 ) |
已预配 (1 |
不可用 (2 ) |
正在进行中 (3 ) |
||
权利状态 | 已停用 (0 ) |
失败 | 失败 | 失败 | 失败 |
已启用 (1 ) |
显示 WebView | 已购买 | 已购买 | 正在进行中 | |
不兼容 (2 ) |
失败 | 失败 | 失败 | 失败 | |
正在预配 (3 ) |
运营商错误 | 运营商错误 | 正在进行中 | 正在进行中 | |
已包含 (4 ) |
运营商错误 | 已购买 | 已购买 | 运营商错误 |
服务流程字段
TS.43 响应指定了网址、用户数据和内容类型,以自定义运营商购买 WebView 行为。如果未指定内容类型,则网址将作为 GET 请求加载。如果用户数据存在,则会将其附加到网址作为查询参数(例如,https://www.android.com?encodedValue=Base64EncodedUserData
);如果不存在,则网址将按原样使用(例如,https://www.android.com
)。
如果在 JSON 或 XML 格式中指定了内容类型,则网址将作为 POST 请求加载,并且用户数据(如果以 Base 64 格式编码,则会解码)将作为 POST 请求的数据发送。
- 网址
键:
ServiceFlow_URL
类型:
String
示例:
"https://www.android.com"
- 用户数据
键:
ServiceFlow_UserData
类型:
String
示例:
"encodedValue=Base64EncodedUserData"
- 内容类型
键:
ServiceFlow_ContentsType
类型:
String
支持的值:
0
(未指定)、1
(JSON)、2
(XML)
运营商配置
以下是可用于自定义 5G 切片向上销售功能行为的运营商配置。
KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY
受支持的高级功能列表。这是一个
TelephonyManager.PremiumCapability
的 int 数组。这些高级功能与对应的NetworkCapabilities.NetCapability
类共享相同的值。如果请求了高级功能,但未包含在此配置中,则购买请求将失败,并返回CARRIER_DISABLED
结果。在 Android 14 中,仅支持
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY
。KEY_PREMIUM_CAPABILITY_MAXIMUM_DAILY_NOTIFICATION_COUNT_INT
每天向用户显示购买向上销售通知的最大次数。如果达到每日最大次数,则不会显示向上销售通知,并且购买请求(包括权利服务器请求)将被限制到次日午夜。在达到每日最大次数后发出的购买请求将失败,并返回
PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
结果。KEY_PREMIUM_CAPABILITY_MAXIMUM_MONTHLY_NOTIFICATION_COUNT_INT
每月向用户显示购买向上销售通知的最大次数。如果达到每月最大次数,则不会显示向上销售通知,并且购买请求(包括权利服务器请求)将被限制到下个月的第一天。在达到每月最大次数后发出的购买请求将失败,并返回
PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
结果。KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING
当用户点击向上销售通知时向其显示的备用运营商购买网址。如果在权利服务器的 TS.43 响应中找不到购买网址,则会改为使用此值。如果 TS.43 响应或运营商配置中的网址均无效,则购买请求将失败,并返回
PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED
结果。KEY_PREMIUM_CAPABILITY_SUPPORTED_ON_LTE_BOOL
是否允许在设备连接到长期演进 (LTE) 时购买高级功能。如果为
true
,则可以在 LTE 和新无线电 (NR) 上发出购买请求。如果为false
,则只能在 NR 上发出购买请求,并且在 LTE 上发出的请求将失败,并返回PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE
结果。KEY_PREMIUM_CAPABILITY_NOTIFICATION_DISPLAY_TIMEOUT_MILLIS_LONG
在自动取消之前向用户显示购买向上销售通知的时间量。当通知被取消时,后续请求将被限制,并失败,并返回
PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
结果。KEY_PREMIUM_CAPABILITY_NOTIFICATION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG
由于超时或用户取消而导致失败后,后续购买请求应被限制的时间量。如果用户未在
KEY_PREMIUM_CAPABILITY_NOTIFICATION_DISPLAY_TIMEOUT_MILLIS_LONG
指定的超时时间内点击购买向上销售通知,或者他们取消或关闭通知,则此退避计时器将启动。在此计时器处于活动状态时,购买请求将失败,并返回PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
结果。KEY_PREMIUM_CAPABILITY_PURCHASE_CONDITION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG
由于运营商或网络原因导致失败后,后续购买请求应被限制的时间量。如果权利检查失败、网址不可用或运营商购买网址指示失败,则此退避计时器将启动。在此计时器处于活动状态时,购买请求将失败,并返回
PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
结果。KEY_PREMIUM_CAPABILITY_NETWORK_SETUP_TIME_MILLIS_LONG
网络必须在多长时间内为购买高级功能设置切片配置。在此期间,后续购买请求将被阻止,并返回
PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP
结果。如果网络未能及时设置切片配置,应用可以再次请求购买高级功能。无论用户是否向运营商付款,电话都不会认为购买已完成,直到发送相应的切片配置为止。
Javascript 接口
当用户点击网络加速通知时,将向用户显示带有运营商购买网址的 WebView
对象。运营商可以使用 DataBoostWebServiceFlow
Javascript 接口中提供的 API 在其购买网站上与切片购买应用进行通信。
运营商网站可以通过 getRequestedCapability()
方法获取请求的高级功能。
如果购买成功,运营商网站必须通过 notifyPurchaseSuccessful()
或 notifyPurchaseSuccessful(duration)
通知切片购买应用,其中 duration
是一个可选参数,指示切片的预期持续时间。
如果购买不成功,运营商网站必须通过方法 notifyPurchaseFailed(code, reason)
通知切片购买应用,其中 code
是指示失败原因的失败代码,reason
是失败代码未知时,可供用户理解的失败原因。
如果未调用这些响应方法中的任何一种,则购买将不会被视为已完成,并且购买请求最终将超时。
以下是运营商网站可以返回以指示购买失败的有效失败代码
FAILURE_CODE_UNKNOWN
FAILURE_CODE_CARRIER_URL_UNAVAILABLE
FAILURE_CODE_AUTHENTICATION_FAILED
FAILURE_CODE_PAYMENT_FAILED
FAILURE_CODE_NO_USER_DATA
购买完成后,运营商必须使用 PRIORITIZE_LATENCY
切片更新用户的设备的 URSP 规则。