1、频谱划分
WiFi总共有14个信道,如下图所示:
1)IEEE 802.11b/g标准工作在2.4G频段,频率范围为2.400—2.4835GHz,共83.5M带宽
2)划分为14个子信道
3)每个子信道宽度为22MHz
4)相邻信道的中心频点间隔5MHz
5)相邻的多个信道存在频率重叠(如1信道与2、3、4、5信道有频率重叠)
6)整个频段内只有3个(1、6、11)互不干扰信道
2、2.4GHz中国信道划分
802.11b和802.11g的工作频段在2.4GHz(2.4GHz-2.4835GHz),其可用带宽为83.5MHz,中国划分为13个信道,每个信道带宽为22MHz
北美/FCC
2.412-2.461GHz(11信道)
欧洲/ETSI
2.412-2.472GHz(13信道)
日本/ARIB
2.412-2.484GHz(14信道)
esp8266先scan 下AP ,得到AP的相关信息,如工作的channel ,然后配置wifi芯片工作在刚才scan到的channel上去接收UDP包,如果没有接收到,继续配置ESP8266工作在另外的channel上,如此循环,直到收到UDP包为止,提前进行SCAN 下WIFI AP就是为了提高配置效率。假设当前网络中只有两个AP,一个AP工作在CHANEL1,另外个 ap工作在channel13,我们现在需要配置智能硬件连接到AP2 ,就是channel13上,如果不提前scan就需要从1--13扫描浪费时间。就是需要从channel1-chane2 ---...channnel13一直扫描了,如果扫描了AP,芯片马上从AP CHANNNEL1 到channel13加快获取到UDP包;
3.wifi设备联网方式
1.AP模式: APP 配置 手机连接到 智能硬件(WIFI芯片 的AP),构建成一个局域网,当然该局域网是不能上网的,但是局域网内的各个设备的通信是OK
2. 快连技术:
快连技术原理上都类似,一键配置模式原理及应用;当前主流IOT的wifi方案有:
实现原理是这样:手机通过UDP广播,将AP的相关信息组帧发出。而WiFi模块一直处于UDP监听状态。获取到AP信息之后,WiFi模块便可以接入AP了。
WLAN都是不加密的话,那UDP直接把相关信息发出来就好,但是一般的路由器AP的加密方式是不固定的,模块没法知道UDP数据是何种加密方式,因此没办法解析出DATA信息。但是可以间听到通讯底层的数据帧中的部分信息(数据部分加密不可见)
注:
通过分析802.11的MAC帧格式,可以知道,链路层载荷数据(即网络层的头部及网络层数)在数据帧中是清晰可见的,只要接到802.11帧就可以立刻提取出载荷数据
常见的数据帧格式介绍:
通过长度编码的方式:
从802.11帧格式分析中获知,无线信号监听方的角度来说,不管无线信道有没有加密,DA、SA、LENGTH 、LLC、SNAP、FCS字段总是暴露的,因此信号监听方可以从这6个字段获取有效信息.从发送方讲,由于操作系统的限制,如果采用广播只剩下LENGTH发送方可通过改变其所需要发送数据包的长度进行控制.所以只要指定出一套利用长度编码的通讯协议,就可利用数据包的Lenght字段进行数据传递;
举个例子,比如要发送“1,2,3”,即[0x31, 0x32, 0x33]。那么应该发送如下数据(DATA的数据长度分别为0x31, 0x32, 0x33):(具体编码厂商可能不同)
组播地址编码方式:
组播地址是保留的D类地址从224.0.0.0-239.255.255.255
224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用。
224.0.1.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效。
239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。
组播MAC地址的高24bit为0x01005e,第25bit为0,即高25bit为固定值。MAC地址的低23bit为组播IP地址的低23bit。由于 IP组播地址的前4bit 是1110,代表组播标识,而后28bit中只有23bit 被映射到MAC 地址,这样IP 地址中就有5bit 信息丢失,导致的结果是出现了32 个IP 组播地址映射到同一MAC 地址上。
由图可以知道,可以利用DA(组播地址对应的mac地址进行编码),因为DA也是可见的
所以可以利用组播地址的后23位来传递数据,比如向组播地址发送数据
1110 0000 0111 0000 0000 0000 0000 0000
就相当于后面23位是数据,xxxx xxxx x111 00000000 0000 0000 0000
这23位数据的表示厂商可以自定义,比如几位表示数据的长度,几位表示数据序号,几位表示数据内容。同样实现把wifi名称和密码进行传输