| <html devsite><head> |
| <title>概述</title> |
| <meta name="project_path" value="/_project.yaml"/> |
| <meta name="book_path" value="/_book.yaml"/> |
| </head> |
| <body> |
| |
| <!-- |
| Copyright 2017 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <p>基于应用/委托的流量使用情况监控和跟踪功能依赖于 Android 3.0 的 Linux 内核 (<code>kernel/net/netfilter/xt_qtaguid</code>) 中的 xt_qtaguid 模块来实现。框架 (<code>system/core/libcutils/qtaguid.c</code>) 中的套接字标记功能的实现主要依赖于从内核模块 <code>xt_qtaguid</code> 中导出到 <code>/proc/net/xt_qtaguid/ctrl</code> 的接口的存在。</p> |
| |
| <aside class="note"><b>注意</b>:我们将从 Android 9 版本开始分阶段取消对 <code>xt_qtaguid</code> 的支持。有关详情,请参阅 <a href="ebpf-traffic-monitor">eBPF 流量监控</a>。</aside> |
| |
| <p><code>quota2</code> netfilter 模块(最初是属于 <code>xtables-addons</code>)为设置具有指定名称的配额限制提供了功能支持;此外,经过扩展后,该模块还可支持在达到特定配额限制时通知用户空间。一旦达到配额限制,<code>quota2</code> 模块将丢弃所有的后续网络流量。框架还可以指定额外的规则来限制应用的后台数据流量(请参阅 <code>com.android.server.NetworkManagementSocketTagger.setKernelCounterSet</code> 和 <code>android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND</code>)。</p> |
| <h1 id="how-does-it-work">工作原理</h1> |
| <p><code>qtaguid</code> netfilter 模块使用应用的专属 UID,按套接字对每个应用的网络流量进行跟踪。系统中有两个标记组件与套接字相关联。第一个是 UID,用来明确标识进行数据传输的应用(Linux 允许将每个网络套接字的所有权与调用应用的 UID 相关联)。第二个标记组件用于支持附加于流量上的开发者指定的类别描述。应用可使用这些应用级标记,将流量归类到若干子类别。</p> |
| <p>当应用以服务(如下载管理器、媒体流式传输服务等)的方式传输网络数据时,可通过调用 <code>TrafficStats.setThreadStatsUid()</code> 函数将传输作业的所有权与发出请求的应用的 UID 相关联。调用程序必须具备“<code>android.permission.MODIFY_NETWORK_ACCOUNTING</code>”权限才能重新分配网络流量的所有权。</p> |
| |
| </body></html> |