BLE Mesh(2)—— 基本术语及含义

目录

1、节点(node)

2、开通配置(provisioning)

3、元素(element)

4、消息(message)

5、地址(Address)

6、消息的发布/订阅(Publish / Subscribe)

7、状态与属性(State / Property)

7.1、状态

7.1.1 状态的绑定

7.2、属性

8、特性

8.1、中继(Relay)

8.2、低功耗 & 友节点(Low Power & Friend)

8.3、代理节点(Proxy)

9、安全

在深入了解 mesh 机制原理之前,很有必要先了解和认识他的大致结构以及常用的术语和他们之间的关系,这样能够首先从整体上有一个大致的认识(组成的部分),站在这个基础之上,在后面再进行细致的分析;

1、节点(node)
mesh 是基于 BLE 的星形网状拓扑结构,Spec 中,将处于网状结构的每一个 BLE 设备称之为节点(node),数据在节点之间进行传递。

2、开通配置(provisioning)
设备在正式成为 mesh 网络节点之前,只能被称之为一个“未开通配置设备”(unprovisioned devices),也就是说,这种未开通配置的设备并没有办法与一个已知的 mesh 网络中的节点进行数据交互。想要成为某个 mesh 网络的节点,需要有一个流程叫“开通配置”,即,将某个“未开通配置设备”转化为网络节点的过程成为“开通配置”(provisioning),比如,你购买了一个带有 mesh 功能的灯,你希望他能够加入到你家里现有的 mesh 网络中,并能够通过 mesh 网络来控制他,那么首先需要为其开通配置,并入这个 mesh 网络。

开通配置的过程稍微繁琐,在以后的章节会详细介绍

3、元素(element)
节点并非 mesh 网络中的最小单元,在一个 node 中,可以包含多个元素(element),每个元素都有唯一确定的地址,叫做单播地址(unicast address),每个单元都可以独立寻址,以便进行单独的控制。

打个比方:一个 BLE mesh 灯节点 X,这个节点包含了 3 盏灯 A/B/C,这个 X-A、X-B、X-C 我们称之为这个 X 节点的元素(element),每个元素会分配独立的地址;

元素的定义有什么好处呢?比如上面那个灯的场景,一组灯,三个灯泡,没有必要用三个 BLE 产品吧?一个 BLE 产品搞定一组情况!

4、消息(message)
节点与节点之间的数据传输,我们称之为 message,在规范中定义了多种消息的类型,每种消息都有自己唯一的操作码来进行区分,这里不做具体描述,后面描述细节的时候,在详细分析。

消息交互中,分为两类:

1、需要应答的(ACK)

2、不需要应答的(No ACK)

1、需要应答的消息类型,需要对方在收到消息后,回复一条响应信息。主要作用是:

1-1、通知对端,消息已经被成功收到

1-2、给对端回复一些数据

需要应答的消息如果没有收到期望的回答,则其可能被发送多次;

2、不需要应答的消息,则不期望收到对端的回复

5、地址(Address)
既然 mesh 中存在多个 BLE 节点,节点中又包含了不同的元素,那么消息在传输的时候,就需要指定接收消息的具体的那个最小单位,即元素。

在 mesh 网络,为每一个存在于其中的元素分配了唯一确定的地址,让其能够被寻址,称之为单播地址;

mesh 也支持群组地址,这是一种多播地址,它可以代表一个或多个元素。 群组地址要么是动态分配的,要么是蓝牙技术联盟预先定义的(SIG固定群组地址)。蓝牙技术联盟已经定 义了4个固定群组地址,即 All-proxies, All-friends, All-relays 及 All-nodes。在后续章节中我们会详细解释什么是 Proxy(代理), Friend(朋友)及 Relay(中继) 。

mesh 支持虚拟地址可以赋给一个或多个元素,横跨一个或多个 节点。虚拟地址与128位UUID的形式类似,任何元素都可以与其相关联,它更像一个标签。虚拟地址可以在出厂前就进行预先配置,然后用于某 些特定场景,例如使某个厂商制作的投影仪的寻址更加方便。

打个比方,一个 BLE mesh 网络中,有一组灯(2个灯泡单独控制),一个门,一个蜂鸣器,所以一共有 4 个元素,他们分别会有单播地址,门和蜂鸣器可以被分成为一组,当门开了,蜂鸣器就响;

6、消息的发布/订阅(Publish / Subscribe)
在蓝牙 mesh中,消息的发送成为发布(Publish),将 mesh 节点中配置成为可以接收特定消息的过程,称之为订阅(Subscribe);

如图所示,可以看到,Switch 1 可以发布消息到 Kitchen 组,而 L1/L2 都订阅了 Kitchen 组,所以可以接收来自 Kitchen 的消息,换句话说,Switch 1 可以控制 L1/L2 的开关;

7、状态与属性(State / Property)
7.1、状态
状态代表了一个元素当前处于的情况,打个比方,一个灯,可能处于开,也可能处于关,这两者就称之为 State;

状态是可以发生变化的,状态的变化可能是瞬间,也可能是一个过程时间,如果是一个过程时间,那么称之为转换时间;

7.1.1 状态的绑定
如果一个状态的变化引起了另一个状态的变化,那么称之为状态绑定,比如调整灯光的强度,调整到最低时刻,就关掉灯;

7.2、属性
属性的代表了具体含义的数据,比如一个温度传感器元素来的数据,那么到底是室外温度还是室内温度,这就是他的属性

8、特性
mesh 网络中,所有的节点都可以收发数据,但并不是每个节点的特性都一样,mesh 根据场景,为节点增加了特性的描述,一共有 4 种特性:

1、中继(Relay)

2、代理(Proxy)

3、友(Friend)

4、低功耗(Low Power)

当然,并不是所有的节点都支持上述的特性,也可以不支持上述 4 种,仅仅作为一个普通节点即可。当然,也可以同时支持上述特性的几个组合,同时拥有多种功能;

8.1、中继(Relay)
顾名思义,拥有中继特性的节点,能够将收到的消息再次发送出去,消息可以多次跳跃到其他的节点,以覆盖整个 mesh 网络。但是消息并不是无限制的跳跃,消息跳跃的次数,是受到一个称之为 TTL(Time To Live) 的字段进行控制,他指定了消息在 mesh 网络中的跳跃次数,每次被中继一次,TTL 减一,当 TTL 为 0 的时候,停止中继;

中继特性能够使得 mesh 网络扩张得很大,覆盖的范围更广;

8.2、低功耗 & 友节点(Low Power & Friend)
为何要将他们一起说呢,因为他们之间是一起出现的。

在 mesh 网络中,有的节点对功耗敏感(可能安装的是电池),有的节点可能对功耗不敏感(插电),那么就有一种方案是:低功耗的节点尽量的去睡眠,以节约功耗,隔一段时间醒来收取消息;那么它睡眠期间的消息需要被另一个一直处于活跃的节点缓存,等待低功耗节点来翻牌子,并把他要的数据吐给他;

mesh 网络中,将上述情况定义为,长期处于休眠并偶尔唤醒接收数据并交互的节点为“低功耗”节点(Low Power Node);存储低功耗节点消息,并在低功耗节点醒来时刻将消息发送给低功耗节点的那个节点为 “友” 节点(Friend Node);他们之间的关系成为“友谊”(Friendship)

所以,友节点,是为了低功耗节点的存在而存在的;

8.3、代理节点(Proxy)
那么还有一种情况,有一个现有的 mesh 网络,还有一个不支持 mesh 的手机,这个手机也想加入 mesh 的这个网络搞事情,那咋办?明显是不行的,因为这个手机不支持 mesh,所以他不明白这个网络里面到底在搞啥事情。

针对这种情况,蓝牙组织定义了一个叫做 Proxy 特性的节点,这个 Proxy 节点的特性是,支持传统的 BLE 蓝牙协议栈(GATT 规范)的同时,也支持 mesh 协议栈,那么就可以让这个不支持 mesh 特性的手机,通过 GATT 与 Proxy 交互,而这个 Proxy 节点又将手机的意图翻译为 mesh 网络懂得起的含义,在网络中存活,那不就相当于这个手机加入了这个 mesh 网络吗?所以这个 Proxy 节点就做了这个事儿:允许没有集成蓝牙 mesh 协议栈的 BLE 设备与 mesh 网络中的任何节点进行通信。

9、安全
在传统的 BLE 机制中,运行启用加密,也允许不加密,进行数据的传输。在 mesh 网络中,网络加密具有强制性,即不管是网络还是单个应用的数据,都需要加密;

所有的mesh消息都要经过加密和认证

网络安全性,应用安全性,设备安全性相互独立

在mesh网络中,我们可以通过密钥刷新程序来更新 节点的安全密钥

消息模糊化可以让外界难以追踪网络内所发送的消 息,进而提供了一种隐私保护机制,难以让外界跟 踪节点的活动

设备添加到mesh网络从而成为节点的过程本身就是 是一个安全的过程。也就是前面提到的,开通配置 过程

节点可以从网络中安全地移除,这样可以防止垃圾 桶攻击(trash can attack)

蓝牙mesh网络安全性的核心是三种安全密钥。分别使用这些密钥对网络中的不同部分进行加密

我们举一个例子。有一个已经加入蓝牙mesh网络的灯。它可以当作一个中继节点来中继消息。它可以中继门窗安全系统的消息,但是它不能理解消息的具体含义,仅仅对消息进行中继。照明系统和门窗安全系统相当于两个不同的子系统,它们使用不同的密钥进行加密, 这样整个网络的安全性就得到了提升;

蓝牙mesh网络里的每个节点都有一个相同的网络密钥 (NetKey)。正是这个密钥才使得节点成为这个网络的一员。 网络加密key与隐私key都是由这个网络密钥生成的。节点可以利用NetKey来加密和认证网络层,这样诸如中继之类的网络功能就可以执行了。但是NetKey不能加密应用数据。

蓝牙mesh网络可以分成几个子网络,每个子网络都有 其单独的NetKey,这个NetKey只有当前子网络成员节点才 有,其它节点没有。

只有拥有应用密钥(AppKey)的节点 才能解密相应 的应用数据。在一个mesh网络中,可以有许多不同的 AppKey,每个AppKey 对应一种特定的应用(照明应用,  热力应用,门窗安全系统应用等)。例如,灯和开关拥有 灯应用的 AppKey,但是没有热力系统的AppKey,只有网 络中的温度调节装置才拥有热力系统的 AppKey。

最后一种密钥是设备密钥(DevKey)。这是一种特殊的应用密钥。每个节点都有一个独一无二的设备密钥,这个 密钥只有启动配置设备(如手机)知道。设备密钥可以用 在开通配置过程,以确保启动配置设备与节点之间的安全通讯
————————————————
版权声明:本文为CSDN博主「爱洋葱」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhoutaopower/article/details/101422119

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值