SIG-mesh與Telink-mesh簡單介紹
SIG-mesh與Telink-mesh簡單介紹
SIG-mesh與telink-mesh都采用泛洪管理的消息機制在廣播信道收發消息。telink-mesh的實現方式較為簡單,主要是根據用戶名與密碼來甄別同一mesh網內節點消息。SIG-mesh采用Network-Key與Application-Key進行兩級加密,實現方式相對於telink-mesh更加復雜,但是適用性、安全性更好。
telink-mesh實現方式
由於telink-mesh協議棧代碼並未開源,所以telink-mesh實現方式是根據SDK中應用層API及應用代碼推測的。。。
數據傳輸是在廣播信道進行的,即一個節點發出的消息所有節點都可以收到。在一個節點收到的消息中,有非mesh藍牙節點的廣播數據、mesh網內節點的有效數據、mesh網外節點的無效數據。
在進來的消息中,如何識別本節點所屬mesh網內的消息呢?telink-mesh是這樣實現的,在包數據的特定位置插入用戶名、密碼,這樣用戶名密碼不匹配的消息就被過濾掉了。使用相同用戶名密碼的節點,構成一個mesh網。telink-mesh的組網過程,只是修改節點的用戶名。
出廠時,所有的節點都設置相同的默認用戶名密碼,用戶使用時,會通過APP註冊一個唯一的用戶名(比如 [email protected])。app首先通過出廠默認用戶名密碼連接節點,然後將其修改為app用戶名。通過這種方式,該app連接的節點共享一個用戶名,構成一個mesh網。
SIG-mesh實現方式
SIG-mesh是基於BLE5.0實現的,其網絡層級結構自下而上一次是:
BLE協議棧 -> bearer_layer -> network_layer -> transport_layer -> access_layer -> model_layer -> application。
除了最下層的BLE協議棧,nordic都將其實現代碼開源。
SIG-mesh的組網由provision和configure兩個動作實現。
provision過程是給節點分配Network_key和IV_Index,該過程將未配網設備加入到網絡中,成為網絡節點。
SIG_mesh中,mesh網內節點共享相同的Network_key和IV_Index,其中IV_Index每隔30~60分鐘會加1,網內節點同步更新IV_Index。 一個節點可以配置多個Network_Key,即屬於多個子網。
初始時,未經過provision的設備,會不斷發出unprovision_beacon幀,beacon幀中的數據包含該設備的UUID。Provisioner如果掃描到該beacon幀時,會根據其中的UUID信息,決定是否provision該節點。之後,provisioner會選擇一個UUID的設備,向該節點發送Network_Key、IV_Index等信息。設備獲得正確的Network_Key、IV_Index時,就算是加入mesh網了,節點之間可以轉發本mesh網內消息。
UUID是一個16字節(128 bit)的數據,可以在UUID的特定位置做標記,比如燈、插座、開關、公司等。這樣在provision階段就可以獲取掃描的設備信息。
經過provision階段,節點已經組網了,相互之間可以轉發消息。這時節點還沒有地址、Application_Key等信息,還需要configure階段才能構建完整的mesh網絡。
Configure過程就是配置節點地址及Application_Key。
分配地址過程首先給節點內每個element分配一個unicast_address,根據實際情況分配group_address及virtual_address。
element是SIG_mesh中的一個基本概念,舉個例子,一個智能插排設備會有六個插座位置,這六個插座位置都可以接收開關消息,而我們需要獨立控制每個插座位置,所以不能只給這個插排分配一個unicast_address。要給六個插座位都分配一個唯一的地址。每個插座位就是一個element。可以接收相同消息的單元(這裏是插座位),需要分配在不同element種,以便獨立控制。
分配Application_Key,是針對不同應用而言,比如門鎖與燈。在實際應用中,一個家庭的所有mesh設備構成一個網絡,其中包括門鎖、插座、燈等設備,處於一個mesh網可以互發消息,但是為了防止燈的消息對門鎖造成影響,因此需要對不同的應用分配不同的application_key。這樣門鎖根本就不會去解析燈的消息,但是由於共享相同的Network_Key,門鎖可以轉發燈節點的消息。
SIG-mesh與Telink-mesh簡單介紹