核心總覽

個別應用程式和委派資料使用量監控和追蹤功能,主要仰賴 Android-3.0 Linux 核心 (kernel/net/netfilter/xt_qtaguid) 中的 xt_qtaguid 模組。架構 (system/core/libcutils/qtaguid.c) 中的通訊端口標記功能,主要仰賴 xt_qtaguid 核心模組匯出的 /proc/net/xt_qtaguid/ctrl 介面。

quota2 netfilter 模組 (原本為 xtables-addons 的一部分) 可讓您設定已命名的配額限制,並延伸至達到特定限制時通知使用者空間的功能。一旦達到配額上限,quota2 模組就會捨棄所有後續網路流量。該架構也可以指定其他規則,限制應用程式的背景資料流量 (請參閱 com.android.server.NetworkManagementSocketTagger.setKernelCounterSetandroid.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND)。

運作方式

qtaguid netfilter 模組使用擁有應用程式的專屬 UID,針對每個通訊端追蹤網路流量。有兩個標記元件與系統中的任何通訊端相關聯。第一個 UID 可用來明確識別負責資料傳輸的應用程式 (Linux 可將每個網路通訊端的擁有權歸給呼叫應用程式的 UID)。第二個標記元件的用途,支援將流量加入應用程式開發人員指定類別的其他特性。應用程式可使用這些應用程式層級代碼,將流量分類為多個子類別。

如果應用程式提供網路資料傳輸服務 (例如下載管理工具、媒體串流服務等),則可以使用 TrafficStats.setThreadStatsUid() 函式呼叫,將網路資料傳輸的擁有權歸給要求應用程式的 UID。呼叫端必須擁有「android.permission.MODIFY_NETWORK_ACCOUNTING」權限,才能重新指派網路流量的擁有權。