針對執行 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 中對 Tethering 模組進行了以下變更:
- 將大部分
android.net.*
公用或系統 API 類別新增至 Tethering 模組 將 Tethering 模組的範圍擴大至包含:
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 程式碼移出 Tethering 模組
Android 12 會將具有下列功能的程式碼移至 Tethering 模組:
- 接收應用程式要求的網路連線
- 接收系統的要求 (例如,在 Android 12 中引進的「將這些應用程式置於企業切片」)
- 將要求從系統傳送至電話程式碼,該程式碼會透過 HAL API 和數據機嘗試設定網路或區塊
- 告知 netd 如何針對個別應用程式轉送流量 (在 Android 12 中推出)
- 透過
ConnectivityManager
API (例如NetworkCallback
、getActiveNetwork
、getNetworkCapabilities
),告知應用程式網路流量發生的情況。
實作
如要在裝置上支援 5G 切片,裝置必須具備支援 IRadio 1.6 HAL 的調製解調器,該 HAL 包含 setupDataCall_1_6
API。這個 API 會設定資料連線,並包含下列參數,以支援 5G 切片:
trafficDescriptor
:指定傳送至調製解調器的流量描述詞sliceInfo
:指定在 EPDG 至 5G 交接時要使用的網路切片資訊matchAllRuleAllowed
:指定是否允許使用預設的萬用 URSP 規則。在預設網路中,Telephony 會將此值設為 true,但在切片中則不會。系統會將「比對所有」規則套用至預設網路。如果應用程式要求的特定區塊無法使用,系統會將該區塊回報為無法使用。對於企業應用程式,如果企業網路無法使用,電話通訊系統架構可以改用預設網路。
除非 getHalDeviceCapabilities
API 回報 getSlicingConfig
API 不支援,否則數據機也必須實作 getSlicingConfig
API。
企業版需求
以下說明企業在 Android 企業部署中使用 5G 網路切片功能的相關規定。
- 請確認設有工作資料夾的全代管或員工裝置,具備 5G SA 功能,且支援
setupDataCall_1_6
API 的數據機。 - 與電信合作夥伴合作,針對切片設定和效能或服務水準協議 (SLA) 特性進行合作。
在設有工作資料夾的裝置上啟用 5G 切片
如果是設有工作資料夾的裝置,AOSP 中預設會關閉 5G 網路切片功能。如要啟用網路切片功能,企業 IT 管理員可以透過 EMM DPC 針對每位員工開啟或關閉工作資料夾應用程式流量路由至企業網路切片,這項操作會使用 DevicePolicyManager
(DPM) API 中的 setPreferentialNetworkServiceEnabled
方法 (Android 12 推出)。
使用自訂 DPC 的電子媒體管理工具供應商必須整合 DevicePolicyManager
API,才能支援企業用戶端。
URSP 規則
本節提供電信業者的相關資訊,說明如何針對不同的切片類別設定 URSP 規則,包括企業、CBS、低延遲和高頻寬流量。為不同切片類別設定 URSP 規則時,電信業者必須使用下列 Android 專屬值。
ID | 值 | 說明 |
---|---|---|
OSId | 97a498e3-fc92-5c94-8986-0333d06e4e47 |
Android 的 OSId 是使用命名空間 ISO 的 5 版 UUID 和「Android」名稱產生的。 |
電信業者必須為每個切片流量設定 URSP 規則,並將流量描述元件組件設為「OS Id + OS App Id type」。舉例來說,「ENTERPRISE」區段的值必須是 0x97A498E3FC925C9489860333D06E4E470A454E5445525052495345
。這個值是 OSId、OSAppId 長度 (0x0A
) 和 OSAppId 的串連字串。如要進一步瞭解流量描述元件類型,請參閱 3GPP TS 24.526 表格 5.2.1。
下表說明不同切片類別的 OSAppId 值。
區塊類別 | OSAppId | 說明 |
---|---|---|
企業 | 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 規則範例。
Enterprise 1
Android 12 以上版本支援 Enterprise 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 | 企業 |
Enterprise 2
Android 13 以上版本支援 Enterprise 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 |
Enterprise 3
Android 13 以上版本支援 Enterprise 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 |
Enterprise 4
Android 13 以上版本支援 Enterprise 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 |
Enterprise 5
Android 13 以上版本支援 Enterprise 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 | 頻寬 |
路線選擇描述元 #2 | |
優先順序 | 2 (0x02) |
元件 #1:DNN | 頻寬 |
預設
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 分割功能的加購方案
5G 網路切片升級功能可在 Android 14-QPR1 中使用,可讓電信業者透過 5G 網路切片功能,為使用者提供強化的網路功能 (延遲和頻寬)。
5G 切片升級功能會使用電信業者授權伺服器的 TS.43 回應,推動購買流程。電信業者可以使用回應指定電信業者購物網格檢視畫面的網址、傳送其他資料至網格檢視畫面,以及指出切片是否已佈建,且可在電信業者網路上使用。
電信業者可以使用電信業者設定,自訂 5G 切片升級功能的行為,藉此控制是否可以提出購買要求、應用程式何時可以要求進階功能,以及 Telephony 架構等待使用者或網路回應的時間長度。
5G 切片升級功能提供稱為 DataBoostWebServiceFlow
的介面,可讓 Android 和電信業者 WebView 之間進行通訊。
圖 2 顯示 5G 切片升級銷售購買流程:
圖 2. 5G 切片升級購買流程。
TS.43 授權程序
當使用者要求強化網路功能時,Telephony 架構會要求所要求的進階功能的服務授權設定。如果 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
(未佈建),Telephony 架構會向使用者顯示升級通知,要求他們透過電信業者的 WebView 購買升級方案。下表說明在不同組合的佈建和授權狀態值下,Telephony 架構的行為。
佈建狀態 | |||||
---|---|---|---|---|---|
未配置 (0 ) |
已佈建 (1 |
不適用 (2 ) |
進行中 (3 ) |
||
授權狀態 | 已停用 (0 ) |
失敗 | 失敗 | 失敗 | 失敗 |
已啟用 (1 ) |
顯示 WebView | 已購買廣告產品 | 已購買廣告產品 | 處理中 | |
不相容 (2 ) |
失敗 | 失敗 | 失敗 | 失敗 | |
佈建 (3 ) |
電信業者錯誤 | 電信業者錯誤 | 處理中 | 處理中 | |
已納入 (4 ) |
電信業者錯誤 | 已購買廣告產品 | 已購買廣告產品 | 電信業者錯誤 |
服務流程欄位
TS.43 回應會指定網址、使用者資料和內容類型,以自訂電信業者購買交易的網頁檢視畫面行為。如果未指定內容類型,系統會將網址載入為 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 和 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
網路必須設定購買加值功能的切片設定的時間長度。在此期間,後續的購買要求會遭到封鎖,並傳回
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 規則。