BLE-Mesh技术揭秘

来自谷雨文档中心
Ghostyu讨论 | 贡献2019年11月21日 (四) 23:37的版本 好友(Friend)和低功耗节点(LPN)
跳转至: 导航搜索

蓝牙技术是享誉全球的品牌之一,也是全世界应用最为普遍的无线通信技术之一。从2000年到现在,蓝牙技术已经广泛应用于数十亿台设备。就2016年而言,制造商的蓝牙设备出货量更是超过30亿台

蓝牙的创新步伐从未停止。自面世以来,每一次改进都系统严谨,紧跟市场需求,一直支持和鼓励创新。

蓝牙技术令人惊叹的故事还在继续着,蓝牙mesh网络翻开了最新篇章,150家蓝牙技术联盟会员公司都参与了mesh的创建

1 第一章节:Mesh介绍

这是系列文章中的第一篇,将向您介绍蓝牙mesh网络。我们从两篇概述开始, 后续篇章中将更详细地探讨技术的各个方面。

1.1 风格 OR 特性

对蓝牙技术感兴趣的朋友一定有这样的习惯:定期查看蓝牙技术联盟采用的新版本。

通常,新版本为蓝牙提供附加特性,或者以某种方式改进现有功能。不管怎么说,蓝牙全新的“风格”已经面世;一款风格出众的蓝牙技术变体,将以完全不同的方式利用无线电,并针对一系列广泛的用例设计和应用进行了优化。

蓝牙基础速率/ 增强资料速率(BR / EDR)是蓝牙发布的第一款风格,旨在替代缆线连接,很快就成为无线音频市场的主宰,并推动了新型计算机外设(如无线鼠标和键盘)的发展。

蓝牙基础速率/ 增强资料速率(BR / EDR) 引发无线个人音频变革

随后登场的是低功耗蓝牙(Bluetooth Low Energy)。它经过优化,极大程度地减少了设备功耗,仅使用硬币大小的电池就能实现无线操作和通信,运行数年不在话下。

低功耗蓝牙现已被广泛采用。如今很难找到不支持低功耗蓝牙的智能手机或平板电脑。健康、运动和健身器材,如运动追踪设备、以及智能手表等可穿戴设备,都有赖于低功耗蓝牙技术。这一款蓝牙风格可谓影响深远。

低功耗蓝牙是推动可穿戴设备发展的重要技术

“那么蓝牙mesh网络是蓝牙的全新风格呢?还是新特性呢?”

其实两者都不是。现在就让我们来深入探讨一下这项惊人的、全新的蓝牙技术,同时了解mesh与蓝牙其他形式之间的关系自身工作原理

1.2 三大重要技术

蓝牙BR / EDR和低功耗蓝牙是智能手机等设备上的常用技术,但是它们不会互相依赖对方的服务和功能。针对所有的意图和目的,这两款风格的蓝牙技术都能彼此独立工作。事实上,虽然他们能在同一台设备上很好地共存,但是使用蓝牙BR / EDR的设备与低功耗蓝牙设备之间却无法进行通信。对于它们来说,有彼此相伴固然开心,但彼此之间却没有对话。

相比之下,蓝牙mesh网络使用、并且依赖于低功耗蓝牙。低功耗蓝牙技术是蓝牙mesh使用的无线通信协议栈。

“蓝牙mesh并非无线通信技术,而是一种网络技术。”

下图显示了蓝牙BR / EDR、低功耗蓝牙和蓝牙mesh之间的关系。

蓝牙mesh和低功耗蓝牙之间的关系

1.3 关于拓扑

从最基本的层面来讲,蓝牙BR / EDR能够实现一台设备到另一台设备的连接和通信,建立“一对一”的关系,大多数人所熟悉的“配对”(pairing)一词就是这个意思。一些设备能够与其他设备建立多重“一对一”通信关系,并形成一种称为“微微网”(piconet)的hub/spoke拓扑

蓝牙BR / EDR和一对一拓扑

但是低功耗蓝牙设备还能与其他设备形成“一对一”和hub/spoke关系,以无连接方式进行工作,其广播的数据,位于直接无线电传输围内的任何其他设备都可接收。这是“一对多”(1:m)的拓扑,其中m可以是一个非常大的数量!如果接收广播的设备本身不进行数据传输,那么广播设备的无线电频谱就仅仅是针对自己而言的,同时对于能够接收和利用其广播的其他设备数量没有明确的限制。蓝牙Beacon是这项功能的一个绝佳案例

低功耗蓝牙的广播应用

蓝牙mesh能让我们建立无线设备之间的“多对多”(m:m)关系。此外,设备能够将数据中继到不在初始设备直接无线电覆盖范围内的其他设备。这样,mesh网络就能够跨越非常大的物理区域,并包含大量设备。

BleMesh-蓝牙Mesh多对多网络拓扑

1.4 蓝牙Mesh的初衷

对于满足日益普及的各种通信需求,mesh拓扑结构能提供最佳的方式,因此蓝牙mesh网络应运而生典型的应用包括楼宇自动化和传感器网络等。这些通信需求包括:

  1. 覆盖面积广
  2. 直联互通性
  3. 监测和控制大量设备的能力
  4. 经优化的、低功耗的
  5. 有效利用无线电资源,有可扩展性
  6. 与当前市场上的智能手机、平板电脑和个人电脑产品兼容
  7. 符合行业标准,具有政府级安全性

虽然还有其他支持mesh拓扑的低功耗无线通信技术,但很多用户反馈显示,这些技术存在约束和限制,而且对于他们正在尝试解决的各种问题和希望创建的产品类型来说,也并非最佳选择。其他类似技术的问题包括低数据传输速率、在mesh上中继数据时的“跳数”限制、通常由无线电信道使用方式引起的可扩展性限制、以及按步骤更改mesh网络中设备组成的过程中出现的困难和延迟。

通常来说,其他mesh技术无法被标准智能手机、平板电脑和PC设备所支持,这是一个主要的限制因素。

创建符合行业标准的、基于低功耗蓝牙的mesh通信技术,就有可能满足他们的要求,同时没有相关的限制和约束。毕竟,互通性和能效是低功耗蓝牙最突出的特性

2 第二章节 Mesh网络基本概况

在第一章节中,我们介绍了全新的蓝牙mesh网络技术。如果您还未阅读第一章节,建议先从头阅读,然后再进入第二章节。

本章节将介绍蓝牙mesh网络的基本概况,包括大型mesh网络中的消息传输方式市场设备支持安全性mesh协议栈本身,在后续文章中也将继续探索这一技术方方面面的细节。

2.1 以消息为中心的通信

蓝牙mesh网络使用发布/订阅 (publish/subscribe)消息系统

设备可以将消息发送至特定地址,这些地址的名称和含义与用户能够理解的高级概念相对应,如“花园灯”(Garden Lights)。这被称为“发布”(publishing)。

设备经配置后,可接收由其他设备发送到特定地址的消息。这被称为“订阅” (subscribing) 。

当设备向特定地址发布消息时,订阅该地址的所有其他设备将收到该地址的副本,对其进行处理,并以某种方式作出回应。

想象一下花园里安装的一套户外灯, 每盏灯都已经过配置,以便其订阅“花园灯”消息。现在,想像一个蓝牙mesh电灯开关向“花园灯”地址发送了“开”的消息。没错,花园里的所有灯都会收到“ON”消息,并做出开灯的回应。

就是这么简单!

2.2 消息和设备状态

“状态” (state) 是蓝牙mesh网络中的一个关键概念。蓝牙mesh网络中的每台设备都具有一组独立的状态值,表示设备的某些状态。在花园灯的示例中,每盏灯都有一个状态值,表示设备当前是处于打开或关闭状态。通过发布一类在定义上意味着能够回应“开”或“关”状态值的消息,来改变状态值,蓝牙mesh电灯开关就能对灯泡进行控制。更改状态值会修改设备本身的物理状况,例如打开或关闭设备。

消息、状态、以及这些和其他概念相关的设备行为已被定义在规格中,称为“模型”(modules)。模型由蓝牙mesh设备实施。

2.3 中继

得益于mesh网络,设备可以在非常广阔的区域中安装,同时彼此之间保持通信。想象一下购物中心、机场或办公大楼的占地空间有多广阔。因为存在墙壁和其他物理上的障碍物,楼宇中的设备可能无法与安装在同一楼宇远侧的设备、或临近楼宇中的设备建立直接的无线连接。而蓝牙mesh网络则能够将网络中的某些设备指定为“中继设备”,进而解决这一难题。

中继设备能够转发从其他设备接收到的消息。在转发消息时,它们能够与位于初始消息发布设备无线范围以外的设备进行通信。消息可多次被中继,每一次中继即为一“跳”,最多可进行127跳,足以在一片广阔的物理区域中进行消息传输。

蓝牙 mesh网络在节点之间中继消息

2.4 管理型网络泛洪(Managed Flooding)

蓝牙mesh网络采用一种称为“网络泛洪(flooding)”的方式来发布和中继消息。这意味着消息不会通过某一进程进行路由, 也不会沿着由一系列特定设备构成的特定路径来进行传输。相反,传输范围内的所有设备都会接收消息,负责中继的设备能将消息转发至其传输范围内的所有其他设备。

“网络泛洪”这项技术在使用中往往是利弊参半。在蓝牙mesh网络的设计中,我们对此进行了针对性的优化,相信能够扬长避短

2.4.1 网络泛洪的优势

网络泛洪的优势在于无需特定设备专门扮演集中式路由器的角色。集中式路由器一旦发生故障,就可能会导致整个网络无法运行。没有特定的路由也可能对网络造成灾难性的影响,但这种情况也可以通过在mesh网络中采用网络泛洪的方法来避免。

网络泛洪的方式也意味着消息一般能够通过多重路径到达其目的地。这就构建了一个相当可靠的网络。

2.4.2 优化mesh网络

蓝牙mesh网络也采取了一系列措施,支持采用网络泛洪的方式,同时优化每台设备、甚至整体网络的能耗。

所有数据包都包含一个称为TTL的字段,它可用于限制消息中继的跳数。由设备间歇性发送的心跳消息中包含的信息,能够让网络了解其拓扑结构、以及传到其他每台设备之间的跳数。这能够让设备将TTL设置为最佳值,从而避免不必要的中继操作。

每台设备都包含消息缓存,以确定自身是否已经中继过该消息。如果是,则会立即丢弃该消息,从而避免上层堆栈进行不必要的处理。

最有趣的是,功率非常受限的设备(例如由小型电池持续供电多年的传感器)可能被指定为“低功耗节点”。低功耗节点能够与一个或多个被指定为 “friends” 的设备协同工作。Friends并非功率受限,它可以作为低功耗节点,存储寻址到这一低功耗节点的消息,并且只有在低功耗节点需要时才传送消息。低功耗节点和“friends”之间的关系理所当然就称为“friendship”。

2.4.3 “Friendship”具体如何运转?

下面我们从节能的角度来进行解读。

低功耗设备通常将大部分时间用于传输数据,例如传感器。每当温度低于或高于指定阈值时,传感器才会发送温度读数,这种情况也许每天只会发生两次。这种不频繁的传输方案本身就使这类设备保持相当低的能耗。

2.4.4 但如果传感器需要不时地接收数据,又该怎么办呢?

例如,可能它需要确保网络中使用的安全密钥始终处于最新状态。或许需要根据季节修改这些温度阈值,采用不同的值。要使传感器直接接收消息,就需要开启无线电,以便数据接收。但大多数时候它什么都接收不到,但能量却会被消耗。

对设备来说,通过与“friends”的合作, 低功耗节点能够以合理的频率使用无线电来接收消息,但重要的是,相较于始终“聆听”所有消息,它能够以更低的频率工作,同时确保发送来的罕见事件也不会被遗漏。

“Friends” 能帮助低功耗节点完成大量工作。它们能够为所服务的低功耗节点存储消息,并在低功耗节点明确要求的情况下向其提供消息,低功耗节点可按照自身的规划进行操作,从而最有效地利用无线电。

2.5 市场上的蓝牙设备支持

蓝牙mesh网络虽然推出不久,但低功耗蓝牙(Bluetooth Low Energy)却面世已久。

那么市场上数十亿台设备呢?智能手机和平板电脑呢?它们能否访问蓝牙mesh网络?

低功耗蓝牙设备和mesh支持

幸运的是,答案是YES!

蓝牙mesh网络会指定一台设备来扮演代理节点(proxy node)的角色。代理节点包含一项标准:低功耗蓝牙GATT服务,具有两个GATT特性,分别是mesh代理数据输入(Mesh Proxy Data In)和mesh代理数据输出(Mesh Proxy Data Out)。诸如智能手机等低功耗蓝牙设备均可使用这些特性,与mesh网络进行数据收发。

这种mesh规格定义了一种代理协议(proxy protocol),同时通过代理节点的两个GATT特性交换的数据中包含代理协议PDU。

欲知代理节点的作用,请持续关注本系列后续文章~

2.6 安全性

安全性是蓝牙mesh网络设计的核心,并且强制使用。

蓝牙mesh网络中强制性使用安全性

每个数据包都经过加密和认证。通过合理使用序列号能够防止中继攻击。在重要流程中使用不对称加密技术可防止中间人(Man-in-the-middle)攻击。同时针对利用废弃设备的垃圾桶攻击提供保护。必要时还会刷新安全密钥。

“安全分级考量”(Separation of Concerns)是蓝牙mesh网络安全性中体现的重要原则。网络的安全性,以及诸如照明、供暖、或实体建筑安全等个别应用的安全性彼此独立。可使用不同的安全密钥来保护网络层操作,例如中继、或保护特定应用的消息内容。论其结果,举例来说,由于灯泡和照明开关具有相同的应用密钥,因此灯泡能够全面访问照明开关所发送消息中的数据。但是,尽管相同的灯泡能够将来自蓝牙物理访问令牌的消息中继到前门中的锁,却无法阅读那些消息应用层的内容。

本系列的后续文章中也将详细介绍安全性。我们还将密切关注一个称为 “开通配置” (Provisioning)的安全流程,设备可通过这一流程变身为蓝牙mesh网络的一员。此外,我们还将探讨如何从网络中安全地删除设备,以及如何在有需要时刷新安全密钥。

2.7 协议栈

蓝牙mesh网络引入了全新的协议栈。如之前所述,这一协议栈建立在低功耗蓝牙技术之上。下图描绘了协议栈的层级

蓝牙mesh网络协议栈

该规格是深入了解各层责任的最佳方式。为帮助您更好地了解其工作原理,以下列出了协议栈各层负责的工作:

  • 承载层(bearer layer):承载层定义了如何使用底层低功耗堆栈传输PDU。目前定义了两个承载层:广播承载层(Advertising Bearer)和GATT承载层。
  • 网络层(network layer):网络层定义了各种消息地址类型和网络消息格式。中继和代理行为通过网络层实施。
  • 底层传输层(lower transport layer):在需要之时,底层传输层能够处理PDU的分段和重组。
  • 上层传输层(upper transport layer):负责对接入层进出的应用数据进行加密、解密和认证。它还负责称为“传输控制消息”(transport control messages)这一特殊的消息,包括与“friendship”相关的心跳和消息。
  • 接入层(access layer):负责应用数据的格式、定义并控制上层传输层中执行的加密和解密过程,并在将数据转发到协议栈之前,验证接收到的数据是否适用于正确的网络和应用。
  • 基础模型(foundation models):基础模型层负责实现与mesh网络配置和管理相关的模型。
  • 模型(models):模型层与模型等的实施、以及诸如行为、消息、状态等的实施有关。

2.8 蓝牙mesh网络的未来

我们期待蓝牙mesh网络广泛应用于各行各业和各种应用,预计最初会从楼宇自动化、商业照明和传感器网络等应用开始。尤其令人兴奋的是蓝牙mesh网络在商业照明方面的应用。试想一下,有了正确的固件,照明系统能实现的就不仅是无线灯光控制,还能够成为楼宇中各种蓝牙服务的平台,如物资跟踪和定位服务!

3 第三章节:Mesh网络基本概念1

无论您想采用智能照明、温控和安全系统让家庭和办公室变得更加智能,还是想提高工业无线传感器网络(IWSN)的效率,蓝牙mesh网络都能为您与环境的交互开启全新的机遇。

蓝牙mesh网络为创建大型设备网络奠定了基础,让成千上万的无线设备彼此之间可靠安全地进行通信。本文将深入探究这一创新网络拓扑背后的基本概念。

3.1 节点(Node)

想象一下由数千台设备组成的网络,每台设备均通过低功耗蓝牙(LE)无线连接进行通信。蓝牙mesh网络中的这些设备被称为节点 (node) 。每个节点都能发送和接收消息。信息能够在节点之间被中继,从而让消息传输至比无线电波正常传输距离更远的位置。这样的节点网络可以被分布在制造工厂、办公楼、购物中心、商业园区以及更多环境中。

mesh网络中的节点

蓝牙mesh节点非常多样化,有助于在mesh网络中实现多重功能。照明器具、机械设备、安防摄像机、烟雾探测器和环境传感器仅仅是节点能实现的几个例子。

3.2 元素(Elements)

一些节点(如传感器)的电池有可能会被耗尽,而其他节点(如照明设备、制造机械和安防摄像机)则会通过主电网来获取电力。一些节点的处理能力会高于其他节点。这些节点在mesh网络中可承担更为复杂的任务,扮演不同的角色,表现出以下四个节点特征(Features)

  1. 低功耗 (Low-Power) 特性,功率受限的节点可能会利用低功耗特性来减少无线电接通时间并节省功耗。同时低功耗节点(LPN)可以与friend节点协同工作。
  2. Friend 特性,功率不受限的节点很适合作为friend节点。Friend 节点能够存储发往低功耗节点(LPN)的消息和安全更新;当低功耗节点需要时再将存储的信息传输至低功耗节点。
  3. 中继 (Relay) 特性,中继节点能够接收和转发消息,通过消息在节点之间的中继,实现更大规模的网络。节点是否能够具备这一特性取决于其电源和计算能力。
  4. 代理 (Proxy) 特性,代理节点能够实现GATT和蓝牙mesh节点之间的mesh消息发送与接收。承担这一角色的节点需要固定的电源和计算资源。

一些节点的复杂性高于其他节点,由多个称为元素(Element)的独立部分组成。每个节点至少拥有一个元素,称为主元素(Primary Element),同时还可能包含其他多个元素。元素由定义节点功能和元素条件的实体组成。例如,一个灯泡内有一个元素, 并具有两种功能:

节点 = 灯泡
一个元素 = 主元素
节点功能
    - 开/关
    - 亮度
元素条件/状态
    - “开”或“关”
    - 010 (亮度等级)
节点必须至少有一个元素,也可能包含多个元素

节点中的每个元素都有一个唯一的地址,称为单播地址(unicast address),使每个元素都有址可寻。我们将在后续的解密蓝牙mesh系列文章中进一步解释“寻址”。

3.3 模型 (Model) 和状态 (State)

无论节点位于制造厂房、酒店、办公楼、还是商业园区的网络中,节点的基本功能都由模型 (Model) 来定义和实施。模型位于元素内,元素必须具有至少一个模型。模型能够定义并实施节点的功能和行为,而状态 (State) 能够定义元素的条件

节点、元素、模型以及状态之间的关系

以灯泡为例,该模型的功能是开关和调节亮度。相关的状态分别为“开”/ “关”和0-10:

模型 (节点功能)
    1. 开/关
        状态 -> “开”或“关”
    2. 亮度 (0-10)
        状态 -> 0-10

蓝牙mesh支持复合状态,即由两个或多个值组成的状态。变色灯就是这样的一个例子,色调可以不受颜色饱和度或亮度的局限而改变。

“绑定状态” (Bound State) 这一术语的定义源自一种状态的变化导致另一状态变化的情况。级别状态和开/关状态通常就相互绑定。如果级别从0变为1,则“开/关”的状态也从“关”变为“开”。

每个模型都有唯一的标识符。蓝牙技术联盟采用16位的模型,而供应商采用32位(其中包含蓝牙技术联盟指定的16位公司标识符以及16位供应商指定的模型标识符)。这确保了每个模型的地址都独一无二并且能确定被寻址到。

蓝牙mesh网络可借助消息,通过客户端 - 服务器架构进行通信。服务器的功能是暴露元素的状态。最简单的状态之一是二进制开关,其中状态为“开”或“关”。简单的服务器模型是通用开/关服务器模型 (Generic On/Off Server Model) ,其中包含表示开关开启或关闭的状态。

客户端可对状态进行访问,请求、更改或使用服务器的状态。举例来说,一个简单的客户端模型就是通用开/关客户端模型(Generic On/Off Client Model)(二进制开关)。通用开/关客户端模型通过发送消息来控制通用开/关服务器模型。例如,客户端可利用这一机制开启或关闭指示灯。

这种客户端 - 服务器架构产生了三种类型的模型:

  1. 服务器模型 (Server Model)
    • 由至少一个或多个状态跨越一个或多个元素的状态组成
    • 定义模型能够发送/接收的消息,并根据这些消息定义元素的行为
    • 实例:
      • 🔶开/关切换——客户端发送打开或关闭的消息
      • 🔶 传感器——可以暴露传感器的状态(可能为温度值或传感器测量的“满”、“待充”或“空”的结果)
      • 🔶 功率级别——可以暴露电源状态(等级1-10)
  2. 客户端模型(Client Model)
    • 定义客户端为请求、更改或使用服务器相应状态所使用的消息。
    • 实例:
      • 🔶 开/关切换——客户端发送打开或关闭的消息
      • 🔶 电源级别——定义电源状态的消息(0-10)
  3. 控制模型 (Control Model)
    • 控制模型具有多种功能,同时可能包含一个或多个:
      • 🔶 客户端模型 (Server Model)
      • 🔶 服务器模型 (Client Model)
      • 🔶 控制逻辑(规则和行为)用于协调与其相连模型之间的交互。
    • 实例:控制模型可用在支持机器周围循环的液体冷却剂水泵上。
      • 🔶 应用场景——温度传感器会记录机器的温度。如果机器超过设定的温度,冷却泵则会被打开。
      • 🔶 冷却泵的控制模块 (Control Module)
        • ▷ 与温度传感器相连的客户端(用于接受温度值)
        • ▷ 连接到开/关切换的服务器(用于打开或关闭水泵)
        • ▷ 控制逻辑(规则和行为)— 负责定义如果温度传感器超过设定值,则打开水泵。

模型的定义能让您在mesh网络中对节点及其功能进行配置。模型定义以及其他模型的概念将会在后续文章中进一步详细介绍。

蓝牙mesh网络凭借行业认可、全球互通性、成熟且可信赖的生态系统来创建工业级设备网络。现在您已经初步了解蓝牙mesh背后的一些基本概念,下一章节将介绍有关蓝牙mesh网络基础知识的概述,包括寻址、发布/订阅、消息、列表、以及如何结合这些知识共同创建蓝牙mesh网络。

4 第四章节:Mesh网络基本概念2

借助蓝牙mesh,您将能够创建大型网络并支持成千上万的设备之间进行安全、可靠的通信。在“蓝牙mesh网络基础概念1”章节中,我们探讨了蓝牙mesh网络的一些基本概念,包括节点(node)、元素(element)、模型(model)和状态(state)。在章节中,我们将探讨寻址、消息、发布、订阅和列表,并详细介绍这些核心概念如何相互交织并构成蓝牙mesh网络

4.1 蓝牙mesh架构

蓝牙mesh运行于低功耗蓝牙协议栈的顶部。下方的图1概述了蓝牙mesh协议栈,并定义了每层的功能。

蓝牙mesh架构

正如我们在第一篇中所讨论的,节点(如照明装置、温控设备、制造设备和电动门)是蓝牙mesh网络中能够发送、接收或中继消息的设备。消息(message)用于在节点之间传输数据,地址(address)用于定义消息源(source)地址和目的(destination)地址。

4.2 地址(Address)

地址有四种类型,其中的三类用于消息的传送:单播(unicast)、虚拟(virtual)和群组(group)地址。第四种被称为未分配(unassigned)地址。地址长度为16位,并按下述定义进行编码。

取值 地址类型
0b0000000000000000 Unassigned Address
0b0xxxxxxxxxxxxxxx(excluding 0b0000000000000000) Unicast Address
0b10xxxxxxxxxxxxxx Virtual Group
0b10xxxxxxxxxxxxxx Group Address

4.2.1 未分配地址(Unassigned Address)

未经配置的元素或未被指定地址的元素拥有的就是未分配地址。鉴于这些元素没有唯一的地址,它们不会用于消息的传送。

4.2.2 单播地址(Unicast Address)

在“启动配置”(provisioning)期间,启动配置设备(provisioner)会在网络节点的生命周期内为节点中的每个元素分配一个单播地址。单播地址可能出现在消息的源地址字段或目的地址字段中。发送到单播地址的消息只能由一个元素进行处理。

4.2.3 虚拟地址(Virtual Address)

虚拟地址是与特定的UUID标签相关联的一组元素;这些地址可能会被发布或订阅。UUID标签是与多个来自一个或多个节点的元素相关联的128位值。

对于虚拟地址,15和14位分别设置为1和0;13 – 0位被设置为散列值(hash value)(提供16384个散列值)。散列(hash)来自于Label UUID。使用订阅元素(subscribing element)来检查完整的128位UUID是十分低效的,特别当UUID跨越多个消息段时更为低效。散列值提供了一种更为有效的方式来确定哪些消息被发送至哪些元素。

4.2.4 群组地址(Group Address)

群组地址是蓝牙mesh网络中的另一种多播地址(multicast address),它通常代表一个或多个节点中的多个元素,包含两种类型:

  1. 动态分配的地址(Dynamically Assigned) -> 0xC000-0xFEFF
  2. 固定地址(Fixed Address) –  由蓝牙技术联盟分配,分为五段:
    • 保留供将来使用 (RFU) –> 0xFF00-0xFFFB
    • All-proxies -> 0xFFFC
      • 发送到启用代理(proxy)功能的所有节点
      • All-friends -> 0xFFFD -  发送到启用friend功能的所有节点
      • All-relays -> 0xFFFE -  发送到启用中继(relay)功能的所有节点
      • All-nodes -> 0xFFFF -  发送到所有节点
      • 发送到固定节点的所有消息都由节点的主元素(primary element)进行处理

4.3 消息(Message)

蓝牙mesh网络通过消息进行通信。消息可以分为控制消息和接入消息。

  1. 控制消息(Control Message) - 与蓝牙mesh网络操作有关的消息,例如心跳(heartbeat)和friend的请求消息。
  2. 接入消息(Access Message) - 该类消息允许客户端模型检索或设置服务器模型中的状态值,或被服务器用于报告状态值。

模型可实施并定义节点的功能。元素是节点内唯一可被寻址的实体(节点中可包含一个或多个模型),并由状态(state)定义元素的状况变化。对于每个状态,都有一组服务器模型支持的消息。例如请求状态值或请求改变状态的客户端模型、以及发送状态或状态改变相关消息的服务器模型。

消息可被操作码(opcode)识别,并具有相关参数。操作码可识别消息的操作。示例包括:

  • Generic OnOff Get – 用于为通用模型识别OnOff状态Generic
    • OnOff Get不具有参数
  • Generic OnOff Set – 用于设置通用模型的OnOff状态
    • 参数:
      • OnOff – 目标值(开或关)
      • TID – 事务标识符(Transaction Identifier)– 消息是新的还是转发的
      • 转换时间(Transition Time)– 元素从一种状态转换到另一种状态所需时长
      • 延迟(Delay)– 消息执行延迟

接入消息分为两类:经确认的(acknowledged)和未经确认的(unacknowledged)。经确认的消息被发送至每个接收元素,并经其确认。响应通常为状态消息。对于未经确认的消息则不作出响应。例如蓝牙mesh网络的状态消息就是一种未经确认的消息。

4.4 消息安全

所有蓝牙mesh网络消息的安全保障都来自网络密钥(NetKey)和应用密钥(AppKey)对消息的加密和验证。NetKey用于网络层通信。假设蓝牙mesh网络没有子网,则该mesh网络内的所有通信都使用相同的网络密钥。

AppKey用于应用程序的数据。网络中的一些节点具有特定应用,并且根据应用的需要对一些潜在敏感数据的访问进行限制。这些节点具有特定的AppKey,并与特定应用相关联。会使用不同AppKey的领域通常包括安全(楼宇门禁、机房门禁和CEO办公室门禁)、照明(制造厂房、外部楼宇照明和人行道)和HVAC系统。

中继节点(relay node)(如灯泡或墙壁开关)通常具有有效的NetKey,能够在网络内中继敏感性消息。然而,这些节点无法访问各种限制区域(如楼宇控制或HVAC系统)的特定AppKey,,亦无法解密应用程序的数据。

4.5 消息交换

蓝牙mesh网络使用发布/订阅 (publish/subscribe) 模型来进行消息传输。生成消息的节点会发布消息。需要接收消息的节点会订阅它们所需的地址。消息可被发布至单播、群组或虚拟地址。

消息可以作为对其他消息的回复而发送,也可以作为非请求消息(unsolicited messages)被发送。当模型发送回复消息时,使用消息始发处的源地址作为目标地址。发送非请求消息时,模型将使用模型的发布地址作为目标地址。节点中的每个模型都有一个发布地址。

接收消息时,节点内模型(节点中可能存在多个模型)中的每个实例均可通过订阅方式从一个或多个群组或虚拟地址接收消息。

订阅消息的模型使用模型的订阅列表来定义用于接收消息的有效地址。当模型接收到消息时,模型将检查其订阅列表。当订阅列表上的地址设置为模型的元素单播地址或属于该节点的固定群组地址时,则视为一个匹配(match)。图3表示了接入消息的有效源地址和目标地址。

地址类型 有效源地址 接入消息的有效目的地址
Unassigned Address No No
Unicast Address Yes Yes
Virtual Group No Yes
Group Address No Yes

蓝牙mesh实体发布各种节点的状态时,无论其与发送数据的节点位置距离远近,整个蓝牙mesh网络中的系统均可订阅该数据。这就实现了网络一端的设备可通过低功耗无线消息与设施中的其他的管理者进行对话,而不受距离限制。

4.6 结束语

蓝牙mesh网络凭借行业认可、全球互通性、成熟且可信赖的生态系统来创建工业级设备网络。现在对蓝牙mesh的基本概念已有进一步的了解,接下来就能够更深入地了解拓扑的复杂性。在后续的解密蓝牙mesh系列文章中,我们将探讨蓝牙mesh的安全(security)、启动配置(provisioning)、代理节点(proxy node)等

5 第五章节:Mesh网络“友谊”篇

随着蓝牙mesh网络的推出,开发者可能很想知道蓝牙mesh网络是如何为低功耗节点设计的,蓝牙mesh网络采取了多种优化功耗的措施,特别包括一项称为“friendship” (友谊) 的特性。

5.1 概述

蓝牙mesh网络中“friendship”(友谊)特性的应用可能非常多样化。一些如照明功能的产品会与主电源(国家电网)相连接,那么相较于照明本身的功耗,蓝牙mesh模块的功耗就可忽略不计。但其他产品,如智能传感器或智能锁,就会在供电方式上功耗受限,这意味着它们需要通过小型电池或能量采集技术来供电。这些产品最有可能利用到蓝牙mesh网络的友谊概念。

我们知道节点(Node)是已经启动配置(Provision)并成为mesh网络中一员的设备。节点具有与其产品类型相关的功能,但也可具有与网络本身操作相关的功能并在其中扮演特定角色。而这取决于其所支持的mesh网络特性。所有节点都能够在网络中发送并接收mesh消息,此外还可以选择性地支持一个或多个其他网络特性,如下所列:

  • 中继(Relay)特性:通过广播承载层接收并重新发送mesh消息、以构建更大规模网络的能力。
  • 代理(Proxy)特性:在GATT和广播承载层之间接收并重新发送mesh消息的能力。
  • 低功耗(Low-Power)特性:能够以明显较低的接收端占空比在mesh网络中运行。通过将无线电接收器启用时间最小化可实现节点功耗的降低,只有在绝对必要时才启动接收器。低功耗节点(LPN)通过与好友(friend)节点建立友谊(friendship)关系来实现这一点。
  • 好友(Friend)特性:通过存储发往LPN的消息,仅在LPN明确发出请求时才进行转发来帮助LPN运行的能力。

要了解“友谊”是如何帮助LPN降低功耗的,我们可以先从传感器开始:传感器是一个很好的例子,它可以利用“友谊”,并被用作LPN。它们通常将绝大部分时间用于传输数据,且很少需要接收数据。传感器可能只有在温度超出一系列预设的限制时才会发送温度读数,而这种情况每天可能只会发生两次。正是这种不频繁的数据传输才使得此类设备的能耗使用维持在较低水平。

但如果需要根据季节将这些温度限制修改为不同的值,同时需要通过向传感器发送配置消息来实现这些限制的修改呢?传感器若想直接接收此类消息,就需要开启无线电进行收听。大多数时间它什么也接收不到,却在消耗能量。

因此,与好友节点的合作能够使低功耗节点(LPN)规划对无线电的使用,以适当或更低的频率接收消息而无需一直保持收听。低功耗节点会对好友节点进行轮询(Poll),查看是否有新消息(好友节点只会间或地对新消息进行存储)。功耗就是通过上述步骤得到节省的。

5.2 好友(Friend)和低功耗节点(LPN)

低功耗节点(LPN)必须与支持“好友”特性的另一节点建立“友谊”(friend)关系,以减少其接收器占空比(Duty Cycle)并节约能耗。图1来自蓝牙mesh配置文件规格,主要描绘了低功耗节点和好友节点之间的关系,具体如下:

mesh网络的拓扑结构示例

好友节点P与低功耗节点 I、J和K为“友谊”关系。好友节点O与低功耗节点 L和M为“friendship”关系。因此,寻址到节点I、J或 K的消息将被好友节点P存储并转发。寻址至节点L或M的消息将被好友节点 O存储和转发。好友节点的转发仅在低功耗节点轮询好友节点以获得等待传送的消息时才会发生。

5.3 友谊(Friendship)参数

低功耗节点需要找到好友节点,与其建立“友谊”关系。所涉及的流程称为“友谊建立”。我们稍后会探讨此流程。在此之前,先介绍一些有关对LPN行为进行管理的关键参数,这些参数被设定于友谊建立过程中。

1. ReceiveDelay是从LPN向好友节点发送请求,到其开始收听响应中间经过的时间。这让好友节点有时间做好响应的准备,并将响应发回。

2. ReceiveWindow 是LPN用于收听响应的时间。图2描述了涉及ReceiveDelay和ReceiveWindow的时序。

ReceiveDelay和ReceiveWindow时序

3. PollTimeout设定了LPN发送给其好友节点的两个连续请求之间可能经过的最长时间。如果在PollTimeout计时器到时之前,好友节点未能收到LPN的请求,则友谊关系将被终止。

BleMesh-PollTimeout时序

5.4 “友谊”建立

如果两个人想建立友谊,可能对视一眼就已足够!

但对于蓝牙mesh网络中“友谊”的建立,还需要经过更多的步骤。

  1. LPN发布一个“好友请求”(Friend Request)消息。该消息不会被中继,因此只有处于直接无线电范围内的好友节点才能处理该消息。不具有“好友”特性的节点会将消息丢弃。“好友请求” 消息包括LPN的ReceiveDelay、ReceiveWindow和PollTimeout参数。
  2. 附近的好友节点若支持“好友请求”消息中特定的要求,将准备一个“Friend Offer”消息,并将其发送回LPN。该消息包括各种参数,包括支持的ReceiveWindow大小、可用的消息队列大小、可用的订阅列表(Subscription List)大小、以及由好友节点测量的RSSI值。
  3. LPN接收到“Friend Offer”消息时,通过应用一种实施专用的算法来选择合适的好友节点。该算法可能会考虑到各种各样的情况。某些设备可能会优先考虑ReceiveWindow大小,以尽可能减少功耗;而有些设备则可能会更加关注RSSI值,以确保能够与好友节点保持高质量的链路。所采用的精确算法由产品开发者决定。
  4. 选择好友节点之后,LPN将向好友节点发送一个“Friend Poll”轮询消息。
  5. 从LPN收到“好友轮询”(Friend Poll)消息后,好友节点会回复一个“Friend Update”更新消息,完成“好友” 建立流程并提供安全参数。此时“友谊”得以建立。
友谊的建立

5.5 友谊(Friendship)消息传送

友谊建立之后,好友节点将LPN的所有消息存储在“好友队列”(Friend Queue)中,这些消息就是我们所说的“ 被存储的消息 ”。下方的图4描绘的就是好友节点和关联LPN之间的消息交换。

  • 当好友节点收到一个寻址到该节点的LPN的消息时,好友节点会缓冲此消息,将其存储在称为“好友队列”的区域中。在图4中,我们可以看到,好友节点为LPN存储了消息1和2。
  • LPN会周期性地启用其收发器(transceiver),并向好友节点发送 “好友轮询” 消息,询问是否存储有任何为其缓冲的消息。
  • 好友节点会先将一个被存储的消息发回至LPN作为对“好友轮询”(Friend Poll)的响应。
  • 在每次接收到来自好友节点的消息之后,LPN会将继续发送“好友轮询”消息,直到收到一条“MD(MD =更多数据)”字段设置为0的“好友更新”消息为止。这意味着已经没有为LPN缓冲的更多消息了。此时,LPN停止对好友节点的轮询。

6 Mesh系列文章

蓝牙官方组织在其微信公账号上发布了有关Mesh的系列文章,强烈建议开发者仔细阅读。文章列表如下:

  1. 解密蓝牙mesh|第三篇
  2. 解密蓝牙mesh|第四篇
  3. 解密蓝牙mesh|第五篇
  4. 解密蓝牙mesh|第六篇
  5. 解密蓝牙mesh|第七篇
  6. 解密蓝牙mesh|第八篇
  7. 解密蓝牙mesh|第九篇
  8. 解密蓝牙mesh|第十篇

本PDF由谷雨文档中心自动生成,点击下方链接阅读最新内容。

取自“http://doc.iotxx.com/index.php?title=BLE-Mesh技术揭秘&oldid=2397