عملکرد نظارت و ردیابی استفاده از داده به ازای هر برنامه/تخصیص به ماژول 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
» را برای تخصیص مجدد مالکیت ترافیک شبکه داشته باشد.