BLE蓝牙笔记----数据包解析

2023-11-10

本文是参考一些博文和书籍做的笔记,如有不适联系删除

参考:https://www.cnblogs.com/iini/p/8977806.html

 《BLE4.0 低功耗蓝牙 协议 总结 

目录

1、广播包

1.1、PDU Type

 1.2、MAC地址 

2、数据包

2.1、LLID

2.1.1、LL Data PDU

2.1.2、LL Control PDU

2.2、NESN/SN 重传校验机制

2.3、MD 多包发送机制

2.4、Payload Length 有效净荷长度

2.5、L2CAP length  MTU

2.6、L2CAP Channel ID 

2.7、Security Manager Protocol(SMP)

3.8Attribute Protocol(ATT)


1、广播包



1.1、PDU Type


具体定义如下。可以看出扫描PDU和发起连接PDU都属于广播包


 1.2、MAC地址 


  • TxAdd/RxAdd,各占1bit,表示随后的Device Address字段代表的蓝牙MAC地址类型,值0代表Public地址值1代表Random地址

然而这个标记指定放在哪的地址是随机地址还是公共地址呢?在报文类型命令中对应的净荷带有 6bytes 地址, 这些地址就紧跟在长度的后面,这些标志位就是标示这些地址类型的

 

净荷长度:这个长度是指在 PDU 中的数据除去报头和长度之外的有效净荷数据的长度, 注意的是这里只用到了 6bit 的长度,也就是说最大只能有 64 个字节长度,够了吗?实际上在表 2-2 中 净 荷 数 据 上 面 就 标 明 了 净 荷 的 长 度 最 大296bits=37Bytes,也就是说在整个数据包中,在链路层真正的有效数据最大是 37 个字节, 所以需要用也只需要 6bits 长度。再看图 2-10 可知实际的有效数据变为了最多 37-6=31 字节


2、数据包


 

 

在数据报文中有 Message Integrity Check (MIC)信息完整性检测。为了保证数据的正确性, 它占有 32bit 即 4 个字节, 这涉及到加密操作, 它是用虚线表示的,也就是不一定要有, 因为并不是一定要加密才能工作, 例如 MIC 在某些情况是不需要 MIC 的:

  1. 没有加密的链路层连接
  2. 有加密的链路连接,但是发送的是空包,也就是有效 PDU 是为空的包。

注意: 这里的有效净荷数据长度最大只有 216bits 了, 也就是 27个字节,加上 MIC 的 4 个字节,也才 31 字节,那么还有 6 字节去哪了? 实际上协议规范就是这么规定的,在广播通道这 6 个字节是设备地址,在数据通道规定最大的净荷包不能超过 27 个字节。 不管有没有 MIC 净荷只能是最多 27 字节 (针对ble4.0 的解释


2.1、LLID


link layer ID,对LL PDU进行分类:LL data PDULL control PDU。也就是说,普通的数据信道空中包包含LL数据包和LL控制包两种,

2.1.1、LL Data PDU

链路层的数据通道是用来发送 L2CAP 的数据,也就是说只要是数据一定是从 HOST 层发送到下层的。而数据 PDU 的标示就是 LLID 为01b 或者 10b。

(1)LLID=01b 这个数据要么是将 L2CAP 层的数据分解成多包发送的连续包,或者是一个空包。 对于空包, 数据 PDU 报头的长度域是需要设置成 00000b, 而空包可被从机应答任何数据通道包。 图 2-65 为空中采集的空包。

(2)LLID=10b 那么这包数据表示一个 L2CAP 层信息的起始包,当然如果 L2CAP 层的数据可以用链路层的一包数据发送完毕,即不需要分解成多个包发送,也是 10b 标示,相当于起始包一包就能将数据发送完毕。 对于这个 LLID,数据 PDU 报头是的长度域是不能为 00000b 的。

2.1.2、LL Control PDU

对于链路层的控制, LLID=11b。 它的有效数据段还分为了两个区域


2.2、NESN/SN 重传校验机制


NESN和SN各占1bit。SN全称为sequence number,表示当前发送的packet编号。NESN,next expected sequence number,用来告知对方下一个期待的packet的编号。Link layer使用SN来告知对方这个packet是新数据包还是重传包,用NESN来告诉对方你之前发我的包已经收到了(相当于ACK的作用),我现在期待下一个新的数据包了,因此BLE没有专门的ACK包,它是通过NESN/SN来实现ACK和重传双重功能的。请参考如下表格,仔细揣摩NESN和SN是如何编码的,以同时完成ACK和重传功能。


2.3、MD 多包发送机制


more data,用来指示对方我还有数据包要传,请继续打开射频窗口准备接收。比如Nordic nRF51822一个connection interval可以发6个包或者更多的包(也就是说,一个connection event包含多个数据包交互),用的就是MD来实现的。以notify命令为例,设备(Server)notify第一个数据包并将MD置1,Client(比如手机)收到这个notify命令后,就知道Server还有数据包要传,此时手机可以继续发一个空包给设备,以让设备把第二个notify命令发过来,详情如下所示。注:Master为手机(Client),Slave为设备(Server)。


2.4、Payload Length 有效净荷长度


 BT4.2之后,Payload length 8 bits全部用来表示长度,这样的话,payload size最大可达251字节(255 – MIC size)。BLE连接建立之后,可以动态更改data length长度(默认为27字节),这个特性叫做Data Length Extension(DLE,DLE是通过Link layer命令:LL_LENGTH_REQ和LL_LENGTH_RSP来实现的。Data length直接跟蓝牙芯片的射频能力有关,像Nordic的nRF51822只支持BT4.1的Data length,就是因为PHY层已经做死了,无法扩展,但Nordic最新的nRF52832和nRF52840,就都支持DLE,即data length最大可到251字节。


2.5、L2CAP length  MTU


L2CAP length2字节长度,表示后面information payload的长度,information payload最大长度除了受这个L2CAP length字段约束,同时还受MTU的限制对于 BLE4.0 最大传输单元(MaximumTransmission Unit (MTU))为 23 字节,也就是 Information payload的最大数量为 23 字节。MTU,Maximum Transmission Unit,是ATT层与L2CAP层可以交互的最大数据长度,或者说是Client与Server可以交互的最大长度那么如果需要发送的数据超过 23 字节怎么办呢?方法是剪短后分段发送,所有在 LL 层的报头中才有 MD标志存在。 Information payload 信息放的就是 L2CAP 上层 ATT 的数据包。

总结一下,蓝牙spec里面定义了2个长度字段:LL data length和L2CAP length,同时ATT层还定义了一个MTU,以限制ATT PDU最大长度。LL data length可以通过LL_LENGTH_REQLL_LENGTH_RSP来动态改变,MTU size则可以通过后面要讲到的Exchange MTU RequestExchange MTU Response来改变,而L2CAP length无法动态改变,也就是说不能超过65535。


2.6、L2CAP Channel ID 


 Channel ID:通道 ID。 0x0004、 0x0005、 0x0006 三个可选

对于 L2CAP 层的 3 个信道, 0x0004 为它的上层属性协议(ATT)使用, 0x0006 为它的另外一个与 ATT 并列的一个上层安全管理协议(SMP)使用,而对于 0x0005 它是低功耗信令信道的固定信道, 这个信道上传输的是命令包,这个信道上传输的是命令包, 那么它的上层是谁呢?数据给谁又由谁提供数据呢?答案是通用访问规范 Generic Access Profile(GAP), 只是有意思的是,GAP 并没有具体的数据包的格式,它只提供数据,真正的组包是在别的层。

 


2.7、Security Manager Protocol(SMP)


用来实现配对和密钥分发的,SMP支持如下PDU命令:


3.8Attribute Protocol(ATT)


就是我们经常用到的应用层,应用数据就跟在ATT命令后面,ATT支持如下命令列表:

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BLE蓝牙笔记----数据包解析 的相关文章

  • [BLE]CC2640之定时器(Clock)事件

    一 定时器 xff08 Clock xff09 所谓定时器本质上递减计数器 xff0c 当计数器减到零时可以触发某种动作的执行 这种动作可以通过回调函数来实现 xff0c 当定时器计时完成后 xff0c 自定义的回调函数会立即被调用 回调函
  • [BLE]低功耗蓝牙之GAP、GATT

    一 开篇 本篇主要介绍一下关于BLE开发过程中必须了解的两个协议 xff1a GAP xff08 通用访问协议 xff09 GATT xff08 通用属性协议 xff09 两个协议都隶属于Host层 xff0c 直接关系到应用层开发 xff
  • BLE Mesh(二)BLE Mesh 基础

    Bluetooth Mesh Basics 1 Mesh vs Point to Point2 Devices and Nodes3 Elements4 Messages5 Addresses6 Publish Subscribe7 Sta
  • BLE Mesh(六)配网流程

    配网流程 概述配网协议配网承载层 Provisioning Bearer 配网协议 Provisioning Protocol 流程详解发送Beacon信号邀请交换公共密钥认证输出带外 xff08 Output OOB xff09 输入带外
  • HLK-B36 WIFI/BLE 二合一透传沙雕按键说明

    模块如下 沙雕说明如下 实际操作如下 恢复出厂设置 xff1a 插usb上电 xff0c 长按ES0 6秒以上 xff0c WIFI灯和STA灯同时灭掉然后亮起 xff0c STA开始闪烁 进入AT模式方式1 xff1a 插上USB xff
  • ESP32-C3 学习测试 蓝牙 篇(四、GATT Server 示例解析)

    了解了蓝牙 GATT 相关概念 趁热打铁 分析一下官方示例 GATT Server 的应用程序架构 目录 前言 一 GATT Server 示例分析 1 1 初始化 1 2 回调函数 gatts event handler gap even
  • Telink泰凌微TLSR8258蓝牙开发笔记(一)

    一 开发环境搭建 1 1 软件开发环境 1 1 1 开发的IDE IDE下载链接 1 1 2 烧录工具 DBT下载地址 1 1 3 蓝牙SDK 蓝牙SDK下载地址 1 2 硬件开发环境 8258开发板 烧录工具一套 二 运行例程 并使能打印
  • ESP32-C3 学习测试 蓝牙 篇(七、GATT 数据通信 — 发送自定义数据)

    前面我们已经入门了 GATT 的开发 更进一步 进行想要的数据通信 目录 前言 1 通信问题思考 2 如何才能每次传输不同的数据 3 对 handle 的认识 4 继续尝试 5 测试成功 结语 前言 本来计划直接做一个蓝牙的小应用 首先得实
  • 微信小程序之蓝牙 BLE 踩坑记录

    前言 前段时间接手了一个微信小程序的开发 主要使用了小程序在今年 3 月开放的蓝牙 API 此过程踩坑无数 特此记录一下跳坑过程 顺便开了另一个相关的小项目 欢迎 start 和 fork BLE MiniProgram API简介 微信小
  • 解密蓝牙mesh系列

    转载自 蓝牙技术联盟 蓝牙mesh网络 低功耗 低功耗蓝牙 低功耗蓝牙 Bluetooth Low Energy 是一项相当成功的无线技术 如今已经很难找到不支持低功耗蓝牙的智能手机或平板电脑了 可以说它是可穿戴技术兴起的关键因素 在医疗设
  • BLE蓝牙笔记----数据包解析

    本文是参考一些博文和书籍做的笔记 如有不适联系删除 参考 https www cnblogs com iini p 8977806 html BLE4 0 低功耗蓝牙 协议 总结 目录 1 广播包 1 1 PDU Type 1 2 MAC地
  • BLE MESH组网(五)配置BLE MESH

    BLE MESH 五 配置BLE MESH 前言 概述 配置协议 供应程序 信标 邀请 交换公钥 前言 2017 年 5 月 全球最臭名昭著的勒索软件 WannaCry 在全球范围内积极攻击计算机 劫持用户数据索要赎金 这次攻击影响了 15
  • 蓝牙Mesh LPN节点

    选择LPN模式的原因 能有效的降低产品功耗 比如 一个温湿度传感器产品 需要超过设定阈值才会从上送数据 这样就没有长时间唤醒时间 就无法接收到网关下发的设置数据 这时候就需要LPN模式 LPN的节点正常还是超过阈值才会上报数据 然后会过一段
  • Android - BlueTooth BLE 之 Central 与 Peripheral

    一 前言 Andorid 5 0 之前是无法进行 外围设备开发的 在Android 5 0 API 21 android bluetooth le包下 新增加 Scaner相关类和 Advertiser 相关类 目前最后使用Scanner相
  • ESP32-C3 应用 篇(实例二、通过蓝牙将传感器数据发送给手机,手机端控制 SK6812 LED)

    ESP32 C3 蓝牙部分我们学习了GATT 本文尝试使用蓝牙做一个简单的小应用 目录 前言 一 整体框架 二 数据传输部分 2 1 添加温湿度驱动组件 2 2 传感器数据传输程序 再次说明 ESP GATTS READ EVT 事件 2
  • BLE学习(4):蓝牙地址类型和设备的隐私

    蓝牙地址也被称为蓝牙MAC地址 它能唯一标识一个蓝牙设备的48位的值 在蓝牙规范中 它被称为BD ADDR 蓝牙的地址类型可以分为两种 public addresses和random addresses 其中random addresses
  • Dialog DA14585——基本硬件资源配置

    GPIO DA14585共有3中类型的封装 WLCSP34pin QFN40pin QFN48pin 除去专用的RST GND XTAL ANT VBAT脚后 分别有14 25 32个IO口可用 目前最常用的封装类型是QFN40 处理单元
  • NRF52832学习笔记(1)—— 添加自有service(基于SDK15.3)

    前言 SDK版本15 3 评估板 pca10040 在uart的例程中添加battery service 添加之前 手机连上设备之后扫描到的service如下 一 分配ram空间 softdevice的flash code是确定 但ram是
  • 使用Arduino开发ESP32(22):蓝牙作为客户端使用

    文章目录 目的 基础准备 搜索蓝牙设备 搜索设备 信息查询 连接与交互 总结 目的 ESP32的蓝牙除了作为服务器 从设备 使用还可以作为客户端 主机 使用 这篇文章将对相关内容做个简单说明 基础准备 这篇文章中测试需要先准备一个蓝牙服务器
  • Android Ble 连接设备失败 onConnectionStateChange status 返回133

    Android Ble 连接设备失败时回调函数 onConnectionStateChange status 返回133 开始找问题 各种mac地址 权限 线程 找了个遍 结果就是返回纹丝不动 又因为 mBluetoothGatt mBlu

随机推荐

  • BOX2D 第十章 世界类

    第十章 世界类 Dec 2nd 2012 Comments 声明 此文章翻译自Box2D v2 2 0用户手册 仅供学习参考 关于 About b2World类包含了物体和连接器 它管理了模拟相关的所有方面并且允许异步需求 像AABB需求和
  • kakfa 常见错误(长期更新 2023.09.05)

    kafka版本 2 13 3 40 一 消费者相关 1 1 消费组 1 1 1 查看消费组命令找不到消费组 1 2 消费者 1 2 1 This error handler cannot process org apache kafka c
  • VGGNet网络结构学习

    前言 VGG是Oxford的Visual Geometry Group的组提出的 大家应该能看出VGG名字的由来了 该网络是在ILSVRC 2014上的相关工作 主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能 VGG有两种
  • 查看OpenStack的版本

    show openstack version root localhost openstack version openstack 4 0 2 Using openstack version will only give you the v
  • Linux中如何快速查找并执行之前执行过的命令

    history grep 命令 history 显示的记录行号 回车执行 Ctrl R 输入若干字符 关键词 会搜索包含所输入关键词的历史命令 继续按Ctrl R则会继续向前搜索包含关键词的历史命令 找到目标命令后 可以直接按enter键执
  • windows中将sqlmap添加到环境变量中

    在windows下每次使用sqlmap进行sql注入测试时 都要先进到sqlmap py的目录中 然后执行python sqlmap py url 而作为未来的渗透大佬 怎么能够允许这么low的事情出现 1 添加环境变量 电脑右键属性 高级
  • IDEA 自定义注解(类注释、方法注释)

    文章目录 一 生成类注释 1 打开设置位置 2 将自定义的类注解规则 复制到Class中 3 使用 新建类的时候会自动加上注解 二 自定义方法注解 1 打开设置 2 添加自定义注解模板组 3 添加自定义注解模板 4 设置模板的作用范围 5
  • Python Flask 建站框架入门课程-微课学习-第三章 进阶

    上传文件 用 Flask 处理文件上传很简单 只要确保你没忘记在 HTML 表单中设置 enctype multipart form data 属性 不然你的浏览器根本不会发送文件 已上传的文件存储在内存或是文件系统中一个临时的位置 你可以
  • Tkinter实现模拟鼠标单击四位数字验证码自动刷新功能

    目标 用Tkinter实现一个用鼠标点击验证码后自动刷新验证码的功能 分四步实现的思路 第一步 创建Tkinter窗口 放置一个Label标签和一个Button按钮 第二步 写一组4位的纯数字验证码 打印并在Label标签中显示出来 第三步
  • 算法:二叉树前序,中序,后序,知二求一(Java代码)

    算法 二叉树前序 中序 后序 知二求一 Java代码 注意 通过前序和中序 后序和中序都可以得到唯一一个确定的二叉树 而只知道前序和后序遍历的结果是没办法确定唯一一个二叉树的 因为可能有多种情况 所以这里为了简化问题 暂时提出一个限制条件
  • se网站服务器,www.se8088.com服务器iP

    2021 07 23 2021 08 10 101 32 211 103 2021 07 02 2021 07 24 154 13 30 10 2021 06 30 2021 07 23 154 13 30 8 2021 07 09 202
  • MySql事务隔离级别

    1 读未提交 介绍 顾名思义 读到了未提交的事务 问题 读到了脏数据 脏读 解决 读已提交的数据 2 读已提交 介绍 顾名思义 读取已提交的事务 问题 必须等到提交后才能读 不可以重复读 解决 重复读 3 重复读 介绍 可以重复读 中间过程
  • 基于卷积神经网络-双向门控循环单元结合注意力机制(CNN-BIGRU-Attention)时间序列预测,matlab代码,2020版本及以上。评价指标包括:R2、MAE、MSE、RMSE和MAPE

    清空环境变量 warning off 关闭报警信息 close all 关闭开启的图窗 clear 清空变量 clc 清空命令行 restoredefaultpath tic 加载数据与数据集划分 导入数据 data xlsread 数据集
  • 青龙面板 脚本合集 20221017

    以往教程脚本大都失效 网上脚本合集 收集供下载 下载 https www lanzouy com ilnLn0dyv3qd 密码 qlbh 脚本内容
  • 验证日期的正则表达式加入闰年的判断以及思路分析

    进入正题之前 我们需要澄清两个概念 一 什么是合法的日期范围 对于不同的应用场景 这个问题有不同的解释 这里采纳MSDN中的约定 DateTime 值类型表示值范围在公元 基督纪元 0001 年 1 月 1 日午夜 12 00 00 到公元
  • 《tensorflow:实战google深度学习框架》9.3.2机器翻译文本数据的预处理

    这一节以一个较小的IELST TED演讲数据集作为示例 讲解如何由文本数据集制作词汇表 并将文本中的字符转译为词汇表中对应词汇的编号 方便后续处理 一 准备数据集 数据集的下载地址是 https wit3 fbk eu mt php rel
  • 关于MySQL : CREATE TABLE if not exists xxx/ALTER TABLE xxx ADD COLUMN IF NOT EXISTS xxx语法使用注意

    背景 在测试程序时 对于你新建的表 并且额外插入了其他新的列字段 当你再次插入时 报错 表名或者列名重复 导致的结果 导致的结果就是你的程序运行不下去 因为在你周期调度 或者再次调度时 逻辑上需要再次创建此表时 就会报错 程序崩溃 解决 解
  • Linux服务——http协议及nginx服务

    目录 一 HTTP协议 1 跨网络的主机间通讯方式 套接字相关的系统调用 2 HTTP协议访问网站的过程 3 http协议状态码分类 常见的http协议状态码 4 MIME 5 URL组成 6 HTTP协议版本 7 系统处理http请求的工
  • idea项目名后出现中括号别名

    本文来说下idea项目名后出现中括号别名的问题 文章目录 概述 概述 如下图所示 idea项目名后出现中括号别名 项目名出现中括号是因为iml文件名和项目文件名不一样 需要更改iml文件名
  • BLE蓝牙笔记----数据包解析

    本文是参考一些博文和书籍做的笔记 如有不适联系删除 参考 https www cnblogs com iini p 8977806 html BLE4 0 低功耗蓝牙 协议 总结 目录 1 广播包 1 1 PDU Type 1 2 MAC地