2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
カーネルの概要
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
アプリごとのデータ使用量と委任されたデータ使用量のモニタリングとトラッキングの機能は、android-3.0 Linux カーネルの xt_qtaguid モジュール(kernel/net/netfilter/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 に帰属させることができます。呼び出し元は、ネットワーク トラフィックの所有権を再割り当てするために「android.permission.MODIFY_NETWORK_ACCOUNTING
」権限を保持している必要があります。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-26 UTC。"],[],[],null,["# Kernel overview\n\nThe per-app and delegated data usage monitoring and tracking\nfunctionality relies on the xt_qtaguid module in the android-3.0 Linux\nkernel (`kernel/net/netfilter/xt_qtaguid`). The socket tagging\nfunctionality in the framework (`system/core/libcutils/qtaguid.c`)\nrelies mainly on the existence of `/proc/net/xt_qtaguid/ctrl`\ninterface exported by the `xt_qtaguid` kernel module.\n| **Note:** Support for `xt_qtaguid` will be phased out starting in the Android 9 release. See [eBPF Traffic\n| Monitoring](/docs/core/data/ebpf-traffic-monitor) for more information.\n\nThe `quota2` netfilter module (originally part of `xtables-addons`)\nallows the functionality to set named quota limits and was extended to\nsupport notifying userspace when certain limits are reached. Once the\nquota limit is reached, the `quota2` module discards all subsequent\nnetwork traffic. The framework can also specify additional rules to\nrestrict background data traffic for an app (refer to\n`com.android.server.NetworkManagementSocketTagger.setKernelCounterSet`\nand\n`android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND`).\n\nHow does it work?\n-----------------\n\nThe `qtaguid` netfilter module tracks the network traffic on a\nper-socket basis for every app using the unique UID of the\nowning app. There are two tag components associated with any\nsocket in the system. The first is the UID which uniquely identifies\nthe app which is responsible for the data transfer (Linux\nallows the ability to ascribe the ownership of each network socket to\nthe UID of the calling app). The second tag component is used\nto support additional characterization of the traffic into app\ndeveloper specified categories. Using these app level tags, an\napp can profile the traffic into several sub-categories.\n\nIn the case of apps that provide network data transfer as a\nservice, such as the download manager, media streaming service, etc,\nit is possible to attribute the ownership of the network data transfer\nto the UID of the requesting app using the\n`TrafficStats.setThreadStatsUid()` function call. The caller must hold\nthe \"`android.permission.MODIFY_NETWORK_ACCOUNTING`\" permission to\nre-assign the ownership of the network traffic."]]