天天看點

如何從零設計一種物聯網組網協定1、物聯網通信技術分類2、如何從零設計一種物聯網組網協定3、總結更多精品好文

來源 | 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%。

如何從零設計一種物聯網組網協定1、物聯網通信技術分類2、如何從零設計一種物聯網組網協定3、總結更多精品好文

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組成。如下圖所示:

如何從零設計一種物聯網組網協定1、物聯網通信技術分類2、如何從零設計一種物聯網組網協定3、總結更多精品好文

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配網流程。

配網流程如下:

如何從零設計一種物聯網組網協定1、物聯網通信技術分類2、如何從零設計一種物聯網組網協定3、總結更多精品好文

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廣播包的互動,完成了對待配網裝置的身份校驗和認證,并完成了配網資料的下發。

如何從零設計一種物聯網組網協定1、物聯網通信技術分類2、如何從零設計一種物聯網組網協定3、總結更多精品好文

是以極速配網和藍牙Mesh配網統一在找隊友流程裡面,是以借用了很多藍牙Mesh原有的流程。配網過程主要分為三個步驟:

  1. 發現裝置;
  2. 身份校驗和認證;
  3. 配置;

極速配網和藍牙Mesh配網兩者隻在第2步身份校驗和認證上有差異,第1步,第3步是完全一樣的。在第1步中根據發現裝置UUID來判斷是一個支援藍牙Mesh的裝置,還是極速配網的裝置,然後走不同的“身份校驗和認證”流程。

3、總結

本文介紹了物聯網通信協定的基本知識,并通過一個實際商用的例子,介紹如何從零設計一種物聯網組網協定。

希望讀者通過這篇文章能在實際工作了解如何選擇合适的物聯網通信技術,并設計自己的組網和通信協定。

更多精品好文

如何用幾行Python代碼在物聯網裝置上實作語音AI自動識别? 物聯網需要什麼樣的UI互動方式? 如何分析物聯網裝置問題,看懂這篇文章就夠了 透過ALSA這層迷霧剖析AliOS Things音頻架構設計 漫談農業物聯網與網際網路技術的結合 傳感器,物聯網時代的智能硬體數字化入口 如何快速搭建一個像“天貓精靈”的智能語音助手? 物聯網之IP Camera解決方案簡介 從語音互動曆史淺看它是否會是物聯網行業的一個爆點? 帶你走進多媒體世界:視訊檔案是怎麼播放出來的 物聯網雲端一體AI方案的探索 物聯網裝置連接配接的下一個引爆點:4G Cat.1 物聯網教育現狀和前景 一文看懂藍牙在物聯網中的應用場景 下一個智能硬體爆品是什麼? 華為、阿裡、小米都在用的全屋智能技術 為什麼物聯網領域使用Rust的項目越來越多? 物聯網中也能使用區塊鍊技術?面向IoT的區塊鍊基礎架構IoTeX 開源硬體的前世今生 物聯網碎片化的一些思考 邊緣計算在物聯網行業的應用 物聯網太難 ? 不妨試試用Python來開發 5G會給物聯網行業帶來哪些變化? 必須要了解的物聯網安全知識 ARMv9能給ARM帶來新一輪騰飛嗎?(安全篇) ARMv9能給ARM帶來新一輪騰飛嗎?(人工智能篇) 國産物聯網作業系統的出路在哪裡? RISC-V架構能否引領物聯網時代? 物聯網到底為什麼這麼火? 誰才是物聯網連接配接技術中的王者? 物聯網平台大量出現能否将行業帶入爆發式發展 腳本語言适合物聯網開發嗎 從“嵌入式”到“物聯網”的四大轉變 物聯網發展新趨勢