[功能]Netd是什么,主要负责什么功能

为什么这次会接触Netd主要是因为在设置防火墙时候碰到了。关于Netd可以干什么可以从Netd的源码中CommandListener中得到答案。按照我的理解,(有疏漏或者错误的请指出),

Netd处理事务采用的是命令设计模式。所以可以查看都负责处理哪些命令功能就一目了然,如下:

[网络摘抄] Netd负责跟一些涉及物理端口的网络操作相关的功能实现,例如带宽控制(Bandwidth),网络地址转换(NAT),个人局域网(pan),PPP链接,soft-ap,共享上网(Tether)等等……都是按照模块(.cpp+.h)组织在netd文件目录下的~

[网络摘抄] Android Netd 相关的基本框架的四大部分:

(1)Linux Kernel 用于检测 network 相关的所有 event 事件。

(2)Netd 作为 Kernel 与 Framework 之间通信的桥梁。

(3)Framework 层操作 Netd,向 Netd 发送操作命令。

(4)UI 与 Framework 交互,用于用户进行网络的操控。

主线任务暂时只关注跟Firewall有关的FirewallCmd()。

[功能]NetworkManagementService有什么用

(1)       通过socket连接netd

(2)通过observer通知观察者

主要的观察者有ConnectivityService,EthernetNetworkFactory,WifiStateMachine,Vpn,NetworkPolicyManagerService,Nat464Xlat,CommonTimeManagementService等

[socket]NetworkManagementService如何与Netd进行通信?

NetworkManagementService是通过socket与Netd进行通信。

Socket简单沟通如下:

服务端                                                               客户端

1、  创建socket                                              1、创建socket()

2、  Bind()

3、  Listen()

4、  accept()

5、  阻塞并等待连接                                       2、connect()

6、  读取数据(recv)                                           3、写数据(send)

7、  写数据(send)                                             4、读数据(recv)

8、  关闭socket(closeSocket())                           5、关闭socket(closeSocket())

Netd作为内核与android Framework的沟通桥梁,所以Netd会发出两种消息。一种是内核想要上报给android Framework的消息,一种是android Frameworks请求之后返回的消息。

这里我们设置防火墙的动作属于后者, Netd是作为服务端,NetworkManagementService作为客户端。

Netd是作为服务端分析

Netd作为守护进程,其在init.rc中申请socket资源,

------init.rc中关于netd的描述-----

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

---------------------------------------------------

CommandListener中获取该socket资源

CommandListener继承于SocketListener,在SocketListener的startListener函数中,将会通过

android_get_control_socket函数在init.rc中取到socket的文件描述符

然后listen, 这里mSock其实是监听socket

然后accept, 获取与客户端交流的客户端socket

另外上文讲到的几个数据结构的UML图结构如下,可以看到FrameworkListener和CommandListener负责Framework向Netd发命令处理命令。

NetlinkListener和NetlinkHandler负责向内核向Framework推送信息

FrameworkListener族和NetlinkListener族调用onDataAvailable()接收数据。

在onDataAvailable函数中,FrameworkListener调用dispatchCommand()分发命令,并由子类CommandListener实现的runCommand()处理命令,由sendGenericOkFail()利用客户端socket向android frameworks返回结果。

NetlinkListener调用子类NetlinkHandler实现的onEvent()函数处理kernel上报的消息,并由notify函数利用客户端socket向android framework上报消息。

Android framework作为客户端分析

在NetworkManagementService中,使用NativeDaemonConnector负责连接操作,该操作被放到一个线程中执行,并使用CountDownLatch进行同步等待操作。

Create函数传入参数socket(String)是“netd”。

在NativeDaemonConnector(是一个Runnable对象,主要看run函数)中

执行socket.connect进行连接操作,并调用callback对象的onDeamonConnected函数告诉NetworkmanagementService所在的主线程已经连接完毕。

上文所涉及到的几个类的UML图如下,由于viso中没有找到java的类图构建模型使用了C#的。

(版权所有,转载请告知)

转载于:https://www.cnblogs.com/claruarius/p/5771326.html

[android]netd与NetworkManagementService初印象相关推荐

  1. 《途客圈创业记:不疯魔,不成活》一一2.1 创新工场初印象

    本节书摘来自异步社区出版社<途客圈创业记:不疯魔,不成活>一书中的第2章,第2.1节,作者:陈天,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.1 创新工场 ...

  2. android系统(106)---Android Netd ndc

    Android Netd ndc (Native Daemon Connector) http://blog.chinaunix.net/uid-23381466-id-5112474.html Ne ...

  3. Vue.js之初印象

    一.背景 MVVM模式,很多人在说在用,好吧,我落后了,我目前的项目木有用到MVVM模式的框架,vuejs,reactjs,angularjs,nonono,自己去捣鼓过ng,项目木有用到.实在不敢称 ...

  4. Django初印象之视图(view)

    一.view的初印象 一个视图函数(类),简称视图.我们发起web请求时,返回的web响应.[大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中.] ...

  5. 雷声大,雨点小——《多任务下的数据结构与算法》初印象

    本文由恋花蝶最初发表于:http://blog.csdn.net/lanphaday和http://lanphaday.bokee.com,转贴请保留这一声明,谢谢. 雷声大,雨点小 <多任务下 ...

  6. 颜值性能 H3C Magic B3颠覆无线原始初印象

    提到无线路由器,大多数人的初印象可能还都停留在"方盒子加长天线"的原始设计上.但随着用户需求的提升,无线路由器已经不再只是一个无线上网的工具,也逐渐成为家居装饰中的一份子,所以对于 ...

  7. 强化学习(RL)初印象

    学习百度AI Studio的笔记,供自己复习和记录学习过程中的思路使用,如想了解详情请移步百度AI Studio 强化学习(RL)初印象 前言 什么是智能/人工智能 Part1 什么是强化学习 Par ...

  8. 【AltiumDesigner专栏】01.00——AD初印象

    AD初印象 一.Altium Designer是什么 二.Altium Desinger 收费标准 三 .安装和谐 日常生活中,与电有关的产品一般内部一定会有电路板,例如手机.家电.电源等.举个简单的 ...

  9. SQL server 初印象

    看了这么长时间的视频,虽然细但是由于没有应用还是理解不好,只有初步印象.什么知识都是在实用中记住的,光靠视频教程中的讲解是不够的,对于数据库我想我会在以后的各个系统中广泛使用.现在对SQL serve ...

  10. 【HarmonyOS HiSpark IPC DIY Camera试用连载1】开箱组装初印象

    [HarmonyOS HiSpark IPC DIY Camera试用连载1] 开箱组装初印象 一. 开箱资料 二. 包含的元件 三. 组装步骤 四.原装功能演示 五. 注意事项 /* 本人为文章作者 ...

最新文章

  1. java里注释为什么报错_这些年我们在java中遇到过的坑,你遇到过几个
  2. POJ 1269 Intersecting Lines(求直线交点)
  3. CentOS 5.3 安装nginx+mysql+php
  4. 中如何移动物体在画面中的位置_组合柜摆在客厅中什么位置最旺运?客厅中,财位是如何确定的?...
  5. [Android5 系列—] 2. 开始另外一个活动
  6. Android线程创建aop,【android安卓】一个注解搞定线程切换,基于AOP的线程转换框架...
  7. 搜索python代码的软件_python小说爬虫工具,小说搜索下载软件附源码
  8. win7电脑桌面壁纸曝光过高影响图标怎么办?亲测实用解决方法
  9. java c s聊天程序_java----------C/S编程-----简单聊天程序
  10. 解决svn报错 : The pristine text with checksum 'e006b124faa4ddf60d8773d1855e6bfa56145874' was not fou
  11. 8CRM客户案例分享
  12. 优化屏蔽广告.提高浏览体验
  13. kvm虚拟化管理工具
  14. 对角矩阵、对称矩阵、单位向量、正交矩阵
  15. 新版本android_id,android手机唯一id方案总结
  16. 使用JSONObject 读取 jason对象中的key
  17. java stringbuilder 替换字符串_StringBuilder修改字符串内容,增,删,改,插
  18. 以太坊Dapp项目-拍卖网站-智能合约编写测试
  19. php拨号接口,拨号网络对应的协议是什么
  20. Inventor API:后绑定访问一些Inventor API对象

热门文章

  1. 苹果mac磁盘清理工具:Pro Disk Cleaner
  2. Paste for mac(剪切板管理工具)
  3. 教你几招Mac的省电小技巧
  4. 如何在苹果Mac上通过通知中心禁用通知?
  5. 苹果电脑如何正确断网?macOS操作系统断网方法
  6. Vmware Linux设置固定IP
  7. thrift编写服务端 客户端
  8. 新型恶意软件—— Grizzly攻击Telegram
  9. Windows Shellcode学习笔记——Shellcode的提取与测试
  10. 孟小峰:大数据管理系统的发展与机遇