ภาพรวม

ฟังก์ชันการตรวจสอบและติดตามการใช้ข้อมูลต่อแอปพลิเคชัน/ที่ได้รับมอบหมายนั้นอาศัยโมดูล 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 ) ช่วยให้ฟังก์ชันการทำงานสามารถตั้งค่าขีดจำกัดโควต้าที่มีชื่อ และได้รับการขยายเพื่อรองรับการแจ้งเตือนพื้นที่ผู้ใช้เมื่อถึงขีดจำกัดที่กำหนด เมื่อถึงขีดจำกัดโควต้า โมดูล quota2 จะละทิ้งการรับส่งข้อมูลเครือข่ายที่ตามมาทั้งหมด เฟรมเวิร์กยังสามารถระบุกฎเพิ่มเติมเพื่อจำกัดการรับส่งข้อมูลพื้นหลังสำหรับแอปพลิเคชัน (โปรดดูที่ 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 " เพื่อมอบหมายความเป็นเจ้าของการรับส่งข้อมูลเครือข่ายอีกครั้ง