wifi组播配网原理

公布这份代码的目的是希望有人来改进这项技术,因为目前所知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。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值