概要

アプリケーションごと/委任されたデータ使用量の監視および追跡機能は、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.setKernelCounterSetおよびandroid.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUNDを参照)。

それはどのように機能しますか?

qtaguid netfilterモジュールは、所有するアプリケーションの一意のUIDを使用して、すべてのアプリケーションのソケットごとにネットワークトラフィックを追跡します。システム内の任意のソケットに関連付けられた2つのタグコンポーネントがあります。 1つ目は、データ転送を担当するアプリケーションを一意に識別するUIDです(Linuxでは、各ネットワークソケットの所有権を呼び出し元のアプリケーションのUIDに割り当てることができます)。 2番目のタグコンポーネントは、アプリケーション開発者が指定したカテゴリへのトラフィックの追加の特性評価をサポートするために使用されます。これらのアプリケーションレベルのタグを使用して、アプリケーションはトラフィックをいくつかのサブカテゴリにプロファイリングできます。

ダウンロードマネージャー、メディアストリーミングサービスなど、サービスとしてネットワークデータ転送を提供するアプリケーションの場合、 TrafficStats.setThreadStatsUid()を使用して、ネットワークデータ転送の所有権を要求元のアプリケーションのUIDに関連付けることができます。 TrafficStats.setThreadStatsUid()関数呼び出し。発信者は、ネットワークトラフィックの所有権を再割り当てするために、「 android.permission.MODIFY_NETWORK_ACCOUNTING 」権限を保持している必要があります。