BLE 技术(七)--- BLE MESH 是如何设计的?

本文详细介绍了BLE MESH如何定义消息、在MESH网络中传递消息以及保证通信安全。MESH设备间的通信基于消息模型,使用Client / Server架构,通过状态和消息实现双向通信。消息通过受控泛洪广播寻址在MESH网络中传播,同时采用子网隔离和加密认证确保安全性。设备入网时通过启动配网过程分发NetKey和AppKey,建立安全通道。Low Power节点通过Friendship与Friend节点建立连接,缓存消息。BLE GATT设备通过MESH Proxy Service与MESH网络交互,使用GATT Bearer和Advertising Bearer转换消息。启动配网过程确保安全,GATT设备通过管理订阅列表过滤接收到的消息。
摘要由CSDN通过智能技术生成

前言

前篇博文BLE协议栈设计与演进介绍过,当BLE 设备数量比较多时,常用的大规模组网方式有IP 组网和MESH 组网两种。如果熟悉TCP/IP 协议,不难理解 IP 组网就是将BLE 作为数据链路层,在其上添加TCP/IP协议栈接入Internet,如果需要接入云平台实现大规模远程监控,可以借助MQTT 协议的消息发布-订阅模型来实现。

很多场景下,我们并不需要每台设备都接入Internet,而是需要大量的BLE 设备在本地组成一个智能局域网,比如楼宇智能照明网络、传感器网路等。为此,SIG 于2017 年发布了Bluetooth mesh networking 规范,使用MESH 网络拓扑结构可以实现本地大规模自组网,BLE MESH 有哪些特点或优势?又是怎么实现的呢?

MESH 类似于TCP/IP 协议,是一种网状网络标准,下层需要物理层和数据链路层的支撑,BLE MESH 就是基于BLE 的网状网络标准,允许大量BLE 设备之间进行多对多通信。

BLE MESH 由SIG 于2017 年发布在Mesh ProfileMesh Model 规范中,算是一个比较新的网络协议。蓝牙技术联盟的小码哥(Martin Woolley) 和任凯也写了解密BLE MESH 系列博文可以帮助我们快速了解BLE MESH。

一、BLE MESH 如何定义并传递消息?

学习一个新的协议,不妨将其与已经熟悉的协议做个对比并建立联系。前面介绍了BLE 设备间一对多的广播通信和一对一的连接通信,MESH 网状网络则是多对多的广播通信,三者的网络拓扑结构对比如下:
BLE 拓扑结构对比

1.1 如何定义MESH 设备的消息?

不管是哪种网络拓扑结构,都是为设备间高效安全的进行数据通信设计的,都有数据的发送方和接收方。广播通信中,Advertiser 发送数据报文,Scanner 接收数据报文,广播通信算是单向不安全通信。连接通信中,则采用了Client – Server 通信架构,Client 请求服务、Server 提供服务,连接通信算是双向安全通信。BLE MESH 网络中的设备包括传感器、照明灯、开关、电机等,既有向特定设备发送控制指令或上传数据的需求,也有接收并处理来自特定设备的查询指令或设置指令的需要,因此MESH 设备间应能支持可靠的双向通信。

双向通讯协议,不管是BLE GATT 还是HTTP / MQTT,都采用Client – Server 通信架构,BLE MESH 也采用了Client / Server 架构承担设备间的通信任务。BLE MESH 目前在商业照明网络和传感网络中应用比较广泛,我们以商业照明中的开关节点和灯泡节点为例,灯泡节点是提供照明服务的Server,开关节点则是请求照明服务的Client,二者的通信架构如下(可对比GATT Client 与GATT Server 的通信架构):
BLE MESH Client -- Server 通信架构
BLE 设备的Client 和Server 是基于GATT Service / Profile 的,提供GATT Service 的设备称为GATT Server,请求GATT Service 的设备称为GATT Client。BLE MESH 设备的Client 和Server 则是基于MESH Model 的,比如上图是以Generic OnOff Model 作为示例,提供Generic OnOff 服务的设备称为Generic OnOff Server,请求Generic OnOff 服务的设备称为Generic OnOff Client。什么是MESH Model 呢?

MESH Model 可以类比GATT Service / Profile,是抽象出来的基本功能单位,比如电机、电灯、插座等不同的设备都可以抽象出一个Generic OnOff Model。同样类比一个BLE 外设可以提供多个GATT Services,一个BLE MESH 设备也可以提供多个MESH Model,也即一个MESH 设备可以提供多个基本功能。

BLE MESH 有些术语跟BLE GATT 中的不同,BLE MESH 网络中的设备称为MESH 节点,由于一个设备节点可能包含多个子设备,比如多孔插座、多灯泡灯具、多按键开关等,我们将这些基本的子设备实体称为元素,也即一个节点设备可能包含多个元素,每个元素都是一个独立的子设备 。比如双孔插座或双灯泡灯具设备节点,都包含两个元素:
MESH设备节点-元素-模型

  • Node:已经加入到MESH 网络中的设备,MESH 网络中的每个设备称为一个网络节点,节点设备之间通过MESH 消息报文通信;
  • Element:每个节点设备可能包含了多个独立的子设备,比如多孔插座、多灯泡灯具、多按键开关等,每个独立的子设备都称为一个元素,元素可以理解为MESH 网络中实体设备的基本单位。为方便在MESH 网络中寻址特定的设备,每个元素都会被分配一个在该MESH 网络中唯一的单播地址。为了提高寻址效率,每个节点设备都有一个主元素负责该节点内多个元素的寻址计算。

MESH Model 继续类比GATT Service / Profile,每个GATT Service 可能包含多个Characteristics,通过对Characteristic Value 的Read / Write / Notify / Indicate 实现对GATT Service 的请求或响应。每个MESH Model 则可能包含多个States,通过相应的Messages 来实现对特定State 的Get / Set / Status(可类比Read / Write / Notify),比如灯泡元素可能包含Generic On/Off State 和Generic Level State 两个状态,通过Generic On/Off Set message 可以改变Generic On/Off State,为了实现某个基本功能而定义的Sates、作用于这些状态的Messages、响应这些消息的Behaviors 一起构成了Model,这几者的关系如下(右图是上述双孔插座的元素-模型结构,每个插孔都可以独立测量连接其上的设备消耗的功率信息):
BLE MESH Node - Element - Model - State 关系

  • State:将设备抽象定义为几个可用数值量化表示的工作状态,对设备的控制就相当于是工作状态的变更或切换。比如灯泡可以用On/Off(也即布尔值1/0) 表示开关状态,也可以用0-10 的整数值表示亮度状态,温度传感器可以用0-100 的浮点值表示当前的温度状态等。多个状态之间也可以相互绑定,让一个状态的改变会导致另一个状态的改变,比如将灯泡亮度状态值0 绑定到开关状态值Off、将灯泡亮度状态非零值绑定到开关状态值On(上面右图中的每个橙色方框表示一个状态);
  • Message:在MESH 网络中设备间的通信都是靠发送接收消息完成的,消息是作用于状态的(也即用于获取或改变当前的状态),对于每个状态都定义了一组消息,Client 可以使用这些消息来请求或更改服务端的某个状态值,Server 则定义了必要的状态以及响应状态消息的行为、也可以主动使用消息向特定客户端通知当前的状态值;
  • Model:定义了MESH 设备的基本功能,由于BLE MESH 采用Client – Server 架构通信,Model 也可分为Server Model 和Client Model 两类。Server Model 提供模型实现的服务,包括为实现基本功能服务而定义的States、作用于这些状态的Messages、响应这些消息的Behaviors 等;Client Model 则是请求模型实现的服务,只包括获取或更改特定状态的消息,也即客户端模型没有状态。由于MESH 网络通信的复杂性,部分元素设备可能同时包含Server Model 和Client Model,比如一个冷却泵控制模块包含一个温度传感器(Server Model)和一个水泵开关控制器(Client Model),当温度状态值超过某个设定阈值时打开水泵,这类同时包含状态和控制逻辑的模型称为Control Model,控制模型可以大大丰富各元素或模型间的交互逻辑。
    BLE MESH Client/Server/Control Model

1.2 如何在MESH 中传递消息?

BLE MESH 网络中设备间传输传感器状态数据或者执行器控制指令都是通过消息完成的,消息报文主要在Server Model 和Client Model 之间传递。但MESH 设备间消息的传递是多对多的,Control Model 又增加了消息传递的复杂性,BLE MESH 该采用怎样的消息传递模型来实现这么复杂的MESH 设备间通信需求呢?

博文如何使用消息订阅-发布模型介绍到的消息订阅-发布模型就比较适合大规模物联网设备之间复杂的多对多消息传递,通过解耦消息的订阅者和发布者,很方便网络设备节点的扩展,BLE MESH 也采用了订阅-发布消息模型在MESH 设备节点之间传递消息报文。
BLE MESH 订阅-发布消息模型
BLE MESH 作为本地自组网,不适合设置一个像云端服务器这么强大的Broker / Server 来集中维护各设备的订阅列表,MESH 网格网络更接近去中心化的网络拓扑结构,该如何在MESH 自组网中应用订阅-发布消息传递模型呢?

考虑到BLE MESH 设备功能都比较单一,可以将每个功能抽象成一个元素element,每个设备节点可以包含多个元素,每个元素被分配一个单播地址(每个元素中的多个模型可通过Model ID 字段区分),这个单播地址可以作为订阅者和发布者的身份标识。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流云IoT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值