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 + 认证:高安全级别的主动上报(如密码、