PUA-Mean-Editor:轻量级数据均值计算与清理工具实战解析
2026/5/8 3:44:31
下面给你最简短、最清晰、最准确的蓝牙协议栈按层说明—— 从硬件 → 内核 → 用户空间 → 应用程序,附带每一层的协议格式 + 层层封装关系。
sudobtmon 命令结果:>ACL Data RX: Handle3flags 0x02 dlen9#4 [hci0] 37.417566ATT: Write Request(0x12)len4Handle: 0x0029 Data[2]: 0000 bluetoothd[2062]:<ACL Data TX: Handl..flags 0x00 dlen5#5 [hci0] 37.417793ATT: Write Response(0x13)len0>HCI Event: Number of Completed Packets(0x13)plen5#6 [hci0] 37.476344Num handles:1Handle:3Count:1>ACL Data RX: Handle3flags 0x02 dlen9#7 [hci0] 59.713568ATT: Write Request(0x12)len4Handle: 0x0029 Data[2]: 0100 bluetoothd[2062]:<ACL Data TX: Handl..flags 0x00 dlen5#8 [hci0] 59.713810ATT: Write Response(0x13)len0>HCI Event: Number of Completed Packets(0x13)plen5#9 [hci0] 59.772533Num handles:1Handle:3Count:1>ACL Data RX: Handle3flags 0x02 dlen9#10 [hci0] 74.297554ATT: Write Request(0x12)len4Handle: 0x0029 Data[2]: 0100 bluetoothd[2062]:<ACL Data TX: Hand..flags 0x00 dlen5#11 [hci0] 74.297732ATT: Write Response(0x13)len0>HCI Event: Number of Completed Packets(0x13)plen5#12 [hci0] 74.356721Num handles:1Handle:3Count:1>ACL Data RX: Handle3flags 0x02 dlen9#13 [hci0] 99.144558ATT: Write Request(0x12)len4Handle: 0x0029 Data[2]: 0100 bluetoothd[2062]:<ACL Data TX: Hand..flags 0x00 dlen5#14 [hci0] 99.144798ATT: Write Response(0x13)len0>HCI Event: Number of Completed Packets(0x13)plen5#15 [hci0] 99.202976Num handles:1Handle:3Count:1>ACL Data RX: Handle3flags 0x02 dlen9#16 [hci0] 99.894540ATT: Write Request(0x12)len4Handle: 0x002c Data[2]: 0100 bluetoothd[2062]:<ACL Data TX: Hand..flags 0x00 dlen5#17 [hci0] 99.894754ATT: Write Response(0x13)len0>HCI Event: Number of Completed Packets(0x13)plen5#18 [hci0] 99.953187Num handles:1Handle:3Count:1>ACL Data RX: Handle3flags 0x02 dlen7#19 [hci0] 102.145559ATT: Read Request(0x0a)len2Handle: 0x0028 bluetoothd[2062]:<ACL Data TX: Ha..flags 0x00 dlen15#20 [hci0] 102.147473ATT: Read Response(0x0b)len10Value[10]: 696e69742076616c7565>HCI Event: Number of Completed Packets(0x13)plen5#21 [hci0] 102.203859Num handles:1Handle:3Count:1>HCI Event: LE Meta Event(0x3e)plen6#22 [hci0] 121.049424LE PHY Update Complete(0x0c)Status: Success(0x00)Handle:3TX PHY: LE 1M(0x01)RX PHY: LE 2M(0x02)>HCI Event: LE Meta Event(0x3e)plen6#23 [hci0] 122.699915LE PHY Update Complete(0x0c)Status: Success(0x00)Handle:3TX PHY: LE 2M(0x02)RX PHY: LE 2M(0x02)位置:蓝牙芯片(Nordic / Broadcom / CSR / Intel)
软件层不存在,这里只有Link Layer + Radio PHY:
┌──────────────┐ │ Link Layer │ (Connection, Advertising) └──────────────┘ ┌──────────────┐ │ PHY (RF) │ (1M, 2M, Coded PHY) └──────────────┘硬件执行:
位置:Linux 内核 BlueZ 内核模块
硬件 → 内核之间通过HCI 协议(主机控制接口)通信。
┌──────────────────────────────┐ │ HCI Command (Host → Controller) │ │ HCI Event (Controller → Host) │ │ HCI ACL Data │ └──────────────────────────────┘例:
HCI Command: LE Set Advertising Enable HCI Event: LE Connection Complete这三个是蓝牙协议栈 HCI 层里最核心的三类数据通道,它们的作用完全不同:
可以把它类比成网络协议里的三层:
✅总结:
内核负责:
位置:仍然在内核 BlueZ 驱动里
┌──────────────────────────┐ │ L2CAP Header (CID, Len) │ │ Payload (ATT / SMP / etc)│ └──────────────────────────┘用途:
位置:用户空间进程/usr/lib/bluetooth/bluetoothd
它负责:
┌──────────────────┐ │ ATT PDU │ (Read, Write, Notify) └──────────────────┘ ┌──────────────────┐ │ GATT Attribute │ (Service, Characteristic) └──────────────────┘例:
ATT: Read By Type Request ATT: Write Request协议格式:MGMT Command / Event(Linux 专用)
MGMT Event: Device Connected MGMT Command: Set Advertising用于:
通过 DBus API 或 GATT 直接操作:
gatttool(旧)bluetoothctl应用不直接接触 HCI,只操作GATT 服务。
协议格式取决于使用的 API:
GATT Characteristics Value(字节流) GATT Notifications DBus messages (properties, methods)实际流程如下:
App (GATT Write Value) ↓ bluetoothd 生成 ATT Packet ↓ ATT PDU ↓ 封装进 L2CAP PDU ↓ 封装进 HCI ACL Data ↓ 封装成 LL Data PDU(由硬件发送) ↓ 无线电发送LL PDU └─来自 HCI ACL Data └─来自 L2CAP PDU └─来自 ATT PDU └─来自 应用程序的 GATT 请求设备接收到 BLE 数据:
Radio PHY → LL PDU → HCI ACL Data (Kernel) → L2CAP → ATT → GATT 事件 → DBus 回调到 AppPHY(物理层) LL(链路层) HCI(主机控制接口) ← 内核 L2CAP(逻辑链路) ← 内核 ATT/GATT(属性层) ← bluetoothd Application(App) ← 用户空间App → GATT → ATT → L2CAP → HCI → LL → AIRAIR → LL → HCI → L2CAP → ATT → GATT → App如果你愿意,我可以继续画:
📌蓝牙完整数据报文结构图(LL/HCI/L2CAP/ATT 全层解剖)
📌btmon 日志逐层对应关系(你看到的每条日志来自哪一层)
📌BlueZ 源码位置(kernel, bluetoothd, GATT 实现函数)
要哪个?