5G 网络切片

对于搭载 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 网络切片功能的组件。

5G network slicing components

图 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(例如 NetworkCallbackgetActiveNetworkgetNetworkCapabilities)告知应用其网络流量发生了什么。

实现

为了在设备上支持 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 网络切片,请使用以下手动测试。

要设置设备以进行测试,请执行以下操作

  1. 确保 URSP 策略配置有非默认规则,该规则与企业类别匹配,并且相应的路由选择描述符将企业类别映射到企业切片;以及将流量定向到默认互联网切片的默认规则。

  2. 确保设备上配置了工作资料。

  3. 选择通过 DPC 使用网络切片

要测试 5G 网络切片行为,请执行以下操作

  1. 验证是否已建立与企业切片的 PDU 会话(例如,通过使用特定 IP 地址),以及工作资料中的应用是否使用该 PDU 会话。
  2. 验证是否已建立与默认互联网切片的单独 PDU 会话,以及个人资料中的应用是否使用该 PDU 会话。

5G 切片向上销售

5G 切片向上销售功能从 Android 14-QPR1 开始提供,让运营商可以通过 5G 网络切片向用户提供增强的网络功能(延迟和带宽)。

5G 切片向上销售功能使用来自运营商权利服务器的 TS.43 响应来驱动购买流程。运营商可以使用该响应来指定运营商购买 WebView 的网址、向 WebView 发送其他数据,并指示切片是否已在运营商网络上预配和可用。

运营商可以使用运营商配置自定义 5G 切片向上销售功能的行为,这些配置控制是否可以提出购买请求、何时允许应用请求高级功能,以及电话框架等待来自用户或网络的响应的时间。

5G 切片向上销售功能提供了一个名为 DataBoostWebServiceFlow 的接口,以允许 Android 和运营商 WebView 之间进行通信。

图 2 显示了 5G 切片向上销售购买流程

5G slicing upsell purchase flow

图 2. 5G 切片向上销售购买流程。

TS.43 权利流程

当用户请求增强的网络功能时,电话框架会请求所请求的高级服务的权利配置。如果 TS.43 响应有效,则电话框架会使用 HTTP 响应中的字段来驱动购买请求。

切片购买字段

TS.43 权利配置包括以下切片购买字段

权利状态

键:EntitlementStatus

类型:int

支持的值:0(已停用)、1(已启用)、2(不兼容)、3(正在预配)、4(已包含)

预配状态

键:ProvStatus

类型:int

支持的值:0(未预配)、1(已预配)、2(不可用)、3(正在进行中)

电话框架使用权利状态和预配状态的组合来确定当前的切片购买状态。结果可以是以下之一

如果权利状态为 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 是失败代码未知时,可供用户理解的失败原因。

如果未调用这些响应方法中的任何一种,则购买将不会被视为已完成,并且购买请求最终将超时。

以下是运营商网站可以返回以指示购买失败的有效失败代码

购买完成后,运营商必须使用 PRIORITIZE_LATENCY 切片更新用户的设备的 URSP 规则