前言
基本上目前比较主流的一些组网技术,如Zigbee、Thread以及一些私有的Mesh技术,均会引入角色这个概念即想将一个mesh网络搭建起来,务必各个角色各司其职,这个网络才会完善且稳定。如果还是觉得有点抽象,我们可以把mesh网络看成一个 "公司",一个公司有董事长、总经理、部门经理、普通职工,这样才是一个正常公司的组织架构。同样的,SIG Mesh网络这个组织框架也是如此😀。
特性
一个节点具备什么样的功能是由它支持的特性决定的,所有的节点均可以收发mesh信息。同时它们也支持零个或者一个或者多个可选的特性,而且这些特性都可以在适当的时间被关闭和开启,任君选择;
可能有读者在此时可能会产生两个疑问:
- “特性可以在适当的时间被开启和关闭” 是不是说用户可以随机去掉这4个特性中的任意一个或者多个特性?
这个理解是不太正确的,这句话的意思是说如果我们编程时已经指定这个节点具备哪几个特性,那么这些特性就陪伴其整个生命周期 (重新刷新固件除外),这里所说的关闭仅仅表示临时关闭这个功能。例如:一个支持中继特性的节点,在一时刻被我关闭了,但是这个节点还是支持中继特性,只是它此时不再执行中继的功能了。如果还是听不明白,那小编我再举一个例子:“一个台灯它有开关以及调光的特性,现在你把调光的特性关掉了,这并不表明此时这个台灯没有调光的功能了,仅仅是说此时台灯已经不响应你调光的动作而已。”
- 既然所有的节点均可以收发mesh信息,那么我还需要使能中继特性干嘛?
但凡有同样这样疑问的人,我想肯定是跟小编一样的优秀:smile:,起初我刚看spec的时候也是这么想的。但是,此发非彼发!!!,小编又要举例子了:“中继特性的发,其是将其收到的mesh信息的索引加1,TTL减1再重组一下,有效数据原封不动的再次发送出去;而普通节点(没有任何可选特性)的发,仅仅是发送自己相关的mesh信息,就算它收到了其他节点的mesh信息且不是给它的,是会被它忽略的,不会帮你转发的。”
注意:可选特性只是让普通节点变得更强,也是让这个SIG mesh网络适应更复杂的应用场景,这言外之意就是一个简单的mesh网络是可以全是普通节点的。
为了让上述枯燥无味的文字,更加好理解这里我借用Mesh spec的一张图来让上面的文字更加易于理解。
但是,上面所示的S节点,小编认为还是有点问题,既然S节点可以通过GATT承载跟T节点进行数据交互,那么S节点应该也支持代理特性,即proxy feature。
a: 中继
首先,具备中继特性的节点还不能被称为中继节点,官方的Mesh Spec对中继节点的定义是“具备中继特性且中继特性被使能的节点”,其作用是中继/转发节点通过广告承载接收的网络PDU。如果支持代理功能,则应支持GATT和广告承载。。
b: 代理
同理,具备代理特性且代理特性被使能的节点才能称为“代理节点”,其作用是在GATT和ADV承载之间接收和转发网络信息。这个时候,可能又有读者被承载这个新名词绕晕了,一会儿ADV承载一会儿GATT承载。
通过GATT连接,使用Proxy协议在两个节点之间收发proxy PDU
c: 低功耗
同理,具备低功耗特性且低功耗特性被使能的节点才能称为“低功耗节点”,其作用是与支持朋友特性的节点配合使用,降低同一个mesh网络中该低功耗节点的功耗。
d: 朋友
同理,具备朋友特性且朋友特性被使能的节点才能称为“朋友节点”,其作用是帮助存储发向低功耗节点的信息和转发其发往其他节点的信息,使低功耗节点可以收发其他节点的信息。这个关系就跟父子之间的关系一样,儿子饿了就向爸爸哭要奶喝(类似于低功耗节点往外发信息),等妈妈把奶粉冲好了拿给爸爸,然后给儿子喝(这个过程就类似于低功耗节点从朋友节点获取信息),而平时带儿子照顾儿子就类似于朋友节点对低功耗节点的管理