Android系統網絡連接與管理並非單一服務完成,而是由ConnectivityService、NetworkPolicyManagerService、NetworkManagementService、NetworkStatsService四大系統服務協同實現。本文深度解析四服務職責邊界、對外接口暴露策略、內部協作類圖,為Framework工程師與安全研究員提供架構級參考。
| 服務名稱 | 核心職責 | 對外SDK接口 | 典型調用者 |
|---|---|---|---|
| ConnectivityService | 網絡連接狀態管理、路由控制、網絡切換、鏈路層協議協商 | ConnectivityManager | 應用層(網絡狀態監聽、請求網絡)、系統服務 |
| NetworkPolicyManagerService | 流量策略管理(限額、警告、計費網絡識別)、UID網絡權限控制 | NetworkPolicyManager | 設置應用、數據用量統計、防火牆模塊 |
| NetworkManagementService | 底層網絡設備配置(接口up/down、路由表、防火牆規則、NAT、TCP缓冲區調優) | 無(隱藏@SystemApi) | ConnectivityService、網絡測試工具、VPN服務 |
| NetworkStatsService | 數據流量統計收集(按UID、標籤、接口)、歷史數據持久化、查詢接口 | 無(隱藏@SystemApi) | NetworkPolicyManagerService、設置應用、運行商App |

圖1 網絡連接系統類圖
MANAGE_NETWORK_POLICY權限。ServiceManager.getService()獲取IBinder,僅限android.uid.system或簽名權限訪問,防止應用層繞過策略直接操作底層網絡。1. App調用ConnectivityManager.requestNetwork(NetworkRequest, NetworkCallback)
2. ConnectivityService評估請求:滿足NetworkCapabilities?符合NetworkPolicy?
3. 是 → 委託NetworkManagementService建立接口、配置路由、下發防火牆規則
4. 接口就緒 → 通過NetworkCallback.onAvailable()回調App
5. 數據傳輸期間 → NetworkStatsService持續統計UID流量
6. 超額/策略變更 → NetworkPolicyManagerService通知ConnectivityService撤銷網絡
7. ConnectivityService委託NetworkManagementService拆除接口、清理路由/防火牆
INTERNET權限僅允許使用默認網絡,不保證特定網絡類型。NETWORK_STACK或專用權限。理解四大服務協作機制,是掌握Android網絡行為、定位疑難連接問題、實現定制化網絡策略的基石。建議配合frameworks/base/services/core/java/com/android/server/connectivity/源碼閱讀,結合dumpsys connectivity、dumpsys netpolicy、dumpsys netstats實戰分析。