【蓝牙mesh】Upper协议层介绍

news2024/9/28 5:32:11

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/371426.html

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

相关文章

typing库

typing 库 引入 在日常代码编写中,由于python语言特性,不用像go等编译性语言一样,在定义函数时就规范参数和放回值的类型。 def demo(a, b):return "ab" 此时 a 和 b 可以传入任意类型参数毫无疑问,这一特性&#…

漏洞分析: WSO2 API Manager 任意文件上传、远程代码执行漏洞

漏洞描述 某些WSO2产品允许不受限制地上传文件,从而执行远程代码。以WSO2 API Manager 为例,它是一个完全开源的 API 管理平台。它支持API设计,API发布,生命周期管理,应用程序开发,API安全性,速…

【RockerMQ】001-RockerMQ 概述

【RockerMQ】001-RockerMQ 概述 文章目录【RockerMQ】001-RockerMQ 概述一、MQ 概述1、MQ 简介2、MQ 用途限流削峰异步解耦数据收集3、常见 MQ 产品概述对比4、MQ 常见协议二、RocketMQ 概述1、简介2、发展历史一、MQ 概述 1、MQ 简介 MQ,Message Queue&#xff0…

C++设计模式(22)——状态模式

亦称: State 意图 状态模式是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。 问题 状态模式与有限状态机 的概念紧密相关。 有限状态机。 其主要思想是程序在任意时刻仅可处…

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

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

中创公益|中创算力荣获“2022年度突出贡献爱心企业”

公益是什么?不啻微芒造炬成阳萤火虽微愿为其芒公益是持之以恒的努力,中创于2021年1月成立,同年4月中创就开始了公益活动,并对尖山村贫困儿童进行定期捐助。截至2023年,中创先后7次来到被捐助的贫困儿童家中&#xff0c…

【Git】IDEA整合Git详细步骤 — IDEA如何配置Git忽略文件

目录 一、IDEA整合Git 定位 Git 程序 —》IDEA配置Git程序 初始化本地库—》在idea中初始化项目,将项目纳入git管理 添加到暂存区 提交到本地库 方法一: 右键点击项目---> Git ----> Commit Directory 方法二: 点击绿色图标 √ 切换版本 创建分支 切换分…

chatgpt的原理 第一部分

前言 这两天,ChatGPT模型真可谓称得上是狂拽酷炫D炸天的存在了。一度登上了CSDN热搜,这对科技类话题是非常难的存在。不光是做人工智能、机器学习的人关注,而是大量的各行各业从业人员都来关注这个模型,真可谓空前盛世。 我赶紧把…

无人驾驶路径规划论文简要

A Review of Motion Planning Techniques for Automated Vehicles综述和分类0Motion Planning for Autonomous Driving with a Conformal Spatiotemporal Lattice从unstructured环境向structured环境的拓展,同时还从state lattice拓展到了spatiotemporal lattice从而…

【数据结构】双向链表的接口实现(附图解和源码)

双向链表的接口实现(附图解和源码) 文章目录双向链表的接口实现(附图解和源码)前言一、定义结构体二、接口实现(附图解源码)1.初始化双向链表2.开辟新空间3.尾插数据4.尾删数据5.打印双向链表中数据6.头插数…

含分布式电源的配电网日前两阶段优化调度模型(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…

吃瓜教程笔记—Task04

神经网络 知识点 M-P神经元 模型如图所示:  神经元的工作机理:神经元接收来到n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过…

Tesla Autopilot,处理器和硬件

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

Nginx 全局变量

变量说明$host 域名部分 www.baidu.com/1.php?a1&b2 $document_uri 当前请求中不包含参数的uri www.baidu.com/1.php?a1&b2 $uri和 $document_uri 一样$args 请求中的参数。 www.baidu.com/1.php?a1&b2 $args是a1&b2 $request_uri 请求的URI。 www.baidu.co…

K8S常用命令速查手册

K8S常用命令速查手册一. K8S日常维护常用命令1.1 查看kubectl版本1.2 启动kubelet1.3 master节点执行查看所有的work-node节点列表1.4 查看所有的pod1.5 检查kubelet运行状态排查问题1.6 诊断某pod故障1.7 诊断kubelet故障方式一1.8 诊断kubelet故障方式二二. 端口策略相关2.1 …

UVM仿真环境搭建

环境 本实验使用环境为: Win10平台下的Modelsim SE-64 2019.2 代码 dut代码: module dut(clk,rst_n, rxd,rx_dv,txd,tx_en); input clk; input rst_n; input[7:0] rxd; input rx_dv; output [7:0] txd; output tx_en;reg[7:0] txd; reg tx_en;always…

洛谷P5737 【深基7.例3】闰年展示 C语言/C++

【深基7.例3】闰年展示 题目描述 输入 x,yx,yx,y,输出 [x,y][x,y][x,y] 区间中闰年个数,并在下一行输出所有闰年年份数字,使用空格隔开。 输入格式 输入两个正整数 x,yx,yx,y,以空格隔开。 输出格式 第一行输出一个正整数&a…

路漫漫:网络空间的监管趋势

网络空间是“以相互依存的网络基础设施为基本架构,以代码、信息与数据的流动为环境,人类利用信息通讯技术与应用开展活动,并与其他空间高度融合与互动的空间”。随着信息化技术的发展,网络空间日益演绎成为与现实人类生存空间并存…

Spring Cloud @RefreshScope 原理分析:代理类调用流程

背景 本文类分析 SpringCloud 的 RefreshScope 注解的 refresh 类型下,获取实例的过程。关键技术点: 扫描过程中对 RefreshScope 注解做了特殊处理,会额外注册两个BeanDefinition。GenericScope 实现了 BeanDefinitionRegistryPostProcesso…

[JVM]JVM内存模型,类加载过程,双亲委派模型

文章目录1. JDK,JRE,JVM分别是什么,它们之间有什么联系?2. JVM内存区域划分3. JVM类加载过程4. 一个经典面试题5. JVM 双亲委派模型1. JDK,JRE,JVM分别是什么,它们之间有什么联系? JDK: 是Java开发工具包,包含了编写&…