概念
BleMesh依賴于低功耗藍牙 - 低功耗藍牙技術(shù)是藍牙m(xù)esh使用的無線通信協(xié)議棧粪小。
藍牙具有一對一椒楣、多對一及多對多三種通信方式爆惧。
BleMesh采用的是多對多的通信方式臊旭,Mesh網(wǎng)絡(luò)中的所有設(shè)備都可以互相進行通信落恼。
未加入mesh網(wǎng)絡(luò)的設(shè)備稱為"unprovisioned devices(未配網(wǎng)設(shè)備)";
已加入mesh網(wǎng)絡(luò)的設(shè)備稱為"node(節(jié)點)"离熏;
未配網(wǎng)設(shè)備轉(zhuǎn)換為節(jié)點的過程稱為"provisioning(配置)"佳谦;
一個節(jié)點具有多個組成部分,每個可以獨立進行控制滋戳,每個組成部分稱為"element(元素)"钻蔑;
一個元素有多種情況,這種情況稱為"state(狀態(tài))"奸鸯,例如Generic OnOff狀態(tài)咪笑;
Properties(屬性)代表具體含義的數(shù)據(jù)
Message(消息)用來操作狀態(tài)值,分為三種:GET娄涩、SET窗怒、STATUS映跟,SET消息又分為有響應(yīng)式/無響應(yīng)式。
加入Mesh網(wǎng)絡(luò)
設(shè)備加入mesh網(wǎng)絡(luò)的過程稱為provisioning,用于驅(qū)動provisioning過程的設(shè)備稱為provisioner辜昵,provisioning成功后成為node荸镊,還需要經(jīng)過一系列的配置。
配網(wǎng)過程應(yīng)該遵循配網(wǎng)協(xié)議
配網(wǎng)有5個階段:
Beaconing 信標(biāo)
發(fā)起廣播通知配網(wǎng)Invitation 邀請
provisioner發(fā)送配網(wǎng)邀請PDU,待配網(wǎng)設(shè)備作出響應(yīng)堪置,在Provisioning
Capabilities PDU中回復(fù)關(guān)于自身的信息躬存。Exchange public keys 交換公鑰
provisioner與設(shè)備間互換公共密,公鑰會用于分發(fā)配網(wǎng)數(shù)據(jù)時Session Key的產(chǎn)生舀锨。Authentication 認證
provisioner與設(shè)備間通過特定動作進行身份認證岭洲。Distribution of provisioning data 分發(fā)配網(wǎng)數(shù)據(jù)
從公鑰和兩個設(shè)備的私鑰派生出Session Key,配網(wǎng)的信息交互的過程會用這個Session key來加密雁竞,將配網(wǎng)數(shù)據(jù)PDU包含“NetKey钦椭、DeviceKey...”發(fā)送給設(shè)備。
藍牙Mesh協(xié)議架構(gòu)
藍牙Mesh加密
NetKey:網(wǎng)絡(luò)消息加密加密碑诉,成為網(wǎng)絡(luò)的一員。
AppKey(ApplicationKey):處理應(yīng)用層數(shù)據(jù)侥锦,有AppKey才能實現(xiàn)上層傳輸層以上的所有功能进栽。
DevKey(DeviceKey):每個節(jié)點的devKey唯一,用于配網(wǎng)階段和配網(wǎng)器進行安全傳輸用恭垦,只有配網(wǎng)器與入網(wǎng)的節(jié)點知道DevKey快毛。
Mesh攻擊
垃圾桶攻擊(Trashcan Attacks):
重放攻擊(Replay Attacks):
通過SEQ Number與Iv Index來保證消息是最新的
每條指令都會攜帶Seq,當(dāng)下一個seq小于上一條時則該指令不會執(zhí)行番挺,provisioner端記錄seq變化唠帝,同時node也存在記錄,當(dāng)node重置或者Iv Index更新時玄柏,seq都會重置襟衰。
節(jié)點角色
代理:實現(xiàn)Gatt和藍牙Mesh節(jié)點之間的mesh消息發(fā)送與接收。
中繼:轉(zhuǎn)發(fā)從其他設(shè)備接收到的消息粪摘,數(shù)據(jù)包包含TTL字段瀑晒,用于限制中繼的跳數(shù)。
低功耗/友好:兩個節(jié)點互幫互助徘意,由友好節(jié)點存儲消息苔悦,在低功耗節(jié)點需要消息時,友好節(jié)點才會傳送消息椎咧,他們關(guān)系稱為"friendShip"玖详,一般低功耗節(jié)點受限于功耗,而友好節(jié)點相反,功率不受限的節(jié)點很適配作為友好節(jié)點蟋座。
地址分配
UnicastAddress:
一個network最多支持32767(0x7FFF)個地址
GroupAddress:
動態(tài)分配的地址(Dynamically Assigned) -> 0xC000-0xFEFF
固定地址(Fixed Address) – 由藍牙技術(shù)聯(lián)盟分配劳澄,分為五段:
保留供將來使用 (RFU) –> 0xFF00-0xFFFB
- 發(fā)送到啟用代理(proxy)功能的所有節(jié)點
All-proxies -> 0xFFFC - 發(fā)送到啟用friend功能的所有節(jié)點
All-friends -> 0xFFFD - 發(fā)送到啟用中繼(relay)功能的所有節(jié)點
All-relays -> 0xFFFE - 發(fā)送到所有節(jié)點
All-nodes -> 0xFFFF
發(fā)送到固定節(jié)點的所有消息都由節(jié)點的主元素(primary eleme6 nt)進行處理
Model
節(jié)點的基本功能都由模型來定義和實施,模型位于元素內(nèi)蜈七,模型能定義并實施節(jié)點的功能和行為秒拔,而狀態(tài)能定義元素的狀態(tài)/條件。
藍牙Mesh網(wǎng)絡(luò)通過客戶端-服務(wù)器架構(gòu)進行通信
服務(wù)器模型(Server Model):暴露元素的狀態(tài)飒硅,定義模型能夠發(fā)送/接收消息砂缩,并根據(jù)這些消息定義元素的行為。
客戶端模型(Client Model):對狀態(tài)進行訪問三娩,請求庵芭、更改或使用服務(wù)器的狀態(tài)
控制模型(Control Model):具有多種功能,可能同時含有一個或多個客戶端模型雀监、服務(wù)器模型
Configuration Server Model (Root Model)
表示mesh網(wǎng)設(shè)備的配置双吆,該model只有主元素支持,該model定義了多種狀態(tài)
Configuration Client Model (Root Model)
該模型表示該元素可以控制節(jié)點的配置
主要的作用是設(shè)備上述Configuration Server Model所擁有的狀態(tài)会前。
Config Model App Bind 該消息作用將appKey bind to Model好乐,將appKey綁定至model如何理解?
當(dāng)一個元素收到一個模型與AppKey綁定的消息并成功執(zhí)行后,它應(yīng)該將AppKey索引對應(yīng)的AppKey綁定到特定的模型上瓦宜,并給模型返回AppKey狀態(tài)消息蔚万。
每個server Model都有一組綁定到它的appKey,這些key值就負責(zé)加密、認證有這些model處理的消息临庇。