Die Überwachung und Nachverfolgung der App- und delegierten Datennutzung basiert auf dem Modul „xt_qtaguid“ im Android-3.0-Linux-Kernel (kernel/net/netfilter/xt_qtaguid
). Die Socket-Tagging-Funktion im Framework (system/core/libcutils/qtaguid.c
) basiert hauptsächlich auf der Existenz der /proc/net/xt_qtaguid/ctrl
-Schnittstelle, die vom xt_qtaguid
-Kernelmodul exportiert wird.
Das quota2
-Netfilter-Modul (ursprünglich Teil von xtables-addons
) ermöglicht es, benannte Kontingentlimits festzulegen. Es wurde erweitert, um den Userspace zu benachrichtigen, wenn bestimmte Limits erreicht werden. Sobald das Kontingentlimit erreicht ist, verwirft das quota2
-Modul den gesamten nachfolgenden Netzwerkverkehr. Das Framework kann auch zusätzliche Regeln festlegen, um den Hintergrunddatenverkehr für eine App einzuschränken (siehe com.android.server.NetworkManagementSocketTagger.setKernelCounterSet
und android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND
).
Wie funktioniert das?
Das qtaguid
-Netfilter-Modul überwacht den Netzwerkverkehr für jede App auf Socket-Basis mithilfe der eindeutigen UID der zugehörigen App. Jedem Socket im System sind zwei Tag-Komponenten zugeordnet. Die erste ist die UID, die die App eindeutig identifiziert, die für die Datenübertragung verantwortlich ist. Unter Linux kann die Inhaberschaft jedes Netzwerk-Sockets der UID der anrufenden App zugewiesen werden. Die zweite Tag-Komponente wird verwendet, um den Traffic in von App-Entwicklern angegebene Kategorien zu unterteilen. Mithilfe dieser Tags auf App-Ebene kann der Traffic in mehrere Unterkategorien unterteilt werden.
Bei Apps, die die Netzwerkdatenübertragung als Dienst bereitstellen, z. B. Downloadmanager oder Medienstreamingdienste, kann die Inhaberschaft der Netzwerkdatenübertragung mithilfe des TrafficStats.setThreadStatsUid()
-Funktionsaufrufs der UID der anfragenden App zugeordnet werden. Der Aufrufer muss die Berechtigung „android.permission.MODIFY_NETWORK_ACCOUNTING
“ haben, um die Inhaberschaft des Netzwerktraffics neu zuzuweisen.