BLE MESH组网(一)
BLE MESH简介
Bluetooth mesh profile规范是由Bluetooth SIG开发和发布的,它允许一对一、一对多和多对多通信。它使用BLE协议在网络节点之间交换消息。这些节点可以相互通信,只要它们在彼此的直接无线电范围内,或者有足够的设备能够侦听和转发这些消息。
BLE MESH网络利用管理泛洪方法进行消息传输,这是一种简单可靠的消息中继形式,特别适用于低功耗无线网状网络,尤其是那些处理大量多播流量的网络。这使得基于泛洪的消息中继成为满足商业和工业市场严格的可靠性、可扩展性和性能要求的理想方法。
BLE MESH来源
蓝牙基本速率/增强数据速率 (BR/EDR) 是第一个发布的蓝牙版本。它旨在作为一种电缆替代技术,很快就主导了无线音频产品,并成为新计算机外围设备(如无线鼠标和键盘)的推动者。
低功耗蓝牙 (LE) 是下一个真正与众不同的蓝牙技术。它经过优化,可与包含它的设备一起使用尽可能少的能源,并且能够无线操作和通信,仅由硬币大小的电池供电,通常可以使用多年。它已被广泛采用。很难找到不支持蓝牙 LE 的智能手机或平板电脑。健康、运动和健身设备(如活动追踪器)依赖蓝牙 LE 技术。智能手表等可穿戴设备也是如此。这种蓝牙风格的影响令人印象深刻且广泛。
蓝牙 BR/EDR 和蓝牙 LE 在智能手机等设备中都很常见,但它们并不依赖于彼此的服务和功能。出于所有意图和目的,这两种蓝牙风格彼此独立工作。事实上,虽然他们很乐意在同一设备*存,但不可能使用蓝牙 BR/EDR 与蓝牙 LE 设备进行通信。
相比之下,BLE MESH网络使用并依赖于蓝牙 LE。蓝牙 LE 是BLE MESH网络使用的无线通信协议栈。
BLE MESH网络不是无线通信技术。这是一种网络技术。
BLE MESH用处
Bluetooth ®网状网络的创建是因为网状拓扑提供了满足各种日益常见的通信需求的最佳方式,这些需求以楼宇自动化和传感器网络等应用为代表。这些要求包括:
- 覆盖非常大的区域
- “只是工作互操作性”
- 监视和控制大量设备的能力
- 优化、低能耗
- 有效利用无线电资源,实现可扩展性
- 与当前可用的智能手机、平板电脑和个人电脑产品的兼容性
- 行业标准、*级安全
其他网状技术,一般来说,标准的智能手机、平板电脑和PC设备不支持;一个主要的制约因素。
BLE MESH的通讯方式
BLE MESH网络使用发布/订阅消息系统。
设备可能会向其名称和含义对应于用户可以理解的高级概念的地址发送消息,例如Garden Lights。这称为发布。
设备可以配置为接收由其他设备发送到特定地址的消息。这称为订阅。
当设备向特定地址发布消息时,订阅该地址的所有其他设备都将收到它的副本,对其进行处理并以某种方式做出反应。
想象一下安装在花园中的一组户外灯。每个灯都已配置为订阅“花园灯”消息。现在,想象一个BLE MESH灯开关向“花园灯”地址发送“ON”消息。花园中的所有灯都会收到“ON”消息,并通过……做出反应。你猜对了……打开。
就这么简单。
管理洪水
中继设备重新传输它们从其他设备接收的消息。在这样做时,他们能够与不在最初发布消息的设备的无线电范围内的设备进行通信。一条消息可以通过所谓的“跳跃”多次中继。最多可能有127跳,足以在巨大的物理区域中中继消息。
BLE MESH使用一种称为“泛洪”的方法来发布和中继消息。这意味着消息不是由导致它们沿着仅包含特定设备序列的特定路径传输的过程路由的。相反,范围内的所有设备都会接收消息,而那些充当中继的设备会将消息重新传输到范围内的所有其他设备。
一般来说,泛洪是一种技术,有优点也有缺点。
泛洪的优点是不需要特定设备承担特殊责任来充当集中式路由器,其故障可能导致整个网络无法运行。特定路由不可用也可能对网络产生灾难性影响,而这也可以通过网状网络的泛洪方法来避免。
泛洪方法还意味着消息通常可以通过多条路径到达其目的地。这使得网络非常可靠。
所有数据包都包含一个称为TTL的字段。这可用于限制消息在中继时采用的跳数。由设备每隔一段时间传输的心跳消息包括允许网络了解其拓扑结构和跳数的信息,其他每个设备都是如此。这允许设备将 TTL 设置为最佳值,从而避免消息被中继不必要的次数。
市场内蓝牙设备支持
Bluetooth® mesh网络指定了一个称为代理节点的设备角色。代理节点包括标准的低功耗蓝牙 GATT 服务,该服务具有两个 GATT 特性。这些特征称为Mesh Proxy Data In 和Mesh Proxy Data Out。智能手机等低功耗蓝牙设备可以使用这些特性向网状网络发送数据和从网状网络接收数据。
网格规范定义了一个称为代理协议的协议,通过代理节点提供的两个 GATT 特性交换的数据由代理协议 PDU 组成。
安全性
安全性是BLE MESH网络设计的核心,它的使用是强制性的。
每个数据包都经过加密和验证。通过明智地使用序列号来防止重放攻击。通过在重要过程中使用非对称加密来防止中间人攻击。提供针对利用废弃设备的垃圾桶攻击的保护。必要时会刷新安全密钥。
“关注点分离”是一个重要的原则,体现在蓝牙mesh网络的安全性上。网络安全与照明、供暖或物理建筑安全等个别应用的安全是相互独立的。不同的安全密钥用于保护网络层操作,例如中继与保护特定于应用程序的消息内容。这样做的结果是,例如,灯泡可以完全访问由电灯开关传输的消息中的数据,因为它们具有相同的应用程序密钥。但是,虽然同一个灯泡能够将消息从蓝牙物理访问令牌转发到前门的锁,但它无法看到这些消息的应用层内容。
BLE MESH协议栈模型
协议栈的各个层分别负责以下关键功能:
承载层(bearer):承载层定义了如何使用底层 LE 堆栈传输 PDU。目前定义了两种承载,Advertising Bearer 和 GATT Bearer。
网络层(network):网络层定义了各种消息地址类型和网络消息格式。中继和代理行为由网络层实现。
下层传输层(lower transport):在需要时,下层传输层处理 PDU 的分段和重组。
上层传输层(upper transport):负责传入和传出接入层的应用数据的加密、解密和认证。它还负责处理称为传输控制消息的特殊消息。这些包括与“友谊”关系相关的心跳和消息。
访问层(access):负责应用程序数据的格式,定义和控制在上层传输层执行的加密和解密过程,并在将数据向上转发到堆栈之前验证从它接收到的数据用于正确的网络和应用程序。
基础模型(foundation models):基础模型层负责实现那些与MESH网络的配置和管理有关的模型。
模型(models):模型层关注模型的实现,因此也关注行为、消息、状态等的实现。
BLE MESH基本概念
ble mesh网络为与环境交互创造了新的机会,无论您是使用智能照明、加热/冷却和安全系统使您的家庭或办公室更加智能,还是提高工业无线传感器网络 (IWSN) 的效率。BLE MESH网络提供了创建真正大规模设备网络所需的基础,使您能够使数十、数百甚至数千个无线设备相互可靠、安全地通信。本文深入探讨了这种创新网络拓扑背后的基本概念。
节点
想象一个由数千个设备组成的网络,每个设备都通过蓝牙®低功耗 (LE) 短脉冲无线连接进行通信。BLE MESH网络上的这些设备称为节点。每个节点发送和接收消息。信息可以从一个节点到另一个节点中继,使消息能够传播比无线电波通常允许的更远的距离。这个节点网络下图可能遍布制造设施、办公楼、购物中心、商业园区等。
元素
某些节点(例如传感器)会消耗电池电量,而其他节点(例如灯具、制造机械和安全摄像头)则从主电网获取电力。一些节点比其他节点具有更多的处理能力。这些节点可以在网状网络中承担更复杂的任务,承担不同的角色并拥有以下四个节点特征中的任何一个。
低功率特性: 功率受限的节点可以使用低功率特性来减少无线电开启时间并节省功率。低功耗节点 (LPN) 与朋友节点协同工作。
朋友特征:没有功率限制的节点是成为朋友节点的绝佳候选者。朋友节点存储发往 LPN 的传入消息和安全更新;当 LPN 请求这些消息时,朋友节点将存储的信息传递给 LPN。
中继功能: 中继节点接收和重新传输消息,当消息从一个节点中继到另一个节点时,可以实现更大的网络。根据电源和计算能力,节点可能具有此功能。
代理功能:代理节点能够在 GATT 和蓝牙网格节点之间传输和接收网格消息。具有此角色的节点需要可靠的电源和计算资源。
一些节点比其他节点更复杂,由多个称为元素的独立部分组成。每个节点至少有一个元素,称为主要元素,并且可能有其他元素。元素由定义节点功能和元素条件的实体组成。例如,一个灯泡有一个元素有两个功能:
-
节点 = 灯泡
-
一个元素 = 主要元素
-
节点功能
一、开关 二、亮度
-
元素的条件/状态
一、开或关 二、0 – 10(亮度等级)
节点内的每个元素都有一个唯一的地址,称为单播地址,使每个元素都可以寻址。
节点必须至少有一个元素,也可以有多个元素。
模型和状态
无论节点是跨制造车间、酒店、办公楼还是商业园区联网,节点的基本功能都是由模型定义和实现的。模型位于元素内部,元素必须具有一个或多个模型。模型定义和实现节点的功能和行为,而状态定义元素的条件。
图4 - 节点、元素、模型
图5 - 节点、元素、模型、状态
使用我们的灯泡示例,模型的功能是开/关和亮度。相关的状态分别是 On/Off 和 0-10:
- 模型(节点的功能)
-
开/关
- 状态 -> 开或关 亮度 (0-10)
- 状态 -> 0-10
BLE MESH网络支持复合状态,即由两个或多个值组成的状态。变色灯就是一个例子,因为色调可以独立于颜色饱和度或亮度而变化。
术语绑定状态定义为一种状态的变化导致另一种状态的变化。常见的绑定是在电平状态和开/关状态之间。如果电平从 0 变为 1,则 On/Off 状态也已从 off 转换为 on。
每个模型都有一个唯一的标识符。蓝牙 SIG 采用的模型是 16 位,而供应商模型是 32 位(16 位蓝牙分配的公司标识符和 16 位供应商分配的模型标识符)。这使得每个模型都是唯一可寻址的。
使用消息,BLE MESH网络通过客户端-服务器架构进行通信。服务器的功能是公开元素的状态。最简单的状态之一是二进制开关,其中状态为开或关。一个简单的服务器模型是通用开/关服务器模型,它包含表示开关是开还是关的状态。
客户端访问状态请求、更改或使用服务器的状态。简单客户端模型的一个示例是通用开/关客户端模型(二进制开关)。此通用开/关客户端模型通过向其发送消息来控制通用开/关服务器模型。例如,客户端使用此机制打开或关闭灯。
这种客户端-服务器架构产生了三种类型的模型:
-
服务器模型
由跨越一个或多个元素的一个或多个状态组成。
定义模型可以发送/接收的消息并定义给定这些消息的元素的行为。
例子:- 开/关开关 - 可以显示开关的状态
- 传感器 - 可以显示传感器的状态(可能是温度值或传感器测量的满/重装/空值)
- 功率级别 - 可以显示功率状态(级别 1-10)
-
客户模型
定义客户端用于请求、更改或使用服务器相应状态的消息集。
例子:- 开/关开关 - 客户端发送开或关消息
- 功率级别 - 定义功率状态的消息 (0-10)
-
控制模型
控制模型具有多种功能,可能包含以下一项或多项:
- 客户端模型
- 服务器型号
- 控制逻辑(规则和行为)协调它连接的模型之间的交互。
示例:我们可以将控制模型用于在机器周围循环液体冷却剂的泵。
- 场景 – 温度传感器记录机器的温度。如果机器温度超过规定的温度,冷却泵就会打开。
- 冷却泵控制模块
- 一个客户端到温度传感器(接受温度值)
- 服务器到 On/Off 开关(打开或关闭泵)
- 控制逻辑(规则和行为)——定义如果温度传感器超过定义的值,打开泵。
模型定义允许在网状网络中配置节点及其功能。
地址
节点(例如灯具、温度调节设备、制造设备和电子门)是能够在BLE MESH网络内发送、接收和/或中继信息的设备。消息用于在节点之间传输数据,地址用于定义消息的来源(源)和去向(目的地)。
地址有四种类型;其中三种类型用于消息传递:单播、虚拟和组地址。第四个称为未分配地址。地址的长度为 16 位,并按如下定义进行编码。 -
未分配地址–未配置的元素或没有指定地址的元素具有未分配的地址。鉴于这些元素没有唯一的地址,它们可能不会用于消息传递。
-
单播地址——在供应期间,供应商在网络上该节点的生命周期内为节点中的每个元素分配一个单播地址。单播地址可能出现在消息的源地址字段和/或目标地址字段中。发送到单播地址的消息仅由一个元素处理。
-
虚拟地址——虚拟地址是一组与特定标签 UUID 相关联的元素;这些地址可能会被发布或订阅。标签 UUID 是一个 128 位值,与可能来自一个或多个节点的多个元素相关联。
对于虚拟地址,第 15 位和第 14 位分别设置为 1 和 0(上图);位 13 – 0 设置为散列值(提供 16,384 个散列值)。散列来自标签 UUID。使用订阅元素检查完整的 128 位 UUID 效率低下,尤其是当 UUID 可能跨越多个消息段时。散列值提供了一种更有效的方式来确定哪些消息发送到哪些元素。
-
组地址– 组地址是BLE MESH网络中的另一种多播地址。代表来自一个或多个节点的多个元素,有两种类型的组地址:
- 动态分配-> 0xC000-0xFEFF
-
固定地址– 由蓝牙 SIG 分配并分为五个部分:
- 保留供将来使用 (RFU) –> 0xFF00-0xFFFB
- 所有代理-> 0xFFFC
- 发送到所有启用代理功能的节点。
- 所有朋友-> 0xFFFD
- 发送到所有启用好友功能的节点。
- 所有继电器-> 0xFFFE
- 发送到所有启用中继功能的节点。
- 所有节点-> 0xFFFF
- 发送到所有节点。
- 所有发送到固定节点的消息都由节点的主要元素处理。
消息
BLE MESH网络通过消息进行通信。消息可以被称为控制消息或接入消息。
控制消息 - 与BLE MESH网络操作有关的消息。示例包括心跳和好友请求消息。
访问消息 - 允许客户端模型在服务器模型中检索或设置状态值的值,或者它们被服务器用于报告状态值。
模型实现和定义节点的功能。元素是包含一个或多个模型的节点内唯一可寻址的实体,状态定义了元素的状态。对于每个状态,都有一组服务器模型支持的消息。示例包括请求状态值或请求更改状态的客户端模型以及发送有关状态和/或状态更改的消息的服务器模型。
消息由操作码标识并具有相关参数。操作码标识消息的操作。例子包括:
- Generic OnOff Get——用于识别状态;通用模型的 OnOff 状态。
- Generic OnOff Get 没有参数。
- Generic OnOff Set 用于设置通用模型的 OnOff 状态。
- 参数:
- OnOff – 目标值(开或关)。
- TID – 交易标识符 – 消息是新的还是重新传输的。
- Transition Time – 元素从一种状态转换到另一种状态需要多长时间。
- 延迟 – 消息执行延迟。
有两类访问消息,已确认和未确认。确认的消息被传送到每个接收单元并由其确认。响应通常是状态消息。对未确认的消息不发送响应。BLE MESH网络状态消息是未确认消息的一个示例。
- 参数:
消息安全
每个BLE MESH网络消息都使用 NetKeys 和 AppKeys 来加密和验证消息。NetKeys 用于网络层通信。假设BLE MESH网络没有子网,该MESH网络内的所有通信都使用相同的网络密钥。
AppKeys 用于应用程序数据。网络中的某些节点可能具有特定的应用程序,并且在这些应用程序中,具有需要有限访问的潜在敏感数据。此类节点具有特定的 AppKey 并与特定的应用程序相关联。可能使用不同 AppKey 的区域示例包括安全(建筑物访问控制、设备室访问和 CEO 办公室访问)、照明(制造楼层、建筑物外部灯和走道)和 HVAC 系统。
中继节点,例如灯泡或墙壁开关,通常具有有效的 NetKey,并且可以在网络内中继敏感消息。但是,他们无法访问各种受限区域(例如楼宇控制或 HVAC 系统)的特定 AppKey,也无法解密应用程序数据。
消息交换
BLE MESH网络使用发布/订阅模型进行消息传输。生成消息的节点被称为发布消息。对接收消息感兴趣的节点订阅他们感兴趣的地址。消息可以发布到单播、组或虚拟地址。
消息可以作为对其他消息的回复发送,也可以是未经请求的消息。当模型发送回复消息时,它使用消息发起者的源地址作为目标地址。发送未经请求的消息时,它使用模型的发布地址作为目标地址。节点中的每个模型都有一个发布地址。
在接收消息时,节点内模型的每个实例(一个节点中可能有多个模型)可以订阅接收来自一个或多个组或虚拟地址的消息。
订阅消息的模型使用模型的订阅列表来定义它们可以从中接收消息的有效地址。当模型接收到消息时,模型会检查其订阅列表。当订阅列表上的地址设置为模型的元素单播地址或属于节点的固定组地址时,它被认为是匹配的。下图显示了访问消息的有效源地址和目标地址。
由于BLE MESH实体会发布各个节点的状态,因此整个BLE MESH网络中的系统都可以订阅此数据,而不管传输节点的位置是否接近。这允许网络一侧的设备通过低功率无线消息与设施中其他地方的管理员交谈,而不管距离如何。
本文摘抄自https://www.bluetooth.com/中的BLE MESH介绍。