【蓝牙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。

Access层简介

在这里插入图片描述

  Access层定义了应用层如何使用upper协议层的接口,它不仅定义了应用层的格式,还定义了应用数据在upper层的加密和解密。当收到下层的数据包时,它会检查数据的netkey(网络密钥)和appkey(应用密钥)是否正确,如果数据正确则将数据提供给应用层处理。
  总的来说,Access层从数据流的角度来讲,并不属于某一个单独的协议层, 它只是制定了一系列的网络传输规范的,这点很类似于BLE中的GAP层。

概念介绍

Model ID

Model ID 是一个16Bit 或者32Bit的一个数值。用来表示设备的某个功能模块,比如onoff model, lightness model。
那16Bit的Model ID 和 32Bit的Model ID有什么区别呢?

16Bit的Model ID 是有蓝牙技术联盟分配的。 如下图是Sig制定的几个Model ID

在这里插入图片描述

32Bit的Model ID是由各个厂商自定义的Model ID。32Bit的Model ID分为两个部分, 前16Bit是蓝牙技术联盟给各个厂商分配的Company ID, 后16Bit是才是厂商自定义的Model ID。格式如下:

在这里插入图片描述

至于各个厂商的Company ID, 可以再蓝牙技术联盟官网查询,链接:https://www.bluetooth.com/specifications/assigned-numbers/

下图就是根据文档搜到的杭州涂鸦智能的Company ID 为 0X07DO, 其他公司的Company ID可以自行搜索。
在这里插入图片描述

Access层payload数据

  Access层数据每包长度为12个字节,如果超过则底层会进行分包,最多分包32包,所以Access层能够传输的最大数据是384个字节。当然这是包含了TransMIC的长度,如果TransMIC长度为4个字节,则Access层Payload最大380个字节。其次,还要减去对应的Opcode的长度。 如果Opcode长度为1,则Payload为379个字节;pcode长度为2,则Payload为378个字节;pcode长度为3,则Payload为377个字节,厂商自定义的Opcode都是3个字节。
Access层的数据包格式如下图:
在这里插入图片描述

那什么是Opcode?

Opcode(操作码)

Opcode可以是1、2、3个字节。第一个字节的最高两位表示Opcode的长度。如下图:
在这里插入图片描述

第一个字节的最高位为0表示Opcode是一个字节,
第一个字节的最高两位是10表示Opcode是两个字节
第一个字节的最高两位是11表示Opcode是三个字节。

1个字节的Opcode和2个字节的Opcode是蓝牙技术联盟定义的,用作网络信息配网的数据包和应用传输的数据包中。
3个字节的Opcode是厂商可以自行定义的,但是也不是三个字节都可以自定义。 Opcode中的第二和第三个字节表示的是厂商的Company ID, 只有第一个字节的低6个Bit可以由厂商自定义,也就是说一个厂商可以自定义64个字节的Opcode。

Acces层的功能

发送数据

  发送的源地址必须是一个单播地址,即发送方只能是某一个设备。 发送的目的地址可以是单播地址、群组地址或者虚拟地址。

  如果发送方发送了一个带回复的数据包到一个单播地址,即数据发给某一个设备,则接收方在收到数据后,应该延时20-50ms后,回复数据包。
  如果发送方发送了一个待回复的数据包到一个群组地址,即一对多,则接收方在收到数据后,应该延时20-500ms后,回复数据包,这样是为了避免多个接收方同时回复数据,导致回复数据的网络干扰,减少丢包率。

   通常设备节点在状态发生变化的时候,会立即上报状态给订阅的节点。但是如果设备是刚上电的时候上报状态,则应该延时20-500ms,以防止多个设备同时上电导致的上报数据干扰。

  由于蓝牙Mesh网络的带宽较小,所以应该注意节点发送数据的频率,一个节点在10秒内发送的数据包最好不要超过100包。

接收数据

当节点收到一包蓝牙Mesh数据后,应该经过下面几步判断,如果条件都满足才进行处理:

  • 通过Opcode判断到该数据包是当前设备model使用的
  • 目的地址满足下面其中一条:

    • 目的地址是当前设备的单播地址
    • 目的地址是当前设备订阅的组地址或者虚拟地址
    • 目的地址是0xffff之类的特定地址
  • 该消息用来加密的appkey或者devkey是当前model已经绑定了的

无需ack的数据包

  蓝牙Mesh可以制定消息是否需要回复,例如像一个群组发送应用消息,很多时候会使用noack的数据包,这样可以避免群组内多个设备同时回复造成的网络风暴。 但是这样也有一个概率性丢包的问题,因为发送方不知道接收方到底有没有收到这条消息。 所以noack的消息更适合一些不太重要场景的群组控制。

需要ack的数据包

  蓝牙mesh中大部分的数据都是需要ack的,如果发送方在一定的时间内没有收到接收方的ack,发送方可以进行重发,来保证数据包的必达。 但是对于节点内比较多的网络, 最好不是在全组群发需要ack的数据包,应该首先确定有哪些设备需要发送,然后针对这些设备来进行群控,而不是一股脑的全控。

发布和订阅

  节点里每个model都可以订阅一个或多个地址,地址可以是群组地址或者虚拟地址。 发送方向这个订阅地址发送的消息,会被订阅这个地址的设备接收到。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
12月前
|
存储 网络协议 物联网
LoRA转4G网关DLS11低功耗数据转发器工作原理
DLS11 是为 VS系列振弦采集仪研发的内置电池以及 LoRA、LTE(4G)无线的低功耗数据转发器。利用“实时在线”的 LoRA 收发器收集其它 LoRA 设备发送的数据并存储,定时启动将这些 存储的数据重新打包为标准的数据包经由 LTE 网络发送致远端服务器,数据发送方式有短信、TCP、邮件、FTP 等。DLS11 实 现了 VS振弦采集仪设备的现场组网,使用一张 SIM 卡即可实现多台 VS振弦采集仪设备的数据远传功能。
|
12月前
|
存储 网络协议 物联网
LoRA转4G网关DLS11低功耗数据转发器工作流程
DLS11 是为 VS系列振弦采集仪研发的内置电池以及 LoRA、LTE(4G)无线的低功耗数据转发器。利用“实时在线”的 LoRA 收发器收集其它 LoRA 设备发送的数据并存储,定时启动将这些 存储的数据重新打包为标准的数据包经由 LTE 网络发送致远端服务器,数据发送方式有短信、TCP、邮件、FTP 等。DLS11 实 现了 VS振弦采集仪设备的现场组网,使用一张 SIM 卡即可实现多台 VS振弦采集仪设备的数据远传功能。
|
缓存 物联网 数据安全/隐私保护
【蓝牙mesh】Network协议层介绍
Network层是蓝牙Mesh协议栈中中,按照协议栈层级仅次于网络承载层的,是对整个蓝牙MeshMesh网络中非常重要的一个协议层。Network层会使用netkey对数据包进行单独的加解密和认证,为mesh网络的数据安全提供有力的保障。
141 0
【蓝牙mesh】Network协议层介绍
|
传感器 物联网 数据安全/隐私保护
【蓝牙mesh】Bearer层(承载层)介绍
蓝牙Mesh Bearer层分为广播Bearer层和Gatt bearer层,一个节点设备可以支持至少其中的一个,也可以都支持。一般情况下,子设备节点如果不是低功耗设备,两个层都会支持的。在蓝牙Mesh网络中,Bearer层还提供了许多其他的功能,例如数据加密、数据压缩、数据分段等等。这些功能都是为了提高数据传输的效率和安全性。总的来说,Bearer层是蓝牙Mesh网络中非常重要的一层,它提供了数据传输的基础支持,使整个网络能够顺畅地运行。
137 0
【蓝牙mesh】Bearer层(承载层)介绍
|
物联网 数据安全/隐私保护
【蓝牙mesh】Lower协议层介绍
蓝牙Mesh中的Lower层主要的功能就是对网络数据包进行分片和组包,是位于Upper层和Network层之间,对蓝牙Mesh的分层加密起着非常重要的作用。
146 0
【蓝牙mesh】Lower协议层介绍
|
存储 缓存 安全
【蓝牙mesh】Upper协议层介绍
Control数据主要是用在Mesh设备的Friend特性,通过Friend特性和低功耗LowPower节点之间建立联系。Control数据就是下面的这几条命令,除此之外Upper层的所有数据都是Access数据。Friend节点与LowPower节点建立关系的流程如下:要建立 Friendship关系,首先LowPower节点向空中发送 Friend Request 请求(地址类型是 all-friend)
110 0
【蓝牙mesh】Upper协议层介绍
EMQ
|
网络协议 中间件 物联网
QUIC 多流桥接、新增 DDS 协议转换代理
即将发布的超轻量 MQTT Broker NanoMQ 0.16为用户提供了2个重要新功能:MQTT over QUIC的多流桥接和DDS协议转换代理,拓宽了其弱网桥接传输性能和在边缘端的使用场景。
EMQ
266 0
QUIC 多流桥接、新增 DDS 协议转换代理
|
移动开发 芯片 内存技术
经典蓝牙架构分层及协议总览
经典蓝牙架构分层及协议总览
1211 0
|
编解码 语音技术
【经典蓝牙】 蓝牙HFP层协议分析
HFP(Hands-Free Profile), 是蓝牙免提协议, 可以让蓝牙设备对对端蓝牙设备的通话进行控制,例如蓝牙耳机控制手机通话的接听、 挂断、 拒接、 语音拨号等。HFP中蓝牙两端的数据交互是通过定义好的AT指令来通讯的
1527 0
【经典蓝牙】 蓝牙HFP层协议分析