SIG藍牙mesh筆記2_mesh組成


SIG 藍牙 mesh 組成

mesh網絡概述

藍牙mesh網絡是一種基於泛洪管理的mesh網絡,消息是通過廣播信道傳遞,收到消息的節點可以繼續轉發消息,這樣就可以實現更遠范圍的消息傳遞。為了防止出現消息不受限制的轉發傳遞,規定了以下兩種方法來避免:

  • 節點不會轉發之前收到的消息,當收到新的消息時,會首先在緩存中檢查是否存在相同消息,若存在,則忽略新的消息。
  • 每個消息都會包含一個TTL(Time to Live)的字段,這是用來限制消息中繼的次數,每次轉發消息后,TTL的值就會減1,當TTL的值到達1時,消息就不會再次被中繼。

網絡和子網

共享以下幾種網絡資源的節點組成一個mesh網絡:

  • 用來identify消息源地址及目的地址的網絡地址
  • Netwoek Key, 用來在網絡層加密
  • Application Key, 用來在access layer加密
  • IV index

IV Index 是一個32位的值,是一種共享網絡資源,比如一個mesh網中的所有節點都共享相同的IV Index值。

IV Index從0x00000000開始,在IV-Update-procedure過程中遞增,並由特定的進程維護,以保證整個mesh網內共享相同的IV。

IV Index在網絡中通過Secure Network beacons 共享, 一個子網收到 IV-Update時,會處理並傳播該update。傳播是通過在子網中傳輸Secure Network beacons實現的。如果一個在主子網中的節點收到IV-update時,會將其傳播到其他所有的子網。

如果一個節點從網絡中消失一段時間,該節點會掃描Secure Network beacons ,或者是使用IV Index Recovery procedure來重新設置其IV-Index的值。

一個mesh網絡中可以存在一個或多個子網(比如一個賓館的所有節點構成一個mesh網絡,每個房間的節點都構成一個子網),子網中的節點有着同樣的Network Key,他們可以在網絡層相互通訊。一個節點可以屬於多個子網,即一個節點可以配置多個Network Key。在Provision階段,一個節點會被配到一個子網中,可以通過Configuration Model將節點陪孩子到多個子網中。

子網中有一類特殊的子網,被稱為主子網,主子網是基於主NetKey的。主子網中的節點參與IV更新操作,並將IV值傳遞給其他子網。與之相對的是,其他組網中 的設備只是向子網中傳播IV-Index。

包含Configureation Client Model的節點來配置網絡資源, 這類節點稱之為Configuration Client。通常情況下,Provisioner 負責在Provision階段給節點分配unicast address以保證不會有重復的地址。Configuration Client負責分配NetKey, AppKey以保證網絡中的節點可以在網絡層和access層通訊。

設備和節點 devices & nodes

加入mesh網絡的設備稱之為節點,未配網設備稱之為device。** Provisioner** 就是用來管理節點與未配網設備之間的消息傳輸。

未配網的設備不能收發mesh消息,但是它可以通過廣播消息告訴provisioner該設備的存在。provisioner可以將一個未配網設備接入網絡使之成為網絡節點。

網絡節點可以收發mesh消息,其是由Configuration Client來管理的(Configuration Client可以與Provisioner是同一個)。Configuration Client是配置節點之間如何傳遞消息。Configuration Client可以把節點從mesh網絡中移除,使之成為未配網設備。

入網

當設備被provisioner添加到網絡時,就成為網絡節點。設備的配網過程與傳統的藍牙點對點配對過程不同。設備配網過程是通過advertising bearer 或者point-to-point GATT-based bearer實現的。通過advertising bearer 配網的過程是被所有節點所支持的,而通過point-to-point GATT-based bearer配網允許智能手機這類設備成為配網者(provisioner)。

mesh中的幾個概念

mesh網絡結構使用以下幾個概念:states、messages、bindings、element、addressing、models、publish-subscribe、mesh keys、association。

States(狀態)

state是一個用來表示element狀態的一個值。

可以表現state的element稱之為server。比如,燈控中,燈節點一般為server,其開關狀態則是一個state, server根據收到的消息改變其狀態。

可以訪問state的element稱之為client。比如,燈控中的開關,可以通過發送開關消息給server,實現開關控制。

包含多個值得狀態稱之為復合狀態,比如燈的顏色會包含RGB等分量。

Bound states(關聯狀態)

當一個狀態關聯另一個狀態,其中一個改變,會導致另一個狀態改變,這種狀態就稱之為關聯狀態。關聯狀態可以存在於一個或多個element的不同models之間。在燈控中,較為常見的關聯狀態是電平狀態跟開關狀態的關聯,當電平變化到0時,會導致開關狀態也變為關。

Messages(消息)

消息會作用於狀態, 對於每個狀態(state)都會定義一系列消息,這些消息被server支持並且可以被client用來獲取並改變server的狀態。server也可以主動發送自身狀態的消息,比如狀態改變時。

消息包含操作碼、相關的參數以及行為。操作碼可以是1~3個字節,比如泰凌微的私有mesh就是用的三個字節(op[3])表示,其中op[0]為操作碼,op[1~2]表示廠商ID。一字節的操作碼用於某些特殊情況,比如需要將允許的參數個數設置為最大時;2個操作碼時標准的消息。

一條包含操作碼的消息的總長度是在下傳輸層決定的,這里可能會用的分段重組機制。為了最優化性能,我們應避免分段重組,最好將消息限制在一個分段長度以內。傳輸層允許最多11個字節的不分段消息,當使用一個字節操作碼時,參數個數最多允許10個。當操作碼為3個時,最多允許8個參數。

傳輸層的分段重組機制最多允許32個分段,因此消息的最大長度是384個字節。除去MIC檢驗的四個字節,一個操作碼的消息最多允許379個參數。

消息可以是需要回應的,也可以是無需回應的。

Element

element是節點中一個可尋址的實體,每個節點都至少有一個element,一個主element,多個附加element。element的數量和結構是固定的,在節點的生命周期中保持不變。

主element使用節點在配網時的唯一地址(unicast address)尋址,每個附加element都使用子序列地址尋址。這些element地址允許節點識別節點內的收發消息。

如果一個節點內,element的數量和結構發生了變化,比如在固件升級時,那么需要再次配網。

models中的消息是根據消息的操作碼和element地址來分發的。

一個element中不允許包含多個使用相同消息的model,當一個element中的多個model使用相同消息時,會造成過載。為了避免過載,一個節點內允許多個element存在,這樣具備相同消息的model放在不同element中就可以了。

比如,對於一個燈設備來說,可能存在兩個燈泡,每個都實現了亮度控制。這時就需要節點包含兩個element來分別表示兩個燈泡,當收到亮度命令時,節點會根據element的地址來決定哪個燈泡亮度應被修改。

Addresses 地址

有三種類型地址,唯一地址(unicast address)、虛擬地址、組地址。

唯一地址是在配網階段被分配給節點的主element,每個mesh網絡可以有32767個唯一地址。

虛擬地址可以代表多個element,每個虛擬地址表示一個標簽化的UUID。每個被發往UUID的消息都在完整檢驗值中包含可整個標簽UUID,以驗證消息。為了避免檢查每個已知的UUID,我們使用UUID的哈希值。共有16384個哈希值,每個都代表了一族虛擬地址。在虛擬地址中,只使用了16384個哈希值,因此每個哈希值都可以表示上百萬個UUID,因此虛擬地址的數量可以被認為很大。

組地址可以表示多個element,每個mesh網絡中共有16384個組地址。有一些固定的組地址用來訪問所有主element。共有256個固定組地址,16128個動態分配的組地址。

Models

Model定義了一個節點的基礎功能,一個節點可能包含多個Model。一個Model定義了其所需要的狀態、作用於狀態的消息、以及相關行為。

mesh應用使用了client-server結構,通訊使用“發布-訂閱”機制。鑒於mesh網絡的特點,以及配網的行為,應用不是簡單的“端到端”模式。應用是定義在client model、server model和control model之中。

  • Server model: 由一個或者多個element中的多個state組成。Server Model 定義了一族主消息,收發主消息時element的行為,還有收發消息之后的附加行為。

  • Client model:定義了一族消息,client可以用來請求、改變相關server的狀態。client沒有state.

  • Control model: 包含client功能用來與其他server通訊,也包含server功能用來與其他client通訊。一個control model可以包含控制邏輯,即與其他model相互作用時,該model的一些規則及表現。

一個簡單的設備可以包含server、client、control model。下圖表示了一個control model例子。

照明控制器是一個control model實現,照明控制器需要作為client來控制燈設備(或傳感器),也需要作為一個server被智能手機等設備控制。這樣一個照明控制器可以存在於傳感器中、燈設備中或者是一個獨立的設備中。

Models可以定義網絡節點的功能,比如秘鑰管理、地址分配、消息中繼燈。Models也定義了設備的表現,比如電源控制、照明控制、傳感器數據收集。有的節點只實現了中繼中能,比如代理節點。

一個消息可以應用於多個不同的models,消息的表現在每個model中都是相同的。

Model的特性是不可改變的,不能向一個model移除或者添加行為。如果一個新的行為必須要添加,則需要產生一個新的model。model支持擴展,新的model擴展原model時,會繼承原model的相關行為。

一個element所包含的的model決定了該element的表現。

Model可以被SIG定義(SIG Model)也可以被廠商(Vendor Model)定義,model被唯一的標識符所識別,可以是16bit(SIG Model)或者是32bi(Vendor Model)t的一個值。

下面的例子中,一個設備包含了兩個element,主element中包含了一個model,該model是擴展自附屬model的,在附屬model的基礎上添加了一個新的狀態。

由於State_X1與State_X2可以接收相同的消息,因此必須要放在兩個element中。

智能插座例子

如上圖所示,該設備由兩個插座組成,包含兩個element,分別代表兩個插座。每個element都分配一個唯一地址。

每個element的功能由Generic Power Level Server model定義,該model定義了一族狀態以及作用於狀態的消息。

Generic Power Level Set 消息被傳送到設備上用來控制電平,然后根據element的地址,來控制對應的插座。

插座也可以被實現了Generic Level Client model的設備控制,該model簡單的設置電平,插座的實際控制是通過狀態關聯實現的。在每個插座中,Generic Power Actual state ** 是與Generic Level state關聯的。Generic Level Client Generic Level Server 發送電平設置消息,然后Generic Level改變,與此同時Generic Power Actual state **也會改變,Power Actual state實際控制插座電源。

element可以報告狀態,在插座的例子中,每個插座都可以匯報電源狀態以統計耗電量。能耗是通過Sensor Server model定義的消息實現的,每個消息都有個element地址,這個地址唯一識別插座。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM