BLE Mesh(2)—— 基本术语及含义
目錄
1、節(jié)點(node)
2、開通配置(provisioning)
3、元素(element)
4、消息(message)
5、地址(Address)
6、消息的發(fā)布/訂閱(Publish / Subscribe)
7、狀態(tài)與屬性(State / Property)
7.1、狀態(tài)
7.1.1 狀態(tài)的綁定
7.2、屬性
8、特性
8.1、中繼(Relay)
8.2、低功耗 & 友節(jié)點(Low Power & Friend)
8.3、代理節(jié)點(Proxy)
9、安全
在深入了解 mesh 機制原理之前,很有必要先了解和認識他的大致結(jié)構(gòu)以及常用的術(shù)語和他們之間的關(guān)系,這樣能夠首先從整體上有一個大致的認識(組成的部分),站在這個基礎(chǔ)之上,在后面再進行細致的分析;
1、節(jié)點(node)
mesh 是基于 BLE 的星形網(wǎng)狀拓撲結(jié)構(gòu),Spec 中,將處于網(wǎng)狀結(jié)構(gòu)的每一個 BLE 設(shè)備稱之為節(jié)點(node),數(shù)據(jù)在節(jié)點之間進行傳遞。
2、開通配置(provisioning)
設(shè)備在正式成為 mesh 網(wǎng)絡(luò)節(jié)點之前,只能被稱之為一個“未開通配置設(shè)備”(unprovisioned devices),也就是說,這種未開通配置的設(shè)備并沒有辦法與一個已知的 mesh 網(wǎng)絡(luò)中的節(jié)點進行數(shù)據(jù)交互。想要成為某個 mesh 網(wǎng)絡(luò)的節(jié)點,需要有一個流程叫“開通配置”,即,將某個“未開通配置設(shè)備”轉(zhuǎn)化為網(wǎng)絡(luò)節(jié)點的過程成為“開通配置”(provisioning),比如,你購買了一個帶有 mesh 功能的燈,你希望他能夠加入到你家里現(xiàn)有的 mesh 網(wǎng)絡(luò)中,并能夠通過 mesh 網(wǎng)絡(luò)來控制他,那么首先需要為其開通配置,并入這個 mesh 網(wǎng)絡(luò)。
開通配置的過程稍微繁瑣,在以后的章節(jié)會詳細介紹
3、元素(element)
節(jié)點并非 mesh 網(wǎng)絡(luò)中的最小單元,在一個 node 中,可以包含多個元素(element),每個元素都有唯一確定的地址,叫做單播地址(unicast address),每個單元都可以獨立尋址,以便進行單獨的控制。
打個比方:一個 BLE mesh 燈節(jié)點 X,這個節(jié)點包含了 3 盞燈 A/B/C,這個 X-A、X-B、X-C 我們稱之為這個 X 節(jié)點的元素(element),每個元素會分配獨立的地址;
元素的定義有什么好處呢?比如上面那個燈的場景,一組燈,三個燈泡,沒有必要用三個 BLE 產(chǎn)品吧?一個 BLE 產(chǎn)品搞定一組情況!
4、消息(message)
節(jié)點與節(jié)點之間的數(shù)據(jù)傳輸,我們稱之為 message,在規(guī)范中定義了多種消息的類型,每種消息都有自己唯一的操作碼來進行區(qū)分,這里不做具體描述,后面描述細節(jié)的時候,在詳細分析。
消息交互中,分為兩類:
1、需要應(yīng)答的(ACK)
2、不需要應(yīng)答的(No ACK)
1、需要應(yīng)答的消息類型,需要對方在收到消息后,回復(fù)一條響應(yīng)信息。主要作用是:
1-1、通知對端,消息已經(jīng)被成功收到
1-2、給對端回復(fù)一些數(shù)據(jù)
需要應(yīng)答的消息如果沒有收到期望的回答,則其可能被發(fā)送多次;
2、不需要應(yīng)答的消息,則不期望收到對端的回復(fù)
5、地址(Address)
既然 mesh 中存在多個 BLE 節(jié)點,節(jié)點中又包含了不同的元素,那么消息在傳輸?shù)臅r候,就需要指定接收消息的具體的那個最小單位,即元素。
在 mesh 網(wǎng)絡(luò),為每一個存在于其中的元素分配了唯一確定的地址,讓其能夠被尋址,稱之為單播地址;
mesh 也支持群組地址,這是一種多播地址,它可以代表一個或多個元素。 群組地址要么是動態(tài)分配的,要么是藍牙技術(shù)聯(lián)盟預(yù)先定義的(SIG固定群組地址)。藍牙技術(shù)聯(lián)盟已經(jīng)定 義了4個固定群組地址,即 All-proxies, All-friends, All-relays 及 All-nodes。在后續(xù)章節(jié)中我們會詳細解釋什么是 Proxy(代理), Friend(朋友)及 Relay(中繼) 。
mesh 支持虛擬地址可以賦給一個或多個元素,橫跨一個或多個 節(jié)點。虛擬地址與128位UUID的形式類似,任何元素都可以與其相關(guān)聯(lián),它更像一個標簽。虛擬地址可以在出廠前就進行預(yù)先配置,然后用于某 些特定場景,例如使某個廠商制作的投影儀的尋址更加方便。
打個比方,一個 BLE mesh 網(wǎng)絡(luò)中,有一組燈(2個燈泡單獨控制),一個門,一個蜂鳴器,所以一共有 4 個元素,他們分別會有單播地址,門和蜂鳴器可以被分成為一組,當門開了,蜂鳴器就響;
6、消息的發(fā)布/訂閱(Publish / Subscribe)
在藍牙 mesh中,消息的發(fā)送成為發(fā)布(Publish),將 mesh 節(jié)點中配置成為可以接收特定消息的過程,稱之為訂閱(Subscribe);
如圖所示,可以看到,Switch 1 可以發(fā)布消息到 Kitchen 組,而 L1/L2 都訂閱了 Kitchen 組,所以可以接收來自 Kitchen 的消息,換句話說,Switch 1 可以控制 L1/L2 的開關(guān);
7、狀態(tài)與屬性(State / Property)
7.1、狀態(tài)
狀態(tài)代表了一個元素當前處于的情況,打個比方,一個燈,可能處于開,也可能處于關(guān),這兩者就稱之為 State;
狀態(tài)是可以發(fā)生變化的,狀態(tài)的變化可能是瞬間,也可能是一個過程時間,如果是一個過程時間,那么稱之為轉(zhuǎn)換時間;
7.1.1 狀態(tài)的綁定
如果一個狀態(tài)的變化引起了另一個狀態(tài)的變化,那么稱之為狀態(tài)綁定,比如調(diào)整燈光的強度,調(diào)整到最低時刻,就關(guān)掉燈;
7.2、屬性
屬性的代表了具體含義的數(shù)據(jù),比如一個溫度傳感器元素來的數(shù)據(jù),那么到底是室外溫度還是室內(nèi)溫度,這就是他的屬性
8、特性
mesh 網(wǎng)絡(luò)中,所有的節(jié)點都可以收發(fā)數(shù)據(jù),但并不是每個節(jié)點的特性都一樣,mesh 根據(jù)場景,為節(jié)點增加了特性的描述,一共有 4 種特性:
1、中繼(Relay)
2、代理(Proxy)
3、友(Friend)
4、低功耗(Low Power)
當然,并不是所有的節(jié)點都支持上述的特性,也可以不支持上述 4 種,僅僅作為一個普通節(jié)點即可。當然,也可以同時支持上述特性的幾個組合,同時擁有多種功能;
8.1、中繼(Relay)
顧名思義,擁有中繼特性的節(jié)點,能夠?qū)⑹盏降南⒃俅伟l(fā)送出去,消息可以多次跳躍到其他的節(jié)點,以覆蓋整個 mesh 網(wǎng)絡(luò)。但是消息并不是無限制的跳躍,消息跳躍的次數(shù),是受到一個稱之為 TTL(Time To Live) 的字段進行控制,他指定了消息在 mesh 網(wǎng)絡(luò)中的跳躍次數(shù),每次被中繼一次,TTL 減一,當 TTL 為 0 的時候,停止中繼;
中繼特性能夠使得 mesh 網(wǎng)絡(luò)擴張得很大,覆蓋的范圍更廣;
8.2、低功耗 & 友節(jié)點(Low Power & Friend)
為何要將他們一起說呢,因為他們之間是一起出現(xiàn)的。
在 mesh 網(wǎng)絡(luò)中,有的節(jié)點對功耗敏感(可能安裝的是電池),有的節(jié)點可能對功耗不敏感(插電),那么就有一種方案是:低功耗的節(jié)點盡量的去睡眠,以節(jié)約功耗,隔一段時間醒來收取消息;那么它睡眠期間的消息需要被另一個一直處于活躍的節(jié)點緩存,等待低功耗節(jié)點來翻牌子,并把他要的數(shù)據(jù)吐給他;
mesh 網(wǎng)絡(luò)中,將上述情況定義為,長期處于休眠并偶爾喚醒接收數(shù)據(jù)并交互的節(jié)點為“低功耗”節(jié)點(Low Power Node);存儲低功耗節(jié)點消息,并在低功耗節(jié)點醒來時刻將消息發(fā)送給低功耗節(jié)點的那個節(jié)點為 “友” 節(jié)點(Friend Node);他們之間的關(guān)系成為“友誼”(Friendship)
所以,友節(jié)點,是為了低功耗節(jié)點的存在而存在的;
8.3、代理節(jié)點(Proxy)
那么還有一種情況,有一個現(xiàn)有的 mesh 網(wǎng)絡(luò),還有一個不支持 mesh 的手機,這個手機也想加入 mesh 的這個網(wǎng)絡(luò)搞事情,那咋辦?明顯是不行的,因為這個手機不支持 mesh,所以他不明白這個網(wǎng)絡(luò)里面到底在搞啥事情。
針對這種情況,藍牙組織定義了一個叫做 Proxy 特性的節(jié)點,這個 Proxy 節(jié)點的特性是,支持傳統(tǒng)的 BLE 藍牙協(xié)議棧(GATT 規(guī)范)的同時,也支持 mesh 協(xié)議棧,那么就可以讓這個不支持 mesh 特性的手機,通過 GATT 與 Proxy 交互,而這個 Proxy 節(jié)點又將手機的意圖翻譯為 mesh 網(wǎng)絡(luò)懂得起的含義,在網(wǎng)絡(luò)中存活,那不就相當于這個手機加入了這個 mesh 網(wǎng)絡(luò)嗎?所以這個 Proxy 節(jié)點就做了這個事兒:允許沒有集成藍牙 mesh 協(xié)議棧的 BLE 設(shè)備與 mesh 網(wǎng)絡(luò)中的任何節(jié)點進行通信。
9、安全
在傳統(tǒng)的 BLE 機制中,運行啟用加密,也允許不加密,進行數(shù)據(jù)的傳輸。在 mesh 網(wǎng)絡(luò)中,網(wǎng)絡(luò)加密具有強制性,即不管是網(wǎng)絡(luò)還是單個應(yīng)用的數(shù)據(jù),都需要加密;
所有的mesh消息都要經(jīng)過加密和認證
網(wǎng)絡(luò)安全性,應(yīng)用安全性,設(shè)備安全性相互獨立
在mesh網(wǎng)絡(luò)中,我們可以通過密鑰刷新程序來更新 節(jié)點的安全密鑰
消息模糊化可以讓外界難以追蹤網(wǎng)絡(luò)內(nèi)所發(fā)送的消 息,進而提供了一種隱私保護機制,難以讓外界跟 蹤節(jié)點的活動
設(shè)備添加到mesh網(wǎng)絡(luò)從而成為節(jié)點的過程本身就是 是一個安全的過程。也就是前面提到的,開通配置 過程
節(jié)點可以從網(wǎng)絡(luò)中安全地移除,這樣可以防止垃圾 桶攻擊(trash can attack)
藍牙m(xù)esh網(wǎng)絡(luò)安全性的核心是三種安全密鑰。分別使用這些密鑰對網(wǎng)絡(luò)中的不同部分進行加密
我們舉一個例子。有一個已經(jīng)加入藍牙m(xù)esh網(wǎng)絡(luò)的燈。它可以當作一個中繼節(jié)點來中繼消息。它可以中繼門窗安全系統(tǒng)的消息,但是它不能理解消息的具體含義,僅僅對消息進行中繼。照明系統(tǒng)和門窗安全系統(tǒng)相當于兩個不同的子系統(tǒng),它們使用不同的密鑰進行加密, 這樣整個網(wǎng)絡(luò)的安全性就得到了提升;
藍牙m(xù)esh網(wǎng)絡(luò)里的每個節(jié)點都有一個相同的網(wǎng)絡(luò)密鑰 (NetKey)。正是這個密鑰才使得節(jié)點成為這個網(wǎng)絡(luò)的一員。 網(wǎng)絡(luò)加密key與隱私key都是由這個網(wǎng)絡(luò)密鑰生成的。節(jié)點可以利用NetKey來加密和認證網(wǎng)絡(luò)層,這樣諸如中繼之類的網(wǎng)絡(luò)功能就可以執(zhí)行了。但是NetKey不能加密應(yīng)用數(shù)據(jù)。
藍牙m(xù)esh網(wǎng)絡(luò)可以分成幾個子網(wǎng)絡(luò),每個子網(wǎng)絡(luò)都有 其單獨的NetKey,這個NetKey只有當前子網(wǎng)絡(luò)成員節(jié)點才 有,其它節(jié)點沒有。
只有擁有應(yīng)用密鑰(AppKey)的節(jié)點 才能解密相應(yīng) 的應(yīng)用數(shù)據(jù)。在一個mesh網(wǎng)絡(luò)中,可以有許多不同的 AppKey,每個AppKey 對應(yīng)一種特定的應(yīng)用(照明應(yīng)用, ?熱力應(yīng)用,門窗安全系統(tǒng)應(yīng)用等)。例如,燈和開關(guān)擁有 燈應(yīng)用的 AppKey,但是沒有熱力系統(tǒng)的AppKey,只有網(wǎng) 絡(luò)中的溫度調(diào)節(jié)裝置才擁有熱力系統(tǒng)的 AppKey。
最后一種密鑰是設(shè)備密鑰(DevKey)。這是一種特殊的應(yīng)用密鑰。每個節(jié)點都有一個獨一無二的設(shè)備密鑰,這個 密鑰只有啟動配置設(shè)備(如手機)知道。設(shè)備密鑰可以用 在開通配置過程,以確保啟動配置設(shè)備與節(jié)點之間的安全通訊
————————————————
版權(quán)聲明:本文為CSDN博主「愛洋蔥」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zhoutaopower/article/details/101422119
總結(jié)
以上是生活随笔為你收集整理的BLE Mesh(2)—— 基本术语及含义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BLE Mesh(1)—— 简述
- 下一篇: [lwip-users] memp_ma