在本系列的第一篇中,我們介紹了全新的藍牙mesh網路技術。如果您還未閱讀第一篇,建議先從頭閱讀,然後再進入第二篇。

本篇將介紹藍牙mesh網路的基本概況,包括大型mesh網路中的訊息傳輸方式、市場設備支援、安全性和mesh協議堆疊本身,在後續文章中也將繼續探索這一技術方方面面的細節。

中繼

在上篇中,我們瞭解到藍牙mesh網路設備彼此之間可透過訊息和發佈/訂閱機制展開對話。

得益於mesh網路,設備可以在非常廣闊的區域中安裝,同時彼此之間保持通訊。想像一下購物中心、機場或辦公大樓的佔地空間有多廣闊。因為存在牆壁和其他實體上的障礙物,建築物中的設備可能無法與安裝在同一建築物遠側的設備、或臨近建築物中的設備建立直接的無線連接。而藍牙mesh網路則能夠將網路中的某些設備指定為「中繼設備」,進而解決這一難題。

中繼設備能夠轉發從其他設備接收到的訊息。在轉發訊息時,它們能夠與位於初始訊息發佈設備無線範圍以外的設備進行通訊。訊息可多次被中繼,每一次中繼即為一「跳」,最多可進行127跳,足以在一片廣闊的實體區域中進行訊息傳輸。

20170823_Bluetooth_NT41P1 藍牙 mesh網路在節點之間中繼訊息

管理型網路泛洪(Managed Flooding)

藍牙mesh網路採用一種稱為「網路泛洪」(flooding)的方式來發佈和中繼訊息。這意味著訊息不會通過某一進程進行路由,也不會沿著由一系列特定設備構成的特定路徑來進行傳輸。相反地,傳輸範圍內的所有設備都會接收訊息,負責中繼的設備能將訊息轉發至其傳輸範圍內的所有其他設備。

「網路泛洪」這項技術在使用中往往是利弊參半。在藍牙mesh網路的設計中,我們對此進行了針對特性的最佳化,相信能夠揚長避短。

網路泛洪的優勢

網路泛洪的優勢在於無需特定設備專門扮演集中式路由器的角色。集中式路由器一旦發生故障,就可能會導致整個網路無法運行。沒有特定的路由也可能對網路造成災難性的影響,但這種情況也可以透過在mesh網路中採用網路泛洪的方法來避免。

網路泛洪的方式也意味著訊息一般能夠透過多重路徑到達其目的地。這就構建了一個相當可靠的網路。

最佳化mesh網路

藍牙mesh網路也採取了一系列措施,支援採用網路泛洪的方式,同時最佳化每台設備、甚至整體網路的能耗。

所有資料封包都包含一個稱為TTL的欄位,它可用於限制訊息中繼的跳數。由設備間歇性發送的心跳訊息中包含的資訊,能夠讓網路瞭解其拓撲結構,以及傳送到其他每台設備之間的跳數。這能夠讓設備將TTL設置為最佳值,從而避免不必要的中繼操作。

每台設備都包含訊息快取,以確定自身是否已經中繼過該訊息。如果是,則會立即丟棄該訊息,從而避免上層堆疊進行不必要的處理。

最有趣的是,功率非常受限的設備(例如由小型電池持續供電多年的感測器)可能被指定為「低功耗節點」。低功耗節點能夠與一個或多個被指定為‘friends’的設備協同工作。Friends並非功率受限,它可以作為低功耗節點,存儲定址到這一低功耗節點的訊息,並且只有在低功耗節點需要時才傳送訊息。低功耗節點和‘friends’之間的關係理所當然就稱為‘friendship’。

‘Friendship’具體如何運轉?下面我們從節能的角度來進行解讀。

低功耗設備通常將大部份時間用於傳輸資料,例如感測器。每當溫度低於或高於指定閾值時,感測器才會發送溫度讀數,這種情況也許每天只會發生兩次。這種不頻繁的傳輸方案本身就使這類設備保持相當低的能耗。

但如果感測器需要不時地接收資料,又該怎麼辦呢?

例如,可能它需要確保網路中使用的安全金鑰始終處於最新狀態。或許需要根據季節修改這些溫度閾值,採用不同的值。要使感測器直接接收訊息,就需要開啟無線電,以便資料接收。但大多數時候它什麼都接收不到,但能量卻會被消耗。

對設備來說,透過與‘friends’的合作,低功耗節點能夠以合理的頻率使用無線電來接收訊息,但重要的是,相較於始終‘聆聽’所有訊息,它能夠以更低的頻率工作,同時確保發送來的罕見事件也不會被遺漏。

‘Friends’能幫助低功耗節點完成大量工作。它們能夠為所服務的低功耗節點存儲訊息,並在低功耗節點明確要求的情況下向其提供訊息,低功耗節點可按照自身的規劃進行操作,從而最有效地利用無線電。

市場上的藍牙設備支援

藍牙mesh網路雖然推出不久,但低功耗藍牙(Bluetooth Low Energy)卻面世已久。那麼市場上數十億台設備呢?智慧手機和平板電腦呢?它們能否訪問藍牙mesh網路?

20170823_Bluetooth_NT41P2 低功耗藍牙設備和mesh支援

幸運的是,答案是YES!

藍牙mesh網路會指定一台設備來扮演代理節點(proxy node)的角色。代理節點包含一項標準:低功耗藍牙GATT服務,具有兩個GATT特性,分別是mesh代理資料登錄(Mesh Proxy Data In)和mesh代理資料輸出(Mesh Proxy Data Out)。諸如智慧型手機等低功耗藍牙設備均可使用這些特性,與mesh網路進行資料收發。

這種mesh規格定義了一種代理協議(proxy protocol),同時透過代理節點的兩個GATT特性交換的資料中包含代理協議PDU。

欲知代理節點的作用,請持續關注本系列後續文章。

安全性

安全性是藍牙mesh網路設計的核心,並且強制使用。

20170823_Bluetooth_NT41P3 藍牙mesh網路中強制性使用安全性

每個資料封包都經過加密和認證。透過合理使用序號能夠防止中繼攻擊。在重要流程中使用不對稱加密技術可防止中間人(Man-in-the-middle)攻擊。同時針對利用廢棄設備的垃圾桶攻擊提供保護。必要時還會刷新安全金鑰。

「安全分級考量」(Separation of Concerns)是藍牙mesh網路安全性中體現的重要原則。網路的安全性,以及諸如照明、供暖、或實體建築安全等個別應用的安全性彼此獨立。可使用不同的安全金鑰來保護網路層操作,例如中繼或保護特定應用的訊息內容。論其結果,舉例來說,由於燈泡和照明開關具有相同的應用金鑰,因此燈泡能夠全面存取照明開關所發送訊息中資料。但是,儘管相同的燈泡能夠將來自藍牙實體存取權杖的訊息中繼到前門中的鎖,卻無法閱讀那些訊息應用層的內容。

本系列的後續文章中也將詳細介紹安全性。我們還將密切關注一個稱為開通配置‘Provisioning’的安全流程,設備可透過這一流程變身為藍牙mesh網路的一員。此外,我們還將探討如何從網路中安全地刪除設備,以及如何在有需要時刷新安全金鑰。

協議堆疊

藍牙mesh網路導入了全新的協議堆疊。如之前所述,這一協議堆疊建立在低功耗藍牙技術之上。下圖描繪了協議堆疊的層級。

20170823_Bluetooth_NT41P4 藍牙mesh網路通訊協議堆疊

該規格是深入瞭解各層責任的最佳方式。為幫助您更好地瞭解其工作原理,以下列出了協議堆疊各層負責的工作:

承載層(bearer layer): 承載層定義了如何使用底層低功耗堆疊傳輸PDU。目前定義了兩個承載層:廣播承載層(Advertising Bearer)和GATT承載層。

網路層(network layer): 網路層定義了各種訊息網址類別型和網路訊息格式。中繼和代理行為透過網路層實施。

底層傳輸層(lower transport layer): 在需要之時,底層傳輸層能夠處理PDU的分段和重組。

上層傳輸層(upper transport layer): 負責對存取層進出的應用資料進行加密、解密和認證。它還負責稱為「傳輸控制訊息」(transport control messages)這一特殊的訊息,包括與‘friendship’相關的心跳和訊息。

存取層(access layer): 負責應用資料的格式、定義並控制上層傳輸層中執行的加密和解密過程,並在將資料轉發到協議堆疊之前,驗證接收到的資料是否適用於正確的網路和應用。

基礎模型(foundation models):基礎模型層負責實現與mesh網路配置和管理相關的模型。

模型(models):模型層與模型等的實施、以及諸如行為、訊息、狀態等的實施有關。

藍牙mesh網路的未來

我們期待藍牙mesh網路廣泛應用於各行各業和各種應用,預計最初會從建築物自動化、商業照明和感測器網路等應用開始。尤其令人興奮的是藍牙mesh網路在商業照明方面的應用。試想一下,有了正確的韌體,照明系統能實現的就不僅是無線燈光控制,還能夠成為建築物中各種藍牙服務的平台,如資產追蹤和定位服務!

結語

這是介紹藍牙mesh網路的系列文章中的第二篇,感興趣的朋友們敬請期待後續文章!在下一部份中,為你解密的將是關於藍牙mesh常用的正式術語和概念,未完待續。

專題資源

藍牙mesh網路——開發者入門 小編為感興趣的朋友準備了一篇超全的技術概覽,簡直是廣大藍牙mesh網路開發者入門級選手的福利!想瞭解有關藍牙mesh網路的主要概念和術語、系統架構、安全機制、及其獨特的訊息發佈和傳輸技術,點選「閱讀原文」吧!