对于搭载 Android 12 或更高版本的设备,Android 提供对 5G 网络切片的支持,也就是使用网络虚拟化将单个网络连接划分为多个不同的虚拟连接,这些虚拟连接可为不同类型的流量提供不同的资源量。借助 5G 网络切片,网络运营商能够将网络的一部分专门用于为特定的细分客户群提供特定功能。Android 12 引入了以下 5G 企业网络切片功能,网络运营商可以为其企业客户提供这些功能:
适用于全代管式设备的企业设备切片
对于向员工提供全代管式公司设备的企业,网络服务提供商可以为他们提供一个或多个有效的企业网络切片,公司设备上的流量会路由到这些企业网络切片。从 Android 12 起,Android 支持运营商通过 URSP 规则提供企业切片,而不是通过 APN 设置切片。
适用于具有工作资料的设备的企业应用切片
对于使用工作资料解决方案的企业,Android 12 支持设备将工作资料中所有应用的流量路由到企业网络切片。企业可以通过设备政策控制器 (DPC) 启用此功能。
工作资料解决方案提供了一种自动级别的身份验证和访问权限控制机制,企业需要利用这种机制,才能确保只有工作资料中企业应用的流量会路由到企业网络切片。工作资料中的应用无需进行修改,即可明确请求企业网络切片。
5G 网络切片在 AOSP 中的运作方式
Android 12 通过向 AOSP 中的电话代码库以及网络共享模块添加内容,使之包含网络切片所需的现有连接 API,来支持 5G 网络切片。
Android 电话平台提供 HAL API 和电话 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 中引入)
- 通过
NetworkCallback
、getActiveNetwork
和getNetworkCapabilities
等ConnectivityManager
API 告知应用其网络流量的情况。
实现
为了在设备上支持 5G 切片,设备必须具有支持 IRadio 1.6 HAL 的调制解调器,此 HAL 具有 setupDataCall_1_6
API。该 API 用于设置数据连接,并包含以下参数以支持 5G 切片:
trafficDescriptor
:用于指定发送到调制解调器的流量描述符sliceInfo
:用于指定从 EPDG 切换到 5G 时使用的网络切片的信息matchAllRuleAllowed
:用于指定是否允许使用默认的“match-all”URSP 规则。对于默认网络,电话平台会将此字段设置为 true,但对于切片,则不会设置为 true。“match-all”规则会应用于默认网络。当应用请求不可用的特定切片时,系统会报告该特定切片不可用。对于企业应用,如果企业网络不可用,电话框架会回退到默认网络。
此外,调制解调器还必须实现 getSlicingConfig
API,除非 getHalDeviceCapabilities
API 将其报告为不受支持。
对企业的要求
下面列出了企业需要满足哪些要求,才能在以企业方式部署的 Android 设备上使用 5G 网络切片。
- 确保全代管式设备或设置了工作资料的员工设备支持 5G SA,并具有支持
setupDataCall_1_6
API 的调制调解器。 - 在切片设置和性能或 SLA 特征方面,与运营商合作伙伴合作。
在设置了工作资料的设备上启用 5G 切片
对于设置了工作资料的设备,5G 网络切片在 AOSP 中默认处于停用状态。如需启用网络切片,企业 IT 管理员可以通过 EMM DPC 按员工启用或停用将工作资料中应用的流量路由到企业网络切片的功能。EMM DPC 使用 DevicePolicyManager
(DPM) API(在 Android 12 中引入)中的 setPreferentialNetworkServiceEnabled
方法。
具有自定义 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 | 说明 |
---|---|---|
ENTERPRISE | 0x454E5445525052495345 |
OSAppId 是字符串“ENTERPRISE”的字节数组表示法 |
ENTERPRISE2 | 0x454E544552505249534532 |
OSAppId 是字符串“ENTERPRISE2”的字节数组表示法 |
ENTERPRISE3 | 0x454E544552505249534533 |
OSAppId 是字符串“ENTERPRISE3”的字节数组表示法 |
ENTERPRISE4 | 0x454E544552505249534534 |
OSAppId 是字符串“ENTERPRISE4”的字节数组表示法 |
ENTERPRISE5 | 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 (enterprise1) | |
---|---|
优先级 | 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 (enterprise2) | |
---|---|
优先级 | 2 (0x02) |
流量描述符 1 | |
OS Id + OS App Id 类型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534532 |
路由选择描述符 1 | |
优先级 | 1 (0x01) |
组件 1:S-NSSAI | SST:XX SD:YYYYYY |
组件 2:DNN | enterprise2 |
路由选择描述符 2 | |
优先级 | 2 (0x02) |
组件 1:DNN | enterprise2 |
企业 3
Android 13 及更高版本支持企业 3。 以下是针对 ENTERPRISE3 流量的 URSP 规则示例:
URSP 规则 3 (enterprise3) | |
---|---|
优先级 | 3 (0x03) |
流量描述符 1 | |
OS Id + OS App Id 类型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534533 |
路由选择描述符 1 | |
优先级 | 1 (0x01) |
组件 1:S-NSSAI | SST:XX SD:YYYYYY |
组件 2:DNN | enterprise3 |
路由选择描述符 2 | |
优先级 | 2 (0x02) |
组件 1:DNN | enterprise3 |
企业 4
Android 13 及更高版本支持企业 4。 以下是针对 ENTERPRISE4 流量的 URSP 规则示例:
URSP 规则 4 (enterprise4) | |
---|---|
优先级 | 4 (0x04) |
流量描述符 1 | |
OS Id + OS App Id 类型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534534 |
路由选择描述符 1 | |
优先级 | 1 (0x01) |
组件 1:S-NSSAI | SST:XX SD:YYYYYY |
组件 2:DNN | enterprise4 |
路由选择描述符 2 | |
优先级 | 2 (0x02) |
组件 1:DNN | enterprise4 |
企业 5
Android 13 及更高版本支持企业 5。 以下是针对 ENTERPRISE5 流量的 URSP 规则示例:
URSP 规则 5 (enterprise5) | |
---|---|
优先级 | 5 (0x05) |
流量描述符 1 | |
OS Id + OS App Id 类型 | 0x97A498E3FC925C9489860333D06E4E470B454E544552505249534535 |
路由选择描述符 1 | |
优先级 | 1 (0x01) |
组件 1:S-NSSAI | SST:XX SD:YYYYYY |
组件 2:DNN | enterprise5 |
路由选择描述符 2 | |
优先级 | 2 (0x02) |
组件 1:DNN | enterprise5 |
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 | bandwidth |
路由选择描述符 2 | |
优先级 | 2 (0x02) |
组件 1:DNN | bandwidth |
默认
URSP 规则 9(默认) | |
---|---|
优先级 | 9 (0x09) |
流量描述符 1 | |
match-all | 不适用 |
路由选择描述符 1 | |
优先级 | 1 (0x01) |
组件 1:S-NSSAI | SST:XX SD:YYYYYY |
测试
如需测试 5G 网络切片,请使用以下手动测试。
如要设置设备以进行测试,请执行以下操作:
确保为 URSP 政策配置了一条与企业类别相符的非默认规则,且相应的路由选择描述符会将企业类别映射到企业切片;以及一条将流量定向到默认互联网切片的默认规则。
确保已在设备上配置工作资料。
选择通过 DPC 使用网络切片
如要测试 5G 网络切片行为,请执行以下操作:
- 验证是否通过企业切片建立了 PDU 会话(例如,使用特定 IP 地址),以及工作资料中的应用是否使用该 PDU 会话。
- 验证是否使用默认互联网切片建立了单独的 PDU 会话,以及个人资料中的应用是否使用该 PDU 会话。
5G 切片追加销售
借助 Android 14-QPR1 中推出的 5G 切片追加销售功能,运营商能够通过 5G 网络切片为用户提供增强的网络 capability(延迟时间和带宽)。
5G 切片追加销售功能使用来自运营商授权服务器的 TS.43 响应来推动购买流程。运营商可以使用该响应来指定其购买 WebView 的网址、向 WebView 发送其他数据,以及指示切片是否已在运营商网络中配置且可用。
运营商可以使用运营商配置自定义 5G 切片追加销售功能的行为,运营商配置可控制是否可以发出购买请求、何时允许应用请求高级 capability 以及电话框架要等待多久才能收到来自用户/网络的响应。
5G 切片追加销售功能提供了一个名为 DataBoostWebServiceFlow
的接口,可实现 Android 与运营商 WebView 之间的通信。
图 2 显示了 5G 切片追加销售购买流程:
图 2. 5G 切片追加销售购买流程。
TS.43 授权流程
当用户请求增强的网络 capability 时,电话框架会请求所请求高级 capability 的服务授权配置。如果 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
支持的高级 capability 的列表。这是
TelephonyManager.PremiumCapability
的一个整数数组。这些高级 capability 与对应的NetworkCapabilities.NetCapability
类具有相同的值。如果请求的是高级 capability 且它未包含在此配置中,则购买请求将失败并返回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) 时,是否允许购买高级 capability。如果值为
true
,则可以通过 LTE 和 New Radio (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
网络必须为购买高级 capability 而设置切片配置的时长。在此期间,后续购买请求会被阻止,并返回
PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP
结果。如果网络未能及时设置切片配置,应用可以再次请求购买高级 capability。在对应的切片配置发送之前,无论用户是否向运营商付款,电话服务都不会将购买交易视为完成。
JavaScript 接口
当用户点击网络提升通知时,系统会向用户显示包含运营商购买网址的 WebView
对象。运营商可以使用其购买网站的 DataBoostWebServiceFlow
JavaScript 接口中提供的 API 与切片购买应用进行通信。
运营商网站可以通过 getRequestedCapability()
方法获取所请求的高级 capability。
如果购买成功,运营商网站必须通过 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
购买交易完成后,运营商必须向用户设备更新 URSP 规则并添加 PRIORITIZE_LATENCY
切片。