來源 | HaaS技術社群不看這幾篇好文,就别說自己了解物聯網
物聯網( IoT ,Internet of things )即“物物相連的網際網路”,是網際網路基礎上的延伸和擴充的網絡,将各種資訊傳感裝置與網絡結合起來而形成的一個巨大網絡,實作在任何時間、任何地點,人、機、物的互聯互通。
物聯網的基礎是将萬物連接配接起來,他是如何連接配接起來的,就是通過物聯網的通信群組網協定。本文将從物聯網通信協定現狀分析入手,講述如何從零設計一種物聯網組網協定。
1、物聯網通信技術分類
物聯網的通信技術有很多種,首先從大類上分為有線通信和無線通信。
1.1、有線通信
以太網(Ethernet)是一種區域網路通信技術, IEEE組織的IEEE 802.3标準制定了以太網的技術标準,它規定了包括實體層的連線、電子信号和媒體通路層協定的内容。
以太網使用雙絞線作為傳輸媒介,在沒有中繼的情況下,最遠可以覆寫200米的範圍。最普及的以太網類型資料傳輸速率為100Mb/s,更新的标準則支援1KMb/s和10KMb/s的速率。
序列槽通信(Serial port)是一種非常通用的用于裝置之間通信的接口,也廣泛用于裝置以及儀器儀表之間的通信。常見的序列槽有RS-232(使用 25 針或 9 針連接配接器)和工業電腦應用的半雙工RS-485與全雙工RS-422。
CAN通信,CAN是控制器區域網路絡(Controller Area Network, CAN)的簡稱,隻要用在汽車控制領域,是一種現場總線,是國際上應用最廣泛的現場總線之一。
1.2、無線通信
Wi-Fi,是一個基于IEEE 802.11标準的無線區域網路技術。“Wi-Fi”常被寫成“WiFi”或“Wifi”,但是這些寫法并沒有被Wi-Fi聯盟認可。Wi-Fi往往是許多開發者的一個顯而易見的選擇,特别是考慮到無線網絡的LAN内的家庭環境中普遍存在。
2G/3G/4G是指第二、三、四代移動通信系統協定,是蜂窩移動通信技術,由通訊營運商搭建網絡,覆寫範圍廣,目前主流是4G, 且2G将退出曆史舞台。
5G是指第五代移動通信系統協定。5G的性能目标是高資料速率、減少延遲、節省能源、降低成本、提高系統容量和大規模裝置連接配接。正在高速發展之中,但目前通信費用較貴。
Bluetooth是一項短距離無線通信的技術,其核心是基于跳頻擴頻(Frequency- Hopping Spread Spectrum,FHSS)技術發展而來的。經常看到的BLE是指藍牙低功耗(Bluetooth Low Energy),他是在藍牙 4.0新增的功能。相比經典藍牙,低功耗藍牙擁有更快的響應速度,最短可在3毫秒内完成連接配接設定并開始傳輸資料,這樣裝置在需要的時候可以及時連接配接并傳輸資料。2017年,藍牙SIG釋出藍牙mesh 1.0版本的協定規格,這是一種基于低功耗藍牙廣播包來實作的mesh網絡技術。藍牙通過藍牙mesh這項新的協定規格正式進入物聯網的領域。
Zigbee是一種低速短距離傳輸的無線通信協定,是一種高可靠的無線數傳網絡,主要特色有低速、低耗電、低成本、支援大量網上節點、支援多種網上拓撲、低複雜度、快速、可靠、安全。
LoRa與同類技術相比,提供更遠的通信距離。LoRa 網關、煙感、水監測、紅外探測、定位、排插等廣泛應用物聯網産品。
從CSDN釋出《2020-2021中國開發者調查報告》中,可以看出WiFi和Bluetooth依舊占領了物聯網通信方式的首要地位,分别占比為68.4%,63.1%。

2、如何從零設計一種物聯網組網協定
物聯網通信協定大緻分為兩類:一類是組網協定(或者叫接入協定),主要負責網絡内裝置間如何進行組網,是物聯網網絡通信的基礎。另一類是通信協定,主要是負責網絡中資料的互動和通信。
本文主要将介紹如何從零設計一種物聯網組網協定。
2.1、協定選型
在設計組網協定之前,首先需要明确使用前面提到的哪種通信技術,是WIFI, Blutooth, LoRa還是ZigBee。
主要是通過網絡覆寫範圍,通信速率,功耗,成本等幾個因素進行選擇。
2.2、定義組網協定規範
選擇了通信技術之後,就需要定義組網協定的規劃。
筆者以在天貓精靈智能音箱上實作的基于藍牙的極速配網協定來做說明。
由于是基于藍牙的組網協定,并且完全使用藍牙的雙向廣播包來組網資訊的互動,是以主要是定義藍牙廣播包的格式和資料傳輸規範。
廣播包格式
極速配網中所有的資料通信以藍牙廣播包的方式,藍牙廣播包格式遵循藍牙4.0規範,使用ADV_NONCONN_IND類型廣播包,由若幹AD Structure組成(參見Bluetooth 4.2 Core Specification, Volume 3, Part C, Chapter 11),每一個ADStructure結構由Length、AD Type、AD Data組成。如下圖所示:
advertising or Scan Response data 格式
接入阿裡巴巴物聯平台的藍牙裝置的廣播包必須包含阿裡巴巴制定的廠商自定義格式(Manufacturer Specific Data,AD Type:0xFF)。如下圖所示:
Field | Size(Octets) | value | Notes | |
Flags | length | 1 | 0x2 | Flags length |
AD Type | 0x1 | Flags Type | ||
根據實際情況填寫 | bit1 必須為 1 (LE General Discoverable Mode) | |||
Manufacturer Specific Data | Length | 根據實際長度填寫 | Manufacturer Specific Data Length | |
固定 0xFF | Manufacturer Specific Data Type | |||
Company ID | 2 | 固定 0x01A8 | Company Identifiers,0x01A8為阿裡巴巴公司編碼 | |
VID | 0x0D | 低四位為阿裡巴巴藍牙規範版本号, 目前版本号為D;高四位為feature flag,目前取值為0。整體取值為0x0D | ||
Payload | 可變 | 實際封包内容 |
Ali beacon通用廣播包資料格式
資料傳輸規範
配網廣播使用标準BLE廣播的方式,資料傳輸采用單包形式,不支援分包。資料采用大端優先方式傳輸。
最大資料長度
不拆包的情況下,單包最大傳輸能力為31個位元組,應用資料長度為23個位元組(31-8)。
配網流程
配網采用采用對稱加密的方式,通過一機一密來保證網絡的安全性,三元組秘鑰由天貓精靈開放平台生成,通過安全的途徑由工廠燒錄到每台裝置上。 相容雲端标準mesh配網流程。
配網流程如下:
Unprovisioned Device Beacon的格式遵循《天貓精靈藍牙mesh軟體基礎規範》中3.2.1節的規定
其中uuid[14]的bit0置為1表示該裝置使用極速配網。
配網中廣播包資料格式
所有資料包的payload部分都由兩部分組成,1個位元組的Provisioning Type,N(最大22)個位元組的封包内容。
如下圖所示:
Provisioning Type | |
payload data | 0~N |
配網封包的第一個位元組為如下:
Name | Type | Description |
Provisioning Random | 0x00 | 發送配網随機數 |
Provisioning Confirmation | 0x01 | 發送鑒權資料 |
Provisioning Data | 0x02 | 下發配網參數(NetKey,Addr) |
Provisioning Complete | 0x03 | 配網成功ACK |
RFU | 0x05–0xFF | 待用 |
此階段中配網器會生成随機數給雲端并廣播給待配網裝置,資料格式如下:
Mac | 待配網裝置的mac位址的後2位 | |
Random A | 8 | 随機數A,用于計算Confirmation和DeviceKey |
Random B | 随機數B,用于計算Confirmation和DeviceKey |
表3.3 Provisioning Random資料格式
Random A和Random B不能一樣。
Provisioning Confirmation
裝置端拿到随機數之後,通過以下算法計算出AuthValueDevice,AuthValueProv和ConfirmationCloud,ConfirmationDevice,将計算出來的ConfirmationDevice值回複給天貓精靈。
資料格式如下:
待裝置的mac位址的後2位 | ||
ConfirmationDevice | 16 |
表3.4 Provisioning
ConfirmationDevice = AES-CMACConfirmationKey(Random A||Random B||AuthvalueDevice)
ConfirmationCloud = AES-CMACConfirmationKey(Random B||Random A||AuthvalueProv)
AuthValueProv = SHA256(三元組ProductID,MAC,Secret,RandomB||RandomA)前16位元組
AuthValueDevice = SHA256(三元組ProductID,MAC,Secret,RandomA||RandomB)前16位元組
ConfirmationKey = SHA256(Random A || Random B || ”ConfirmationKey“)前16位元組
Provisioning Data
配網成功,天貓精靈下發配網資訊,包含Network Key,以及裝置的單點傳播位址,經過加密後下發給裝置。資料格式如下
Mac addr | 為待配網裝置mac位址最後2位元組 | |
Flag | bit0:mesh "key refresh flag" bit1:mesh "IV update flag" | |
Network Key | mesh的networkkey | |
IV index | IV index的最低位元組,最高位補0 | |
Unicast Address | 裝置被配置設定的單點傳播位址 |
表3.6 Provisioning Data資料格式
加密算法如下:
Encrypted provisioning data = prov_data XOR SHA256(ConfirmationCloud||"SessionKey")前22位元組
裝置在收到天貓精靈下發的Provisioning Data之後,向天貓精靈回複一個Provisioning Complete消息表示配網成功。資料格式如下:
MAC | 6 | 待配網裝置的mac位址 |
精靈在收到該消息後,會根據《天貓精靈藍牙mesh軟體基礎規範》中3.3.4節的描述進行後續mesh網絡配置過程,使用的Device Key以如下算法生成
DeviceKey = SHA256(ConfirmationCloud||"DeviceKey")前16位元組
Provisioning Failed
任一方發包最多持續2秒,如果在開始發包後發的3s内沒有收到對方的下一條消息,則認為配網失敗。裝置恢複為未配網狀态,精靈會播報配網失敗。
2.3、實作協定
配網過程主要分為兩個階段,第一個階段就是配網,主要是身份校驗及認證,并交換必要的配網資料;第二個階段就是配置,主要對剛加入網絡的裝置進行初始化的配置。
極速配網隻涉及到第一階段的配網,第二階段配置完全共用的天貓精靈上SIG Mesh的方式。相比較于SIG Mesh配網過程中多次的Mesh封包的互動,極速配網最主要的差別是隻使用兩次BLE廣播包的互動,完成了對待配網裝置的身份校驗和認證,并完成了配網資料的下發。
是以極速配網和藍牙Mesh配網統一在找隊友流程裡面,是以借用了很多藍牙Mesh原有的流程。配網過程主要分為三個步驟:
- 發現裝置;
- 身份校驗和認證;
- 配置;
極速配網和藍牙Mesh配網兩者隻在第2步身份校驗和認證上有差異,第1步,第3步是完全一樣的。在第1步中根據發現裝置UUID來判斷是一個支援藍牙Mesh的裝置,還是極速配網的裝置,然後走不同的“身份校驗和認證”流程。
3、總結
本文介紹了物聯網通信協定的基本知識,并通過一個實際商用的例子,介紹如何從零設計一種物聯網組網協定。
希望讀者通過這篇文章能在實際工作了解如何選擇合适的物聯網通信技術,并設計自己的組網和通信協定。