藍牙MESH廣播淺析
Labs 導(dǎo)讀
藍牙m(xù)esh技術(shù)是基于低功耗藍牙廣播報文來實現(xiàn)的,是一種基于泛洪的消息傳遞機制。
在傳統(tǒng)藍牙中,藍牙與設(shè)備之間的關(guān)系是“一對一”的,因此設(shè)備間需要先進行“配對”,再建立一條穩(wěn)定的連接進行數(shù)據(jù)傳播。低功耗藍牙設(shè)備則可以和其他設(shè)備建立“1對多”拓撲,通過廣播的形式,向網(wǎng)絡(luò)內(nèi)的其他設(shè)備發(fā)送數(shù)據(jù)。藍牙m(xù)esh網(wǎng)絡(luò)則在低功耗藍牙的基礎(chǔ)上更進一步建立了設(shè)備間的“多對多”關(guān)系,通過中繼,可以將消息發(fā)送到網(wǎng)絡(luò)中的任意設(shè)備。
Part 01、 網(wǎng)絡(luò)泛洪
藍牙m(xù)esh網(wǎng)絡(luò)使用了一種“管理型網(wǎng)絡(luò)泛洪”的方式,即通過廣播進行消息發(fā)送,讓傳輸范圍內(nèi)的所有設(shè)備都可以接收消息。網(wǎng)絡(luò)中的支持中繼功能的設(shè)備就可以將消息轉(zhuǎn)發(fā)給其相關(guān)聯(lián)的所有設(shè)備,最終消息擴散到整個網(wǎng)絡(luò)。
網(wǎng)絡(luò)泛洪的優(yōu)勢在于不需要特定的設(shè)備專門扮演集中式路由器的角色。集中式路由器一旦發(fā)生故障,就會導(dǎo)致整個網(wǎng)絡(luò)無法運行,從而影響網(wǎng)絡(luò)通信的可靠性。網(wǎng)絡(luò)泛洪的方式也意味著,網(wǎng)絡(luò)中傳輸?shù)南⒉粫刂粭l特定路徑進行傳輸,而是可以通過多重路徑到達目的地。
因為使用了泛洪技術(shù),中繼會轉(zhuǎn)發(fā)從其他設(shè)備接收的消息。如果對此不加以限制,當(dāng)網(wǎng)路中存在環(huán)路的時候,可能會造成網(wǎng)絡(luò)風(fēng)暴,對網(wǎng)絡(luò)造成災(zāi)難性的影響。藍牙m(xù)esh網(wǎng)絡(luò)采取了一系列的措施,其中有兩個主要的方法,信息緩存隊列和TTL字段。
Part 02、 信息緩存隊列
每個節(jié)點的網(wǎng)絡(luò)層,都包含一個信息緩存隊列,用于保存最近接收的網(wǎng)絡(luò)數(shù)據(jù)包。如果某個剛收到的網(wǎng)絡(luò)數(shù)據(jù)包已經(jīng)在消息緩存隊列里面,說明節(jié)點已經(jīng)通過其他路徑收到過該消息,就可以直接丟棄該數(shù)據(jù)包。如果該數(shù)據(jù)包不在緩存隊列里,就可以進行下一步的消息處理。
消息緩存隊列并不一定要求保存完整的消息數(shù)據(jù)包,只需要能識別消息即可。比如保存消息的唯一消息id。信息緩存隊列是有長度限制的隊列,如果隊列已滿,則需要按照最早到達丟棄的原則,將最老的消息丟棄,保存最新的消息。
Part 03、 TTL字段
TTL是Time To Live的縮寫,TTL的作用是限制IP數(shù)據(jù)包在網(wǎng)絡(luò)中存在的時間。在藍牙m(xù)esh網(wǎng)絡(luò)中,TTL實際上是數(shù)據(jù)包在網(wǎng)絡(luò)中可以轉(zhuǎn)發(fā)的最大跳數(shù)。TTL字段由數(shù)據(jù)的發(fā)送者設(shè)置,當(dāng)轉(zhuǎn)發(fā)節(jié)點的底層傳輸層收到網(wǎng)絡(luò)層上報的信息時,把這個TTL的值減1,然后將數(shù)據(jù)包轉(zhuǎn)發(fā)出去。若信息的TTL 小于1,則該信息會直接被丟棄。
Part 04、 廣播數(shù)據(jù)格式
藍牙m(xù)esh廣播實際上是以低功耗藍牙廣播為基礎(chǔ)的,所有的數(shù)據(jù)包格式也是基于低功耗藍牙廣播的數(shù)據(jù)包格式,通過AD Type字段與其他廣播進行區(qū)分。可以理解成一種特殊的BLE廣播包。藍牙廣播包中的有效數(shù)據(jù)由若干個AD Structure單元組成。每個AD Structure由Length,AD Type,AD Data三個部分組成。
Mesh profile消息涉及的AD Type有三種,見下表:
其中Mesh Beacon用于對藍牙m(xù)esh節(jié)點或未配網(wǎng)節(jié)點進行周期性的廣播,比如未配網(wǎng)的設(shè)備通過周期性發(fā)送廣播信息,讓自己可以被配網(wǎng)器(Provisioner)發(fā)現(xiàn),從而加入藍牙m(xù)esh網(wǎng)絡(luò)。
Mesh Message用于在正常的藍牙m(xù)esh節(jié)點之間傳輸網(wǎng)絡(luò)數(shù)據(jù)包。
PB-ADV 一般作用于設(shè)備配網(wǎng)期間,主要用于傳輸通用配網(wǎng)PDU。
Part 05、 小結(jié)
藍牙通過藍牙m(xù)esh這項新的協(xié)議規(guī)格正式進入物聯(lián)網(wǎng)的領(lǐng)域,藍牙m(xù)esh技術(shù)是一種基于泛洪的信息傳遞機制,以保證目標(biāo)節(jié)點只要在網(wǎng)絡(luò)覆蓋范圍內(nèi)就能收到消息。但是這種機制也帶來了一定的弊端,就是網(wǎng)絡(luò)中信息的泛濫。藍牙m(xù)esh網(wǎng)絡(luò)采用了信息緩存隊列和TTL字段這兩種方案來避免信息被無限制地轉(zhuǎn)發(fā)下去。