当前位置: 首页 > news >正文

【蓝牙mesh】Lower协议层介绍

【蓝牙mesh】Lower协议层介绍

Lower层简介

在这里插入图片描述

   Lower协议层用于处理网络层以下的功能,包括节点的广播、重传、路由和网络拓扑等,是实现蓝牙mesh网络的关键协议之一。其中Lower协议层中最主要的一部分工作就是mesh数据的分片和组包。
Lower层是将Upper层发过来的数据,进行封装并传递给下层,当Upper层数据较长时,Lower层会对数据进行分片处理,发送给下层。同样的,当接收到来自下层的数据包后,Lower层会解析并判断数据,如果数据是分片的,Lower层会对数据进行组包,组包完成后,将其发送给Upper层。

Lower层数据包

蓝牙mesh Lower层的数据包根据CTL标志位和SEG标志位的不同,分为四种数据类型,分别为不分包的Access数据包、分包的Access数据包、 不分包的Control数据包和分包的Control数据包。

在这里插入图片描述

下面分别对四种数据包进行介绍。

不分包的Access数据包

数据包格式如下图:
在这里插入图片描述

下面分别介绍下每个字段的含义:
SEG: 表示数据包是否是分包数据, 不分包的数据该字段为0
AKF:表示数据包应用层加解密是使用appkey还是devkey。 0:devkey 1: appkey
AID: 表示appkey的ID,该字段只有AKF为1时才生效,否则该字段为0.
Upper Transport Access PDU: 这个就是应用层真正的数据。

分包的Access数据包

在这里插入图片描述

下面分别介绍下每个字段的含义:
SEG: 表示数据包是否是分包数据,分包的数据该标志位为1
AKF:表示数据包应用层加解密是使用appkey还是devkey。 0:devkey 1: appkey
AID: 表示appkey的ID,该字段只有AKF为1时才生效,否则该字段为0.
SZMIC:表示消息认证码的长度
SeqZero: SEQ的低13位,是在Upper层进行设置的
SegO: 表示当前分包的包数,数值是从0开始的
SegN: 表示最后一包的包数
Upper Transport Access PDU: 这个就是应用层真正的数据。
Segment m : 表示分包的数据, 字节长度1-12个字节,数据包分包长度每包为12个字节(除了最后一包)。

分包数据中的每包中,AKF, AID, SZMIC, SeqZero, and SegN这些字段的数值都是一样的。

不分包的Control数据包

在这里插入图片描述

下面分别介绍下每个字段的含义:
SEG: 表示数据包是否是分包数据,不分包的数据该标志位为0
Opcode: 0x00:表示回复数据, 0x01 - 0x7F表示Control数据的Opcode,具体的Control数据我们上个章节有讲到。
Parameters:表示Control数据的具体数据包。长度为0-11个字节

上面说了Opcode为0表示是回复数据,下面我们看下Control的回复数据包格式是怎样的?

Control回复数据包

在这里插入图片描述

下面分别介绍下每个字段的含义:
SEG: 表示数据包是否是分包数据,不分包的数据该标志位为0
Opcode: 该字段为0,表示回复数据
OBO: 表示该数据包是否是Friend节点与低功耗节点交互的数据。 如果是则为1, 否则为0。
SeqZero: 该数值表示Seq,是上层Upper层决定的数据。
BlockAck:表示接收到了多少包分包的数据,每包使用一个bit表示。

分包的Control数据

在这里插入图片描述

下面分别介绍下每个字段的含义:
SEG: 表示数据包是否是分包数据,不分包的数据该标志位为1
Opcode: 数值0x01 - 0x7f
RFU: 保留位
SeqZero: 表示Seq的最低13bit,有Upper层决定。
SegO: 当前的分包值,数值从0开始计算
SegN: 最后一包的分包值
Segment m: 分包数据,长度为1-8个字节

每个分包的Control数据的 Opcode, SeqZero, and SegN这几个字段的数值是相同的。

分片与组包

Lower层的一个非常重要的功能就是对数据进行分片和组包。当Upper层的数据超过15个字节后,就需要在Lower层对数据进行分片。

下面这个图片很好的表示了数据的在每一层上的格式和封装,大家可以仔细分析下这张图

在这里插入图片描述

Access层的数据进入到Upper层之后, 会使用appkey对Access的数据进行加密,生成密文Access PDU 和消息认证码TransMIC, 当Upper层的数据超过15个字节后,就会在Lower层对数据进行分包处理。数据分包的格式我们前面已经介绍过了,分包之后会传递到下层的network层,使用netkey进行网络层加密,这个我们下一章节会再细讲。

总结

   蓝牙Mesh中的Lower层主要的功能就是对网络数据包进行分片和组包,是位于Upper层和Network层之间,对蓝牙Mesh的分层加密起着非常重要的作用。

http://www.lryc.cn/news/20709.html

相关文章:

  • Java-重排序,happens-before 和 as-if-serial 语义
  • Nginx安装及介绍
  • 【华为OD机试模拟题】用 C++ 实现 - 寻找路径 or 数组二叉树(2023.Q1)
  • LINUX学习记录
  • 华为OD机试用Python实现 -【狼羊过河 or 羊、狼、农夫过河】(2023-Q1 新题)
  • 【SAP Abap】X-DOC:SAP ABAP 语法更新之Open SQL
  • leetcode 困难 —— 数组中的逆序对(分治法)
  • 02.24:图片的风格转换
  • [SSD综述 1.3] SSD及固态存储技术半个世纪发展史
  • PAT 1023 组个最小数(分数20)题目有bug
  • QML 中的 5 大布局
  • 使用Python进行数据分析——线性回归分析
  • 我眼中的柔宇科技
  • Allegro如何快速把视图居中显示操作指导
  • 搜索相关功能
  • 【从零开始制作 bt 下载器】一、了解 torrent 文件
  • SystemVerilog-时序逻辑建模(5)多个时钟和时钟域交叉
  • 基本中型网络的仿真(RYU+Mininet的SDN架构)-以校园为例
  • 西北工业大学大学物理(II)期末试题选填解析2021-2022
  • 【USB】windows热插拔通知接口分析
  • CMake入门
  • python中一种编写config文件并及时更新的方法
  • 基于Windows下离线安装当前最新Arduino ESP32 SDK(2.0.7)固件开发包
  • Android 9.0 app添加校验锁(输入密码才能进入app)
  • 注意力机制详解系列(二):通道注意力机制
  • 动态规划-规划兼职工作
  • Redis学习笔记(二)Redis基础(基于5.0.5版本)
  • Ancaonda常用cmd命令总结
  • yolov5_reid【附代码,行人重识别,可做跨视频人员检测】
  • 多模态预训练模型综述