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