属性协议层

  • 属性协议
  • 数据的结构
    • 1.Attribute Handle
    • 2.Attribute Type
      • 2.1.分类
      • 2.2.取值范围
      • 2.3.长度
    • 3.Attribute Value
    • 4.Attribute Permissions
  • ATT的空中包结构
    • 1.通讯规则
    • 2.PDU 格式
      • 2.1.Opcode
        • 2.1.1.错误
        • 2.1.2.交换MTU
        • 2.1.3.查找信息
        • 2.1.4. 读属性
        • 2.1.5. 写属性
        • 2.1.6. 队列写属性
        • 2.1.7. 通知属性
      • 2.2.Attribute Parameters
        • 2.2.1.长度
        • 2.2.2.为什么支持最大写入数据有20B的说法?
      • 2.3.Authentication Signature
  • 参考地址

属性协议

属性协议(Attribute Protocol)简称ATT。它是GATT和GAP的基础。

这一层的关键词是Attribute(属性)。一个属性其实就是一条数据,属性是BLE数据提供单元,也是蓝牙空中传播数据的最上层,BLE开发过程中接触最多的就是这一层。

ATT层规定了ATT_MTU值,如果属性值很长,超过了ATT_MTU限制,将使用特殊的读写方法进行操作。

如果没有MIC,ATT_MTU 将是 0B - 27B/251B
如果有MIC,ATT_MTU 将是 0B - 23B/247B

数据的结构

这里的数据的结构,指的是一条属性在存储器中定义的数据结构

1.Attribute Handle

属性句柄(Attribute Handle)犹如指向属性实体的指针,对端设备可通过属性句柄来访问该属性

属性句柄值的范围:0x0001~0xFFFF

2.Attribute Type

作用是用以区分当前属性是服务项或是特征值等,它用UUID来表示。

UUID(universally unique identifier,通用唯一识别码)是一个软件构建标准,并非BLE独有的概念,一个合法的UUID,一定是随机的、全球唯一的,不应该出现两个相同的UUID。

2.1.分类

BLE的属性类型主要有四个大类:

Primary Service(首要服务项):0x2800
Secondary Service(次要服务项):0x2801
Include(包含服务项):0x2802
Characteristic(特征值):0x2803

转自:https://blog.csdn.net/chengbaojin/article/details/108142146

特性扩展性质 «Characteristic Extended Properties»: 0x2900
特性用户描述 «Characteristic User Description» : 0x2901
客户端特性配置«Client Characteristic Configuration» : 0x2902
服务器特性配置«Server Characteristic Configuration»: 0x2903
特性表示格式 «Characteristic Presentation Format»: 0x2904
特性聚合格式 «Characteristic Aggregate Format» : 0x2905

特性用户描述描述符:
给用户进行配置的描述性的东西,它用一个字符串与某一特性相关联

客户端特性配置描述符 :
支持通知或者指示的特性必须使用客户端配置描述符

服务器特性配置描述符
所要广播的数据是什么呢?就是特性值,也就是特性值声明中的属性值

2.2.取值范围

0x1800 – 0x26FF :服务项类型
0x2700 – 0x27FF :单位
0x2800 – 0x28FF :属性类型
0x2900 – 0x29FF :描述符类型
0x2A00 – 0x7FFF :特征值类型

假如UUID=0x1800,就表示它是一个首要服务项。

2.3.长度

UUID是16个字节的字符串,为什么这里只使用了2字节?

因为这些是常用的UUID,为了减少传输的数据量,BLE协议做了一个转换约定,给定一个固定的16字节模板,只设置2个字节为变化量,其他为常量,2字节的UUID在系统内部会被替换,进而转换成标准的16字节UUID。UUID模板为:

0000XXXX-0000-1000-8000-00805F9B34FB

其中从左数第3、4个字节“XXXX”就是变化位,其他为固定位。

如:UUID=0x2A00在系统内部会转换成00002A00-0000-1000-8000-00805F9B34FB。

反之,如果一个特征值的UUID是16字节的,在系统内部它的属性类型也可能写成第3、4字节组成的双字节,比如UUID=1234ABCD-0000-1000-8000-00805F9B34FB,它的属性类型在内部表示为ABCD。

主机端扫描到该属性类型,会将其当做是“用户自定义”的类型,然后从其他位置获取该UUID的真实值。

3.Attribute Value

4.Attribute Permissions

属性权限/属性许可,作用是保护Attribute Value

Attribute Permissions不会直接在空中包中体现,而是隐含在ATT命令的操作结果中。
转:https://www.cnblogs.com/yongdaimi/p/11983220.html

权限属性:

访问权限(Access Permission)- 只读、只写、读写
禁止访问权限( No Access )- 禁止读或者写
加密权限(Encryption Permission) – 加密、不加密
认证权限(Authentication Permission) – 需要认证、无需认证
授权权限(Authorization Permission) – 需要授权、无需授权
签名权限(Signed Permission)- 签名后才能读或者写,这个用得比较少

访问(Access)权限好理解,如果是只读权限,就不能对其写数据,其他类似。

加密(Encryption)权限也好理解,就是对数据进行加密。

认证(Authentication)是指相互确认对方身份。完成认证流程的两个设备,双方建立信任关系,二者之间的通信通道即可以认为是安全的。BLE中,“认证”过程就是配对。

授权(Authorization)是指对授信设备开放权利。

ATT的空中包结构

1.通讯规则

命令,客户端发送给服务端,不要求服务端回复
请求,客户端发送给服务端,要求服务端回复
响应,客户端发送了一个请求,服务端用此响应
通知,服务端发给客户端的数据,不要求客户端回复
指示,服务端发给客户端的数据,要求客户端回复
确认,服务端发给客户端的数据,客户端用此进行回复

2.PDU 格式

2.1.Opcode

Opcode PDU :代替某种命令,通过的PDU携带的Attribute Parameters格式不同,下面详细说明。bit 0-5位表示。

Command:表示PDU Type 是否是命令(Command )。bit 6表示。

Authentication Signature标识位:
如果Attribute Opcode中身份验证签名标记位为0,则 Information Payload不含有Authentication Signature;
如果Attribute Opcode中身份验证签名标记位为1,则 Information Payload含有Authentication Signature。
bit 7 表示。

Opcode PDU 描述
0x01 Error Response 错误
0x02 Exchange MTU Request 交换MTU
0x03 Exchange MTU Response 交换MTU
0x04 Find Information Request 查找信息
0x05 Find Information Response 查找信息
0x06 Find By Type Value Request 查找信息
0x07 Find By Type Value Response 查找信息
0x08 Read By Type Request 读属性
0x09 Read By Type Response 读属性
0x0A Read Request 读属性
0x0B Read Response 读属性
0x0C Read Blob Request 读属性
0x0D Read Blob Response 读属性
0x0E Read Multiple Request 读属性
0x0F Read Multiple Response 读属性
0x10 Read by Group Type Request 读属性
0x11 Read by Group Type Response 读属性
0x12 Write Request 写属性
0x13 Write Response 写属性
0x14 Write Command 写属性
0x15 Signed Write Command 写属性
0x16 Prepare Write Request 队列写属性
0x17 Prepare Write Response 队列写属性
0x18 Execute Write Request 队列写属性
0x19 Execute Write Response 队列写属性
0x1B Handle Value Notification 通知属性
0x1D Handle Value Indication 通知属性
0x1E Handle Value Confirmation 通知属性

2.1.1.错误

Error Response
如果属性PDU的操作码无效,或属性句柄无效,将返回错误响应PDU。在PDU的Parameter字段中,包含了错误编码。

2.1.2.交换MTU

Exchange MTU Request
客户端设备向服务端设备发送交换MTU请求,提供客户端设备的MTU值。服务端设备获知客户端的MTU值,并返回自己的MTU值。两端设备都将设置较小的MTU值作为新的MTU值。

Exchange MTU Response
如果两端设备没有交换MTU,则使用默认的MTU值处理属性事务。

2.1.3.查找信息

Find Information Request
查找信息请求,包含两个参数:起始属性句柄和结束属性句柄,用于获取服务端设备属性句柄处于该参数区间内的属性。

Find Information Response
查找信息响应,包含指定句柄区间内的属性UUID。如果区间内有多个属性,则返回多个响应。

Find By Type Value Request
按类型值查找请求,是在查找信息请求的基础上,加上了属性类型和属性值两个参数,这样能够更加精确的找到目标属性。

Find By Type Value Response
按类型值查找响应,包含了满足条件的属性句柄列表。

2.1.4. 读属性

Read By Type Request
按类型读请求,包含三个参数:起始属性句柄、结束属性句柄和属性类型。

Read By Type Response
按类型读响应,包含了满足条件的属性的“句柄-值”对的列表。

Read Request
读请求,包含一个参数:属性句柄。

Read Response
读响应,返回满足条件的属性值。

Read Blob Request
读片段(blob)请求,用于读取一个长包属性的值,它包含两个参数:属性句柄和偏移量。以不同的偏移量作为参数,多次执行该请求可以读取长包属性的完整值。

Read Blob Response
读片段响应,包含了长包属性值的指定偏移量片段。

Read Multiple Request
读多次请求,用于读取多个给定句柄的属性值,它包含一个参数:句柄列表。

Read Multiple Response
读多次响应,包含了多个指定句柄的属性值。

Read by Group Type Request
按组类型读请求,用于读取指定组类型的属性值,组类型是由ATT层之上的协议层设定的。它包含三个参数:起始属性句柄、结束属性句柄和属性组类型。

Read by Group Type Response
按组类型读响应,包含了满足条件的属性值列表。

2.1.5. 写属性

Write Request
写请求,将待写数值写入指定的属性值,包含两个参数:属性句柄和数值。

Write Response
写响应,表示写请求执行成功,不含任何参数。

Write Command
写命令,将待写数值写入指定的属性值,包含两个参数:属性句柄和数值。它不会触发一个写响应。

Signed Write Command
签名的写命令,与上面的写命令类似,指示包含了额外的参数:认证签名。典型应用是写控制点属性。

2.1.6. 队列写属性

队列写是指利用一个先进先出的队列,缓存多个属性值的写操作,然后在一个原子操作中完成所有的值写入操作。

队列写专门用于长包属性的写操作,现将一个长数据分成多个部分并记录偏移量,然后通过队列缓存,等数据发送完毕,再按照收到的顺序,一次性将整个长数据写入属性值。

Prepare Write Request
准备写请求,用于发送一个长数据片段,它包含三个参数:属性句柄、偏移量和待写入数据。

Prepare Write Response
准备写响应,收到准备写请求以后,缓存收到的数据。

Execute Write Request
执行写请求,对前面缓存的数据执行写操作,它包含一个参数:标志位。如果标志位为1,则执行写操作,如果为0,则取消前面的缓存数据。

Execute Write Response
执行写响应,根据执行写请求的标志位,执行或取消写操作。

2.1.7. 通知属性

Handle Value Notification
发送数值通知,它包含两个参数:属性句柄和属性值。它不需要客户端收到后返回响应。

Handle Value Indication
发送数值指示,它包含两个参数:属性句柄和属性值。它需要客户端收到后返回确认。

Handle Value Confirmation
发送数值确认,它不包含参数,客户端发出该确认消息表示收到了数值指示。

2.2.Attribute Parameters

2.2.1.长度

首先,参数数据长度和ATT_MTU有关

一般情况下L2CAP层有MIC,ATT_MTU 将是 0B - 23B/247B

23B 是 BLE 4.0/4.1支持下的最大长度;247B是 BLE 4.2/5.0支持的最大长度。同时 BLE 4.2/5.0 也是支持23B的,是否支持247B也和物理层有关。

其次,X 也是个变值,它和 Authentication Signature有关,如果存在Authentication Signature,那么Attribute Parameters的最大长度就是 ATT_MTU - 13B (Opcode 占用一个字节) ,如果没有Authentication Signature,那么最大长度将是 ATT_MTU - 1B。

2.2.2.为什么支持最大写入数据有20B的说法?

首先明确一点就是,这种说法来源于BLE 4.0/4.1或者 BLE 4.2/5.0 支持修改23B的这种情况。

如果ATT_MTU 是23B,并且没有Authentication Signature的场景下,Attribute Parameters是22B。

而我们真正使用Attribute Parameters写数据的情景,并不是整个Attribute Parameters都用来传输数据。这和Opcode的写属性有关。

当Opcode = 0x12(Write Request),它重新定义了Attribute Parameters的结构,如下:

Attribute Data 是写数据的时候,真正的数据部分,这就是20B的由来。

2.3.Authentication Signature

身份验证签名 0B/12B

参考地址

抄大佬的,做的学习笔记,如有错误欢迎指正

转:BLE 5协议栈-属性协议层(ATT):https://www.cnblogs.com/yeshenmeng/p/10819339.html

转:五 蓝牙低功耗(BLE)协议栈 之 ATT层:https://blog.csdn.net/chengbaojin/article/details/108142146

转:蓝牙BLE: ATT协议层中属性(Attribute):https://www.cnblogs.com/yongdaimi/p/11984359.html

转:http://www.sunyouqun.com/2017/04/page/2/

蓝牙相关学习:5.BLE协议属性协议层(ATT)相关推荐

  1. 蓝牙相关学习:4.2.BLE空口包结构 - PDU

    PDU PDU 基本数据结构 LL Header 广播包(广播报文) Advertising Header PDU Type Advertising PDU Scanning PDU Initiali ...

  2. 蓝牙相关学习:4.1.BLE空口包结构

    BLE空口包结构 4.0 - 5.1 Uncoded PHY 空口包格式 Preamble (前导) Access Address (AA) 广播包 数据包 PDU CRC 5.1 Coded PHY ...

  3. 蓝牙相关学习:3.BLE协议物理层

    物理层 频段 调制 信道 跳频 参考地址 Physical Layer 简称 PHY(物理层) 由于BLE属于无线通信,则其通信介质是一定频率范围下的频带资源(Frequency Band) 频段 B ...

  4. NS2相关学习——完成一个新的协议(1)

    接下来要进入对我来说老大难的环节了,从表面的TCL慢慢进入到后端的C++,一起加油学习吧~ 在本节学习中,将给出一个在ns中实现新的协议的例子.但是可以想见的是,如果由我们自己来完成这个工作,势必要对 ...

  5. 低功耗蓝牙学习笔记-属性协议

    什么是属性协议? 属性协议(Attribute Protocol)简称ATT: 属性协议既包含了关于属性的定义,也包含了属性的操作方法,既属性协议包含了通信协议的内容,属性协议通讯操作的对象是属性实例 ...

  6. android ble 蓝牙绑定流程,android BLE蓝牙开发

    蓝牙BLE设备是目前比较热门的设备.由于BLE有低功耗等特点,被广泛应用到身边的电子产品上.如智能手表.手环.防丢器等各种产品上.最近研究一下android上的ble应用开发.跟大家分享一下相关的内容 ...

  7. 蓝牙 4.0 ATT属性协议

    转自:https://mp.weixin.qq.com/s?__biz=MjM5MzM4MDM3Mw%3D%3D&chksm=b28fa48285f82d94f2b1ac8a7486a9c75 ...

  8. 蓝牙的ATT协议(属性协议)和GATT协议

    蓝牙协议分为 ATT(属性协议) 主要定义了属性 和 GATT将"属性"分装为服务和特征值 . ATT :attribute 包含四个字段,类型,句柄,权限,值 类型:由一个128 ...

  9. 蓝牙核心规范(V5.2)7.5-深入详解之ATT(属性协议)

    蓝牙篇之蓝牙核心规范(V5.2)深入详解汇总 目录 ATT协议和服务器.客户端直接的关系 1.ATT协议速读 2.ATT协议

  10. Android BLE(1)---蓝牙通讯学习

    Android BLE蓝牙通讯学习 在app应用的开发过程中,一般和蓝牙接触的不多,但是随着智能穿戴设备的发展,穿戴设备和手机关联的app越来越多,之前也是没怎么接触过这一块的东西,正好最近需要做一个 ...

最新文章

  1. 【渝粤题库】广东开放大学 商务翻译实务 形成性考核
  2. boost学习之boost::lock_guard源码分析
  3. OSChina 周五乱弹 ——变态要从娃娃抓起
  4. 【linux】web socket
  5. BZOJ4003 [JLOI2015]城池攻占 左偏树 可并堆
  6. 傅里叶变换和拉普拉斯变换
  7. 四叉树——图片应用实例
  8. c语言循环接收按键,C语言中,如何用键盘输入来退出循环
  9. android x86 win8 双系统,win8.1安卓双系统安装教程:安卓win8.1二合一双系统安装步骤...
  10. 关于“嵌入式系统设计师”的了结。
  11. IntelliJ IDEA2021.1中英文菜单对照
  12. 手机中的RAM和ROM分别对应电脑的内存和硬盘
  13. 简单模拟医院叫号系统
  14. 零基础入门网络安全最直线距离的学习路线
  15. Python Flask项目部署
  16. 一刀工具箱 - 密码生成器
  17. matlab画图高级,[转载]Matlab绘图系列之高级绘图
  18. Excel2002制作自动记录考勤表(转)
  19. matlab双对数纵坐标,双对数坐标的两个坐标轴上的数值是什么样的对应关系?
  20. mysql数据库:Xtrabackup安装以及应用

热门文章

  1. Excel用SQL合并多个工作表
  2. 安全漏洞之host头攻击漏洞
  3. Java使用aspose合并两个PDF文件
  4. a113 智能音箱芯片方案_智能音箱九大芯片方案商及其生产厂商和代表作品介绍...
  5. 【甄选靶场】Vulnhub百个项目渗透——项目十:stapler-1(文件上传,多方式提权)
  6. OKR | 我们的目标是称霸全国!
  7. 学习软件测试有哪些优势?
  8. CAD创建以及自动加载脚本文件*scr
  9. 内网渗透靶场(上)加入目标网段,抓取管理员密码 #zkaq
  10. Ubuntu 18.04 ibus安装配置中文拼音输入法