Übersicht

Die Überwachung und Verfolgung der anwendungsbezogenen/delegierten Datennutzung basiert auf dem Modul xt_qtaguid im Android-3.0-Linux-Kernel ( kernel/net/netfilter/xt_qtaguid ). Die Socket-Tagging-Funktionalität im Framework ( system/core/libcutils/qtaguid.c ) beruht hauptsächlich auf der Existenz der /proc/net/xt_qtaguid/ctrl Schnittstelle, die vom xt_qtaguid -Kernelmodul exportiert wird.

Das netfilter-Modul quota2 (ursprünglich Teil von xtables-addons ) ermöglicht die Funktionalität, benannte Quota-Limits festzulegen, und wurde erweitert, um die Benachrichtigung des Userspace zu unterstützen, wenn bestimmte Limits erreicht werden. Sobald das Quota-Limit erreicht ist, verwirft das quota2 -Modul den gesamten nachfolgenden Netzwerkverkehr. Das Framework kann auch zusätzliche Regeln festlegen, um den Datenverkehr im Hintergrund für eine Anwendung einzuschränken (siehe com.android.server.NetworkManagementSocketTagger.setKernelCounterSet und android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND ).

Wie funktioniert es?

Das qtaguid netfilter-Modul verfolgt den Netzwerkverkehr pro Socket für jede Anwendung, indem es die eindeutige UID der besitzenden Anwendung verwendet. Jedem Socket im System sind zwei Tag-Komponenten zugeordnet. Die erste ist die UID, die eindeutig die Anwendung identifiziert, die für die Datenübertragung verantwortlich ist (Linux bietet die Möglichkeit, den Besitz jedes Netzwerk-Sockets der UID der aufrufenden Anwendung zuzuordnen). Die zweite Tag-Komponente wird verwendet, um eine zusätzliche Charakterisierung des Verkehrs in vom Anwendungsentwickler spezifizierte Kategorien zu unterstützen. Mithilfe dieser Tags auf Anwendungsebene kann eine Anwendung den Datenverkehr in mehrere Unterkategorien profilieren.

Bei Anwendungen, die die Netzwerkdatenübertragung als Dienst anbieten, wie z. B. Download-Manager, Media-Streaming-Dienst usw., ist es möglich, das Eigentum an der Netzwerkdatenübertragung der UID der anfordernden Anwendung zuzuordnen, indem die TrafficStats.setThreadStatsUid() verwendet wird TrafficStats.setThreadStatsUid() Funktionsaufruf. Der Aufrufer muss über die Berechtigung „ android.permission.MODIFY_NETWORK_ACCOUNTING “ verfügen, um den Besitz des Netzwerkverkehrs neu zuzuweisen.