选择LPN模式的原因:能有效的降低产品功耗。
比如:一个温湿度传感器产品,需要超过设定阈值才会从上送数据,这样就没有长时间唤醒时间,就无法接收到网关下发的设置数据,这时候就需要LPN模式。LPN的节点正常还是超过阈值才会上报数据,然后会过一段时间唤醒去访问他对应的Friend节点,去询问是否有对应的设置数据。这样就保证低功耗的同时又可以保证功能的完整性。
由此引出了两个概念:LPN节点与Friend节点。
如图所示:
其中Friend节点P与低功耗节点 I、J和K为“友谊”关系,寻址到节点I、J或 K的消息将被好友节点P存储并转发,好友节点的转发仅在低功耗节点轮询好友节点以获得等待传送的消息时才会发生。所以Friend节点一般都是为长供电设备,用于一直接收数据。
问题点:如果在蓝牙 Mesh 网络中,Friend 节点和发送者是同一个节点是否可以会有什么影响?
解答:如果 Friend 节点和发送者是同一个节点,该节点需要同时处理发送和中继的任务,可能会增加其能耗和负担。这可能会导致 Friend 节点在中继数据给 LPN 节点时的性能受到一定程度的影响,例如延迟可能会增加。因此,如果可能的话,将 Friend 节点和发送者设置为不同的节点可能更有利于性能和可靠性。
LPN节点与Friend节点连接:
Friend建立的基本数据:
- Friend Request:“好友请求”消息通过低功率节点发送到全好友组,以开始查找好友
- Receive Delay:接收延迟是指低功耗节点发送请求和侦听响应之间的时间。此延迟允许朋友节点的时间来准备响应。
- Receive Window:接收窗口是低功耗节点侦听响应的时间。当低功耗节点收到来自其“朋友”节点的消息时,它可以停止侦听其他消息。
- Friend Offer:由朋友节点发送,允许建立友谊。
- Friend Poll:消息由低功耗节点发送,请求好友节点发送已为低功耗节点存储的消息。
- Friend Update:消息由好友机节点发送到低功耗节点,以通知低功耗节点网络的安全参数(给定NetKey的IV索引、IV更新标志和key刷新标志的值被称为安全参数)已更改或正在更改,或好友队列(这是为低功率节点订阅的组和虚拟地址的集合。此列表允许“好友”节点存储低功耗节点所订阅的消息。)为空。
基本数据参数结构:
- Friend Request消息参数:消息的op为0x03,TTL字段设置为0,目的地址为0xFFFF或OxFFFD。
字段 |
大小 |
注释 |
Criteria |
1byte |
friend节点为了参与友谊谈判而应该支持的标准 |
Receive Delay |
1byte |
LPN节点接收请求响应的延迟 |
Poll Timeout |
3byte |
由低功耗节点设置的超时定时器的初始值 |
Previous Address |
2byte |
前一个朋友的主要元素的单播地址 |
Num Elements |
1byte |
LPN节点中的元素数 |
LPN Counter |
2byte |
低功耗节点已发送的好友请求消息数 |
消息中Criteria的含义:
字段 |
大小 |
注释 |
RFU |
1bit |
保留 |
RSSI Factor |
2bit |
friend节点进行延迟计算中使用的RSSI |
Receive Window Factor |
2bit |
friend节点进行延迟计算中使用的Receive Window |
Min Queue Size Log |
3bit |
friend节点可以存储在其好友队列中的最小消息数 |
Delay = Receive Window Factor * Receive Window – RSSI Factor * RSSI
2. Friend Offer消息参数:消息的op为0x04, TTL字段设置为0,目的地址为接收到的请求节点的源地址。
字段 |
大小 |
注释 |
Receive Window |
1byte |
Friend节点支持的接收窗口大小 |
Queue Size |
1byte |
Friend节点支持的队列大小 |
Subscription List Size |
3byte |
LPN节点的朋友节点可以支持的订阅列表的大小 |
RSSI |
2byte |
Friend节点的RSSI |
Friend Counter |
1byte |
friend节点已发送的offer消息数 |
蓝牙Mesh规范版本为1.0和1.0.1的Friend Queue的最大大小通常被限制在16个数据报文左右。MinQueueSizeLog是指整个好友队列(Friend Queue)的大小,而不是消息的数量。QueueSize指的是整个好友队列(Friend Queue)的大小,而不是消息的数量。
3. Friend Poll消息参数:消息的op为0x01, TTL字段设置为0, 目的地址为friend的地址。
字段 |
大小 |
注释 |
Padding |
7bit |
0b0000000.禁止使用所有其他值。 |
FSN |
1bit |
Friend序列号 |
4. Friend Update消息参数:消息的op为0x02, TTL字段设置为0,目的地址为LPN节点的源地址。
字段 |
大小 |
注释 |
Flags |
1byte |
包含IV更新标志和密钥刷新标志 |
IV Index |
4byte |
Friend节点已知的当前IV索引值 |
MD |
1byte |
指示该好友队列是否为空。0表示为空,1表示不为空 |
LPN节点更换Friend节点:
PollTimeout:设定了LPN发送给其好友节点的两个连续请求之间可能经过的最长时间。如果在PollTimeout计时器到时之前,好友节点未能收到LPN的请求,则友谊关系将被终止。
在建立友谊后,如果“好友请求”消息的“前地址”字段包含一个有效的单播地址,而该地址不是朋友节点自己的单播地址,则“朋友”节点应按照以下程序开始向该单播地址发送好友清除信息:
- TTL应设置为最大有效值。
- 友谊建立后,立即发送第一个friend清除提示信息,时间设置为1秒,friend清除计时器。
- 如果为响应friend clear消息而收到friend clear confirm消息,则应取消两个计时器,且程序已完成。
- 如果朋友清除重复计时器过期,将发送新的朋友清除消息,并重新启动计时器,其时间段是之前的朋友清除重复时间段的两倍。如第一次到期后,周期设置为2秒,下一次到期时,设置为4秒,以此类推。
- 如果朋友清除计时器过期,则应取消朋友清除重复计时器,并且该过程已完成。
- Friend Clear消息参数:消息的op为0x05 ,目的地址为之前friend节点的源地址。
字段 |
大小 |
注释 |
LPN Address |
2byte |
LPN节点的地址 |
LPN Counter |
2byte |
用于建立Friend关系的最新好友请求中的LPN Counter值 |
- Friend Clear Confirm消息参数:消息的op为0x06, 如果收到的TTL为0,确认也应使用TTL为0,目的地址为新friend节点的源地址。
字段 |
大小 |
注释 |
LPN Address |
2byte |
正在删除的LPN节点的单播地址 |
LPN Counter |
2byte |
对应的friend clear消息的LPN counter的值 |
LPN节点消息传递:
- 低功耗消息传递操作由低功耗节点执行,以接收从朋友节点存储的消息和安全更新。
- 该操作包括从低功耗节点到朋友节点的异步请求,以及从朋友节点到低功耗节点的定时响应。
- 与朋友节点对应的低功耗节点应在轮询超时计时器到期前向朋友节点发送朋友轮询消息。
- 在“朋友轮询”消息中,TTL字段应设置为0。
- 低功耗节点应继续发送“朋友轮询”消息,直到收到将MD字段设置为0的“朋友更新”消息为止。
- 低功耗节点可以通过发送朋友清除来终止与朋友的友谊。朋友清除消息应该使用TTL为0来发送。
- FSN字段应设置为朋友序列号的值,如果低功耗节点接收到友节点的响应,则切换友序列号。
- 如果低功率节点在接收窗口中没有收到响应,它应该重新发送朋友轮询消息。建议重新发送此消息3次,以确保可靠性和功耗之间的良好平衡。
- 如果低功耗节点接收到好友更新消息,它应使用相同的规则处理标志和IV索引字段,就像在安全网络信标中接收到它们一样。
LPN节点的好友订阅列表添加/删除/确认:
- Friend Subscription List Add消息参数:消息的op为0x07, TTL为0,目的地址为friend节点的源地址。
好友订阅列表添加消息由低功率节点发送到好友节点,以指示要存储消息的组地址和虚拟地址的列表。
字段 |
大小 |
注释 |
Transaction Number |
1byte |
“交易编号”字段用于区分每个单独的事务 |
Address List |
2 * N byte |
组地址和虚拟地址的列表,其中N是此消息中的组地址和虚拟地址的数量 |
Transaction Number:增加每个新的好友订阅列表添加或好友订阅列表删除的交易编号,使交易编号与好友订阅列表确认消息的“交易编号”字段相匹配。
- Friend Subscription List Remove消息参数:消息的op为0x08, TTL为0,目的地址为friend节点的源地址。
“好友订阅列表删除”消息由低功耗节点发送到好友节点,以指示要从好友订阅列表中删除的组地址和虚拟地址。
字段 |
大小 |
注释 |
Transaction Number |
1byte |
“交易编号”字段用于区分每个单独的事务 |
Address List |
2 * N byte |
组地址和虚拟地址的列表,其中N是此消息中的组地址和虚拟地址的数量 |
- Friend Subscription List Confirm消息参数:消息的op为0x09, TTL为0,目的地址为LPN节点的源地址。
“好友订阅列表确认”消息由好友节点发送到低功率节点,以响应“好友订阅列表添加”消息或“好友订阅列表删除”消息。
字段 |
大小 |
注释 |
Transaction Number |
1byte |
“交易编号”字段用于区分每个单独的事务 |
LPN节点与Friend节点的消息交互的安全性:
主安全资料(Master Security Material):由网络密钥(NetKey)派生,可被同一网络中的其他节点使用。使用主安全资料加密的消息可被同一网络中的任何节点解码。
好友安全资料(Friend Security Material):由网络密钥(NetKey)、以及由低功耗节点(LPN)和好友节点生成的额外计数器号码派生而来。使用好友安全资料加密的消息只能由处理该消息的好友节点和LPN解码。
使用好友安全资料加密的友谊消息:轮训(Friend Poll)、好友更新(Friend Update)、好友订阅列表(Friend Subscription List)添加/删除/确认好友节点发送至LPN的“被存储的消息”。
使用主安全资料加密的相应友谊消息:好友清除(Friend Clear)、好友清除确认(Friend Clear Confirm)。
从LPN发送至好友节点的消息将根据应用设置,通过主安全资料或好友安全资料进行加密。