بررسی اجمالی

عملکرد نظارت و ردیابی مصرف داده به ازای هر برنامه/تخصیص به ماژول xt_qtaguid در هسته لینوکس android-3.0 ( 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 است که به طور منحصربه‌فرد برنامه‌ای را که مسئول انتقال داده است شناسایی می‌کند (لینوکس امکان نسبت دادن مالکیت هر سوکت شبکه را به UID برنامه فراخوانی می‌دهد). مولفه دوم تگ برای پشتیبانی از خصوصیات اضافی ترافیک در دسته های مشخص شده توسعه دهنده برنامه استفاده می شود. با استفاده از این تگ‌های سطح برنامه، یک برنامه کاربردی می‌تواند ترافیک را در چندین زیر مجموعه نمایه کند.

در مورد برنامه‌هایی که انتقال داده‌های شبکه را به عنوان یک سرویس ارائه می‌دهند، مانند دانلود منیجر، سرویس پخش رسانه و غیره، می‌توان با استفاده از TrafficStats.setThreadStatsUid() مالکیت انتقال داده‌های شبکه را به UID برنامه درخواست‌کننده نسبت داد. TrafficStats.setThreadStatsUid() فراخوانی تابع. تماس‌گیرنده باید مجوز « android.permission.MODIFY_NETWORK_ACCOUNTING » را برای تخصیص مجدد مالکیت ترافیک شبکه داشته باشد.