ภาพรวม

ฟังก์ชันการติดตามและติดตามการใช้ข้อมูลต่อแอปพลิเคชัน/ที่ได้รับมอบหมายนั้นอาศัยโมดูล xt_qtaguid ในเคอร์เนล android-3.0 Linux ( kernel/net/netfilter/xt_qtaguid ) ฟังก์ชันการแท็กซ็อกเก็ตในเฟรมเวิร์ก ( system/core/libcutils/qtaguid.c ) อาศัยการมีอยู่ของอินเตอร์เฟส /proc/net/xt_qtaguid/ctrl ที่ส่งออกโดยโมดูลเคอร์เนล xt_qtaguid เป็นหลัก

โมดูล quota2 netfilter (แต่เดิมเป็นส่วนหนึ่งของ xtables-addons ) อนุญาตให้ฟังก์ชันตั้งค่าขีดจำกัดโควตาที่มีชื่อ และขยายเพื่อรองรับการแจ้ง userspace เมื่อถึงขีดจำกัดบางอย่าง เมื่อถึงขีดจำกัดโคว quota2 โมดูลโควต้า2 จะละทิ้งการรับส่งข้อมูลเครือข่ายที่ตามมาทั้งหมด กรอบงานยังสามารถระบุกฎเพิ่มเติมเพื่อจำกัดการรับส่งข้อมูลพื้นหลังสำหรับแอปพลิเคชัน (ดูที่ com.android.server.NetworkManagementSocketTagger.setKernelCounterSet และ android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND )

มันทำงานอย่างไร?

โมดูล qtaguid netfilter ติดตามการรับส่งข้อมูลเครือข่ายแบบต่อซ็อกเก็ตสำหรับทุกแอปพลิเคชันโดยใช้ UID เฉพาะของแอปพลิเคชันที่เป็นเจ้าของ มีองค์ประกอบแท็กสองส่วนที่เกี่ยวข้องกับซ็อกเก็ตใดๆ ในระบบ อย่างแรกคือ UID ซึ่งระบุแอปพลิเคชันที่ไม่ซ้ำกันซึ่งมีหน้าที่รับผิดชอบในการถ่ายโอนข้อมูล (Linux อนุญาตให้ความสามารถในการกำหนดความเป็นเจ้าของของแต่ละซ็อกเก็ตเครือข่ายไปยัง UID ของแอปพลิเคชันที่เรียก) คอมโพเนนต์แท็กที่สองใช้เพื่อสนับสนุนการกำหนดลักษณะเพิ่มเติมของการเข้าชมในหมวดหมู่ที่ระบุโดยนักพัฒนาแอปพลิเคชัน การใช้แท็กระดับแอปพลิเคชันเหล่านี้ แอปพลิเคชันสามารถสร้างโปรไฟล์การรับส่งข้อมูลเป็นหมวดหมู่ย่อยได้หลายประเภท

ในกรณีของแอปพลิเคชันที่ให้การถ่ายโอนข้อมูลเครือข่ายเป็นบริการ เช่น ตัวจัดการการดาวน์โหลด บริการสตรีมมีเดีย ฯลฯ เป็นไปได้ที่จะระบุแอตทริบิวต์การเป็นเจ้าของการถ่ายโอนข้อมูลเครือข่ายไปยัง UID ของแอปพลิเคชันที่ร้องขอโดยใช้ TrafficStats.setThreadStatsUid() เรียกใช้ฟังก์ชัน ผู้โทรต้องถือสิทธิ์ “ android.permission.MODIFY_NETWORK_ACCOUNTING ” เพื่อกำหนดความเป็นเจ้าของการรับส่งข้อมูลเครือข่ายอีกครั้ง