Android系统安全 — 6.2 Ethernet安卓架构

1. Android Ethernet架构介绍

整个Ethernet系统架构如下图所示:

  • 以太网服务(EthernetService)的启动与注册流程;
  • 应用层调用使能ethernet功能的方法流程来分析,从应用层如何将指令一步一步传到底层kernel;
  • 底层kernel如何一步一步上报Uevent(例如网线的插拔等)给framework层实现。
    图1

由SystemServer启动的时候生成的ConnecttivityService创建,负责启动关闭wpa_supplicant,启动和关闭WifiMonitor线程,把命令下发给wpa_supplicant以及更新WIFI的状态。处理其它模块通过IWifiManager接口发送过来的远端WiFi操作。

2. Android 以太网框架主要服务及其作用

2.1 Android framework层

ConnectivityService :ConnectivityService 是系统网络连接的管理服务,同时也是整个Android系统网络的核心。主要处理App对于网络的监听和请求,以及网络变化时候通知App;另外该服务还会处理Wifi/Telephony/Ethernet等各个网络链路的注册,与信息的更新,以及网络评测和网络评分。
NetworkPolicyManagerService:NetworkPolicyManagerService是网络策略的管理,主要是对某些App的网络数据限制以及放行等。主要通过App的Uid来限制。
NetworkManagementService:NetworkManagementService是网络管理服务。其为ConnectivityService 和其他一些部分Framework Service建立了与Netd之间的通信通道(Android N以后Framework 与 Netd之间的通信,从socket变为了Binder调用,所以framework 其他一些服务目前也是有能力获取到Netd的client端,从而与Netd进行通信的)。
NetworkStatsService:NetworkStatsService主要根据不同的iface收集上下行网络数据,并配合NetworkPolicyManagerService服务对特定的app做网络数据限制及放行。
EthernetServiceImp:主要提供接口,供App来设置和更新网络,比如静态IP,以及网络类型等等,真正工作的是EthernetTracker这个类,这个类最终通过NetworkPolicyManagerService来和Netd进行通信。
EthernetNetworkFactory:EthernetNetworkFactory是NetworkFactory的子类,从名字可以看出该类是个工厂类。主要功能是通过AsyncChannel接受来自ConnectivityService 的禁止自动连接、网络有效性(NetworkMonitor的网络检测结果)、由于网络不可上网等原因主动断开网络。同时通过NetworkAgent(网络代理,其内部也是AsyncChannel)向ConnectivityService更新网络状态NetworkInfo(断开、连接中、已连接);更新链路配置LinkProperties(本机网口、IP、DNS以及路由信息等);更新网络能力NetworkCapabilities(信号强度、是否收费等)。

2.2 Android native 层

Android 以太网框架Native层目前从在两套机制,一套是通过Binder调用实现,另外一套是通过socket通信。从Android的版本修改来看,Google更希望使用Binder调用,所以后面Android版本很有可能会将socket通信都换为Binder通信。

NetdNativeService:NetdNativeService 是Framework层INetd的server端,提供Framework层访问Netd。NetdNativeService是Netd进程的核心,负责Android 网络管理和控制。通过xxxController将Framework的网络配置和管理指令通过Syscall的方式传递给底层kernel。
NetlinkManager:其利用SocketListener的方式监听底层Kernel的Uevent事件,并且通过注册NetdUnsolicitedEventListener方式,将底层Uevent事件上报到Framework层,例如网线的插拔等
XXXListener:MDnsSdListener等Listener,主要通过socket监听来自Framework层的指令,以及监听底层的Uevent通过socket上报到framework层。

3.Wifi Ethernet源码

frameworks/base/core/java/android/net/
    ---EthernetManager.java
    ---IEthernetManager.aidl
    ---ConnectivityManager.java
    ---NetworkPolicyManager.java
    ---NetworkAgent.java

frameworks/opt/net/ethernet/java/com/android/server/ethernet/
    ---EthernetService.java
    ---EthernetServiceImpl.java
    ---EthernetTracker.java
    ---EthernetNetworkFactory.java
    ---EthernetConfigStore.java

frameworks/base/services/core/java/com/android/server/
    ---NetworkManagementService.java
    ---NativeDaemonConnector.java
    ---NativeDaemonEvent.java
    ---ConnectivityService.java

frameworks/base/services/core/java/com/android/server/net/
    ---NetworkStatsService.java
    ---NetworkPolicyManagerService.java