【短距离通信】【WIFI】精讲802.11 协议之WiFi概述、物理层、适配层、wpa_supplicant、Wpa_cli 调试工具

目录

1. WLAN 技术

2. 802.11 协议简述

2.1 概述

3. 802.11 四种主要物理组件

3.1 工作站(Station)

3.2 接入点(Access Point)

3.3 无线媒介(Wireless Medium)

3.4 分布式系统(Distribution System)

4. WIFI 适配层

5 wpa_supplicant

5.1 wpa_ctrl 的作用

5.2 WPA_SUPPLICANT

5.2.1 概念

5.2.2 Wpa_supplicant 与驱动的交互

5.2.2.1 wpa_supplicant.c

5.2.2.2 Wpa_supplicant_i.h

5.2.2.3 Driver_wext.c

6. Wpa_cli 调试工具

6.1 启动 wpa_supplicant

6.2 连接 wpa_cli 到 wpa_supplicant

6.3 示例

6.3.1 无密钥认证 AP 

6.3.2 WEP 认证 AP 

6.3.3 WPA-PSK/WPA2-PSK 认证 AP

6.3.4 隐藏 AP


1. WLAN 技术

      WLAN 是英文 WirelessLAN 的缩写,就是无线局域网的意思。无线以太网 技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活、建网 迅速、个人化等特点。将这一技术应用于电信网的接入网领域,能够方便、灵活 地为用户提供网络接入,适合于用户流动性较大、有数据业务需求的公共场所、 高端的企业及家庭用户、需要临时建网的场合以及难以采用有线接入方式的环境 等。

2. 802.11 协议简述

2.1 概述

      作为全球公认的局域网权威,IEEE802 工作组建立的标准在过去二十年内在 局域网领域独领风骚。这些协议包括了 802.3Ethernet 协议、802.5TokenRing 协议、 802.3z100BASE-T 快速以太网协议。在 1997 年,经过了 7 年的工作以后,IEEE 发布了 802.11 协议,这也是在无线局域网领域内的第一个国际上被认可的协议。

     在 1999 年 9 月,他们又提出了 802.11b"HighRate"协议,用来对 802.11 协议 进行补充,802.11b 在 802.11 的 1Mbps 和 2Mbps 速率下又增加了 5.5Mbps 和 11Mbps 两个新的网络吞吐速率。利用 802.11b,移动用户能够获得同 Ethernet 一 样的性能、网络吞吐率、可用性。这个基于标准的技术使得管理员可以根据环境 选择合适的局域网技术来构造自己的网络,满足他们的商业用户和其他用户的需 求。802.11 协议主要工作在 ISO 协议的最低两层上,并在物理层上进行了一些改 动,加入了高速数字传输的特性和连接的稳定性。

主要内容:

1.802.11 工作方式

2.802.11 物理层

3.802.11b 的增强物理层

4.802.11 数字链路层

5.联合结构、蜂窝结构和漫游4

3. 802.11 四种主要物理组件

3.1 工作站(Station)

     构建网络的主要目的是为了在工作站间传送数据。所谓工作站,是指配备无 线网络接口的计算设备。

3.2 接入点(Access Point)

      802.11 网络所使用的帧必须经过转换,方能被传递至其他不同类型的网络。 具备无线至有线的桥接功能的设备称为接入点,接入点的功能不仅于此,但桥接 最为重要。

3.3 无线媒介(Wireless Medium)

      802.11 标准以无线媒介在工作站之间传递帧。其所定义的物理层不只是一 种,802.11 最初标准化了两种射频物理层以及一种红外线物理层。

3.4 分布式系统(Distribution System)

      当几个接入点串联以覆盖较大区域时,彼此之间必须相互通信以掌握移动式 工作站的行踪。分布式系统属于 802.11 的逻辑组件,负责将帧转送至目的地。 下图为 802.11 网络的基本服务集(basic service set),其中包含了这四种物 理组件。

4. WIFI 适配层

      里面定义很多字符串变量和适配层的接口实现,是对 wpa_supplicant 程序通 信 的 接 口 封 装 , 用 来 完 成 上 层 和 wpa_supplicant 的 通信 , 头 文 件 在 libhardware/include/hardware 下,这里的函数用来向 JNI 的本地实现提供调用接口。

这里的函数,我把它们分为四类函数:

一类是命令相关的(控制)函数,就是在 JNI 层 android_XXX_Command() 函数所调用 的 Wifi_Command()函数,调用流程如下: android_XXX_command()=>docommand()=>wifi_command()=>wifi_send_co mmand()=>wpa_ctrl_require()。

二类是 监 听 函 数 , 即 Wifi_wait_for_event() 函 数 , 调 用 流 程 如 下 : android_net_wifi_Waitforevent()=> wifi_wait_for_event()=>wpa_ctrl_recv()。

三就是 WPA_SUPPLICANT 的启动,连接,关闭函数

四是驱动的加载和卸载函数

5 wpa_supplicant

5.1 wpa_ctrl 的作用

      定义了两类套接字和一个管道,并分别实现了和 wpa_supplicant 的通信,而 在实际的实现中采用的都是套接字的方式,因此 wpa_supplicant 适配层和 wpa_supplicant 层 是通过 socket 通讯的。

       要是从 wifi.c 中真的很难看出它和 wpa_supplicant 有什么关系,和它联系密 切的就是 这个 wpa_ctrl.h 文件,这里面定义了一个类 wpa_ctrl,这个类中声明了 两 个 Socket 套 接口 , 一个 是 本地 一个 是 要连 接 的套 接 口 , wpa_ctrl 与 wpa_supplicant 的通信就需要 socket 来帮忙了,而 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

       首 先 定 义 一 个 驱 动 操 作 数 组 externstruct wpa_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 成7 员,它是 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 -D wext -i wlan0 -C /data/system/wpa_supplicant -c /data/misc/wifi/wpa_supplicant.conf

  • 参数说明‌:
    • -D:指定驱动类型(如 nl80211 或 wext)。
    • -i:指定无线网卡接口名(如 wlan0)。
    • -c:指定配置文件路径(如 /etc/wpa_supplicant.conf)。
    • -B:后台运行。

为了确保 wpa_supplicant 真的启动起来了,使用“ps”命令查看。 

6.2 连接 wpa_cli 到 wpa_supplicant

wpa_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 //设置网络

>select_network //选择网络,禁用其它网络

>disable_network //禁用网络

>enable_network //启用网络

6.3 示例

6.3.1 无密钥认证 AP 

>add_network (返回可用 network id, 假定返回 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 应该道理一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风云说通信

支持小编为您创造更多干货,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值