wifi组播配网原理


声明:本文转载自https://my.oschina.net/u/3680558/blog/1553090,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

    公布这份代码的目的是希望有人来改进这项技术,因为目前所知wifi组播配网在部分路由器上仍有问题。但是,不管怎样,这项技术能为我们在未来的物联网生活中带来便利,对于我们使用的大部分路由是兼容的,我选择公布它,希望更多的人可以了解这项技术、使用这项技术、并完善它。

一、组播。

组播,英文名Multicast,这里有必要同时提下Broadcast和Unicast,翻译成中文分别是广播和单播,顾名思义,广播就是单台主机向网络中所有主机发送消息,单播是两台主机之间进行对话,而组播则是单台主机向特定的一组主机发送消息。在以太网数据帧头中会需要指定发送以及接受设备的MAC地址,以确定该数据包的来源与去向,广播时接收方的MAC地址为0xFFFFFFFFFFFF,单播时接收方的MAC地址为对端MAC地址,而组播时,接收方的MAC地址则与组地址之间有一个映射关系,而WiFi组播配网正是利用了这个组地址与MAC地址的映射。

用过网络抓包工具的肯定知道,抓包时会发现电脑经常与一些奇怪的ip地址进行UDP通讯,例如224.0.0.251,224.0.0.1,224.0.0.22,这些地址代表了一组特定的主机,路由器会将这些UDP包发送到加入该组的主机。关于组播技术的具体细节可以查阅相关文档了解,本文将不再赘述。ieee将224.0.0.0 ~ 239.255.255.255划定为组播保留地址,在以太网中,目的IP地址为组播保留地址的数据包,目的MAC地址需要做一个映射。具体做法是,MAC地址的3个高字节固定为01:00:5E,后三个字节依次为组地址的从高字节起的第二字节取低7位、组地址的第三字节和第四字节,例如组地址225.215.145.230对应的MAC地址为01:00:5E:57:91:E6,这里需要了解的是,虽然我们看到的组播MAC地址大多都为01:00:5E开头,但并不是只有以01:00:5E开头的MAC地址才是组播MAC地址,MAC地址的前24bit叫做organization unique identifier(OUI),01:00:5E是ieee的OUI,习惯性的被大多数厂商和文献使用,判断一个MAC是否为组播MAC的依据是MAC地址的第一个字节的bit0是否为1。

 

二、WiFi数据帧头结构

在介绍WiFi帧头结构之前,我们先了解下WiFi通信的一些基本原理。WiFi工作于2.4GHz与5.8GHz两个频段,为简单起见,5.8GHz频段暂时忽略。WiFi在2.4G频段共有14个信道,分别是1-14信道,其中14信道只有日本在使用,这些信道的中心频率依次是2.412GHz /2.417GHZ /2.422GHz /2.427GHz /2.432GHz /2.437GHz /2.442GHz /2.447GHz /2.452GHz /2.457GHz /2.462 GHz / 2.467GHz /2.472 GHz /2.484 GHz,第14信道与第13信道中心频率相差12MHz, 其他各相邻信道的中心频率相差5MHz。使用时,路由器工作在一个固定信道,wifi网卡会循环在1-13信道扫描wifi热点,最终用户选择的热点在哪个信道wifi网卡就会跳到该信道去连接这个热点。

下面是一个常见的802.11MAC帧,在802.11的MAC帧会标明目的MAC地址/源MAC地址/BSSID分别表示这个wifi数据帧发给哪个设备,来自哪个设备,从哪个路由器发出来的,wifi网卡需要根据目的MAC地址来区分哪些数据包是发给自己的应对处理,哪些数据包不是发给自己的需要丢弃。

802.11 MAC帧

2 byte

2 byte

6 byte

6 byte

6 byte

2 byte

6 byte

0-2312 byte

6 byte

Frame

Control

Duration

/ID

Addr1

Addr2

Addr3

Seq-ctrl

Addr4

Frame body

FCS

 

三、WiFi组播配网

wifi组播配网正是利用了之前所说的组地址与组播MAC地址之间的映射及wifi数据帧头中的MAC地址信息来传输配网信息。

在发送端,将需要传输的数据以2个字节为单位通过组播传输出去,为保证数据先后顺序的正确性,需要为这些数据编上号,为了便于接收端区分wifi组播数据帧是配网,双方约定使用一个同步头来作为前导,此外为保证传输的有效性还需要将校验值、数据长度、协议和版本号告诉接受端,如果消息超出了一次分包消息的长度,需要将数据分成多个数据包来传输,为了确保数据的安全性,采用AES加密算法将ssid/passphrase/pmk加密,为了确保不会出现0结尾的组地址,采用base64编码算法对密文进行编码。

监听端,使wifi网卡循环在1-13信道监听组播wifi数据帧,以约定的组播MAC地址为同步头,当监听到同步头之后,进入接收模式,只接收来自该MAC地址的组播wifi数据帧,在接收完包头信息及数据之后进行解析,依次将base64编码还原成aes密文,再使用之前约定的密钥解密,得到ssid/passphrase/pmk,完成配网。

    代码托管在码云(<_<baba),链接:https://gitee.com/NianHuaDaoYing/wifiZuBoPeiWang。

本文发表于2017年10月19日 08:34
(c)注:本文转载自https://my.oschina.net/u/3680558/blog/1553090,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 3284 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1