[分享] 解密蓝牙mesh系列 | “friendship” (友谊) 的特性

fish001   2017-9-30 15:31 楼主


0.jpeg

蓝牙技术联盟亚太区技术项目经理
任凯

低功耗蓝牙(Bluetooth Low Energy)是全球最具节能性的短距离无线通信技术之一。其低功耗的特性广受开发者和消费者赞誉。随着蓝牙mesh网络的推出,开发者可能想知道蓝牙mesh网络是否也被设计为低功耗,是否继承了低功耗蓝牙的这一优点?

答案当然是YES!

蓝牙mesh网络采取了多种优化功耗的措施,特别包括一项称为“friendship” (友谊) 的特性。

0.gif

概述

蓝牙mesh网络中“friendship”(友谊)特性的应用可能非常多样化。一些如照明功能的产品会与主电源(国家电网)相连接,那么相较于照明本身的功耗,蓝牙mesh模块的功耗就可忽略不计。但其他产品,如智能传感器或智能锁,就会在供电方式上功耗受限,这意味着它们需要通过小型电池或能量采集技术来供电。这些产品最有可能利用到蓝牙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),查看是否有新消息(好友节点只会间或地对新消息进行存储)。功耗就是通过上述步骤得到节省的。

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

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

浅蓝色:低功耗节点
深灰色:与特定低功耗节点相关联的好友节点
浅灰色:没有与低功耗节点建立关系的好友节点

0.jpeg

图 1 - mesh网络的拓扑结构示例

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

友谊(Friendship)参数

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

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

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

0.jpeg

图2 - ReceiveDelay和ReceiveWindow时序

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

0.jpeg

图 3 – PollTimeout时序

“友谊”建立

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

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

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


友谊(Friendship)消息传送


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

  • 当好友节点收到一个寻址到该节点的LPN的消息时,好友节点会缓冲此消息,将其存储在称为“好友队列”的区域中。在图4中,我们可以看到,好友节点为LPN存储了消息1和2。


  • LPN会周期性地启用其收发器(transceiver),并向好友节点发送 “好友轮询” 消息,询问是否存储有任何为其缓冲的消息。
  • 好友节点会先将一个被存储的消息发回至LPN作为对“好友轮询”(Friend Poll)的响应。


  • 在每次接收到来自好友节点的消息之后,LPN会将继续发送“好友轮询”消息,直到收到一条“MD(MD =更多数据)”字段设置为0的“好友更新”消息为止。这意味着已经没有为LPN缓冲的更多消息了。此时,LPN停止对好友节点的轮询。


0.jpeg

图 4 – “友谊”消息传递

安全性

蓝牙mesh中,安全性保障无处不在,“友谊”也如此,它采用两种特殊的安全证书:

  • 主安全资料(Master Security Material):由网络密钥(NetKey)派生,可被同一网络中的其他节点使用。使用主安全资料加密的消息可被同一网络中的任何节点解码。


  • 好友安全资料(Friend Security Material):由网络密钥(NetKey)、以及由低功耗节点(LPN)和好友节点生成的额外计数器号码派生而来。使用好友安全资料加密的消息只能由处理该消息的好友节点和LPN解码。


LPN和好友节点使用的两种安全资料是怎样的呢?总结如下:

使用好友安全材料加密的相应友谊消息:
  • 好友轮询(Friend Poll)
  • 好友更新(Friend Update)
  • 好友订阅列表(Friend Subscription List)添加/删除/确认好友节点发送至LPN的“被存储的消息”


使用主安全资料加密的相应友谊消息:
  • 好友清除(Friend Clear)
  • 好友清除确认(Friend Clear Confirm)


从LPN发送至好友节点的消息将根据应用设置,通过主安全资料或好友安全资料进行加密。

“友谊”终止


“友谊”可在某些情况下终止:

  • 如果在PollTimeout计时结束之前,好友节点未收到“ 好友轮询”、“好友订阅列表添加”或“好友订阅列表删除”消息,则友谊终止。


  • LPN可以通过将“好友清除”消息发送给好友节点,以启动友谊终止程序,“友谊”就会被好友节点终止。


平台选择小窍门

开发者在选择实施好友和LPN的平台时,应考虑遵循以下指南:

  • RAM容量:可用的RAM容量直接影响一个 好友节点可支持LPN的数量、及其可为相关LPN缓冲多少个消息。


  • LPN:所选MCU和模块的通用功耗性能对于LPN很关键。 此外,从休眠模式到运行模式的唤醒/预热时间会影响LPN的响应速度和延迟。


作为开发者,我像你们一样对蓝牙mesh SDK怀有热切的期望。让我们一同感受蓝牙mesh“ 友谊 ”的魅力吧!

  • 0.jpeg

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复