【蓝牙mesh】Upper协议层介绍

简介: Control数据主要是用在Mesh设备的Friend特性,通过Friend特性和低功耗LowPower节点之间建立联系。Control数据就是下面的这几条命令,除此之外Upper层的所有数据都是Access数据。Friend节点与LowPower节点建立关系的流程如下:要建立 Friendship关系,首先LowPower节点向空中发送 Friend Request 请求(地址类型是 all-friend)

Upper层简介

在这里插入图片描述

   Upper协议层用于处理网络层以上的功能,包括设备的应用层数据、安全、群组等信息,是实现蓝牙mesh应用功能的关键协议之一。Upper层接收来自Access层的数据或者是Upper层自己生成的Control数据,并且将其传输到对端设备的Upper层。 来自Access层的数据使用appkey来进行加密和认证的,这就需要在Upper层来验证这些数据。 而Control数据是不用appkey的,它只是用netkey来加密,因为Control数据是不用传递给上层。

下面解释一下Access数据和Control数据, Upper层的数据分为Access数据和Control数据。
   先说什么是Access数据,我们平常应用层传下来的数据,以及接收到的需要抛给应用层的都是Access数据,比如我们的控制灯开关的指令,获取对方开关状态的指令,以及配置mesh节点信息的指令,都是Access指令。
   那什么又是Control数据呢,Control数据主要是Friend节点存的数据,比如节点A是一个低功耗设备,在节点A休眠的时候,如果网络内有发给A的数据, 则通过节点B将发给A的数据缓存到B中,那节点B收到的这些数据就是Control数据,这些数据不经过节点B 的appkey解密,也不用传递给上层。

   另外节点转发的其他设备的数据也是不经过appkey加解密,也不用传递给上层,这也是蓝牙Mesh基于安全性考虑进行设计的, 比如A节点是一个灯,B节点是一个门锁,A节点转发B节点的开锁数据,因为转发数据根本不经过Access层,也不用appkey进行解密,这就保证了数据的安全性。

Upper层Access数据包

   上面提到了Control数据和Access应用数据,在Access层有一个专门的标志位CTL来区分这两种设备。 当CTL为0则表示设备是Access应用数据,Access数据使用appkey或者devkey来进行加解密和校验。其中Upper层传输的Access数据分为两部分,一部分是加密的数据包,第二部分是认证码,认证码可以使用32位,也可以使用64位,如下:
在这里插入图片描述

加密的数据包

   根据我们上一篇文章Access层的介绍,如果认证码使用32位,则数据包的长度最大可以是380个字节,如果认证码使用64位,则数据包的长度最大可以是376个字节。 当然只要数据超过12个字节,数据包会在Lower层进行分片和组包,这个我们会在下篇文章介绍。

认证码

   认证码是用来校验上面数据包是否被篡改的,使用的是AES_CBC的加密认证方式。对于分包的数据,认证码的长度取决于Lower层数据包中 SZMIC标志位的值。 对于不分包的数据,认证码就是32位。

另外说明一下,Control数据是不需要认证码的。

Upper层Control数据包

   当CTL标志位为1是,Upper层传输的数据就是Control数据包。Control数据有一个7-bit的Opcode,表示不同的Control数据。 所有的Control数据在Upper层是没有认证的,所有的认证是在下层的网络层中做的,在网络层是使用的是64bit的认证码。Control数据在下层Lower层的分包如下:

在这里插入图片描述

由上图可以看出Control数据最大是256个字节。

Upper层 Access数据收发

发送数据

   Upper层的Access数据使用appkey或者devkey进行加解密,在Upper层的数据会有一个SEQ, 表示消息的序列号,每次发送消息该SEQ都会自增,SEQ长度是3个字节,SEQ耗尽后,会触发IV_index更新。

   在下层还有一个AKF 和 AID的标志位,AKF 就是appkey flag的简称,用来表示该数据包是使用appkey来加密还是使用devkey来加密。如果AKF为1,则AID用来表示appkey的ID,如果AKF未0, AID的值也为0。

接收数据

   当Upper层接收到数据后,会根据AKF和AID的标志位判断是使用appkey还是使用devkey对数据进行解密,并且验证数据的认证码。 数据解码完成后,会校验设备的源地址和目的地址,如果数据是发给自己的,则抛到上层进行处理。如果发现设备不是发给自己的,则会判断是否是传给自己作为Friend节点的低功耗设备的,如果是则存储到对应的Friend列表中。

Upper层 Control数据介绍

   Control数据主要是用在Mesh设备的Friend特性,通过Friend特性和低功耗LowPower节点之间建立联系。Control数据就是下面的这几条命令,除此之外Upper层的所有数据都是Access数据。
在这里插入图片描述

Friend节点与LowPower节点建立关系的流程如下:
在这里插入图片描述

  1. 要建立 Friendship关系,首先LowPower节点向空中发送 Friend Request 请求(地址类型是 all-friend)
  2. 如果一个节点支持 Friend feature 同时开启了这个 feature 的话,那么当他接收到 Friend Request 消息的时候,就会回复一条Friend Offer命令。如果LowPower节点周围有多个Friend节点的话,那么多个节点都会回复Friend Offer命令。
  3. LowPower节点收到一条或多条 Friend feature 的节点发送的 Friend Offer 消息后,选择其中希望建立 Friendship 的,使用 Friend Poll 进行应答。 选择与谁建立Friendship可以由Lowpower节点自行决定,可以根据信号强度、先后顺序等因素。
  4. 接收到 LowPower 的 Friend Poll 应答后,Friend 节点回复 Friend Update,正式建立友谊;
  5. 至此两者之前便建立了Friendship关系,LowPower节点休眠后,网络内发往LowPower的消息会由Friend节点进行缓存,当LowPower节点从休眠唤醒后,会从Friend节点中将缓存的消息读出来。

总结

   蓝牙Mesh中的Upper层主要用于将应用层数据,封装并解密后传给网络层,以及将接收到的网络层数据进行解析和解密并传递给应用层, Upper层是网络层和应用层中非常重要的一部分。

目录
相关文章
|
4月前
|
传感器 物联网 芯片
低功耗蓝牙(BLE) 和 经典蓝牙(SPP) 的区别
如何选择适合的蓝牙协议以实现最佳的无线通信效果。
183 0
|
并行计算 监控 网络协议
西门子PLC常用的通讯接口和通讯协议有哪些?RS232、RS485、PPI、MPI、Modbus、Profibus、Uss的特点
西门子PLC常用的通讯接口和通讯协议有哪些?RS232、RS485、PPI、MPI、Modbus、Profibus、Uss的特点
西门子PLC常用的通讯接口和通讯协议有哪些?RS232、RS485、PPI、MPI、Modbus、Profibus、Uss的特点
|
12月前
Adurion两个HCO5蓝牙模块之间互相通信
Adurion两个HCO5蓝牙模块之间互相通信
|
物联网 数据安全/隐私保护
【蓝牙mesh】Lower协议层介绍
蓝牙Mesh中的Lower层主要的功能就是对网络数据包进行分片和组包,是位于Upper层和Network层之间,对蓝牙Mesh的分层加密起着非常重要的作用。
146 0
【蓝牙mesh】Lower协议层介绍
|
缓存 物联网 数据安全/隐私保护
【蓝牙mesh】Network协议层介绍
Network层是蓝牙Mesh协议栈中中,按照协议栈层级仅次于网络承载层的,是对整个蓝牙MeshMesh网络中非常重要的一个协议层。Network层会使用netkey对数据包进行单独的加解密和认证,为mesh网络的数据安全提供有力的保障。
141 0
【蓝牙mesh】Network协议层介绍
|
物联网 数据安全/隐私保护
【蓝牙mesh】access层(接入层)协议介绍
Model ID 是一个16Bit 或者32Bit的一个数值。用来表示设备的某个功能模块,比如onoff model, lightness model。那16Bit的Model ID 和 32Bit的Model ID有什么区别呢?16Bit的Model ID 是有蓝牙技术联盟分配的。如下图是Sig制定的几个Model ID32Bit的Model ID是由各个厂商自定义的Model ID。
117 0
【蓝牙mesh】access层(接入层)协议介绍
|
传感器 物联网 数据安全/隐私保护
【蓝牙mesh】Bearer层(承载层)介绍
蓝牙Mesh Bearer层分为广播Bearer层和Gatt bearer层,一个节点设备可以支持至少其中的一个,也可以都支持。一般情况下,子设备节点如果不是低功耗设备,两个层都会支持的。在蓝牙Mesh网络中,Bearer层还提供了许多其他的功能,例如数据加密、数据压缩、数据分段等等。这些功能都是为了提高数据传输的效率和安全性。总的来说,Bearer层是蓝牙Mesh网络中非常重要的一层,它提供了数据传输的基础支持,使整个网络能够顺畅地运行。
137 0
【蓝牙mesh】Bearer层(承载层)介绍
|
编解码 语音技术
【经典蓝牙】 蓝牙HFP层协议分析
HFP(Hands-Free Profile), 是蓝牙免提协议, 可以让蓝牙设备对对端蓝牙设备的通话进行控制,例如蓝牙耳机控制手机通话的接听、 挂断、 拒接、 语音拨号等。HFP中蓝牙两端的数据交互是通过定义好的AT指令来通讯的
1527 0
【经典蓝牙】 蓝牙HFP层协议分析
|
编解码 网络协议 物联网
DFP 数据转发协议应用实例 5.与其它厂商 LoRA 设备匹配
DFP 是什么? 稳控科技编写的一套数据转发规则, 取自“自由转发协议 FFP(Free Forward Protocol)” ,或者 DFP(DoubleF Protocol), DF 也可以理解为 Datas Forward(数据转发)的缩写。DF 协议是与硬件接口无关的数据链路层协议,规定了数据流如何在不同设备之间、不同接口之间的传输方向。 DF 协议一般用于延长数字接口的传输距离(数据中继),它与硬件接口类型无关,可以基于 UART、 LoRA、TCP 等异步数据传输介质。
DFP 数据转发协议应用实例 5.与其它厂商 LoRA 设备匹配