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