一、引言

现下,物联网(IoT/IoE)中智能产品普遍采用WiFi与路由器完成连接,然后通过手机和云端进行数据交互,拓扑结构如下:

由上图可见,APP和智能产品之间并没有直接的交互,而是夹杂了”云“端(当然,我们也可以直接走局域网)。

问题来了:智能硬件如智能插座、智能空调、智能空气净化器等,由于不具备人机交互界面,所以不能像电脑一样的搜索、选择指定的AP并输入连接密码。

WiFi配网,就是用来解决智能设备的联网需求的。进一步来说就是通过某种方式把AP的名称(SSID)和密码(PWD)告知智能设备中的WiFi模块,之后智能设备根据收到的SSID和密码连接指定AP。

二、主流配网方式

目前流行的WiFi配置模式一般有以下两种:

1、SoftAP配网:智能设备的WiFi模块切换到AP模式,手机作为STA连接智能设备的AP,之后双方通过建立一个Socket连接交互数据(之前双方约定好端口)。

2、快连/一键配置模式:手机APP把相应信息打包到802.11数据包的特定区域,发送到周围环境中;智能设备的WiFi模块处于混杂模式(Promiscuous Model)下,监听网络中的所有报文,直到解析出需要的信息(之前双方约定好数据格式)。

可见,两者都需要WiFi硬件的支持。SoftAP方式需要硬件支持AP模式,快连/一键配置方式需要硬件支持混杂模式(有些WiFi芯片厂家为了省电关闭了混杂模式)。

三、SoftAP配网

以Linux终端为例:

首先,切AP模式,脚本示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#!/bin/sh

killall -q wpa_supplicant

killall -q udhcpc

killall -q udhcpd

killall -q hostapd

# 以上:清除当前网络相关进程

echo "start switch to AP mode..."

mkdir -p /var/lib/misc

touch /var/lib/misc/udhcpd.leases

ifconfig wlan0 down

ifconfig wlan0 10.168.1.1 up

# 以上:当前网卡IP为10.168.1.1

hostapd -B /etc/wifi/hostapd.conf

# 以上:进入AP模式。不同驱动进入AP模式的方式不同

udhcpd /etc/wifi/udhcpd.conf

# 以上:启动udhcpd,为连接到AP上的设备分配IP

/etc/wifi/hostapd.conf配置文件示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

/etc/wifi/hostapd.conf

# hostapd服务配置文件

interface=wlan0

ctrl_interface=/var/run/hostapd

ctrl_interface_group=0

hw_mode=g

channel=1

beacon_int=100

driver=nl80211

ignore_broadcast_ssid=0

macaddr_acl=0

#auth_algs=1

wpa=2

wpa_passphrase=AP_PASSWD

rsn_pairwise=CCMP TKIP

/etc/wifi/udhcpd.conf配置文件示例:

1

2

3

4

5

6

7

8

9

10

/etc/wifi/udhcpd.conf

# udhcpd服务配置文件

interface   wlan0

start   10.168.1.2

end 10.168.1.254

opt dns 10.168.1.1

opt router  10.168.1.1

option subnet 255.255.255.0

option domain localhost

option lease 864000

其次,智能设备起一个socket等待设备连接自己,之后双方通过socket通信。智能设备收到WiFi信息,保存到/etc/wifi/wpa_supplicant.conf文件

最后,智能设备退出AP模式并连接指定的路由器。脚本示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#!/bin/sh

ifconfig wlan0 down

killall -q wpa_supplicant

killall -q udhcpd

killall -q udhcpc

killall -q hostapd

ifconfig wlan0 up

# 以上:清除当前网络相关进程

wpa_supplicant -B -Dnl80211 -iwlan0 -c/etc/wifi/wpa_supplicant.conf

# 以上:连接路由器

udhcpc -R -i wlan0

# 以上:向路由器请求IP等信息

四、快连/一键配置

4.1 无线网卡的工作模式

无线网卡是采用无线信号进行数据传输的终端。无线网卡通常包括 4 种模式,分别是广播模式、多播模式、直接模式和混杂模式。如果用户想要监听网络中的所有信号,则需要将网卡设置为监听模式。监听模式就是指混杂模式,下面将对网卡的几种工作模式进行详细介绍。如下所述:

(1)广播模式(BroadCast Model):它的物理地址(Mac)是 0XFFFFFF 的帧为广播帧,工作在广播模式的网卡接收广播帧。

(2)多播传送(MultiCast Model):多播传送地址作为目的物理地址的帧可以被组内的其他主机同时接收,而组外主机却接收不到。但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。

(3)直接模式(Direct Model):工作在直接模式下的网卡只接收目的地址是自己 Mac地址的帧。

(4)混杂模式(Promiscuous Model):工作在混杂模式下的网卡接收所有的流过网卡的帧,通信包捕获程序就是在这种模式下运行的。

4.2 快连/一键配置概述

一键配置通过802.11数据包的特定区域传输数据。802.11是IEEE制定的无线局域网协议,以802.2的逻辑链路控制封装来携带IP封包,因此能够以802.2 SNAP格式接收无线网络数据。如果开启wifi芯片的混杂模式监听空间中的无线信号,就会得到如下图所示的数据包:

从无线信号监听方的角度来说,不管无线信道有没有加密,Length、Destination、BSSID、Source、Seq、FCS字段总是暴露的,因此实用信号监听方法存在从这些字段获取信息的可能。但从发送方的角度来说,由于操作系统的限制(比如ISO或者Android),BSSID、Source、Seq、FCS等字段的控制需要很高的控制权限,发送方一般是很难拿到的。综合这些客观条件,目前有组播方式和广播方式两种一键配置发包手段来完成信息的传输。

4.3 快连/一键配置数据编码

应用层主要将一键配置相关的SSID和密码信息经过一定规则编码后进行传输。一键配置应用层数据编码如下表:

4.4 组播一键配置分量

由于802.11处理组播时具有Destination的后三字节与目的组播地址后三字节相同的特性,在实际使用中可以使用组播地址的变化来传递信息。而MAC地址是以太网二层使用的一个48bit(6字节十六进制数)的地址,用来标识设备位置。MAC地址分成两部分,前24位是组织唯一标识符(OUI, Organizationally unique identifier),后24位由厂商自行分配。MAC地址有单播、组播、广播之分。单播地址(unicast address)表示单一设备、节点,多播地址或者组播地址(multicast address、group address)表示一组设备、节点,广播地址(broadcast address)是组播的特例,表示所有地址,用全F表示:FF-FF-FF-FF-FF-FF。当然,三层的IP地址也有单播、组播、广播之分。MAC的结构如下图:

使用组播完成一键配置时,802.11数据包的Destination字段中的Organization Assigned Portion的内容即为发送方填写的组播地址的后23Bit。每一次发包过程可以传输23Bit,整个发包过程先发Version数据,然后再发Data数据。循环连续发送,每包数据的间隔为10ms,直到设备拿到所有信息并校验通过,然后通过Socket通知发送端。

为了提高可靠性,组播发包的过程的两个阶段必须按照一定规则进行编码和校验。

4.5 广播一键配置分量

一键配置还可以基于Length这一字段传输信息,发送方可以通过改变其所需要发送数据包的长度进行很方便的控制。所以,只要制定出一套利用长度编码的通信协议,就可利用802.2 SNAP数据包中的Length字段进行信息传递。

在实际应用中,我们采用UDP广播包作为信息的载体。信息发送方向空间中发送一系列的UDP广播包,其中每一包的长度(即Length字段)都按照一定的规范进行编码,信息接收方利用混杂模式监听空间中的无线信号,并从数据链路层截取802.2 SNAP格式数据包,便可得到已编码的Length字段,随后接收方便可根据协议解析出需要的信息。整个广播发包过程分成同步阶段、Version阶段,Data阶段,其中同步阶段的数据包发包间隔为5ms,Verson和数据的发包间隔为10ms,每轮结束后暂停50ms。同步阶段需要持续发送2秒钟,Version和数据阶段需要连续发送20次为一轮,然后不断重复发送同步阶段和数据阶段,如图所示:

五、WiFi配网应用现状

快连/一键配置暴露的问题:

(1)目前家庭用的路由器无线网络的模式有802.11b only ,802.11g only, 802.11n only,802.11bg mixed,802.11bgn mixed,路由上默认的设置几乎全部为802.11n only和802.11bgn mixed等高速路由模式,手机本身发送的UDP广播/组播包的速率也快,而智能设备的WiFi模块由于性能限制,其在处理速度上可能无法抓取完整的信息,导致快连/一键配置失败。

(2)配网环境中如果存在多个同类型并且处于快连/一键配置的设备,可能存在多个设备都被连上了路由器。

(3)配网过程中有相似的同频无线信号的干扰,也有几率导致失败。

综上,在当前“高性能手机+高速路由”普及背景下,“快连/一键配置配网”愈来愈显现出其在包罗万象的消费者局域网环境下难以胜任的窘境。目前主流厂商,其配网在较早的时候已经取消了“快连/一键配置”,主推“SoftAP”或基于"蓝牙+WiFi"模组的蓝牙直连等配网方式。

[转载] IoT设备WiFi配网及现状相关推荐

  1. 【图解】物联网设备的N种Wi-Fi配网方式

    1 背景介绍 物联网时代,各种各样的智能物联网设备正走进我们我们的生活,智能门锁.摄像头.猫眼门铃.扫地机.智能音箱.空气净化器.体脂秤等等. 这些物联网设备都有一个共同的特征,就是可以联网,通过配套 ...

  2. 物联网WiFi配网方式原来是这七种!

    1.背景介绍 物联网时代,各种各样的智能物联网设备正走进我们我们的生活,智能门锁.摄像头.猫眼门铃.扫地机.智能音箱.空气净化器.体脂秤等等. 这些物联网设备都有一个共同的特征,就是可以联网,通过配套 ...

  3. IoT时代:Wi-Fi“配网”技术剖析总结

    点击上方蓝字,关注高德技术! 1. 导读 近年来,物联网市场竞争激烈,从物联网平台厂商,设备生产商,到服务提供商,都在涌入这片红海.预计到2020年,全球联网设备数量将达到260亿个,年复合增长率达到 ...

  4. 物联网Wi-Fi配网方式,你知道几种?

    简介:什么是配网?有哪些配网方式?物联网配网技术为何鱼龙混杂,互不相通?本文将从原理.流程详细介绍一键配网.设备热点配网.手机热点配网.蓝牙配网.路由器配网和零配等6种配网方式,总结对比各配网方式的特 ...

  5. WIFI配网方式(AP模式、Smartconfig等模式)

    参考:智能设备WIFI配网方式汇总 地址:https://blog.csdn.net/beauytlife_1985/article/details/87539350?spm=1001.2014.30 ...

  6. WiFi配网~智能家居配网解决方案

    1. 什么是配网?   先解释一下什么是配网:当智能设备交付用户时,用户如何根据说明手册或者指引,简单成功的将联网设备连接到路由器下面.这里主要是wifi产品,蓝牙.Zigbee.NB-Iot配网是不 ...

  7. wifi 配网方式总结

    本文汇总介绍了目前市面上各种WIFI模块的常见的配网方式的原理和实现,对比了各种配网方式的优势和局限,得出结论,WEB配网是最直接.最简单.最灵活.约束条件最少的配网方式,应该成为WIFI模块配网的标 ...

  8. WIFI配网方案:1、蓝牙配网 2、WIFI自身配网 3、SmartConfig一键配网

    蓝牙配网: 顾名思义,通过蓝牙给WIFI配网,过程相对较为简单,首先设备上具有WIFI和蓝牙两种功能.然后通过手机的小程序或者APP连接产品蓝牙,连接之后发送WIFI连接所需要的SSID和PASSID ...

  9. ESP32-C3入门教程 WiFi篇⑨——WiFi配网失败常见问题与解决办法(找不到WiFi AP | WiFi密码错误 | 距离AP过远 RSSI判断)

    文章目录 一.前言 二.WiFi配网的常见问题 三.5GHz WiFi 四.找不到WiFi AP 4.1 App限制WiFi名称的输入 4.2 设备回传 配网失败错误码 五.WiFi密码错误 5.1 ...

  10. ESP32超详细学习记录:wifi配网,AP配网,浏览器配网,无线配网

    不想了解代码实现,可直接到代码部分copy!ESP32亲测可用. 使用设备ESP32开发板(ESP32-WROOM-32) 搜了好多别人写的资料,很多都是copy+copy,也没有什么解释.啪,代码放 ...

最新文章

  1. 初学python的30个操作难点汇总(入门篇)希望对你有帮助
  2. 有哪些时间管理的习惯?
  3. narray删除列 python_Python数据分析入门教程(四):数值操作
  4. 英国研发锡钙钛矿太阳能电池更高效环保
  5. python 数组组合_python-查找数组中某些元素的所有组合
  6. PHP扩展开发 - 构建第一个PHP扩展
  7. 基本类型数组转包装类型数组工具类
  8. Azure已成为微软业绩的顶梁柱
  9. C语言给出任意4个数算24点,讨论24点算法。
  10. 在 Confluence 6 中禁用 workbox 应用通知
  11. 四川大学java语言程序设计_四川大学2014年计算机(软件)学院Java语言设计期末考试B卷程序.doc...
  12. 【JEECG技术博文】JEECG图表配置说明
  13. Python 没有函数重载?如何用装饰器实现函数重载?
  14. 锐捷6800 vrrp mstp配置实例
  15. tsm如何备份oracle原理,征文:TSM备份Oracle脚本及策略说明
  16. 用户遭骚扰质疑隐私被航旅纵横泄露 回应:用户有开启关闭的自主权
  17. pyinstaller打包tensorflow+python程序成.exe各种坑(持续添加)
  18. 栈的顺序存储结构框架搭建
  19. 三十、动名词短语 2
  20. CVE-2022-28512 Fantastic Blog CMS 1.0 版本存在SQL注入漏洞

热门文章

  1. java ascii加密_Java 字符加密
  2. 使用TinyPNG批量压缩图片
  3. startActivityForResult调用后立即响应了OnActivityResult()方法,导致setResult()后无响应
  4. Luogu3792 由乃与大母神原型和偶像崇拜
  5. [2018.03.13 T1] 比赛(contest)
  6. 微信小程序获取是android还是ios,微信小程序-手机操作系统以及微信版本判断
  7. suse 内核编译安装_Linux内核编译与安装
  8. python股票回测_主流 Python 量化回测平台,回测速度客观评测
  9. springboot 初始化一个常量map_C++ 惯用法: const 常量和字面量
  10. 利用hashmap的java_利用Java如何实现对HashMap的集合使用