Android Network

一、Android Network介绍

计算机网络体系结构分为3种:OSI体系结构、TCP / IP四层体系结构、TCP / IP五层体系结构:

三种体系结构只是对网络结构进行抽象划分的方式不同,主要思想和层次结构是一致的。其中,OSI七层协议体系偏理论知识,TCP / IP体系结构偏TCP/IP协议簇比较常用。TCP / IP四层体系结构中的"网络接入层"对应着TCP / IP五层体系结构中的"数据链路层"和"物理层"。

应用层:为用于通信的应用程序和用于消息传输的底层网络提供接口。

表示层:为在应用进程之间传送的信息提供表示方法的服务,它只关心信息发出的语法和语义。

会话层:利用传输层提供的服务,使应用建立和维持会话,并能使会话获得同步。

传输层:为源主机和目标主机之间提供透明的数据传输,使高层服务用户在相互通信时不必关心通信子网实现的细节。

网络层:管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,具体功能包括寻址和路由选择、连接的建立、保持和终止等。

数据链路层:定义了在同一局域网内部点到点的单个链路上如何传输数据,通过MAC寻址把数据传输到目的节点。

物理层:为设备之间的数据通信提供传输媒体及互连设备。当采用复用技术时,一条物理链路上可以有多条数据链路。

其中,应用层常见的协议有HTTP、DNS等,TCP / IP体系结构中比较重要的是传输层(常见的协议有TCP、UDP)、网络层(常见的协议有IP、ARP等)。

Android网络子系统包括以下功能:

1、网络协议栈:包括物理层、数据链路层、网络层、传输层和应用层,负责处理网络通信的不同层级。

2、网络管理:负责箭扣和管理网络连接状态,包括Wi-Fi、移动数据和蓝牙等。提供检测网络连接状态、启用/紧用网络连接以及获取网络信息的功能。

3、连接管理:负责建立和维护网络连接,包括连接到Wi-Fi、移动数据网络和VPN等。处理网络切换、信号强度和数据传输等相关任务。

4、网络权限:Android系统提供了一系列网络全息,用于控制应用程序对网络的访问权限。这些权限包括网络访问、WLAN状态、移动数据状态等,确保应用程序在访问网络时的安全性和合法性。

5、网络通信API:Android提供了一系列网络通信API,使开发人员可以访问互联网资源、实现数据传输以及创建网络应用程序。

6、监控和诊断工具:Android提供了一些监控和诊断工具,用于调试和分析网络连接和通信。例如,网络监测器(Network Monitor)可用于监控应用程序的网络使用情况,帮助开发人员优化网络性能。

二、Android网络子系统相关类介绍

如下为Android网络子系统相关的类和组件,其中Wifi相关在Wifi子系统中介绍:

ConnectivityManager

ConnectivityManager为Android网络连接相关功能的对外类,ConnectivityManager为ConnectivityService的一层包装,实际功能实现在ConnectivityService中。ConnectivityManager包含如下功能:

(1)监控网络连接(Wi-Fi, GPRS, UMTS, etc.);

通过NetworkAgent监听网络连接的变化。NetworkAgent是bearer和ConnectivityService沟通的桥梁,bearer通过NetworkAgent将网络信息更新到ConnectivityService中; ConnectivityService通过NetworkAgent给bearer发送一些控制类的消息等。

(2)当网络连接改变时发送Intent;

当网络连接发生变化时发送广播通知监听者。发送的广播主要是ConnectivityManager.CONNECTIVITY_ACTION:android.net.conn.CONNECTIVITY_CHANGE

(3)当连接到一个网络失败时,尝试用其他网络补救;

当一个网络的连接断开时,尝试打开另外一个网络连接。当NetworkAgent断开/去注册的时候,会rematch network 和 network request,新的network会建立。

(4)提供API给应用查询有效网络粗略或者精确的状态;

为应用程序查询可用网络状态提供API,其中包括反馈详细(fine-granted)/粗略(coarse-granted)信息的API。反馈信息最详细(fine-granted)的API是getAllNetworkState,而getAllNetworks,getActiveNetwork相比较算是反馈信息比较粗略的API。

(5)提供API给应用为它们的数据传输请求和选择网络;

为需要数据业务的应用程序提供请求和选择网络的API。供应用程序请求网络连接的API是requestNetwork(...)系列,针对不同的应用需求,同名方法有六个。

ConnectivityService

ConnectivityService(简称CS)是系统网络连接管理服务。是Android系统中的网络连接大管家,所有类型(如WiFi、Telephony、Ethernet等)的网络都需要注册关联到CS并提供链路请求接口。

CS处理APP网络监听和请求,通知网络变化;处理WiFi/Telephony各个链路的网络注册,更新链路信息;网络检测/评分与网络选择。

CS主要提供了以下几个方面的功能:

  • 网络有效性检测(NetworkMonitor)

  • 网络评分与选择(NetworkFactory、NetworkAgent、NetworkAgentInfo)

  • 网口、路由、DNS等参数配置(netd)

  • 向系统及三方提供网络申请接口(ConnectivityManager)

NetworkFactory

系统中的网络工厂,也是ConnectivityService向链路网络请求的统一接口。Android系统启动之初,数据和WiFi就通过WifiNetworkFactory和TelephonyNetworkFactory将自己注册到ConnectivityService中,方便ConnectivityService迅速响应网络请求。

NetworkAgent

Android NetworkAgent是一个系统级别的组件,它是Android系统中的网络管理机制的一部分。它的主要作用是在设备上创建和管理网络连接,并向系统提供网络连接的状态信息。当一个应用程序需要网络连接时,它会向系统请求一个网络连接,然后系统会使用NetworkAgent来创建和管理这个连接。在创建网络连接时,NetworkAgent会向ConnectivityService注册自己,并提供网络连接的状态信息。同时,NetworkAgent还会向应用程序提供网络连接的状态信息,以便应用程序可以根据网络连接的状态来调整自己的行为。

链路网络的代理,是ConnectivityService和链路网络管理者(如WifiStateMachine)之间的信使,在L2连接成功后创建。

通过NetworkAgent,WifiStateMachine可以向ConnectivityService:

  • 更新网络状态 NetworkInfo(断开、连接中、已连接等)

  • 更新链路配置 LinkProperties(本机网口、IP、DNS、路由信息等)

  • 更新网络能力 NetworkCapabilities(信号强度、是否收费等)

通过NetworkAgent,CS可以向WifiStateMachine:

  • 更新网络有效性(即NetworkMonitor的网络检测结果)

  • 禁止自动连接

  • 由于网络不可上网等原因主动断开网络

NetworkManagementService

NetworkManagementService是Android系统中的一个服务,它负责管理网络连接和流量控制。它通过netd socket和Netd交互,可以对网络连接进行监控和管理,包括网络接口的配置、路由表的管理、流量控制等。在Android系统启动时,它会在system_server进程中启动,并且在startOtherServices阶段被创建和添加到ServiceManager中。

NetworkManagementService (NMS)是网络管理服务。NMS为NPMS和其他Framework中的服务建立了与Netd之间通信的渠道,NPS对各个UID的策略最终都会通过NMS向Netd发送;另外,NMS还会监听Netd服务的状态,处理Socket返回的消息,如 Bandwidth/Iface/Route/Address/Dns Server等的变化,同时将这些变化通知“感兴趣”的模块。

Android SystemServer不具备直接配置和操作网络的能力,所有的网络参数(网口、IP、DNS、Router等)配置,网络策略执行都需要通过netd这个native进程来实际执行或者传递给Kernel来执行。而NetworkManagementService(简称NMS)就是SystemServer中其他服务连接netd的桥梁。

NetworkPolicyManagerService

NetworkPolicyManagerService(简称NPMS)是Android系统的网络策略管理者。NPMS会监听网络属性变化(是否收费,metered)、应用前后台、系统电量状态(省电模式)、设备休眠状态(Doze),在这些状态发生改变时,为不同名单内的网络消费者配置不同的网络策略。这些策略一般指对APP的网络和限制和放行,通过netfilter来实现。

NetworkPolicyManagerService是一个Android系统服务,它维护网络使用策略,可以通过设置策略文件或者调用其提供的接口进行设置,从而控制网络连接。它还具有动态调节网络连接限额及动态设置网络连接的功能。ConnectivityService服务和NetworkStatsService服务都可以通过INetworkPolicyManager接口调用NetworkPolicyManagerService的API,读取网络限额信息,并登记监听对象。同时,这三个服务都通过INetworkManagementService接口跨进程访问NetworkManagementService服务,实现与网络接口的交互及信息读取。

NetworkStatsService

这个服务主要收集网络数据,如各个Iface上下行网络流量的字节数等。APP或者其他服务可以通过该服务获取网络流量信息等。

NetworkStatsService服务定期调用performPoll函数获得网络传输统计信息,performPoll函数通过调用NetworkManagementService服务的getNetworkStatsUidDetail、getNetworkStatsSummary及getNetworkStatsTethering函数从/proc/目录下的包含网络传输统计数据的文件中读取网络统计信息,并转换为NetworkStatsHistory数据结构,保存到以网络接口名称对应的NetworkIdentitySet类型和UID对应的UidStatsKey类型的变量为key的NetworkStatsService的三个HashMap变量中。然后根据performPoll传进来的参数标志信息(指示不同的PERSIST方法)调用writeNetworkDevStatsLocked、writeNetworkXtStatsLocked、writeUidStatsLocked函数把HashMap变量中的统计信息分别写入系统目录下的三个相应的BIN文件(netstats.bin、netstats_xt.bin、netstats_uid.bin)中。

Netd

Netd是Android的网络守护进程。NetD是个网络管家,封装了复杂的底层各种类型的网络(NAT,PLAN,PPP,SOFTAP,TECHER,ETHO,MDNS等),隔离了底层网络接口的差异,给Framework提供了统一调用接口,简化了网络的使用。NetD主要功能是:

  • 接收Framework的网络请求,处理请求,向Framework层反馈处理结果。

  • 监听网络事件(断开/连接/错误等),向Framework层上报。

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值