如需要了解更多蓝牙相关知识,请点击下方连接
https://blog.csdn.net/weixin_47456647/article/details/155188246?spm=1011.2415.3001.5331
蓝牙网状网络为 "与环境互动" 创造了新可能 ------ 无论是用智能照明、暖通、安防系统让家庭 / 办公空间更智能,还是提升工业无线传感器网络(WSN)的效率,它都能提供构建大规模设备网络的基础,支持数十、数百甚至数千台无线设备可靠、安全地互通。本文将深入解析这一创新网络拓扑背后的核心基础概念。
节点
想象一个由数千台设备组成的网络,每台设备都通过蓝牙低功耗(LE)短突发无线连接通信 ------ 这些蓝牙网状网络中的设备被称为 "节点"。每个节点都能收发消息,信息可在节点间中继,让消息传输距离突破无线电波的常规限制。这种节点组成的网络(图 1)可覆盖制造工厂、办公楼、购物中心、企业园区等场景。

蓝牙网状网络的节点类型丰富,可在网络中承担多种角色:灯具、机械、安防摄像头、烟雾探测器、环境传感器等,都是节点可承担的角色示例。
元素
有些节点(如传感器)由电池供电,而另一些节点(如灯具、生产机械、安防摄像头)由电网供电;部分节点的处理能力更强,可在网状网络中承担更复杂的任务,同时具备以下四种节点功能中的任意一种:
- 低功耗功能:功耗受限的节点可通过该功能减少无线电开启时间、节省电量。低功耗节点(LPN)需与友节点配合工作。
- 友功能:无功耗限制的节点很适合作为友节点,负责暂存发往低功耗节点的消息与安全更新,仅在低功耗节点主动请求时才交付。
- 中继功能:中继节点接收并重传消息,通过节点间的中继实现更大规模的网络。节点是否承担该功能,取决于其电源与计算能力。
- 代理功能:代理节点实现 GATT 设备与蓝牙网状网络节点之间的消息收发,承担该角色的节点需要稳定的电源与充足的计算资源。
部分节点结构更复杂,由多个独立的 "元素" 组成:每个节点至少包含一个 "主元素",还可包含额外元素(图 2)。元素由定义节点功能与自身状态的实体构成。以灯泡为例,它包含 1 个元素、2 项功能:
- Node = Light bulb
- One Element = Primary Element
- Functionality of node
-
- On/Off
- Brightness
- Condition/State of Element
-
- On or Off
- 0 -- 10 (Brightness Level)

节点内的每个元素都有一个唯一地址,称为 "单播地址",这让每个元素都可以被单独寻址。我们会在蓝牙网状网络系列的后续内容中解释寻址机制。
模型与状态
无论节点是部署在生产车间、酒店、办公楼还是企业园区,节点的基础功能都是由 "模型" 定义并实现的。模型存在于元素内部,每个元素必须包含一个或多个模型(图 3)。模型负责定义并实现节点的功能与行为,而 "状态" 则用于描述元素的当前状态。

用我们的Light bulb示例来说:这个模型的功能是 "开关" 和 "亮度调节",对应的状态分别是 "开 / 关" 和 "0--10(亮度等级)"。
-
Model (functionality of node)
-
- On/Off
- State -> On or Off
-
- Brightness (0-10)
-
- State -> 0-10
-
蓝牙网状网络支持 "复合状态"------ 即由两个或多个值组成的状态。变色灯就是一个例子:它的色相可以独立于色彩饱和度或亮度变化。
"绑定状态" 指的是一个状态的变化会触发另一个状态的变化。常见的绑定关系存在于 "亮度状态" 与 "开关状态" 之间:若亮度从 0 变为 1,开关状态也会从 "关" 切换为 "开"。
每个模型都有唯一标识符:蓝牙 SIG 采用的模型是 16 位,而厂商自定义模型是 32 位(包含 16 位蓝牙分配的公司标识符,以及 16 位厂商分配的模型标识符)。这确保了每个模型都能被唯一寻址。
蓝牙网状网络通过 "客户端 - 服务器架构" 实现消息通信:服务器的作用是暴露元素的状态。最简单的状态之一是 "二进制开关"(状态非开即关),而 "通用开关服务器模型" 就是一种简单的服务器模型,它包含代表开关状态的状态值。
客户端通过请求、修改或使用服务器的状态来访问这些状态。"通用开关客户端模型"(对应二进制开关)是简单客户端模型的示例:它通过发送消息来控制通用开关服务器模型,比如通过这种机制实现灯光的开关控制。
这种客户端 - 服务器架构衍生出三类模型:
-
定义模型可收发的消息,以及元素在收到这些消息后的行为
- 示例:
- 开关:可暴露开关的状态
- 传感器:可暴露传感器的状态(比如温度值、传感器的满 / 缺状态)
- 功率等级:可暴露功率状态(等级 1-10)
- 示例:
-
客户端模型
- 定义客户端用于请求、修改或使用服务器对应状态的消息集合
- 示例:
- 开关:客户端发送 "开 / 关" 消息
- 功率等级:定义功率状态(0-10)的消息
-
控制模型
- 具备多重功能,可能包含以下一种或多种组件:
- 客户端模型
- 服务器模型
- 控制逻辑(规则与行为):协调与其连接的各模型之间的交互
- 示例:我们可以为一台给机器循环输送冷却液的泵使用控制模型
- 场景:温度传感器记录机器温度,当温度超过设定值时,冷却泵启动
- 组件:
- 冷却泵的控制模块:包含一个用于温度传感器的客户端(接收温度值)、一个用于开关的服务器(控制泵的启停)
- 控制逻辑(规则与行为):定义 "当温度传感器数值超过设定值时,启动泵"
- 具备多重功能,可能包含以下一种或多种组件:
模型定义让你可以配置网状网络中节点及其功能。模型定义及其他模型相关概念,会在后续文章中详细介绍。
蓝牙mesh网络架构
蓝牙网状网络运行在蓝牙低功耗(LE)协议栈之上。下图 1 展示了蓝牙网状网络的协议栈,并定义了各层的功能:
| 协议栈层级 | 功能描述 |
|---|---|
| 模型层 | 定义模型,进而定义功能。 |
| 基础模型层 | 定义配置与管理网状网络所需的状态、消息与模型。 |
| 接入层 | 定义应用数据的格式,以及高层应用如何使用上层传输层。 |
| 上层传输层 | 对应用数据进行加密、解密与认证。 |
| 下层传输层 | 定义上层传输层消息如何分片、重组为多个下层传输 PDU。 |
| 网络层 | 定义传输层消息如何寻址到一个或多个元素。 |
| 承载层 | 定义网络消息如何在节点间传输。 |
| 蓝牙低功耗核心规范 | 蓝牙低功耗(底层基础)。 |
地址
蓝牙网状网络包含 4 类地址(其中 3 类用于消息通信):单播地址、虚拟地址、组地址,第 4 类是未分配地址。地址长度为 16 位,编码规则如下(图 2):
| 数值(二进制) | 地址类型 |
|---|---|
| 0b0000000000000000 | 未分配地址 |
| 0b0xxxxxxxxxxxxxxx(除上述值) | 单播地址 |
| 0b10xxxxxxxxxxxxxx | 虚拟组地址 |
| 0b11xxxxxxxxxxxxxx | 组地址 |
- 未分配地址:未配置的元素或无指定地址的元素会使用该地址,这类元素无唯一标识,因此不用于消息通信。
- 单播地址:配置者会为节点中的每个元素分配一个单播地址,有效期与节点在网络中的存续期一致。单播地址可出现在消息的源地址或目的地址字段,发往单播地址的消息仅由一个元素处理。
- 虚拟地址:是与特定标签 UUID 关联的一组元素,可被发布或订阅。标签 UUID 是 128 位值,关联来自一个或多个节点的多个元素。
对于虚拟地址,其第 15 位和 14 位分别设为 1 和 0(图 2),第 13--0 位是哈希值(提供 16384 个哈希值)。哈希值由标签 UUID 生成 ------ 直接核对 128 位 UUID 效率较低(尤其 UUID 可能跨多个消息分片),哈希值能更高效地确定消息的接收元素。
- 组地址 :是蓝牙网状网络中的另一种组播地址,代表来自一个或多个节点的多个元素,分为两类:
- 动态分配:0xC000--0xEFFF
- 固定地址(由蓝牙 SIG 分配,分为 5 段):
- 预留未来使用(RFU):0xF000--0xFFFB
- 所有代理节点:0xFFFC(发往所有启用代理功能的节点)
- 所有友节点:0xFFFD(发往所有启用友功能的节点)
- 所有中继节点:0xFFFE(发往所有启用中继功能的节点)
- 所有节点:0xFFFF(发往所有节点)
- 发往固定地址的消息,由节点的主元素处理。
消息
蓝牙网状网络通过消息通信,消息分为控制消息 与接入消息:
- 控制消息:与网状网络运行相关的消息,例如心跳消息、友节点请求消息。
- 接入消息:允许客户端模型获取 / 设置服务器模型的状态值,或由服务器模型用于上报状态值。
模型定义并实现节点的功能;元素是节点内可唯一寻址的实体,包含一个或多个模型;状态则描述元素的状态。每个状态对应服务器模型支持的一组消息,例如客户端模型请求状态值、请求修改状态,或服务器模型发送状态 / 状态变更消息。
消息通过操作码标识,附带参数。操作码定义消息的操作类型,示例:
- 通用开关读取:用于标识通用模型的开关状态,无参数。
- 通用开关设置 :用于设置通用模型的开关状态,参数包括:
- OnOff:目标值(开 / 关)
- TID:事务标识符(标识消息是新消息还是重传)
- Transition Time:元素从一个状态切换到另一个状态的时长
- Delay:消息执行延迟
接入消息分为两类:确认型 与非确认型。确认型消息会被每个接收元素传输并确认,响应通常是状态消息;非确认型消息无需响应,蓝牙网状网络的状态消息就是非确认型消息的示例。
消息安全
蓝牙网状网络的每条消息都通过 **NetKey(网络密钥)与AppKey(应用密钥)** 进行加密和认证:
- NetKey:用于网络层通信。若网状网络无子网,网络内所有通信使用同一网络密钥。
- AppKey:用于应用数据。网络中部分节点可能对应特定应用,这类应用中的敏感数据需要受限访问 ------ 这些节点会使用特定 AppKey,并与特定应用关联。例如安防(楼宇门禁、设备间门禁、CEO 办公室门禁)、照明(生产车间灯、建筑外墙灯、走道灯)、暖通系统等场景,可能使用不同的 AppKey。
中继节点(如灯泡、墙壁开关)通常持有有效的 NetKey,可在网络内中继敏感消息,但无法访问各受限区域(如楼宇控制、暖通系统)的特定 AppKey,因此无法解密这些应用的数据。
消息交换
蓝牙网状网络采用发布 / 订阅模型传输消息:生成消息的节点是 "发布方",希望接收消息的节点会订阅感兴趣的地址。消息可发布到单播、组或虚拟地址。
消息可以是其他消息的响应 ,也可以是主动推送的消息:发送响应消息时,模型会将消息发起方的源地址作为目的地址;发送主动推送消息时,会将模型的发布地址作为目的地址 ------ 节点中的每个模型都有唯一的发布地址。
接收消息时,节点内的每个模型实例(一个节点可能包含多个模型)可订阅一个或多个组地址 / 虚拟地址的消息。
订阅消息的模型通过订阅列表定义可接收消息的有效地址:当模型收到消息时,会检查订阅列表,若列表中的地址是该模型元素的单播地址,或属于该节点的固定组地址,则判定为匹配。图 3 展示了接入消息的有效源地址与目的地址:
| 地址类型 | 有效源地址 | 接入消息的有效目的地址 |
|---|---|---|
| 未分配地址 | 否 | 否 |
| 单播地址 | 是 | 是 |
| 虚拟组地址 | 否 | 是 |
| 组地址 | 否 | 是 |
当蓝牙网状网络实体发布各节点的状态时,整个网络中的系统都可订阅这些数据(无论与发送节点的距离远近)。这让网络一端的设备能通过低功耗无线消息,与设施内其他位置的管理员通信,不受距离限制。
了解更多蓝牙网状网络信息
蓝牙网状网络结合了蓝牙技术成熟的全球互操作性与可信生态系统,支持构建工业级设备网络。现在你已了解蓝牙网状网络的基础核心概念,可以进一步探索其拓扑细节。若想深入了解,可下载《蓝牙网状网络技术概述》文档。后续我们还会探讨蓝牙网状网络的安全、配置、代理节点等内容。