BLE Mesh是由蓝牙SIG开发和发布的配置文件规范。这里介绍BLE Mesh的基本概念,概述了配置文件的操作和功能,并解释了Mesh设备的生命周期。

1、BLE Mesh与BLE 的关系

BLE Mesh基于蓝牙4.0规范的BLE部分,并与该协议 共享​​最底层。在广播中,BLE Mesh物理表示与现有的BLE兼容,因为Mesh消息包含在BLE广播分组的有效载荷内。但是,BLE Mesh指定了一个全新的主机层,虽然共享了一些概念,但BLE MeshBLE主机层不兼容。

BLE MeshBLE规范之间的关系:
蓝牙网格和蓝牙低能耗规范之间的关系

2、应用领域

BLE Mesh主要针对简单的控制监控应用,如光控或传感器数据采集。
数据包格式针对小型控制数据包进行了优化,发出单个命令报告,不适用于数据流或其他高带宽应用程序。

使用BLE Mesh会导致比传统BLE应用更高的功耗。这主要是因为需要保持接收不断运行。因此,与BLE不同,主动Mesh设备不能长时间地使用纽扣电池。

BLE Mesh在网络中最多支持32767个设备,最大网络直径为126跳。

3、网络拓扑和中继

BLE Mesh是一种基于广播的网络协议,网络中的每个节点都向所有节点发送和接收所有的消息。

Mesh网络中没有连接的概念。Mesh中的任何设备可以中继来自任何其他节点的消息,这使得Mesh节点可以通过让一个或多个其他节点,将消息中继到目的地,来向无线电范围之外的设备发送消息。
此属性还允许设备随时移动和进出网络。

4、中继实现

BLE Mesh通过中继消息扩展网络范围。
任何Mesh设备都可以配置为充当中继,并且不需要专用的中继设备来构建网络。作为中继的每个设备都会减少接收消息中的生存时间TTL)值,如果TTL2更高,则转发它们。
这种无向中继被称为消息泛洪,并确保消息传递的高概率,而不需要任何关于网络拓扑的信息。Mesh配置文件规范不提供任何路由机制,所有消息都由所有中继转发,直到TTL值达到0

为了避免消息被反复转发,每条消息都有唯一序列号SEQ),所有Mesh节点都维护消息缓存(Cache),此缓存用于过滤节点已处理的数据包

基于洪泛的消息中继方法可能导致大量空中流量,这可能会影响网络的吞吐量可靠性。因此,强烈建议限制网络中的中继数量以限制此影响。
网络中的中继节点速率是消息路由冗余可靠性之间的折衷。应根据网络密度流量网络布局以及可靠性响应性要求进行调整。

5、Mesh传输

BLE Mesh利用BLE广播客户和扫描仪角色,通过BLE广播数据包进行通信。广播包由附近的Mesh节点拾取 并像其他BLE广播包一样处理。Mesh数据包用唯一的AD类型表示,并添加到广播数据包有效负载中。

BLE设备以规则的广播间隔发送广播包,Mesh包也不例外。然而,与传统广播商不同,Mesh设备将在每次传输时改变其广播有效载荷,当它们在堆栈中排队时广播新的Mesh分组。每个BLE Mesh广播仅针对每个设备传输一次,并且如果Mesh中没有流量,则设备保持静默。

6、降低能量消耗

为了实现基于广播的通信,节点必须持续保持其无线处于收听模式,导致功耗显着高于典型的蓝牙低功耗(BLE)设备。

为了使 低功耗节点 能够参与Mesh网络,BLE Mesh网络包含 低功耗朋友(FN)功能。该协议允许低功耗节点(LPN)与常规Mesh节点建立关系(Establish),然后将定期缓存并将消息转发到 低功耗设备(LPN)。这使得低功耗设备不必继续监听传入的消息。

7、寻址

BLE Mesh寻址方案不同于 蓝牙低功耗(BLE)寻址方案。它有三种类型的地址:

序号地址描述
1单播地址仅可识别单一元素。在配置过程中,单播地址被分配给设备
2群组地址表示一个或多个元素多播地址
群组地址蓝牙技术联盟定义,称为蓝牙技术联盟固定群组地址SIG Fixed Group Addresses),也可以动态分配
3虚拟地址可以分配给跨越一个多个节点一个或多个元素的地址。
它采用128-bit UUID值的形式,任何元素都可以与之相关联,基本上相当于一个标签
(1)将设备添加到网络时,会为其分配一系列代表它的单播地址。设备的单播地址无法更改,并且始终是顺序的。单播地址空间支持在单个Mesh网络中具有32767个单播地址。任何应用程序都可以使用单播地址直接向设备发送消息。

(2)组地址作为网络配置过程的一部分进行分配和分配。组地址可以表示任意数量的设备,并且设备可以是任意数量的组的一部分。Mesh网络中最多可以有16127个通用组地址

(3)虚拟地址可以被认为是组地址的特殊形式,并且可以用于表示任意数量的设备。每个虚拟地址都是从文本标签生成的128位UUID。虚拟地址不必由网络配置设备跟踪,并且以这种方式,用户可以在部署之前生成虚拟地址,或者可以在网络中的设备之间临时生成地址。

8、GATT代理

为了支持不支持接收Mesh数据包的传统蓝牙低功耗设备,BLE Mesh网定义了一个单独的协议,用于通过蓝牙低功耗GATT协议隧道化Mesh消息。为此,Mesh配置文件规范定义了GATT承载和相应的GATT代理协议。该协议允许传统蓝牙低功耗设备通过建立与启用了代理功能的网状设备的GATT连接来参与Mesh网络。

为旧设备分配一个地址和必要的密钥,以成为网络的正式成员。设备通过常规配置过程或通过一些带外机制接收安全凭证。

9、模型和元素(Model / Element)

为了标准化来自不同供应商的设备之间的通信,Mesh Profile 规范 定义了一个接入层,该接入层在设备中的各种模型之间路由Mesh消息。
模型表示特定的行为或服务,并定义一组状态和消息,这些状态和消息作用于这些状态。Mesh Profile 规范 和Mesh模型规范 各自定义了一组模型,以涵盖典型的使用场景,如设备配置,传感器读数和灯光控制。除此之外,Vendor(供应商/厂商)可以自由定义自己的模型,并附带消息和状态。

设备中的模型属于元素。每个设备都有一个或多个元素,每个元素都充当Mesh中的虚拟实体,具有自己唯一的单播地址。每个传入消息都由元素中的模型实例处理。为了能够唯一地解决消息的处理方式,每个元素只有一个模型实例可以为特定的消息操作码实现处理程序。如果设备具有相同模型的多个实例,则必须将每个实例分配给单独的元素。同样,如果两个模型为同一个消息实现处理程序,则这些模型必须位于不同的元素中。

为了表示具有最小消息和状态重复的复杂行为,模型可以由其他模型组成,可能跨越多个元素。这些模型称为扩展模型。纯粹自包含的模型称为根模型。

模型通过发布和订阅系统相互通信。每个模型都可以订阅一组 组地址虚拟地址,模型只处理发布到其订阅地址之一或包含元素的单播地址的消息。任何模型都可以维护发布消息的发布地址。此发布地址可以是任何类型。

访问层结构:
在这里插入图片描述

10、配置(Provision)

在设备可以参与正常Mesh操作之前,必须先进行配置。在配置期间,设备被添加到网络并被分配单播地址网络密钥(Net Key)和设备密钥(Dev Key)。

配置由供应商完成,供应商是可信设备,可访问网络中的完整设备列表及其地址。在配置新设备之后,预计配置器(Provisioner)将使用新设备的设备密钥(Dev KEY)来建立安全通道来配置它。

11、配置网络

BLE Mesh将网络配置留给中央网络配置器。设备不应自行进行任何类型的服务发现。为了控制其他设备,必须通过用户交互或通过从数据库加载预定配置,由配置器配置诸如灯开关之类的设备。每个设备必须在其第一个元素中实现强制配置服务器模型,该元素用于配置其余模型。

配置完成后,配置程序将使用其Configuration Client模型的实例为新设备提供一组应用程序密钥和地址。除非重新配置,否则设备将在网络上的生命周期内使用这些密钥和地址。

12、安全(Security)

BLE Mesh采用多种安全措施来防止第三方干扰和监控。

13、认证(Authentication)

设备身份认证是配置过程的一部分,并允许用户确认添加到网络中的设备确实是他们认为的设备。Mesh Profile 规范 定义了一系列 带外认证 方法,例如灯光闪烁,密码输出和输入,以及针对预共享密钥的静态认证。为了确保Provision过程,使用椭圆曲线 Diffie-Helman(ECDH)公钥密码术。设置完设备后,它就是网络的一部分,其所有消息都被认为是经过身份认证的。

14、邮件加密

Bluetooth Mesh具有两级AES-CCM加密功能,128位密钥可用于通过网络传输的所有消息。

最低层,网络加密,保护网状网络中的所有消息不被不属于网络的设备读取。加密是使用网络加密密钥完成的,任何网络都可能包含多达4096个不同的子网,每个子网都有自己的网络密钥(Net Key)。共享网络密钥的所有设备都被视为网络的一部分,可以通过它发送和中继消息。
通过使用多个网络密钥,网络管理员可以有效地将其网络划分为多个子网,因为Mesh中继 仅转发使用已知网络密钥加密的消息。

第二加密层是传输加密。此加密层通过使用应用程序或设备密钥加密应用程序有效负载来限制哪些设备可以在网络中执行哪些操作。例如,考虑部署在酒店的Mesh网络,希望限制一些功能由工作人员控制(如配置密钥卡或访问存储区域)和一些可供客人使用的功能(如控制房间照明或空调)。为此,我们可以为访客提供一个应用程序密钥(App Key),为员工提供一个应用程序密钥,允许消息在同一网络中进行中继,同时防止访客和工作人员阅读彼此的消息。

虽然应用程序密钥(App Key)用于将访问权限分离到网络中的不同应用程序,但设备密钥(Dev Key)用于管理网络中的设备。每个设备都有一个唯一的设备密钥,只有供应商设备本身才知道。除了设置其他特定于设备的参数之外,在使用新加密密钥(网络或应用程序密钥)或地址配置设备时使用设备密钥。它还可用于通过将新密钥传输到网络中的所有其他设备(在传输密钥时使用其各自的设备密钥)从网络中驱逐恶意设备。此过程称为密钥刷新过程。

每个加密层都包含一个消息完整性检查值(MIC),用于验证消息内容是否使用指示的加密密钥加密。

15、隐私(Privacy)

所有Mesh消息有效负载都是完全加密的。诸如源地址和消息序列号之类的消息元数据,使用从网络密钥(Net Key)导出的隐私密钥进行模糊处理,即使对于公共报头字段也提供有限的隐私。

16、重播保护(Replay)

为了防止恶意设备重播先前的消息,每个设备都保留一个正在运行的序列号,用于出站消息。使用唯一的序列号和源地址对发送每个mesh消息。当接收消息时,接收设备存储序列号并确保它比从相同源地址接收的最后序列号更新。


17、示例场景:灯泡和开关

配置新的灯开关后,配置器中的配置客户端模型会读出新设备的模型和元素的列表,并将其呈现给用户。用户在设备的模型列表中找到灯开关模型,并为其提供“灯光控制”应用程序键。接下来,用户将模型的发布地址设置为“厨房区域”组地址,厨房中的所有灯泡都订阅该地址。下次按下新的灯开关时,厨房中的所有灯泡都会亮起。

GitHub 加速计划 / vi / vision
15.85 K
6.89 K
下载
pytorch/vision: 一个基于 PyTorch 的计算机视觉库,提供了各种计算机视觉算法和工具,适合用于实现计算机视觉应用程序。
最近提交(Master分支:2 个月前 )
868a3b42 8 天前
e9a32135 17 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐