WiFi
Wi-Fi(Wireless Fidelity)是一个无线网络通信技术的品牌,由Wi-Fi联盟(Wi-Fi Alliance,WFA)拥有。WFA专门负责Wi-Fi认证与商标授权工作。严格地说,Wi-Fi是一个认证的名称,该认证用于测试无线网络设备是否符合 IEEE 802.11 系列协议的规范。通过该认证的设备将被授予一个名为Wi-Fi CERTIFIED的商标。不过,随着获得Wi-Fi认证的设备普及,人们也就习以为常得称无线网络为Wi-Fi网络了。
IEEE 802
又称为LMSC(LAN /MAN Standards Committee, 局域网/城域网标准委员会),致力于研究局域网和城域网的物理层和MAC层中定义的服务和协议,对应OSI网络参考模型的最低两层(即物理层和数据链路层)。
于工作量较大,该委员会被细分成多个工作组(Working Group),每个工作组负责解决某个特定方面问题的标准。工作组也会被赋予一个编号(位于802编号的后面,中间用点号隔开)。
IEEE 802.11
802.11代表802项目的第11个工作组 ,专门负责制订无线局域网(Wireless LAN)的介质访问控制协议(Medium Access Control,MAC)及物理层(Physical Layer,PHY)技术规范。
和工作组划分类似,工作组内部还会细分为多个任务组(Task Group,TG),任务是修改、更新标准的某个特定方面。TG的编号为英文字母,如a、b、c等。
典型的有:
IEEE 802.11b 无线局域网的带宽最高可达11Mbps,可根据实际情况采用5.5Mbps、2 Mbps和1 Mbps带宽,实际的工作速度在5Mb/s左右,与普通的10Base-T规格有线局域网几乎是处于同一水平。作为公司内部的设施,可以基本满足使用要求。IEEE 802.11b使用的是开放的 2.4GHz 频段,不需要申请就可使用。既可作为对有线网络的补充,也可独立组网,从而使网络用户摆脱网线的束缚,实现真正意义上的移动应用。
IEEE 802.11四种主要物理组件
- 工作站(Station)
构建网络的主要目的是为了在工作站间传送数据。所谓工作站,是指配备无线网络接口的计算设备(也就是配有无线网卡的计算设备)。 - 接入点(Access Point)
802.11网络所使用的帧必须经过转换,方能被传递至其他不同类型的网络。具备无线至有线的桥接功能的设备称为接入点,接入点的功能不仅于此,但桥接最为重要。 - 无线媒介(Wireless Medium)
802.11标准以无线媒介在工作站之间传递帧。其所定义的物理层不只是一种,802.11最初标准化了两种射频物理层以及一种红外线物理层。 - 分布式系统(Distribution System)
当几个接入点串联以覆盖较大区域时,彼此之间必须相互通信以掌握移动式工作站的行踪。分布式系统属于802.11的逻辑组件,负责将帧转送至目的地。
WiFi芯片
传统的在手机、平板等产品中常见的那种WiFi芯片主要来自国外的博通、高通、Marvell和我国台湾MTK等厂商。手机上的WiFi芯片只负责连接和传输信号,对RF信号的处理和TCP/IP 传输协议的解析则交给性能强大的AP端。
》》海华科技(AzureWave)
》》总部:台湾
》》主营:提供Wi-Fi、Bluetooth、3G、GPS、DTV、Digital Camera 等模块产品的创新研发,可广泛应用于消费性电子产品、嵌入式系统、手持式装置、行动连网产品、家电产品及工业用设备等领域。
》》【WiFi模块主控芯片】:Marvell、博通、高通Atheros、MTK雷凌
Android WiFi系统架构
Android平台中WIFI系统从上到下主要包括java框架类、Android适配器库、wpa_supplicant守护进程、驱动程序和协议,结构如下图:
Android WiFi核心进程交互
Android WIfi 核心代码目录
WPA简介
WPA全名为Wi-Fi Protected Access,中文含义为“WiFi网络安全存取”,有WPA和WPA2两个标准,是一种保护无线设备网络(Wi-Fi)安全的系统,它是应研究者在前一代的系统有线等效加密(WEP)中找到的几个严重的弱点而产生的。WPA是一种基于标准的可互操作的WLAN安全性增强解决方案,可大大增强现有以及未来无线局域网络的数据保护和访问控制水平。
wpa_supplicant简介
-
wpa_supplicant是一个开源项目,已经被移植到Linux,Windows以及很多嵌入式系统上。它是WPA的应用层认证客户端,负责完成认证相关的登录、加密等工作。
-
wpa_supplicant是一个独立运行的守护进程,其核心是一个消息循环,在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等。
-
经过编译后 的 wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant 和 wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。
-
Android使用一个修改版wpa_supplicant作为daemon来控制WIFI,它是一个安全中间件,为各种无线网卡提供统一的安全机制,wpa_supplicant是通过socket与hardware/libhardware_legacy/wifi/wifi.c通信
wpa_supplicant软件内容
源码目录:android/external/wpa_supplicant_8
目录下还包含四个子文件夹:
- hostapd :hostapd能够使得无线网卡切换为master模式,模拟AP(通常可以认为是路由器)功能,也就是我们说的软AP(Soft AP)。Hostapd的功能就是作为AP的认证服务器,负责控制管理stations(通常可以认为带无线网卡的PC)的接入和认证。
- hs20 :Hotspot 2.0(HS 2.0)由WiFi联盟和无线宽带联盟开发,旨在实现移动网络和WiFi网络之间的无缝流量切换,它不需要额外的用户注册和验证。其实Hotspot 2.0只是802.11u标准中的一个子项功能——即利用802.11u提供无缝的自动WiFi身份识别和切换,这一个新兴的协议将可帮用户省去了连接到WiFi网络和服务的麻烦和乏味的过程。Hotspot 2.0的出现,意味着我们将可以自动由3G、4G切换到WiFi网络,用户将不用手动发现热点、输入身份验证来获得WiFi。而且从一个网络切换到另一个网络的时候都不会间断, 用户甚至感觉不到。这种无缝认证和交接以及空中传送的安全性,将使得WiFi有如蜂窝网络那般易于使用,并提供一致的用户体验与新增加的WiFi网络速度上的优势,你根本感受不到自己某刻正在连接的是WiFi还是3G网络。
- wpa_supplicant:是Android用户空间中无线网络部分的核心模块,所有Framework层中和
Wi-Fi相关的操作最终都将借由wpa_supplicant来完成。 - src :包含了一些通用的数据结构和处理方法.其他三个目录均有可能使用到。
wpa_supplicant架构
wpa_supplicant 启动参数
usage:
wpa_supplicant [-BddhKLqqtvW] [-P<pid file>] [-g<global ctrl>] \
[-G<group>] \
-i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-p<driver_param>] \
[-b<br_ifname>] [-e<entropy file>] \
[-o<override driver>] [-O<override ctrl>] \
[-N -i<ifname> -c<conf> [-C<ctrl>] [-D<driver>] \
[-m<P2P Device config file>] \
[-p<driver_param>] [-b<br_ifname>] [-I<config file>] ...]
drivers:
nl80211 = Linux nl80211/cfg80211
options:
-b = optional bridge interface name
-B = run daemon in the background
-c = Configuration file
-C = ctrl_interface parameter (only used if -c is not)
-d = increase debugging verbosity (-dd even more)
-D = driver name (can be multiple drivers: nl80211,wext)
-e = entropy file
-g = global ctrl_interface
-G = global ctrl_interface group
-h = show this help text
-i = interface name
-I = additional configuration file
-K = include keys (passwords, etc.) in debug output
-L = show license (BSD)
-m = Configuration file for the P2P Device interface
-N = start describing new interface
-o = override driver parameter for new interfaces
-O = override ctrl_interface parameter for new interfaces
-p = driver parameters
-P = PID file
-q = decrease debugging verbosity (-qq even less)
-t = include timestamp in debug messages
-v = show version
-W = wait for a control interface monitor before starting
example:
wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf
wpa_supplicant 启动流程
wpa_supplicant 初始化
wpa_cli
- 连接上某个网卡的wpa_supplicant服务
- 搜索网络并列出结果
- 添加一个网络
- 配置一个网络,并保存配置
- 查看保存的网络并切换到一个已保存的网络
- 断开该网卡的网络
参考:
wpa_cli使用方法
WIFI适配层
里面定义很多字符串变量和适配层的接口实现,是对wpa_supplicant程序通信的接口封装,用来完成上层和wpa_supplicant的通信, 头文件在libhardware/include/hardware下,这里的函数用来向JNI的本地实现提供调用接口。
这里的函数,我把它们分为四类函数:
- 命令相关的(控制)函数,就是在JNI层android_XXX_Command()函数所调用 的Wifi_Command()函数,调用流程如下:
android_XXX_command()=>docommand()=>wifi_command()=>wifi_send_command()=>wpa_ctrl_require()。 - 监听函数,即Wifi_wait_for_event()函数,调用流程如下:android_net_wifi_Waitforevent()=>wifi_wait_for_event()=>wpa_ctrl_recv()。
- WPA_SUPPLICANT的启动,连接,关闭函数
- 驱动的加载和卸载函数
Android启动WiFi流程
参考资料:
<< 深入理解Android:WiFi模块+NFC和GPS卷>>
wifi技术从了解到熟悉
WiFi芯片厂商
Hostapd简介
Hotspot 2.0是什么?
WIFI系统架构