BLE Mesh 基本概念(Mesh/BLE,应用领域,Provision,中继实现,认证,重播保护)
文章目录
BLE Mesh
是由蓝牙SIG
开发和发布的配置文件规范。这里介绍BLE Mesh的基本概念,概述了配置文件的操作和功能,并解释了Mesh设备的生命周期。
1、BLE Mesh与BLE 的关系
BLE Mesh
基于蓝牙4.0
规范的BLE
部分,并与该协议 共享最底层。在广播中,BLE Mesh物理表示与现有的BLE
兼容,因为Mesh消息包含在BLE
广播分组的有效载荷内。但是,BLE Mesh指定了一个全新的主机层,虽然共享了一些概念,但BLE Mesh
与BLE
主机层不兼容。
BLE Mesh
和BLE
规范之间的关系:
2、应用领域
BLE Mesh
主要针对简单的控制
和监控应用
,如光控或传感器数据采集。
数据包格式针对小型控制数据包
进行了优化,发出单个命令
或报告
,不适用于数据流
或其他高带宽
应用程序。
使用BLE Mesh
会导致比传统BLE
应用更高的功耗
。这主要是因为需要保持接收不断运行。因此,与BLE
不同,主动Mesh设备
不能长时间地使用纽扣电池。
BLE Mesh在网络中最多支持32767
个设备,最大网络直径为126
跳。
3、网络拓扑和中继
BLE Mesh
是一种基于广播
的网络协议,网络中的每个节点
都向所有节点发送和接收所有的消息。
Mesh网络
中没有连接
的概念。Mesh中的任何设备
可以中继
来自任何其他节点的消息,这使得Mesh节点可以通过让一个或多个其他节点,将消息中继到目的地
,来向无线电范围之外的设备发送消息。
此属性还允许设备随时移动和进出网络。
4、中继实现
BLE Mesh
通过中继消息
扩展网络范围。
任何Mesh设备都可以配置为充当中继
,并且不需要专用的中继设备来构建网络。作为中继
的每个设备都会减少
接收消息中的生存时间
(TTL
)值,如果TTL
为2
或更高
,则转发它们。
这种无向中继
被称为消息泛洪
,并确保消息传递的高概率
,而不需要任何关于网络拓扑
的信息。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、示例场景:灯泡和开关
配置新的灯开关后,配置器中的配置客户端模型会读出新设备的模型和元素的列表,并将其呈现给用户。用户在设备的模型列表中找到灯开关模型,并为其提供“灯光控制”应用程序键。接下来,用户将模型的发布地址设置为“厨房区域”组地址,厨房中的所有灯泡都订阅该地址。下次按下新的灯开关时,厨房中的所有灯泡都会亮起。
更多推荐
所有评论(0)