背景
最近做车载项目,有个需求是设置域名白名单,整体思路是增加一个接口,然后上层应用通过接口传域名到netd中,然后netd在进行DNS学习,最后将学习后的IP地址传到防火墙进行流量控制。这里就必须先讲一下netd相关知识。
作用
Netd是Android系统中专门负责网络管理和控制的后台daemon程序,其功能主要分三大块:
- 设置防火墙(Firewall)、网络地址转换(NAT)、带宽控制、无线网卡软接入点(Soft Access Point)控制,网络设备绑定(Tether)等
- Android系统中DNS信息的缓存和管理
- 网络服务搜索(Net Service Discovery,简称NSD)功能,包括服务注册(Service Registration)、服务搜索(Service Browse)和服务名解析(Service Resolve)等
Netd位于Framework层和Kernel层之间,它是Android系统中网络相关消息和命令转发及处理的中枢模块,Netd的工作流程可分成两部分:
- Netd接收并处理来自Framework层中NetworkManagementService或NsdService的命令。这些命令最终由Netd中对应的Command对象去处理。
- Net接收并解析来自Kernel的UEvent消息,然后再转发给Framework层中对应Service去处理。
工作流程
-
启动(代码位于/system/core/rootdir下的init.rc):
================================================================