zoukankan      html  css  js  c++  java
  • IoT设备WiFi配网及现状

    一、引言

    现下,物联网(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模式,脚本示例:
    #!/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配置文件示例:

    /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配置文件示例:

    /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模式并连接指定的路由器。脚本示例:

    #!/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芯片的混杂模式监听空间中的无线信号,就会得到如下图所示的数据包: 

    802.11数据包的抓取参见另一篇:Windows下802.11抓包

    从无线信号监听方的角度来说,不管无线信道有没有加密,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)配网过程中有相似的同频无线信号的干扰,也有几率导致失败。

    (4)手机如果开启“WLAN助手”、“WLAN助理”、“智能wifi助手”这类功能的话,连接的设备AP(由于无广域网访问功能)会被自动切到其他网络(比如用户的移动网络),从而导致无法配网。

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

  • 相关阅读:
    深度卷积网络中如何进行上采样?
    权重衰减(weight decay), L2正则
    python中的super().__init__()
    随机变量的间独立性及其传播
    卡尔曼滤波、扩展卡尔曼滤波、无迹卡尔曼滤波以及粒子滤波原理
    贝叶斯推断中的后验概率、似然函数、先验概率以及边际似然定义(转)
    详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解(转)
    python告警发微信
    python模块operator操作符函数
    Django之CSRF验证。
  • 原文地址:https://www.cnblogs.com/rockyching2009/p/10042263.html
Copyright © 2011-2022 走看看