一、引言
由上圖可見,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配網
#!/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"模組的藍牙直連等配網方式。
