经典蓝牙(Classic Bluetooth / BR/EDR)--- 核心协议层4 --- 经典蓝牙(BR/EDR)服务发现层核心机制详解

📅 2026/8/10 8:43:05
经典蓝牙(Classic Bluetooth / BR/EDR)--- 核心协议层4 --- 经典蓝牙(BR/EDR)服务发现层核心机制详解
文章目录蓝牙 SDP 层详解1. 概述2. 核心作用3. 架构模型4. 核心概念4.1 服务记录Service Record4.2 数据元素Data Element4.3 UUID通用唯一标识符5. 关键属性6. 工作流程步骤 1建立 L2CAP 连接步骤 2服务搜索Service Search步骤 3属性获取Attribute Retrieval步骤 4断开连接7. PDU协议数据单元8. SDP 的局限性与演进9. 实际应用场景10. 总结蓝牙 SDP 层详解1. 概述SDPService Discovery Protocol服务发现协议是蓝牙协议栈中位于L2CAP 层之上的核心协议之一负责让蓝牙设备能够发现附近设备提供的服务及其属性而无需事先了解对方设备的具体功能。协议栈位置应用层 / Profile → SDP → L2CAP → HCI → 基带 / 射频2. 核心作用功能说明服务发现查询对端设备支持哪些蓝牙服务如 A2DP、HFP、SPP 等属性获取获取服务的详细属性如协议版本、通道号、服务名称等动态适配无需预配置设备可动态发现并使用对端服务3. 架构模型SDP 采用客户端-服务器Client-Server架构┌─────────────┐ ┌─────────────┐ │ SDP Client │ ←──── L2CAP ────→ │ SDP Server │ │ (查询方) │ (PSM 0x0001) │ (提供方) │ └─────────────┘ └─────────────┘SDP Server驻留在提供服务的设备上维护一张服务记录表Service RecordSDP Client通过发送请求查询对端的服务信息4. 核心概念4.1 服务记录Service Record每个服务对应一条记录由多个属性Attribute组成用32位属性ID标识。4.2 数据元素Data ElementSDP 使用统一的数据编码格式表示所有数据基本类型包括类型描述符含义0x00Nil空0x01~0x08无符号/有符号整数1~8字节0x09~0x10UUID16/32/128位0x25文本字符串0x35数据元素序列Sequence0x36数据元素替代Alternative4.3 UUID通用唯一标识符用于唯一标识服务类型或协议16-bit UUID蓝牙 SIG 定义的标准服务如0x1101 SPP32-bit UUID扩展标准服务128-bit UUID自定义服务5. 关键属性属性 ID属性名说明0x0000ServiceRecordHandle记录句柄唯一标识一条服务记录0x0001ServiceClassIDList服务类别 UUID 列表0x0002ServiceRecordState记录状态用于缓存判断0x0003ServiceID服务唯一标识 UUID0x0004ProtocolDescriptorList协议描述符列表含 PSM/Channel 等关键信息0x0005BrowseGroupList浏览分组列表0x0006LanguageBaseAttributeIDList语言基础属性偏移0x0009BluetoothProfileDescriptorListProfile 描述符列表0x0100ServiceName服务名称0x0101ServiceDescription服务描述重点ProtocolDescriptorList0x0004通常包含RFCOMM Channel或L2CAP PSM是建立上层连接的关键。6. 工作流程步骤 1建立 L2CAP 连接SDP 使用固定的PSM 0x0001通过 L2CAP 建立面向连接的通道。步骤 2服务搜索Service SearchClient 发送SDP_ServiceSearchRequest携带目标UUIDServer 返回匹配记录的Handle 列表。Client → Server: Search for UUID 0x1101 (SPP) Server → Client: Handles [0x00010001, 0x00010002]步骤 3属性获取Attribute RetrievalClient 发送SDP_ServiceAttributeRequest或SDP_ServiceSearchAttributeRequest获取指定记录的详细属性。Client → Server: Get attributes for Handle 0x00010001 Server → Client: ProtocolDescriptorList [L2CAP, RFCOMM, Channel3]步骤 4断开连接获取所需信息后关闭 L2CAP 通道。7. PDU协议数据单元PDU 名称用途SDP_ErrorResponse错误响应SDP_ServiceSearchRequest/Response搜索服务SDP_ServiceAttributeRequest/Response获取指定记录的属性SDP_ServiceSearchAttributeRequest/Response搜索并获取属性合并操作提示ServiceSearchAttribute是最常用的组合操作可在一个请求中完成搜索属性获取。8. SDP 的局限性与演进局限说明仅发现不连接SDP 只负责发现实际连接需上层协议如 RFCOMM完成无安全机制SDP 本身不提供认证/加密依赖蓝牙配对链路查询效率低传统蓝牙中需多次交互才能获取完整信息BLE 替代方案低功耗蓝牙BLE使用GATTGeneric Attribute Profile替代 SDP基于 UUID 的属性表更高效9. 实际应用场景场景手机连接蓝牙耳机 ├─ 手机SDP Client查询耳机SDP Server ├─ 发现耳机支持 HFP0x111E和 A2DP0x110D ├─ 获取 HFP 的 RFCOMM Channel 2 ├─ 获取 A2DP 的 L2CAP PSM 0x0019 └─ 手机分别建立 HFP 和 A2DP 连接10. 总结SDP 是蓝牙生态的**“目录系统”**解决了设备间你能做什么、怎么连接你的问题。虽然其设计在经典蓝牙BR/EDR时代足够有效但在 BLE 中已被更灵活的GATT所取代。理解 SDP 对于调试蓝牙连接问题、开发自定义 Profile 或分析协议抓包如 Ellisys/Frontline至关重要。