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

【蓝牙mesh】Upper协议层介绍

【蓝牙mesh】Upper协议层介绍

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层是网络层和应用层中非常重要的一部分。

相关文章:

【蓝牙mesh】Upper协议层介绍

【蓝牙mesh】Upper协议层介绍 Upper层简介 Upper协议层用于处理网络层以上的功能,包括设备的应用层数据、安全、群组等信息,是实现蓝牙mesh应用功能的关键协议之一。Upper层接收来自Access层的数据或者是Upper层自己生成的Control数据,并且将…...

NEXUS 6P刷机安装Edxposed

刷机 abd等工具下载: https://developer.android.com/studio/releases/platform-tools?hlzh-cn 下载后配置环境变量 镜像下载: https://developers.google.com/android/images?hlzh-cn#angler Magisk下载 GitHub - topjohnwu/Magisk: The Magic M…...

web、ES、vue等知识总结

1:Vue2和vue3的区别: 一个、两个2:Vue3.x为什么要用Proxy来代替Object.defineProperty?3:Proxy4:一些知识点的原理全面5:vue3中加入eslint和prettier6:详解vue中的diff算法7:响应式布局的常用解决方案对比…...

数据库第一章(王珊课后习题)

文章目录1.试述数据、数据库、数据库管理系统、数据库系统的概念2.使用数据库系统有什么好处?3.试述文件系统与数据库系统的区别和联系。4.试述数据库系统的特点5.数据库管理系统的主要功能有哪些?6.什么是概念模型?试叙述概念模型的作用7.解释实体、实…...

设计模式(十一)----结构型模式之装饰者模式

1、概述 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。 使用继承的方式存在的问题&…...

lighthouse的介绍和基本使用方法

Lighthouse简介 Lighthouse是一个开源的自动化性能测试工具,我们可以使用该功能检测我们的页面存在那些性能方面的问题,并会生成一个详细的性能报告来帮助我们来优化页面 使用方式 LH一共有四种使用方式 Chrome开发者工具Chrome扩展Node 命令行Node …...

分布式算法 - Raft算法

Paxos是出了名的难懂,而Raft正是为了探索一种更易于理解的一致性算法而产生的。它的首要设计目的就是易于理解,所以在选主的冲突处理等方式上它都选择了非常简单明了的解决方案。推荐阅读提示强烈推荐通过如下资料学习raft。 raft.github.io这里面有一个…...

Python|每日一练|链表|双指针|数组|递归|图算法|单选记录:删除链表的倒数第 N 个结点|下一个排列|迷宫问题

1、删除链表的倒数第 N 个结点(链表,双指针) 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head …...

天线理论知识2——宽带天线介绍

系列文章目录 文章目录 系列文章目录前言一、行波天线1. 长导线天线2. V形天线二、螺旋天线三、八木-宇田天线前言 宽带天线指的是具有哦宽频带特性的天线,常见的宽带天线有行波天线,螺旋天线以及八木天线。 一、行波天线 长度为 l l l的中心馈电的线天线上的电流呈驻波分…...

【计组笔记05】计算机组成与原理之虚拟存储器、指令系统、中央处理器CPU

这篇文章,主要介绍计算机组成与原理之虚拟存储器、指令系统、中央处理器CPU。 目录 一、虚拟存储器 1.1、页式虚拟存储器 1.2、段式虚拟存储器 1...

多功能土壤速测仪功能介绍

大家好,今天给大家介绍一款多功能土壤速测仪,它由多功能速测仪主机、土壤墒情传感器、USB数据线、电源适配器、便携式手提箱等部分组成。速测主机配备有工业级液晶屏,大屏幕中文显示,使得测量参数,时间,设备…...

《设计模式》命令模式

《设计模式》命令模式 命令模式(Command Pattern)是一种行为型设计模式,它将请求和处理分开,使得请求发送者和接收者解耦,从而降低系统的耦合度。在命令模式中,请求被封装为一个独立的对象,并且…...

开源物联网平台有哪些?

目前市面上有许多开源物联网平台可供选择。以下是其中一些较为流行和知名的平台: Eclipse IoT:Eclipse IoT 是一个开源的物联网平台,旨在提供可扩展、灵活和高度集成的工具和框架,用于构建、部署和管理 IoT 解决方案。它包含多个…...

Tesla Autopilot,处理器和硬件

作者 | 初光 出品 | 车端 备注 | 转载请阅读文中版权声明 知圈 | 进“汽车电子与AutoSAR开发”群,请加微“cloud2sunshine” 总目录链接>> AutoSAR入门和实战系列总目录 Tesla MOdelS/X 中有 60 多个处理器。其他型号的处理器较少,但数量仍然不少…...

jianzhiOffer第二版难重点记录

04. 二维数组中的查找https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 思路:可以每层用以恶搞二分查找,优化思路:从左下角出发直接用二分。 ​​​​​​07. 重建二叉树https://leetcode.cn/problems/zhong-jian-er-cha…...

C语言 | 问题20230225

C语言 | 问题20230225 文章目录C语言 | 问题202302251.问题1无限循环2.问题2C 中的运算符优先级实例1:1.问题1 Which slice of the following code is NOT endless loop? 以下代码的哪一部分不是无限循环? A for (;(cgetchar())!\n; ) printf("*c&…...

【机器学习笔记】Python基础笔记

目录基础语法加载数据:pd.read_csv查看数据大小:shape浏览数据行字段:columns浏览少量数据:head()浏览数据概要:describe()基础功能语法缺省值去除缺失值:dropna按行删除:存在空值,即…...

js-DOM03-DOM对CSS的操作

DOM对CSS的操作 - 读取和修改内联样式 - 使用style属性来操作元素的内联样式 - 读取内联样式: 语法:元素.style.样式名 - 例子: 元素.style.width 元素.style.…...

tun驱动之tun_init

tun驱动的初始化方法是tun_init。 static int __init tun_init(void) {int ret 0;pr_info("%s, %s\n", DRV_DESCRIPTION, DRV_VERSION);ret rtnl_link_register(&tun_link_ops);if (ret) {pr_err("Cant register link_ops\n");goto err_linkops;}re…...

模拟退火算法优化bp

%% 基于模拟退火遗传算法优化BP神经网络的钢带厚度预测 clear clc close all format short %% 加载训练数据 Xtrxlsread(train_data.xlsx); DDsize(Xtr,2); input_trainXtr(:,1:DD-1);% output_trainXtr(:,DD);% %% 加载测试数据 Xtexlsread(test_data.xlsx); input_testXte(…...

【NFC音乐相册】简易制作

欢迎来到 Claffic 的博客 💞💞💞 前言: NFC音乐相册在前段时间火了一把,想必大家都听过了,最近我刷到了这个东西,闲来无事就弄了几个,这篇博客就记录下制作工序。 注:我所…...

每日一题——L1-085 试试手气(15)

L1-085 试试手气 我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态,即它们朝上一面的点数,让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙,每次摇出的结果都满足以下两个条件:…...

FreeRTOS信号量

前面介绍过,队列(queue)可以用于传输数据:在任务之间,任务和中断之间。消息队列用于传输多个数据,但是有时候我们只需要传递一个状态,这个状态值需要用一个数值表示,比如&#xff1a…...

Leetcode.2385 感染二叉树需要的总时间

题目链接 Leetcode.2385 感染二叉树需要的总时间 Rating : 1711 题目描述 给你一棵二叉树的根节点 root,二叉树中节点的值 互不相同 。另给你一个整数 start。在第 0分钟,感染 将会从值为 start的节点开始爆发。 每分钟,如果节点…...

[蓝桥杯 2022 国 B] 卡牌(贪心/二分)

题目传送门 该题第一思路是想去模拟题目中所描述的过程 这里我选择从大到小遍历可能凑出的牌套数&#xff0c;计算凑出它需要补的牌数以及判断是否会超出能补的牌数 #include<iostream> #include<climits> #include<vector> #include<algorithm> #def…...

1301:大盗阿福

经典的dp打家劫舍问题状态设计dp[i][0]&#xff1a;在前i个店铺中选&#xff0c;且不选第i家的最大和dp[i][1]&#xff1a;在前i个店铺中选&#xff0c;且选第i家的最大和状态转移dp[i][0] max(dp[i-1][1], dp[i-1][0];第i家店不选&#xff0c;那么我们可以选第i-1个店 也可以…...

Netty——序列化的作用及自定义协议

序列化的作用及自定义协议序列化的重要性大小对比效率对比自定义协议序列化数据结构自定义编码器自定义解码器安全性验证NettyClientNettyServerNettyClientTestHandlerNettyServerTestHandler结果上一章已经说了怎么解决沾包和拆包的问题&#xff0c;但是这样离一个成熟的通信…...

一起Talk Android吧(第五百零五回:如何调整组件在约束布局中的大小)

文章目录 背景介绍调整方法各位看官们大家好,上一回中咱们说的例子是"如何调整组件在约束布局中的位置",这一回中咱们说的例子是" 如何调整组件在约束布局中的大小"。闲话休提,言归正转, 让我们一起Talk Android吧! 背景介绍 在使用约束(constraintl…...

【数据库】数据库的完整性

第五章 数据库完整性 数据库完整性 数据库的完整性是指数据的正确性和相容性 数据的正确性是指数据是符合现实世界语义&#xff0c;反映当前实际状况的数据的相容性是指数据库的同一对象在不同的关系中的数据是符合逻辑的 关系模型中有三类完整性约束&#xff1a;实体完整性…...

基因净化车间装修设计方案SICOLAB

基因净化车间的设计方案应该根据实际需求进行定制&#xff0c;以下是一些规划建设要点和洁净设计要注意的事项&#xff1a;一、净化车间规划建设要点&#xff1a;&#xff08;1&#xff09;基因车间的面积应该根据实验项目的规模进行规划&#xff0c;包括充足的操作区域和足够的…...