ATT 协议详解
核心概念
ATT(Attribute Protocol)是 BLE 数据访问的基础协议,采用 Client-Server 模型。Server 暴露属性(Attribute),Client 通过 ATT PDU 读写这些属性。
Attribute(属性)
每个属性由 4 个要素组成:
┌──────────────┬──────────────┬──────────────┬──────────────┐ │ Handle: 2B │ Type: 2/16B │ Value: ≤512B │ Permissions │ │ 属性句柄 │ 属性类型(UUID)│ 属性值 │ 权限 │ └──────────────┴──────────────┴──────────────┴──────────────┘ Handle: 0x0001 ~ 0xFFFF,Server 中按递增顺序排列 Type: 16-bit 或 128-bit UUID,标识属性含义 Value: 0 ~ 512 字节 Permissions: Read / Write / Notify / Indicate + 认证/加密要求 在 ATT 层属性表中:Permissions = 1 字节(8 bits)标准 ATT/GATT 里,权限是一个 uint8(1 字节) 的位域: 每一位代表一种权限(读、写、加密、认证等) 常见位定义(不同芯片 SDK 会一致): bit0:Read bit1:Write bit2:Read Auth bit3:Write Auth bit4:Read Encrypt bit5:Write Encrypt ……一、整体前置认知
这是BLE GATT 层的基础单元:Attribute(属性),整个蓝牙设备的服务、特征值、描述符,本质全是一个个 Attribute。
每一条属性固定由句柄、类型、值、权限4 部分构成,是 BLE 数据交互的最小载体。
二、逐个要素详解
1. Handle(属性句柄)—— 2 字节(2B)
核心作用
属性的唯一编号 / 地址,主机(手机 / APP)靠这个编号定位要操作哪一条属性。
- 长度:固定 2 字节,取值范围
0x0001 ~ 0xFFFF(总共 65535 个可用句柄) - 规则:设备端(Server 从机)内部严格按从小到大递增排列,不会乱序、不会重复。
- 举例:
0x0001 = 第一条属性、0x0002 = 第二条…… 主机读写数据时,直接发「句柄 + 指令」,设备就能精准找到对应属性。
类比:一栋楼里的房间门牌号,找房间就看门牌号。
2. Type(属性类型)—— 2 字节 或 16 字节(2B / 16B UUID)
核心作用
定义这个属性 “是干什么的”,用 UUID 区分属性身份、功能、类别。
分两种格式:
- 16-bit UUID(2 字节)
蓝牙协议预定义的标准通用属性,全网统一、大家都认识。
例:
- 0x2800:主服务
- 0x2803:特征值声明
- 0x2A00:设备名称
- 0x2A19:电池电量
- 128-bit UUID(16 字节)
厂商自定义私有属性,标准蓝牙没有定义,用于厂商私有功能、自定义数据通道。
长度更长,保证全球不重复。
类比:门牌号对应房间用途标签(卧室 / 厨房 / 储物间),标签决定房间能干什么。
3. Value(属性值)—— 最长 512 字节
核心作用
属性真正存储的业务数据,也是蓝牙收发的有效载荷。
- 长度范围:
0 ~ 512 字节(BLE 单条属性值上限) - 内容:可以是字符串、传感器数据、指令、状态、二进制数据流等。
- 特点:主机读就是取这个值,写就是修改这个值。
类比:房间里存放的东西,是最终要读写的内容。
4. Permissions(权限)—— 访问控制规则
核心作用
规定谁能对这个属性做什么操作、需不需要加密 / 认证,是安全 + 访问限制规则。
分为两大块:操作权限+安全权限
(1)基础操作权限(4 种标准动作)
- Read 读
允许主机读取当前属性的 Value 值。 - Write 写
允许主机向属性写入新的 Value 值。 - Notify 通知
从机(Server)主动上报数据给主机,无需主机主动读,数据变化就推送。
- 特点:无应答,速度快,常用在传感器实时上报。
- Indicate 指示
和 Notify 类似,也是从机主动推数据,但主机必须回复应答,可靠性更高。
简单区分:
Notify = 发消息不用对方回执;
Indicate = 发消息必须等对方确认收到。
(2)安全附加要求(认证 / 加密)
搭配上面 4 种操作使用,做安全加固:
- 加密(Encrypted):读写 / 推送该属性时,连接必须开启蓝牙加密,明文不传输。
- 认证(Authenticated):除加密外,还需要设备配对、身份鉴权(绑定设备),安全等级更高。
权限组合举例
- 仅 Read:只能读,不能写、不能推送
- Read + Write:可读写,普通数据通道
- Notify + 加密:仅允许加密连接下主动推送数据
- Indicate + 认证:高安全级别的主动上报(如密码、