최근 사용

애플리케이션별/위임된 데이터 사용량 모니터링 및 추적 기능은 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.setKernelCounterSetandroid.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND 참조).

어떻게 작동합니까?

qtaguid netfilter 모듈은 소유 애플리케이션의 고유 UID를 사용하여 모든 애플리케이션에 대해 소켓별로 네트워크 트래픽을 추적합니다. 시스템의 소켓과 연관된 두 개의 태그 구성요소가 있습니다. 첫 번째는 데이터 전송을 담당하는 응용 프로그램을 고유하게 식별하는 UID입니다(Linux에서는 각 네트워크 소켓의 소유권을 호출 응용 프로그램의 UID로 지정할 수 있음). 두 번째 태그 구성 요소는 애플리케이션 개발자가 지정한 범주로 트래픽의 추가 특성화를 지원하는 데 사용됩니다. 이러한 애플리케이션 수준 태그를 사용하여 애플리케이션은 트래픽을 여러 하위 범주로 프로파일링할 수 있습니다.

다운로드 관리자, 미디어 스트리밍 서비스 등과 같이 네트워크 데이터 전송을 서비스로 제공하는 애플리케이션의 경우 TrafficStats.setThreadStatsUid() 를 사용하여 네트워크 데이터 전송의 소유권을 요청 애플리케이션의 UID에 귀속할 수 있습니다. TrafficStats.setThreadStatsUid() 함수 호출. 호출자는 네트워크 트래픽의 소유권을 다시 할당하기 위해 " android.permission.MODIFY_NETWORK_ACCOUNTING " 권한을 보유해야 합니다.