1WLAN技术WLAN是WirelessLAN的英文缩写,是无线LAN的意思。 无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活性、组网快捷、个性化等特点。 将该技术应用于通信网接入网领域,可以方便灵活地为用户提供网络接入,适用于用户流动性大、有数据业务需求的公共场所、高端企业或家庭用户、需要临时组网时,可以有线接入
2802.11协议概述2.1.1作为全球公认的局域网权威,IEEE802工作组确立的标准在过去20年间在局域网领域独占鳌头。 这些协议包括802.3以太网协议、802.5TokenRing协议和802.3 z100快速以太网协议。 1997年,经过7年的工作,IEEE发表了802.11协定。 这也是无线局域网领域第一个得到国际认可的协议。
1999年9月,他们提出了802.11b'HighRate '协议以补充802.11协议,802.11b以802.11的1Mbps和2Mbps的速度,5.5Mbps和11Mbps两个新的网络吞吐量速度802.11b允许移动用户获得与以太网相同的性能、网络吞吐量和可用性。 这种基于标准的技术使管理员能够根据环境选择合适的局域网技术来构建自己的网络,以满足业务用户和其他用户的需求。 802.11协议主要运行在ISO协议的最低两层,对物理层进行了一些修改,增加了高速数字传输的特性和连接的稳定性。
主要内容:
1.802.11工作方法
2.802.11物理层
3.802.11b增强物理层
4.802.11数字链路层
5 .协同结构、蜂窝结构和漫游
3802.11种主要物理组件3.1工作站(Station )主要用于在工作站之间传输数据。 工作站是指具有无线网络接口的计算设备。
3.2接入点(Access Point ) 802.11网络使用的帧必须转换才能传输到其他不同类型的网络。 具备无线到有线桥接功能的设备称为接入点。 接入点的功能还不止这些,但网桥是最重要的。
3.3无线介质(无线媒体) 802.11标准在工作站之间以无线介质传输帧。 定义的物理层不止一种,802.11首先对两种射频物理层和一种红外物理层进行了标准化。
3.4分布式系统当几个接入点合并复盖很大的区域时,必须彼此通信以获知移动工作站的位置。 分布式系统是802.11的逻辑组件,用于将帧转发到目标。
下图是802.11网络的基本服务集“基本服务集”,包含这四个物理组件。
4WIFI适配层
内部定义多个字符串变量和适应层的接口安装是用于完成上层和wpa_supplicant通信的wpa_supplicant程序通信的接口封装,头文件为lib hardware/supplicant
这里的函数,我把它们分成四种函数:
一个是与命令相关的“控制”函数(由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_SUPPLICANT的启动、连接和函数
第四个是驱动加载/卸载函数
3358 www.Sina.com/http://www.Sina.com/5.1 wpa _ ctrl角色定义了两种套接字和一个管道,分别实现了与wpa_supplicant的通信,但在实际实现中是soso
如果从wifi.c很难看出与wpa_supplicant存在什么关系,则与此关系密切的是此wpa_ctrl.h文件,其中定义了声明两个套接字的类wpa_ctrl。 一个是与本地连接的套接字。 wpa_ctrl和wpa_supplicant之间的通信需要套接字,但wpa_supplicant通过调用wpa_ctrl.h中定义的函数和wpa_supplicant进行通信。 wpa_ctrl类(
两个socket)就是他们之间的桥梁。 5.2 WPA_SUPPLICANT 5.2.1 概念wpa_supplicant本是开源项目源码,被谷歌修改后加入android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上的工作内容是通过socket(不管是wpa_supplicant与上层还是wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。
5.2.2 Wpa_supplicant与驱动的交互 5.2.2.1 wpa_supplicant.c首先定义一个驱动操作数组externstructwpa_driver_ops *wpa_supplicant_drivers[],然后是系列wpa_supplicant_XXX()函数,很多函数里面调用 wpa_drv_XXX()函数,这些函数是wpa_supplicant_i.h中实现的函数。几乎每个函数都需要一个wpa_supplicant结 构,对其进行所有的控制和通信操作。
5.2.2.2 Wpa_supplicant_i.h其中定义了一个重要数据结构wpa_supplicant,其中有一个重要的driver成 员,它是wpa_driver_ops类型,可以被用来调用抽象层的接口。接下来是系列函数声明,这些函数声明在wpa_supplicant.c中实现,然后就是wpa_drv_XXX函数,这些函数就是在 wpa_supplicant.c中被wpa_supplicant_xxx函数调用的,而这些wpa_drv_xxx函数也都有一个 wpa_supplicant结构的变量指针,用来调用封装的抽象接口,而这些抽象接口的实现在driver_wext.c中(如果使用的汉斯WEXT驱动)。
这里要注意的是:在wpa_suppliant.c文件中定义的很多函数是在该头文件中声明的,而不是在wpa_supplicant.h中声明的。
5.2.2.3 Driver_wext.c对wpa_drvier_ops的个函数的具体实现,该结构指针在wpa_supplicant注册一个网络接口时会被初始化赋予指定的操作指针,wpa_supplicant.c中的wpa_supplicant_xxx函数通过wpa_supplicant结构中的该操作指针调用WEXT的实现接口。
就是在该文件中,创建了三个socket:ioctrl_socket,event_socket和mlme_socket,它们分别有自己的用途,如ioctrl_socket用于发送控制命令,event_socket用于监听驱动传来的event事件等。Wpa_supplicant通过这三个socket与wifi驱动关联,这里的socket同fd(文件描述符)类似。
6 Wpa_cli调试工具 6.1 启动wpa_supplicant使用下面命令启动wpa_supplicant:
wpa_supplicant-Dwext -iwlan0 -C/data/system/wpa_supplicant-c/data/misc/wifi/wpa_supplicant.conf
为了确保wpa_supplicant真的启动起来了,使用“ps”命令查看。
6.2 连接wpa_cli到wpa_supplicantwpa_cli-p/data/system/wpa_supplicant -iwlan0
然后,就可以使用wpa_cli调试工具进行wifi调试了,下面列出了一些常用的调试命令:
>scan //扫描周围的AP
>scan_results //显示扫描结果
>status //显示当前的连接状态信息
>terminate //终止wpa_supplicant
>quit //退出wpa_cli
>add_network //返回可用network id
>set_network<network id> <variable> <value> //设置网络
>select_network<network id> //选择网络,禁用其它网络
>disable_network<network id> //禁用网络
>enable_network<network id> //启用网络
6.3 示例 6.3.1 无密钥认证AP>add_network (返回可用networkid, 假定返回0)
>set_network 0 ssid “666”
>set_network 0 key_mgmt NONE
>enable_network 0
>quit
如果上面的操作正确,我们会连接到一个AP,它的SSID为“666”,现在需要一个IP来访问internet:
dhcpcd wlan0
成功获取IP后,即可连上internet。
6.3.2 WEP认证AP>add_network (假设返回1)
>set_network 1 ssid “666”
>set_network 1 key_mgmt NONE
>set_network 1 wep_key0 “ap passwork”
>set_network 1 wep_tx_keyidx 0
>select_network 1 (如果你已经连上了其它的AP,那么就需要这个命令来禁用其它的网络)
>enable_network 1
然后同上获取IP,连接到internet上。
6.3.3 WPA-PSK/WPA2-PSK认证AP>add_network (假定返回2)
>set_network 2 ssid “666”
>set_network 2 psk “your pre-shared key”
>select_network 2
>enable_network 2
还有其它的命令进一步设置网络,不过wpa_supplicant已经给了我们一些默认的配置。
6.3.4 隐藏藏AP 原则上应该只要在上面的基础上去set_network netid scan_ssid 1即可,测试过无加密的Hidden AP,WEP/WPA/WPA2应该道理一样。