(1)device(设备)和node(节点)
节点的角色(网络角色)
设备是指有蓝牙功能
电子终端。而一个设备加入到mesh网络中后,就成为一个节点。设备加入Mesh网络,需要网内的配网节点(Provisioner)的授权。
蓝牙Mesh网络的节点除了实现应用功能以外,还具有网络角色,以实现网络组网、消息传递、网络安全管理等的各种功能。
主要的网络角色有五种:低功耗节点-Low Power Node、亲友节点-Friend Node、中继节点-Relay node、代理节点-Proxy node、非冲击节点-No relay node。
Low Power Node和Friend Node: 低功耗节点和亲友节点。
低功耗节点通常由小型电池供电,需要尽可能的减少通信开销。该节点不会一直在广播信道发送或者监听数据包,但网络有时还是数据传送一些数据给它(比如新的测量阀值)。
所以,低功耗节点会采用一种“代收快递”的方式来实现数据的获取。首先,低功耗节点和网络中的其它节点实现“串联”,形成一种“代理”关系,官方文档中称为“友谊(Friendship)”关系。
而后,当网络中有低功耗节点的数据时,会先发给串联节点进行数据缓存。最后,当低功耗节点发送查询信息(定期的“Poll”消息)的时候,串联的节点会将缓存的数据递交给低功耗节点。这其中的串联节点,即称为Friend node(亲友节点)。
Relay node:中继节点
在Mesh网络中,某些设备被指定为“中继设备”,通过广播承载层来接收和转发蓝牙Mesh的消息,它承担着扩展网络覆盖范围的职责。中继节点使得数据能够通过无线信号的“接力”绕过楼道内的物理障碍物,送达到目的设备。中继节点需要充沛的供电,并具备一定的计算能力。亲友节点(Friend Node)是一种特殊的中继节点。
Proxy node:代理节点
代理节点提供了GATT接口(“Generic Attributes”,一种低功耗蓝牙设备之间的通信协议),以便于蓝牙设备在不具备蓝牙Mesh网络协议栈的情况下,能够通过代理节点接入蓝牙Mesh网络。代理节点同时支持广播承载层和GATT承载层的数据包收发。代理节点(Proxy node)是一种特殊的中继节点。
No relay node:普通节点(非代理节点)
没有中继功能的节点,也称为普通节点。普通节点可以实时地收发消息,但是无法转发其它节点的消息。
节点网络角色的功能,通过元素模型配置(网络地址、消息等)来具体定义,并由网络层、传输层实施具体操作(网络协商)。在具体应用中,节点需要遵循自己的节点角色发送、接收、转发消息。
在蓝牙Mesh网络中,低功耗节点和普通节点通常位于网络边缘,属于信源设备(信息产生、处理的节点);而亲友节点、中继节点和代理节点一般处于较核心的位置,都可以视为“中继”节点(具有信息转发的网络功能)。
(2)Element(元素)
出于节能或便捷部署的需要,一个节点可以关联多个子设备,这每个子设备都是一个“元素”。例如, 一个节点可以包含一个蓝牙通信模块和一个灯组(灯组由多个灯泡组成),所有的灯泡都是通过同一个蓝牙模组接入Mesh网络,在灯组中的每一个灯泡都是一个元素。元素是Mesh网络中最小单位的“实体”,每个元素在网络中都有一个唯一的地址(单播地址,Unicast Address)。
(3) 模型(model)和状态(state)
模型代表了节点中的元素所具备的行为功能。一个元素必须至少有一个模型,既一种功能。每个模型都有唯一的标识符(32位),能够在Mesh网络中被识别出来。
模型具有一种或多种的“状态”。状态是一个或一组特定类型的值。状态的改变,就代表模型执行了某项功能。
例如,灯具有开/关的功能。其中,灯代表“元素”实体,而开/关的功能就是“模型”。开关具有两种特征:“on”、“off”,这便是灯的“状态”。
在应用层面,“节点”就是接入蓝牙Mesh网络的“设备”,它包含了一个或一组“元素”(子设备),每个元素都具有一些“模型”(功能),且每一项功能都配置有一个或一组“状态”参数,来表示此功能所对应的操作。
每当圣诞节来临,圣诞树需要灯饰装点,灯饰一般都是一串彩灯(由许多不同颜色的灯泡组成)。可以将这一串灯视为一个“节点”。为了营造圣诞气氛,可以对灯串中每一种颜色的灯作为“元素(Element)”进行单独控制。
每种颜色的灯都具有发光的功能作为它的“模型”,模型包括两种状态属性:“开/关”状态、亮度状态。这样,蓝牙Mesh网络便有了对装饰灯进行动态控制的基础。
当然,如果需要更多的动态效果,甚至可以将每一个灯泡配置成一个元素。不过,这样做可能会“浪费”掉不少蓝牙Mesh的地址资源(节点中的每个元素都会被分配一个唯一的单播地址)。如何定义和设计应用,完全由开发者根据产品要求自行决定,蓝牙Mesh技术只是提供了节点配置的框架。
2.网络层结构
蓝牙Mesh网络是搭建在蓝牙低功耗技术(BLE)构架之上的,其网络的层次构架与OSI的7层参考模型有一点相似:BLE层-承载层-网络层-传输下层-传输上层-接入层-基础模型层-模型层。
BLE层(Bluetooth Low Energy Layer):低功耗蓝牙连接层,实现节点之间的无线通信连接,是实现Mesh网络的基础。
承载层(Bearer Layer):定义了如何使用底层BLE协议栈传输网络PDU(协议数据单元)。实际的承载方式分为两种:广播承载(adver
tising bearer)和GATT承载。默认情况下,使用广播承载来封装Mesh的网络数据包。
网络层(Network Layer):定义了各种消息的地址类型、格式,完成数据的网络寻址和转发。节点的中继、代理行为是通过网络层实现的。
传输下层(Lower Transport Layer):主要负责网络中传送的PDU(协议数据单元,Protocol Data Unit)的分段和重组。如果传输层数据包过长,那么该层会将数据包拆分后送给网络层发送;在收到网络层分片的数据包后,该层会进行数据包的重组。
传输上层(Upper Transport Layer):负责对上层应用数据进行加密、解密和认证。该层还定义了“传输控制消息”(transport control messages),用于关联节点间互通消息,例如亲友节点(Friend Node)和低功耗节点(Low Power Node)之间的“心跳状态包(Heartbeats)”。
接入层(Access Layer):定义应用的数据格式,以及如何使用传输层的服务(网络服务)。接入层能够定义、控制在传输层中的数据加密、解密过程。对于传输层送达的数据,接入层能够对其中的网络、应用信息进行验证。
基础模型层(foundation models Layer):实现应用层模型与Mesh网络协议的适配,定义了其中的消息、状态等属性。
模型层(models Layer):处于蓝牙Mesh应用层,实现应用层数据配置、设备操作、消息收发的基本功能单位。同时它也具有控制、管理网络的功能,收发与蓝牙mesh网络操作有关的消息,例如网络心跳(heartbeat)消息。在蓝牙Mesh网络中,模型是实现各类应用功能的基础。
原作者:物联江湖 王一鸣