藍牙技術聯盟 藍牙Mesh 智慧照明 照明控制 藍牙mesh 1.1 定向轉發 受管網路泛洪 路徑 通道 金鑰

路徑/通道傳輸有門道 解析藍牙Mesh定向轉發(2)

定向轉發(Directed Forwarding)在藍牙Mesh協定規格1.1版本中導入。要充分了解定向轉發的功能和優勢,就必須了解藍牙Mesh 1.0版本的特定層面。本文分為兩篇討論定向轉發細節。
iStock

(承前文)在上篇文章中,已經將路徑描述為一組節點,為來源位址、目的地位址和子網提供定向轉發服務。參考上篇文章中的圖6和圖7,可以看出在用於傳送訊息時,路徑通常由若干節點序列(Sequences of Nodes)組成;訊息副本沿著路徑中繼到網路不同部分的各個目標節點時,都會經過這些節點序列。本文第二篇將進一步針對藍牙Mesh路徑和通道(Paths and Lanes)進行技術說明。

確保傳輸可靠性

在上述訊息傳遞過程中,若路徑中某個節點序列的一個定向中繼節點因故而未處理訊息,那麼路徑的這一部分將無法向目標節點子集發送訊息。以圖7的情況為例,這意味著房間某處的燈將無法回應開關發送的訊息。

藍牙Mesh節點的部分時間用於傳輸訊息、部分時間用於等待接收其他節點的傳輸訊息(一次監聽一個無線電頻道),其餘時間則處於閒置狀態。如果一個節點正在發送訊息或處於閒置狀態,那麼在這段時間內將無法接收相鄰節點發送的訊息。如果節點監聽的無線電頻道與傳輸協定資料單元(PDU)的頻道不同,也無法接收訊息。

節點可接收訊息的時間比例稱為RX工作週期,以百分比表示。建議Mesh產品在設計和配置時盡可能提高RX工作週期,不過該值將永遠無法達到100%。因此,節點總是有可能接收不到PDU。這是藍牙Mesh網路運作時預期發生的情況,也是藍牙Mesh技術設計採用隨機方法的基本特徵。

藍牙Mesh節點通常在三個不同的無線電頻道快速連續地傳輸訊息副本。此外,節點通常配置為多次重複進行多頻道傳輸過程。使用多無線電頻道有助於降低封包碰撞風險,而多次重複傳輸訊息可將目標接收者錯過訊息的機率顯著降低。如此一來,透過一些影響節點間成功通訊機率的變數,藍牙Mesh提供了可靠的通訊,不會像其他方法那樣普遍存在協定和配置複雜的問題。

定向轉發在網路層使用多個無線電頻道和PDU重傳的方式,與其他傳訊方案相同,因此具有相同的可靠性優勢。不過,其他原因也可能導致節點序列不可用或無法運作,例如節點電源可能處於關閉狀態,或是節點可能被移動到新的位置。因此,定向轉發為Mesh網路設計人員提供了額外功能「多通道定向轉發路徑」,以確保網路可靠性。

定向轉發路徑彈性和通道

定向轉發功能定義了通道(Lane)的概念。定向轉發路徑由一個或多個通道組成。「通道是一組可為來源位址、目的地位址和子網提供定向轉發服務的節點」,這個非正式定義大家應該已經十分熟悉。進行訊息傳輸時,通常可以選擇不同的節點序列,將訊息從源頭中繼到目的地。通道為一組特定的節點序列,可以提供定向轉發服務。為了盡可能提高路徑可靠性,可以對節點進行配置,以便在建立以其為路徑原點的路徑時,建立一條包含多條通道的路徑。

具體比較請參考先前出現過的圖6及圖9,關於圖片中的圖例說明,請參考圖5。圖6顯示了一條包含單通道的路徑,用於將訊息從開關定向轉發到照明節點。圖9顯示了一條等效路徑,提供指向同一來源位址和目的地位址的定向轉發服務,但為其建立了兩條通道。相較圖6,圖9的網路更加可靠,其中包括備援,即定向轉發中繼器的多個可能序列,可以將訊息傳送到目的地。不過,這也將增加在網路中產生的總流量。

圖6 單通道路徑
圖9 具有兩條通道的相同路徑

路徑指標和通道選擇

通常有不止一個定向轉發中繼序列可以服務一條路徑,因此定義了一種基於路徑指標(Path Metrics)系統的方法,用於在路徑建立過程中對可用節點序列進行排序。

藍牙Mesh協定規格1.1版本定義了一種路徑指標類型,同時也做好準備,以便將來在系統中新增其他指標類型。1.1版本所定義的路徑指標類型稱為節點數指標(Node Count Metric),其為簡單有效的方法,用於測量特定節點序列與其他節點序列相比,在構成路徑的一部分時,具有多大的吸引力。

節點數指標測量的是訊息到達中間中繼節點(Intermediate Relay)或目標節點時,所必須經過的中繼跳躍數與該節點所屬的通道數(屬該路徑)的總和。如此一來,在程序的每次迭代中,現有通道的吸引力都會降低,進而產生新的通道。

在建立路徑和通道時會使用路徑指標,但在使用定向轉發功能透過網路轉發Mesh存取訊息時,將不會使用路徑指標。接下來將探討如何建立路徑和通道,以及路徑指標在此過程中的作用。

建立路徑和通道

路徑可使用配置管理器工具手動建立,也可執行一系列自動程序以動態方式探索和建立。手動建立的路徑稱為固定路徑,動態建立的路徑稱為非固定路徑。

定向轉發配置服務端模型包括一個稱為轉發表(Forwarding Table)的重要狀態。轉發表中的項目表示節點所屬的路徑,在建立固定路徑時需要手動更新轉發表。而每個定向轉發節點都有一個稱為探索表(Discovery Table)的資料結構,自動路徑探索過程中,將於該表中建立臨時項目,幫助識別構成路徑通道的節點序列。

採用定向轉發將訊息從來源位址傳送到目的地位址時,若來源節點的轉發表中沒有相關項目,就會建立非固定路徑。建立路徑必須執行三個程序,即定向轉發初始化(Directed Forwarding Initialization)、定向轉發探索(Directed Forwarding Discovery)和定向轉發建立(Directed Forwarding Establishment)。

路徑的建立和維護由一系列計時器和狀態值所控制,這些計時器和狀態值與名為路徑原點狀態機(Path Origin State Machine)的狀態機有關。顧名思義,這個重要的複合狀態是由路徑原點節點在定向轉發初始化過程中所建立。在定向轉發初始化過程中,還會分配一個稱為轉發號碼(Forwarding Number)的識別項;所有與一系列初始化、探索和建立程序相關的控制訊息,都具有相同的轉發號碼值。

建立路徑原點狀態機並啟動路徑探索計時器後,路徑原點傳送PATH_REQUEST控制訊息。該訊息傳送時,其DST(目的地位址)欄位設定為一個新的固定群組位址,即all-directed-forwarding-nodes。PATH_REQUEST訊息包含另一個名為目的地(Destination)的欄位;該欄位設定為路徑目標位址,可以是單播位址、群組位址或虛擬位址。

在定向轉發探索過程中,PATH_REQUEST訊息從路徑原點發送,接著由接收到該訊息的每個定向轉發中繼器重新生成並再次廣播。如此一來,網路中的所有定向轉發中繼器,最終都會收到PATH_REQUEST訊息。

節點接收PATH_REQUEST時,若接收訊號強度指示器(RSSI)低於配置閾值,將捨棄該訊息,以確保不會使用弱無線電鏈路建立路徑。

PATH_REQUEST訊息副本沿著不同節點序列跳轉時,訊息中會保留一個路徑指標值,以便在探索過程中追蹤到達每個節點的成本。

節點首次收到轉發號碼的PATH_REQUEST訊息時,會在其探索表中建立一個項目。該項目包括要建立的路徑身分和路徑指標;路徑指標代表這次從路徑原點到該節點的節點序列相關成本。此外,在此特定節點序列中,位於該節點之前節點的單播位址,也儲存在名為Next_Toward_Path_Origin欄位中,這對於定向轉發建立程序而言十分重要。

節點收到PATH_REQUEST訊息時,如果在同一探索過程中已透過另一個節點序列存取過該節點,則會查詢探索表,以確定此次PATH_REQUEST訊息採用的節點序列,是否優於迄今發現的最佳節點序列。如果該PATH_REQUEST執行實例(Instance)採用序列的路徑指標低於探索表記錄的值,就會更新探索表項目,在Next_Toward_Path_Origin的新序列中加入前一個節點的單播位址,以及較低的新路徑指標值。如此便可在探索過程造訪的每個節點的探索表中,保留最佳節點序列記錄;該記錄以路徑識別項、路徑指標值和序列中前一個節點的單播位址來表示。

PATH_REQUEST訊息到達路徑目標節點(任何訂閱了目的地欄位中位址的節點)時,就會啟動稱為路徑中繼計時器(Path Reply Timer)的計時器。計時器到期後,就會開始定向轉發建立程序。該程序會新增或更新轉發表的一個項目,以記錄該節點是該路徑新發現通道一部分的事實。接著,將向探索表項目Next_Toward_Path_Origin欄位中包含其單播位址的節點發送PATH_REPLY訊息。PATH_REPLY訊息會透過所選節點序列的中間中繼跳回路徑原點節點,在此過程中建立或更新轉發表項目,直到訊息到達路徑原點。

運行於每個所造訪節點上的路徑探索計時器執行實例,將在路徑建立過程結束前到期,屆時每個節點探索表中的相關項目將被刪除。在被選取的每個節點中,轉發表將包含一個已建立路徑的項目,用於表明這些節點都將為該路徑提供服務。需要注意的是,轉發表不包含序列中下一個或上一個節點的資料。前一個節點的位址只有在建立路徑時才需要,因此僅臨時儲存於探索表中。定向轉發探索和建立的示意圖請參考圖10。

圖10 定向轉發探索和建立

總之,路徑探索涉及PATH_REQUEST訊息從路徑原點開始,在網路中穿行每一個可能的定向轉發節點序列。程序執行時,每個節點的探索表都會記錄迄今為止發現最佳序列的路徑指標值。從路徑目標節點開始,透過PATH_REPLY訊息追溯通往該節點並產生最佳路徑指標值的節點序列;這些訊息僅使用儲存在探索表中的Next_Toward_Path_Origin單播位址沿著該序列的節點跳轉,直至到達路徑原點節點,此時可以說所需路徑的單通道已經建立。

圖11以PATH_REQUEST和PATH_REPLY訊息在網路中的傳輸過程為例,說明從開關(節點A)到單一照明節點(節點J)之間建立路徑的探索和建立過程。

圖11 傳輸存取訊息時使用的路徑

稱為所求通道(Wanted Lanes)的配置狀態顯示一條路徑應該有多少通道。在路徑原點節點,路徑探索計時器到期時,將根據迄今為止建立的通道數,與所求通道進行確認;如有必要,將再次執行探索和建立程序。在這些程序的每個後續迭代中,名為通道計數器(Lane Counter)的欄位都會遞增;如果PATH_REQUEST訊息由一個已經擁有該路徑轉發表項目的節點處理,通道計數器就會新增到路徑指標值中。如此一來,在路徑探索的每次迭代中,重新造訪先前建立的通道時,其相關指標值將逐步提高,導致其他節點序列相較已建立的通道更具吸引力,最終獲選。此外,按照路徑指標系統的運作方式,不相交的通道通常會更受青睞。

監控並維護路徑

網路會發生變化,因此需要對路徑及其通道進行維護。為此需要使用一些與自動路徑維護有關的程序和計時器。

所有非固定路徑都有一個有限的存在時長(Life Span),定義於配置狀態中,所支援的值為12分鐘、2小時、24小時和10天,路徑的預設壽命為24小時;固定路徑則將一直存在,直到使用配置管理器程序刪除為止。

路徑壽命:非固定路徑的存在時長透過路徑壽命(Path Lifetime)計時器來管理;該計時器設定為配置的路徑壽命狀態值,並在路徑建立期間於每個節點上初始化。計時器到期後,路徑上的每個節點都會刪除路徑的轉發表項目。下次需要時,將重新建立路徑。

路徑監控:路徑原點狀態機與特定定向轉發目的地相關聯,並定義了一系列計時器和狀態,包括路徑監控計時器(Path Monitoring Timer)和所需路徑狀態(Path Needed State),所需路徑狀態用於追蹤路徑是否由路徑原點使用。路徑監控在一定的配置時間間隔進行。路徑監控計時器到期時,若路徑監控顯示仍需要該路徑,則執行定向轉發初始化程序,以便根據網路現狀重新整理路徑;如果不需要,則會在路徑壽命計時器到期時刪除路徑。簡單來說,路徑監控可識別並刪除不需要的路徑。

路徑驗證:定向轉發回音程序(Directed Forwarding Echo Procedure)是另一種由計時器驅動的程序。建立路徑時,路徑原點節點將設定路徑回音計時器。計時器到期後,路徑原點節點會向路徑的目的地位址發送PATH_ECHO_REQUEST訊息。PATH_ECHO_REQUEST將被轉發至路徑的目標節點,目標節點收到PATH_ECHO_REQUEST後,會向路徑原點發送PATH_ECHO_REPLY。如果路徑原點在配置的時限內收到該訊息,則表示路徑有效;如果路徑原點沒有收到回音回覆,則表示路徑失效,並導致路徑從路徑原點的轉發表中刪除。簡單來說,採用定向轉發回音程序有助進行路徑驗證,檢查路徑是否仍然有效。

訂閱變更:若定向轉發節點訂閱了一個新位址,或是低功耗節點等相依節點(Dependent Node)訂閱了一個新位址,則須執行定向轉發請求程序(Directed Forwarding Solicitation Procedure)。該程序將使路徑更新,以將該節點包含在內,使其成為路徑中的另一個目標節點。

自我組織與自我優化:監控和維護程序可確保自動識別和重建中斷的路徑,為藍牙Mesh網路自我組織(Self-organizing)行為的一個例子。在建立路徑時,指標用於選擇最佳可用節點序列。隨著涉及節點的通道增多,該節點可能不再是其支援的一條或多條路徑的最佳選擇。因此,在路徑的壽命結束時定期刪除路徑,接著重新建立路徑,意味著以路徑指標來說,路徑及其通道總是最佳的可用選項。簡單來說,定向轉發路徑會自我組織和自我優化。

存取訊息

存取訊息(Access Messages)是定義為用戶端和伺服器模型一部分的訊息類型,可對模型的狀態值發揮作用。存取訊息可以透過受管網路泛洪或定向轉發的方式在網路上傳遞。定向發布原則狀態(Directed Publish Policy State)表明應使用這兩種方法中的哪一種。

所有存取訊息都在網路層使用由加密金鑰和私密金鑰組成的安全材料進行加密。使用的安全材料由NID欄位識別。針對k2安全函數採用不同參數,可以從同一個NetKey生成多種不同的安全材料,用於不同目的。受管網路泛洪材料(Managed Flooding Material)通常用於透過與其NetKey相關聯的子網發送的所有訊息,而在某些特殊情況則可能出現例外。舉例來說,友誼安全材料(Friendship Security Material)用於保護好友節點及其相依低功耗節點交換的PDU。

為了向中繼節點表明應使用定向轉發,網路PDU由路徑原點採用定向安全材料(Directed Security Material)加以保護。受管網路泛洪和定向轉發安全材料的計算公式如下:

受管網路泛洪安全材料

NID || EncryptionKey || PrivacyKey = k2(NetKey, 0x00)

定向轉發安全材料

NID || EncryptionKey || PrivacyKey = k2(NetKey, 0x02)

由此可以看出,兩個公式只有第二個參數值不同。函數k2在藍牙Mesh協定規格中定義。

通道建立VS通道使用

當存取訊息發布,並選擇定向轉發作為傳送方法,可使用路徑上所有通道中的所有節點。訊息由路徑原點進行廣播,並經由位於路徑上和範圍內的每個定向轉發中繼節點轉發,不論其在路徑探索和建立過程中位於哪個通道。增加通道實際上只是在形成並服務路徑的節點集合中增加了額外的節點,因此用於傳遞存取訊息時,通道之間的區別便不再重要。這樣的做法具有一個好處。

路徑建立程序可確定節點序列,這些序列可提供服務,將訊息從路徑原點節點傳送至一個或多個路徑目標節點。節點序列是在探索和建立程序的一次或多次迭代中確定,每次迭代都按順序執行。可以把每條路徑想像成包含不同的節點序列集,為相同的來源節點和目的地節點提供服務。但是,如前所述,使用定向轉發傳送存取訊息時,這種區別就不復存在。路徑上的通道以更大的單一節點集運作,將訊息轉發到目的地。因此,在傳送存取訊息時,可能會有比路徑探索和建立過程中明確識別的節點序列更多的不同節點序列。

圖11描述了一條從節點A到節點J的路徑。其中需要兩條通道,探索和建立程序確定了節點序列A/D/E/J和A/X/W/F/G/J。但節點D和X處於彼此的範圍內,因此在A發布一條發往J的訊息並使用定向轉發時,訊息副本也可能沿A/D/X/W/F/G/J或A/X/D/E/J傳播。這意味著備援度更高,因此多通道路徑提供的可靠性,比最初表面所看到要來得的更高。

節點相依性

節點相依(Node Dependence)概念描述了不同節點類型之間的關係,其中一個節點作為支援節點(Supporting Node),為一個或多個其他相依節點(Dependent Nodes)提供服務。舉例來說,好友節點充當低功耗節點的支援節點,而低功耗節點則是這種關係中的相依節點。好友節點可臨時儲存發給低功耗節點的訊息,透過這種方式為其提供服務。低功耗節點可在方便時從好友節點收集這些訊息,透過減少無線電活動的方式節約電能。

在藍牙Mesh協定規格1.1版本中,節點相依已成為一個適用範圍更廣的概念,可在多種情況下應用於定向轉發。從本質上來說,為相依節點提供定向轉發服務的支援節點將確保所有來自相依節點的訊息在轉發時使用定向安全材料進行保護,並代表相依節點執行所需的定向轉發程序。

支援節點的轉發表包含相依節點元素的位址清單,並在代表相依節點執行的所有定向轉發操作(包括執行定向轉發程序)中充當路徑原點。

代理節點和定向轉發

代理功能涉及代理用戶端(Proxy Client)和代理伺服器(Proxy Server)。代理用戶端通常在GATT載體上使用代理協定(Proxy Protocol),透過代理伺服器向網路中的其他節點發送和接收Mesh PDU。代理用戶端通常是智慧型手機、桌面或網頁應用程式。

代理伺服器實作GATT服務,其中包含兩個GATT特性:Mesh代理資料輸入(Mesh Proxy Data In)和Mesh代理資料輸出(Mesh Proxy Data Out)。代理用戶端將代理PDU寫入Mesh代理資料輸入特性,並接收PDU作為GATT通知。

代理伺服器可能支援定向轉發,如果支援,則表示定向代理狀態(Directed Proxy State)已存在,且值為啟用(Enabled)。代理伺服器的行為會因不同的連線而異,取决於一系列參數。代理用戶端首次與定向代理伺服器進行連線時,會收到一條名為DIRECTED_PROXY_CAPABILITIES_STATUS的代理配置訊息。該訊息顯示當前適用於連線的定向轉發參數,由兩個欄位組成。Directed_Proxy表示代理伺服器是否已啟用定向代理功能;Use_Directed表示是否將定向轉發用於此連線的代理用戶端訊息。

代理用戶端可以透過發送DIRECTED_PROXY_CONTROL訊息,對定向代理伺服器的行為進行某些控制。其中包括Use_Directed欄位,如此一來代理用戶端就可以通知代理伺服器,應該對該用戶端發送的訊息使用定向轉發。若Use_Directed欄位的值為啟用,則訊息必須同時包含一個名為Proxy_Client_Unicast_Addr_Range的選用欄位。該欄位包含代理伺服器必須使用定向轉發的單播位址範圍。

代理用戶端可直接或間接使用定向轉發。若要直接使用定向轉發,代理用戶端將以定向安全材料保護訊息,向代理伺服器表明其必須充當定向中繼節點;若要間接使用定向轉發,用戶端可利用其支援的定向代理伺服器提供的服務。只要代理伺服器啟用了定向中繼,並且存在通往目的地位址的路徑,代理伺服器就會代表相依用戶端對訊息進行定向轉發。

友誼(Friendship)和定向轉發

好友節點可充當定向好友,並以與代理節點類似的方式向相關低功耗節點提供定向轉發服務。如果在定向控制(Directed Control)狀態下啟用此功能,則好友節點將充當定向好友節點(Directed Friend)。在這種情況下,好友節點將在可能情況下使用定向轉發功能轉發來自其低功耗節點的訊息,並在必要時執行定向轉發程序。舉例來說,若一個低功耗節點要向一個位址發送訊息,而該位址目前在好友節點的轉發表中並未列出路徑,則好友節點將建立一個路徑原點狀態機狀態執行實例,並啟動定向轉發初始化程序。要使用此功能,低功耗節點必須使用友誼安全材料來發送訊息。

Mesh定向轉發提升網路效率

藍牙Mesh定向轉發功能提高了網路內共享無線電頻譜的使用效率,進而增強了網路的整體擴充性。定向轉發路徑的自動建立和維護使網路規畫和配置變得更加容易。本文分為兩部分詳述藍牙Mesh 1.1版本中的定向轉發功能,以供相關業者作為產品開發時的參考。

(本文作者Martin Woolley任職於藍牙技術聯盟;Szymon Slupik、Piotr Winiarczyk任職於Silvair)

釐清路徑減少無效傳輸 解析藍牙Mesh定向轉發(1)

路徑/通道傳輸有門道 解析藍牙Mesh定向轉發(2)

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!