【蓝牙mesh】Lower协议层介绍

news2024/11/14 5:27:05

【蓝牙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.coloradmin.cn/o/372572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

buu [GWCTF 2019]BabyRSA 1

题目描述: import hashlib import sympy from Crypto.Util.number import *flag GWHT{******} secret ******assert(len(flag) 38)half len(flag) / 2flag1 flag[:half] flag2 flag[half:]secret_num getPrime(1024) * bytes_to_long(secret)p sympy.nextp…

【MySQL】事务隔离级别是怎么实现的?

事务隔离级别是怎么实现的? 四种隔离级别具体的实现方式 对于「读未提交」:直接读取最新的数据就好。对于「串行化」:通过加读写锁的方式来避免并行访问。对于「读提交」和「可重复读」:通过 Read View 来实现,主要区…

JS学习第4天——事件高级(注册/删除事件、DOM事件流、阻止事件冒泡、事件委托、常用的鼠标/键盘事件)

目录一、注册事件 / 删除事件1、注册事件(绑定事件)2、删除事件(解绑事件)二、DOM事件流三、事件对象event1、事件对象的兼容性2、e.targent和this的区别3、事件对象常见的属性和方法四、阻止事件冒泡五、事件委托(代理…

数据采集与预处理学习

文章目录要求题解要求 根据表格求出哪两个演员合作电影数最多,及合作的电影数。 题解 from openpyxl import load_workbookwb load_workbook("电影导演演员信息表.xlsx") ws wb.worksheets[0]actors_films dict() for i, row in enumerate(ws.rows):i…

CAN总线开发一本全(4) - FlexCAN的驱动程序

CAN总线开发一本全(4) - FlexCAN的驱动程序 苏勇,2023年2月 文章目录CAN总线开发一本全(4) - FlexCAN的驱动程序引言从MindSDK获取FlexCAN驱动程序数据结构配置通信引擎的结构体类型访问MB的结构体类型配置ID过滤器的…

1 机器学习基础

1 机器学习概述 1.1 数据驱动的问题求解 大数据-Big Data 大数据的多面性 1.2 数据分析 机器学习:海量的数据,获取有用的信息 专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之…

Python多进程编程

一 多进程编程 Python实现多进程的方式有两种:一种方法是os模块中的fork方法,另一种是使用multiprocessing模块。 前者仅适用于LINUX/UNIX操作系统,对Windows不支持,后者则是跨平台的实现方式。 第一种方式:使用os模…

【C++修行之路】STL——模拟实现string类

文章目录前言类框架构造与析构c_str迭代器操作符重载[]&#xff1a;&#xff1a;> > < < !:reverse与resizereverseresizepush_back与append复用实现insert和erasec_str与流插入、流提取eraseswap(s1,s2)与s1.swap(s2)结语前言 这次我们分几个部分来实现string类…

spark第一章:环境安装

系列文章目录 spark第一章&#xff1a;环境安装 文章目录系列文章目录前言一、文件准备1.文件上传2.文件解压3.修改配置4.启动环境二、历史服务器1.修改配置2.启动历史服务器总结前言 spark在大数据环境的重要程度就不必细说了&#xff0c;直接开始吧。 一、文件准备 1.文件…

React Use Hook 尝鲜

React Use Hook 尝鲜 最近继续在找处理 React 异步调用的方式……主要是现在需求比较复杂&#xff0c;用 cache query 的方式去实现有那么一丢丢的麻烦&#xff0c;又不是很想用额外的包&#xff0c;所以就想看看有没有比较好的一些处理方式。 当然&#xff0c;可以用到生产环…

tkinter界面的TCP通信/tkinter开启线程接收TCP

前言 用简洁的语言写一个可以与TCP客户端实时通信的界面。之前做了一个项目是要与PLC进行信息交互的界面&#xff0c;在测试的时候就利用TCP客户端来实验&#xff0c;文末会附上TCP客户端。本文分为三部分&#xff0c;第一部分是在界面向TCP发送数据&#xff0c;第二部分是接收…

Linux基础命令-dd拷贝、转换文件

文章目录 dd 命令介绍 语法格式 基本参数 参考实例 1&#xff09;生成一个200M的新文件 2&#xff09;拷贝文件的100个字节 3&#xff09;将文件的字母全部转换成大写 4&#xff09;将linux自带的光盘制作成iso格式的镜像文件 5&#xff09;使用dd命令制作1G的交换分…

软考中级-操作系统

1 操作系统地位计算机系统由硬件和软件组成&#xff0c;未配置软件的称为裸机&#xff0c;但这会导致效率低下。操作系统是为弥补用户与硬件之间的鸿沟的一种系统软件&#xff0c;汇编、编译、解释、数据库管理系统等系统软件和其他应用软件都在此基础。2 进程管理又称处理机管…

Linux Ubuntu配置国内源

因为众所周知的原因&#xff0c;国外的很多网站在国内是访问不了或者访问极慢的&#xff0c;这其中就包括了Ubuntu的官方源。 所以&#xff0c;想要流畅的使用apt安装应用&#xff0c;就需要配置国内源的镜像。 市面上Ubuntu的国内镜像源非常多&#xff0c;比较有代表性的有清华…

pytorch学习日记之激活函数

常用的激活函数为S型&#xff08;sigmoid&#xff09;激活函数、双曲正切&#xff08;Tanh&#xff09;激活函数、线性修正单元&#xff08;ReLU&#xff09;激活函数等&#xff0c;对应Pytorch的函数如下所示 层对应的种类功能torch.nn.SigmoidSigmoid激活函数torch.nn.TanhT…

_vue-3

Vue3有了解过吗&#xff1f;能说说跟vue2的区别吗&#xff1f; 1. 哪些变化 从上图中&#xff0c;我们可以概览Vue3的新特性&#xff0c;如下&#xff1a; 速度更快体积减少更易维护更接近原生更易使用 1.1 速度更快 vue3相比vue2 重写了虚拟Dom实现编译模板的优化更高效的…

数据挖掘概述

目录1、数据挖掘概述2、数据挖掘常用库3、模型介绍3.1 分类3.2 聚类3.3 回归3.4 关联3.5 模型集成4、模型评估ROC 曲线5、模型应用1、数据挖掘概述 数据挖掘&#xff1a;寻找数据中隐含的知识并用于产生商业价值 数据挖掘产生原因&#xff1a;海量数据、维度众多、问题复杂 数…

直接拿项目运行npm start 会出现’react-scripts’ 不是内部或外部命令,也不是可运行的程序或批处理文件错误

目录 解决方案 原因 解决方案 npm install react-scripts或npm install安装完成后再次运行 npm start 即可 原因 create-react-app有丢包的缺陷&#xff0c;手动安装包后&#xff0c;需要重新npm install一下&#xff0c;这样node_modules/.bin/目录下才会重新出现react-s…

【论文阅读】基于LevelDB的分布式数据库研究

基于LevelDB的分布式数据库研究 基于LevelDB的分布式数据库的研究与实现 - 中国知网 (cnki.net) 实现了什么&#xff1f; 基于键值型NoSQL数据库LevelDB&#xff0c;并与数据一致性算法Raft、 数据分片和负载均衡相结合&#xff0c;设计并实现基于LevelDB的分布式数据库。 主要…

Wireshark “偷窥”浏览器与服务器三次握手

本文使用的是Wireshark 4.0.3, Java 11 编写简易服务器&#xff0c;客户端使用Chrome浏览器移动端开发或是前、后端开发又或是高大上的云计算都脱离不了网络&#xff0c;离开了网络的计算机就是一个孤岛&#xff0c;快速上手开发、背面试八股文固然有些急功近利&#xff0c;但确…