WiFi基础学习到实战(五:WiFi被动扫描)

欢迎大家一起学习探讨通信之WLAN。经前四节基础知识的介绍和WiFi协议帧抓取方式的分享,分析WiFi网络的前期工作已完成。通过大家使用WiFi设备的经验,设备连接一个加密的WiFi网络,通常需要“打开WiFi功能”->“WiFi列表找到目标网络”->“选择输入密码连接”三步,本专栏已分享了【Android11 WiFi开启流程】。本节基于Android11分析WiFi列表中目标网络在列表上显示原理和流程。

WiFi列表界面显示的WiFi网络,都是基于WiFi模块扫描的结果。下面分析Android系统WiFi的扫描流程。

Android产品WiFi列表应用通过AIDL机制,反射调用Android WiFiManager.java中对应的扫描接口。触发Android框架WiFi进行扫描流程。

如下图所示,Android框架WiFi下发扫描命令到Kernel,最终调用到WiFi驱动接口,WiFi模块执行具体的扫描动作,扫描到的网络通过kernel接口反馈到WiFi框架,经过WiFi框架处理,通过广播SCAN_RESULTS_AVALABLE_ACTION通知WiFi相关应用,获取扫描结果,在UI界面中进行显示。

网上已有详细基于Android 11WiFi扫描流程的代码分析,上面框图简单整理了WiFi扫描到显示的主要方法调用,感兴趣的可基于Android11 源码进行分析。

好。以上是Android11 系统WiFi 扫描动作具体代码实现流程。回到本节的主题“WiFi扫描中WLAN协议相关的内容”。WLAN协议中与WiFi扫描有三个相关的管理帧:Beacon,Probe Request和Probe Response帧。

WLAN扫描分为两种方式:

  • 被动扫描:扫描设备在信道监听Beacon帧,获取WiFi网络信息。

  • 主动扫描:扫描设备通过发送Probe Request,WiFi网络路由其回复Probe Response,获取WiFi网络信息。

本节重点分析基于Beacon帧的被动扫描。

Beacon帧,通常被称作WiFi网络的信标帧,WiFi网络周期发送Beacon帧,周期时间称为目标信标传输时间,英文:target beacon transmission time(TBTT) ,为WiFi网络中的设备成员提供通信特性。

注:

  • WLAN设备时钟计数时间以TU为单位,1TU=1024微秒。

  • Beacon默认周期为100TU,通常称为100毫秒。

通过前几节对WiFi网络通信的介绍,大家应该有疑问“WiFi设备发送帧前,需要检测信道状态,如果信道繁忙就不能发送,Beacon能严格按照其周期发送吗?”

答案:Beacon当然不能按照其他周期严格发送。其只是MAC层的帧,依然要遵守WiFi网络TX发送规则。Beacon中宣称下一个Beacon期望的发送时间点。

如WiFi网络在0,100ms,200ms,300ms时间点发送Beacon帧。在0时间,第一个Beacon发送;在100ms时间,因信道繁忙,延迟了1ms,第二个Beacon位于时间101ms发送。但后续第三个依然保持在300ms发送。

接下来我们先看下Beacon帧的抓包实例,如下图所示。从层次结构可以看到其由:802.11 MAC Header + 802.11 Beacon body + FCS组成。

Beacon信息包含了WiFi网络中设备通信的特性,在WiFi网络中是非常重要的管理帧之一,Body内容非常丰富。后续连续几节都会分析Beacon的Body部分。

在分析Beacon帧字段前,先看下WLAN协议对管理帧格式的定义,Beacon作为管理帧,对照上述实例,也满足其格式。

好。下面分析Beacon帧的802.11 MAC Header。

  • Version:2个Bit表示,当前大部分只支持协议版本PV(0)。但已有PV(1)版本MAC帧的定义。

  • Type:2个Bit表示,00表示管理帧。

  • subbype:4个Bit表示,1000表示Beacon。

  • Frame Control Flag:1个字节。每个Bit位表示含义如上所示。

这里我们重点看下DS状态的2个Bit。其他Bit字段在后续用到时进行分析。

(1)To DS=0 Frome DS=0:

  • 发送管理帧和控制帧时的状态,因其终止与WiFi网络MAC子层。不需要进入分发系统服务。

  • IBSS中STA1传输给其他STA时的数据帧。

(2)To DS=1 Frome DS=0:

WiFi网络中,设备给路由器上传数据帧。

(3)To DS=0 Frome DS=1:

WiFi网络中,路由器给设备传输数据帧。

(4)To DS=1 Frome DS=1:

用在四个地址的数据帧中。如WLAN桥接。

注:协议规范【原文】

  • Duration:2个字节。指明当前信道将Busy的时长。单位为微秒。

该字段用在以下三个场景:

  • 重置其他设备的NAV定时器。

  • Legacy Power管理的PS帧指明关联的AID。

  • 免竞争期间告知其他设备免竞争状态。

Bit15=0:Duration值被用作NVA设定更新。其值范围[0, 32767]。表示传输数据的客户端,多长时间将收到ACK帧。

Bit14=1,Bit15=1:Duration字段表示AID。用最低12位表示设备的AID,其值范围[1-2007],如下图所示。

Bit15=1, other bit=0:Duration固定值32768,指明免竞争期间状态,其他设备自行设置NAV值,完成传输退避。

注:协议规范【原文】

In Control frames of subtype PS-Poll other than PS-Poll+BDT frames, and for broadcast transmissions in S1G PPDUs, the Duration/ID field carries the association identifier (AID) of the STA that transmitted the frame in the 14 least significant bits (LSB), and the 2 most significant bits (MSB) both set to 1.

好。接下来分析Beacon帧中802.11 MAC Header的三个地址字段。关于48Bit的WLAN地址,包含信息很多,如感兴趣可参考【第五节:通信之WLAN(MAC地址)】介绍。关于MAC地址使用的注意事项,后续在相关功能中做说明。

如上图抓包所示,上面显示地址个数大于管理帧格式中的3个地址定义。这是为什么呢?

答:管理帧中Address1表示接收地址,其RA=DA。Address2表示发送地址,其TA=SA。Address3表示BSSID。上面实例wireshark解析显示为MAC Header 4个地址,实际Beacon中只有3个地址字段。

上述Beacon帧MAC Header还剩最后一个Sequence Control字段。占两个字节,协议定义如下。

  • 高4Bit:表示分片编号。第一个分片被设置为0,后连续分片其值增加1。

  • 低12Bit:表示帧的序列号,其值范围[0,4095]。

其存在于每一个MSDU,A-MSDU和MMPDU。但控制帧中不包含该字段。关于帧分片说明:

  • 分片门限最小256字节。

  • MSDU分片的帧中Sequence Number都相等。

  • 分片的优点在特定的无线干扰环境下,能改善通信质量。

本节梳理了Android11 WiFi扫描的代码实现,调用过程中会涉及Android的Binder,AIDL和Netlink机制,大家可以基于源码学习了解。同时,通过实例和WLAN协议对Beacon帧的MAC Header字段进行了分析。Beacon帧在WiFi网络中扮演着重要角色,后续我们将详细介绍Beacon帧Body字段的关键字段。WiFi基础学习到实战(五)探讨就到此,后续期待共同继续探讨学习。

注:

对以上所述专业知识有修正意见或建议,可随时留言反馈。如感兴趣更多通信知识,可关注“通信之WLAN” for WeChat 公众号。

谢谢大家支持~!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值