החל מ-27 במרץ 2025, מומלץ להשתמש ב-android-latest-release
במקום ב-aosp-main
כדי ליצור תרומות ל-AOSP. מידע נוסף זמין במאמר שינויים ב-AOSP.
סקירה כללית על הליבה
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
הפונקציונליות של המעקב והניטור אחרי השימוש בנתונים בכל אפליקציה ובאפליקציות שהוקצו לצד שלישי מבוססת על המודול xt_qtaguid בליבה של Android 3.0 Linux (kernel/net/netfilter/xt_qtaguid
). הפונקציונליות של תיוג השקעים במסגרת (system/core/libcutils/qtaguid.c
) מבוססת בעיקר על קיומו של ממשק /proc/net/xt_qtaguid/ctrl
שיוצא על ידי מודול הליבה xt_qtaguid
.
מודול netfilter quota2
(שהיה במקור חלק מ-xtables-addons
) מאפשר להגדיר מכסות בעלות שם, והוא הורחב כדי לתמוך בשליחת התראות למרחב המשתמש כשמגיעים למכסות מסוימות. אחרי שמגיעים למגבלת המכסה, המודול quota2
משמיד את כל תעבורת הרשת הבאה. אפשר גם לציין כללים נוספים במסגרת כדי להגביל את תעבורת הנתונים ברקע של אפליקציה (מידע נוסף זמין במאמרים com.android.server.NetworkManagementSocketTagger.setKernelCounterSet
ו-android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND
).
איך זה עובד?
מודול netfilter של qtaguid
עוקב אחרי תעבורת הנתונים ברשת לפי שקע לכל אפליקציה באמצעות מזהה ה-UID הייחודי של האפליקציה הבעלים. יש שני רכיבי תגים שמשויכים לכל שקע במערכת. הראשון הוא UID שמזהה באופן ייחודי את האפליקציה שאחראית להעברת הנתונים (ב-Linux יש אפשרות לשייך את הבעלות על כל שקע רשת ל-UID של האפליקציה מבצעת הקריאה). רכיב התג השני משמש לתיאור נוסף של התנועה בקטגוריות שצוינו על ידי מפתחי האפליקציה. בעזרת התגים האלה ברמת האפליקציה, אפשר לחלק את התנועה לכמה קטגוריות משנה.
במקרה של אפליקציות שמספקות העברת נתונים ברשת כשירות, כמו מנהל ההורדות, שירות סטרימינג של מדיה וכו', אפשר לשייך את הבעלות על העברת הנתונים ברשת למזהה ה-UID של האפליקציה המבקשת באמצעות קריאת הפונקציה TrafficStats.setThreadStatsUid()
. למבצע הקריאה החוזרת צריכה להיות ההרשאה android.permission.MODIFY_NETWORK_ACCOUNTING
כדי להקצות מחדש את הבעלות על תעבורת הנתונים ברשת.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-06-12 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-06-12 (שעון UTC)."],[],[],null,["# Kernel overview\n\nThe per-app and delegated data usage monitoring and tracking\nfunctionality relies on the xt_qtaguid module in the android-3.0 Linux\nkernel (`kernel/net/netfilter/xt_qtaguid`). The socket tagging\nfunctionality in the framework (`system/core/libcutils/qtaguid.c`)\nrelies mainly on the existence of `/proc/net/xt_qtaguid/ctrl`\ninterface exported by the `xt_qtaguid` kernel module.\n| **Note:** Support for `xt_qtaguid` will be phased out starting in the Android 9 release. See [eBPF Traffic\n| Monitoring](/docs/core/data/ebpf-traffic-monitor) for more information.\n\nThe `quota2` netfilter module (originally part of `xtables-addons`)\nallows the functionality to set named quota limits and was extended to\nsupport notifying userspace when certain limits are reached. Once the\nquota limit is reached, the `quota2` module discards all subsequent\nnetwork traffic. The framework can also specify additional rules to\nrestrict background data traffic for an app (refer to\n`com.android.server.NetworkManagementSocketTagger.setKernelCounterSet`\nand\n`android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND`).\n\nHow does it work?\n-----------------\n\nThe `qtaguid` netfilter module tracks the network traffic on a\nper-socket basis for every app using the unique UID of the\nowning app. There are two tag components associated with any\nsocket in the system. The first is the UID which uniquely identifies\nthe app which is responsible for the data transfer (Linux\nallows the ability to ascribe the ownership of each network socket to\nthe UID of the calling app). The second tag component is used\nto support additional characterization of the traffic into app\ndeveloper specified categories. Using these app level tags, an\napp can profile the traffic into several sub-categories.\n\nIn the case of apps that provide network data transfer as a\nservice, such as the download manager, media streaming service, etc,\nit is possible to attribute the ownership of the network data transfer\nto the UID of the requesting app using the\n`TrafficStats.setThreadStatsUid()` function call. The caller must hold\nthe \"`android.permission.MODIFY_NETWORK_ACCOUNTING`\" permission to\nre-assign the ownership of the network traffic."]]