藍(lán)牙m(xù)esh的網(wǎng)絡(luò)拓?fù)?/h2>

在上一篇文章中從藍(lán)牙發(fā)展的歷史和藍(lán)牙各個(gè)版本的功能,和技術(shù)衍變,講到藍(lán)牙m(xù)esh從哪來(lái),將要到哪去。了解BLE更新迭代的歷史,有助于理解為什么在mesh中要大力解決安全性問(wèn)題,為什么要加入那么多復(fù)雜的加密和安全性的保障措施,就能更容易理解為什么整個(gè)藍(lán)牙m(xù)esh要這么設(shè)計(jì)。再總結(jié)一下:從哪來(lái),到哪去,將要干什么?從藍(lán)牙BLE4.0中來(lái),將會(huì)在藍(lán)牙5.0技術(shù)中成長(zhǎng),藍(lán)牙m(xù)esh已經(jīng)是目前萬(wàn)物互聯(lián)時(shí)代重要的組成部分,與AI結(jié)合的智能音箱是目前萬(wàn)物互聯(lián)的最佳方案。它是BLE4.0后時(shí)代的產(chǎn)物,是未來(lái)技術(shù)發(fā)展潮流和趨勢(shì)。

在這一篇中講的是,我是誰(shuí),我在哪?什么是藍(lán)牙m(xù)esh,目前藍(lán)牙m(xù)esh在技術(shù)方向上發(fā)展到什么程度。

藍(lán)牙Mesh網(wǎng)絡(luò)是用于建立多對(duì)多設(shè)備通信的低能耗藍(lán)牙網(wǎng)絡(luò)拓?fù)?。允許創(chuàng)建基于多個(gè)設(shè)備的大型網(wǎng)絡(luò),網(wǎng)絡(luò)可以包含數(shù)十臺(tái),數(shù)百甚至數(shù)千臺(tái)藍(lán)牙Mesh設(shè)備,設(shè)備之間可以相互進(jìn)行信息數(shù)據(jù)傳遞,這樣應(yīng)用形態(tài)為樓宇自動(dòng)化,無(wú)線傳感器網(wǎng)絡(luò),資產(chǎn)跟蹤和其他解決方案提供了理想的選擇。

藍(lán)牙m(xù)esh 的基本概念

通常在BLE4.0中,設(shè)備與手機(jī)端APP建立連接的方式,是通過(guò)設(shè)備作為從機(jī),像四周發(fā)送電磁波,藍(lán)牙廣播的方式告知自己的存在。這其中有兩個(gè)技術(shù)過(guò)程,廣播(AD)和連接(GATT),藍(lán)牙m(xù)esh正是基于這兩個(gè)核心,來(lái)擴(kuò)展的。這也是為什么說(shuō)藍(lán)牙m(xù)esh 誕生于藍(lán)牙4.0。(可能會(huì)有人說(shuō)藍(lán)牙m(xù)esh是基于廣播,但是我覺得這個(gè)說(shuō)法不夠準(zhǔn)確)

節(jié)點(diǎn)和設(shè)備

  • 在藍(lán)牙m(xù)esh網(wǎng)絡(luò)中,我們通常把還未加入藍(lán)牙m(xù)esh網(wǎng)絡(luò)的設(shè)備叫做未配網(wǎng)設(shè)備(Unprovisioned Device)。
  • 未配網(wǎng)設(shè)備在加入到一個(gè)mesh網(wǎng)絡(luò)之后就被稱為節(jié)點(diǎn)(Node)。
  • 把一個(gè)未配網(wǎng)設(shè)備加入藍(lán)牙m(xù)esh網(wǎng)絡(luò)變成節(jié)點(diǎn)的過(guò)程叫做配網(wǎng)過(guò)程(Provisioning)。
  • 配網(wǎng)器(Provisioner)在Nodic文檔中是一句闡述用途的話,沒有給出具體的定義。A Provisioner is used to manage the transitions between an unprovisioned device and a node.從廣義上講,配網(wǎng)器是設(shè)備,比如手機(jī),平板,電腦。但實(shí)際上是應(yīng)用程序來(lái)實(shí)現(xiàn)這個(gè)配網(wǎng)流程。如果非要給一個(gè)定義的話,這句話可能更適合一點(diǎn):配網(wǎng)過(guò)程一般由產(chǎn)品制造商提供的應(yīng)用程序完成,運(yùn)行這個(gè)應(yīng)用程序的設(shè)備被稱為配網(wǎng)器。

廣播和洪泛

在藍(lán)牙m(xù)esh中,節(jié)點(diǎn)間傳遞消息的方式是通過(guò)低功耗藍(lán)牙廣播報(bào)文來(lái)實(shí)現(xiàn)的,這是一種基于洪泛(Managed-flooding)的信息傳遞機(jī)制,當(dāng)一個(gè)節(jié)點(diǎn)要給另外一個(gè)節(jié)點(diǎn)發(fā)送消息時(shí),它會(huì)廣播一條消息,所有收到這個(gè)消息的節(jié)點(diǎn)都接收和處理這條消息。如果開啟了節(jié)點(diǎn)的轉(zhuǎn)發(fā)功能,那么消息可以到達(dá)網(wǎng)絡(luò)覆蓋范圍內(nèi)的任何地方。這就是藍(lán)牙m(xù)esh的實(shí)現(xiàn)原理

藍(lán)牙m(xù)esh的這個(gè)原理是把雙刃劍。我們藍(lán)牙廣播是向所有方向上發(fā)送電磁波的,不會(huì)像紅外遙控那樣指定方向。如果是藍(lán)牙5.0設(shè)備,理論上300米范圍內(nèi)的所有設(shè)備都會(huì)收到這個(gè)消息,如果網(wǎng)絡(luò)中所有節(jié)點(diǎn)收到這個(gè)消息的節(jié)點(diǎn)都將消息轉(zhuǎn)發(fā),那么每個(gè)節(jié)點(diǎn)300米范圍內(nèi)的又會(huì)收到這個(gè)消息并轉(zhuǎn)發(fā),一個(gè)消息就會(huì)無(wú)數(shù)次來(lái)回轉(zhuǎn)發(fā),而且消息永遠(yuǎn)不會(huì)停止,這種情況就是網(wǎng)絡(luò)的消息泛濫。

這種情況當(dāng)然是不能接受的,藍(lán)牙m(xù)esh網(wǎng)絡(luò)也不可能這么差勁,SIG也不可能設(shè)計(jì)出這種東西來(lái)。針對(duì)這個(gè)情況,藍(lán)牙m(xù)esh 采用兩個(gè)做法:消息緩存(Message Cache)和TTL(Time To Live,消息壽命),來(lái)避免消息被無(wú)限制轉(zhuǎn)發(fā)下去。是不是感覺很熟悉,這兩個(gè)玩意在網(wǎng)絡(luò)路由器的處理方式一樣,這說(shuō)明不同技術(shù)的應(yīng)用場(chǎng)景都差不多,掌握一種技術(shù),同樣可以使用到另外一個(gè)場(chǎng)景下。

消息緩存隊(duì)列和TTL是如何解決問(wèn)題?在節(jié)點(diǎn)收到后,會(huì)在消息緩存隊(duì)列中查找是否存在這個(gè)消息,如果存在,則直接過(guò)濾掉這條消息,什么都不做。如果不存在,則判斷TTL的值是否需要處理。如果消息緩存隊(duì)列和TTL的值都通過(guò)了,則進(jìn)入真正的處理流程,然后再判斷是否需要轉(zhuǎn)發(fā)。如果一個(gè)消息處理后,就會(huì)把處理的消息放到消息緩存隊(duì)列,以便下次收到消息的時(shí)候做比對(duì),消息緩存隊(duì)列也不是無(wú)限大,是一個(gè)環(huán)形隊(duì)列,如果超過(guò)我們?cè)O(shè)置的大小,則會(huì)把最久的那邊消息覆蓋。TTL是一個(gè)0~127的整數(shù),這個(gè)值代表這一個(gè)消息能轉(zhuǎn)發(fā)的次數(shù),如果一個(gè)消息處理后,在轉(zhuǎn)發(fā)的時(shí)候,TTL的值會(huì)減一,減小到0后,這個(gè)消息就不會(huì)被節(jié)點(diǎn)處理。

那你肯定又有一個(gè)疑問(wèn),可以不發(fā)給不需要處理的節(jié)點(diǎn)嗎?如果只發(fā)給需要處理這個(gè)消息的節(jié)點(diǎn),或者只經(jīng)過(guò)最優(yōu)路線達(dá)到最終的處理節(jié)點(diǎn),這樣就非常完美。很遺憾,這是無(wú)法做到的,畢竟設(shè)備沒有像人智能。所以對(duì)技術(shù)人員的水平是有一定要求的,在構(gòu)建網(wǎng)絡(luò)拓?fù)涞臅r(shí)候,如果搭建比較好的網(wǎng)絡(luò),根據(jù)實(shí)際場(chǎng)景把節(jié)點(diǎn)放在比較好的位置,能減少無(wú)效消息的轉(zhuǎn)發(fā),減少資源的浪費(fèi)。對(duì)于這個(gè)課題,目前Bluetooth SIG也在想辦法進(jìn)行優(yōu)化,是否加入路由機(jī)制,或者是其他更好的辦法。

藍(lán)牙m(xù)esh網(wǎng)絡(luò)拓?fù)?/h2>

如果在這里不講一下網(wǎng)絡(luò)拓?fù)?,那么上面的?nèi)容對(duì)新接觸的朋友來(lái)說(shuō)可能半知半解。


網(wǎng)絡(luò)拓?fù)?jpg

這個(gè)圖片出自2019年1月21號(hào)Sig董事會(huì)(Bluetooth SIG Board of Directors)發(fā)布的最新版MshPRFV1.0.1版本。網(wǎng)上這張圖被大量引用,因?yàn)榇_實(shí)非常經(jīng)典。

為什么說(shuō)它經(jīng)典?在回答這個(gè)問(wèn)題之前,需要講圖中各種符號(hào)和標(biāo)注的含義。前面提到過(guò)轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)只是藍(lán)牙m(xù)esh中設(shè)備功能的一種。未來(lái)隨著藍(lán)牙m(xù)esh的發(fā)展,肯定會(huì)新增其他功能,但就目前來(lái)說(shuō),是4大功能:

  • 轉(zhuǎn)發(fā)功能:收到一條消息后將其轉(zhuǎn)發(fā)出去,這樣可以擴(kuò)大mesh網(wǎng)絡(luò)的覆蓋范圍,支持轉(zhuǎn)發(fā)的節(jié)點(diǎn)被稱為轉(zhuǎn)發(fā)節(jié)點(diǎn)(Relay Node)。中繼節(jié)點(diǎn)一直是"醒著的",對(duì)比低功耗的設(shè)備隔一段時(shí)間做一次數(shù)據(jù)交互的方式,中繼節(jié)點(diǎn)肯定功耗略高,但是大多數(shù)實(shí)際場(chǎng)景中中繼節(jié)點(diǎn)根本不需要考慮功耗問(wèn)題。
  • 代理功能:為了兼容舊的不支持藍(lán)牙m(xù)esh廣播包傳播的設(shè)備(比如手機(jī)),具備代理功能的設(shè)備可以與舊設(shè)備建立低功耗藍(lán)牙GATT連接,在mesh廣播數(shù)據(jù)包和mesh GATT連接數(shù)據(jù)包之間轉(zhuǎn)換,支持代理功能的節(jié)點(diǎn)被稱為代理節(jié)點(diǎn)(Proxy Node)。(如果暫時(shí)對(duì)手機(jī)不支持BLE廣播包傳輸這句話不理解的朋友,我會(huì)在后面的文章中給出解釋)
  • 低功耗功能:能夠有效降低設(shè)備工作時(shí)間占空比的功能,讓mesh設(shè)備做到可以使用電池供電,需要與朋友功能配合使用。支持低功耗功能的節(jié)點(diǎn)被稱為低功耗節(jié)點(diǎn)( Low Power Node)。
  • 朋友功能:幫助其他支持低功耗功能的節(jié)點(diǎn)緩存信息,讓支持低功耗功能的節(jié)點(diǎn)能在低功耗狀態(tài)下工作,支持朋友功能的節(jié)點(diǎn)被稱為朋友節(jié)點(diǎn)(Friend node)。

節(jié)點(diǎn)可以支持以上4種功能中的一種或者多種,每個(gè)功能都可以設(shè)置成開啟或者關(guān)閉,可以通過(guò)APP去修改這些值。

有了這些基本概念,再看那張圖,圖中中繼節(jié)點(diǎn)有Q、R、S,低功耗節(jié)點(diǎn)有I、J、K、L、M和朋友節(jié)點(diǎn)N、O、P。N節(jié)點(diǎn)沒有連接低功耗節(jié)點(diǎn),S節(jié)點(diǎn)通過(guò)GATT連接了T節(jié)點(diǎn)。S節(jié)點(diǎn)必須將藍(lán)牙m(xù)esh網(wǎng)絡(luò)中收到的所有廣播包轉(zhuǎn)換成GATT數(shù)據(jù)包轉(zhuǎn)發(fā)給T節(jié)點(diǎn),所以S節(jié)點(diǎn)也是代理節(jié)點(diǎn)。有箭頭代表節(jié)點(diǎn)之間的信息可達(dá)。這里要說(shuō)明一下,配網(wǎng)器也是一個(gè)節(jié)點(diǎn)。

當(dāng)節(jié)點(diǎn)A想要發(fā)數(shù)據(jù)給節(jié)點(diǎn)T的時(shí)候,數(shù)據(jù)流是這樣的:A廣播一條消息a出來(lái),目標(biāo)地址是T的地址,節(jié)點(diǎn)B、P、Q收到了消息a,檢查發(fā)現(xiàn)目標(biāo)地址是T,則B、P節(jié)點(diǎn)丟棄了這條消息(因?yàn)椴痪邆滢D(zhuǎn)發(fā)功能),而節(jié)點(diǎn)Q轉(zhuǎn)發(fā)了這條消息a,轉(zhuǎn)發(fā)的消息a被節(jié)點(diǎn)A、B、C、D、E、R、P收到后,除了R之外其他節(jié)點(diǎn)都丟棄了消息a,節(jié)點(diǎn)R轉(zhuǎn)發(fā)了消息a,節(jié)點(diǎn)E、N、S、H收到消息a后,E、N、H節(jié)點(diǎn)都丟棄了消息a,S節(jié)點(diǎn)消息將消息a發(fā)給T節(jié)點(diǎn)。

這個(gè)圖說(shuō)它是經(jīng)典,作為教學(xué)把藍(lán)牙m(xù)esh的優(yōu)勢(shì)和處理邏輯講的淋漓盡致,但是如果要是這樣去布置mesh網(wǎng)絡(luò),那就存在風(fēng)險(xiǎn)了,如果圖中R節(jié)點(diǎn)設(shè)備沒電停機(jī)了,那整個(gè)網(wǎng)絡(luò)裂開成兩個(gè)網(wǎng)絡(luò)了。

看完這個(gè)文章,再結(jié)合廣播和洪泛中講到的場(chǎng)景。應(yīng)該知道怎么搭建一個(gè)比較靠譜的網(wǎng)絡(luò)拓?fù)洌Y(jié)合使用的節(jié)點(diǎn)的實(shí)際傳輸距離,考慮到某個(gè)節(jié)點(diǎn)可能發(fā)生異常的情況,如果室外,考慮好雨天對(duì)信號(hào)的影響,或者是其他一些特殊場(chǎng)景,不要按理論值去布置節(jié)點(diǎn),布置一個(gè)mesh的第一件事是確定節(jié)點(diǎn)在實(shí)際場(chǎng)景中的實(shí)際傳輸距離。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容