前言:
Netd是Android系统中专门负责网络管理的守护进程。NetD是网络管家,封装了复杂的底层各种类型的网络
(NAT,PLAN,PPP,SOFTAP,TECHER,ETHO,MDNS等),隔离了底层网络接口的差异,给Framework
提供了统一调用接口,简化了网络的使用。主要工作分为2个部分:
1,接收并处理来自Framework层中NetworkManagementService或NsdService的命令。这些命令最终由Netd中
对应的Command对象去处理。
2,接收并解析来自Kernel的UEvent消息,然后再转发给Framework层中对应Service去处理。
Netd位于Framework层和Kernel层之间,它是android系统中网络相关消息和命令转发及处理的中枢。本文基于android 6.0
1,进程启动
Netd进程由init进程启动, 其在init.rc文件的配置如下:
service netd /system/bin/netd
class main
socket netd stream 0660 root system
socket dnsproxyd stream 0660 root inet
socket mdns stream 0660 root system
socket fwmarkd stream 0660 root inet
由此可见,有四个socket,具体作用如下,
netd socket: NetworkManagementService和netd进程进行进程间通信;
mdns socket: NsdService和netd进程进行进程间通信;
fwmarkd socket: kernel和netd进程进行通信;
当然,这四个socket之间是相互独立的。
主要代码路径如下,
system\netd