蓝牙协议栈基础:L2CAP、SDP、GATT、ATT 协议理解与问答框架
本章定位:蓝牙协议栈核心逻辑层(L2CAP/SDP/GATT/ATT)是大厂高频面试区域,侧重协议分层职责、数据封装、服务发现与属性交互。以下框架助你快速组织4类协议的标准回答路径。
四协议核心对比表
| 协议 | 所在分层 | 核心职责 | 关键概念 | 面试高频词 |
|---|---|---|---|---|
| L2CAP | HCI 之上 | 数据分段/重组、通道复用、MTU 协商 | L2CAP PDU、CID、ERTM | MTU 协商、分段机制 |
| SDP | L2CAP 之上 | 服务发现、属性查询 | UUID、ServiceRecord、AttributeID | UUID 查找、服务浏览 |
| GATT | ATT 之上 | 数据交互框架(Client/Server) | Profile、Service、Characteristic、Descriptor | Write/Read/Notify |
| ATT | L2CAP 之上 | 属性表读写、句柄操作 | Attribute Handle、UUID、Permissions | Handle 寻址、MTU |
备考提示:面试官常将 GATT 与 ATT 混为一谈,回答时先区分“ ATT 是底层传输协议,GATT 是上层应用框架”。
问题1:请解释 L2CAP 在蓝牙协议栈中的作用,以及 MTU 协商过程。
| 考察点 | 是否理解L2CAP的分层位置、数据封装与MTU协商细节,是否了解ERTM模式。 |
| 回答框架 | 定义 → 所在层 → 主功能(分段/重组、通道复用)→ MTU协商流程(双方交换ICID/MTU)→ 协商失败处理。 |
| 示例回答 | L2CAP位于蓝牙协议栈的HCI之上,负责将上层数据分段为最大传输单元(MTU),通过CID标识不同通道①。MTU协商时,双方发送MTU Request/Response分别标明自身接收能力,最终采用较小值②。 |
| 可能追问 | ① L2CAP是否支持流控?② 什么是BR/EDR下的ERTM?③ 如何实现可靠传输? |
| 避坑提醒 | ❌ 别误以为L2CAP只负责分段;❌ 不要将MTU与ATT MTU混淆;❌ 不要漏讲信道标识(CID)的复用能力。 |
问题2:SDP协议是如何工作的?请描述一次典型的服务发现过程。
| 考察点 | 是否熟悉SDP的C/S模型、服务记录结构、UUID查询方式,以及服务浏览与服务搜索的区别。 |
| 回答框架 | SDP角色(Server vs Client)→ 服务记录组织(ServiceRecord+Attribute)→ 发现流程(连接L2CAP PSM=1 → 发送ServiceSearchRequest → 处理Response)→ 属性读取。 |
| 示例回答 | Client通过L2CAP连接SDP Server(PSM=1),发送ServiceSearchRequest携带目标UUID①。Server返回匹配的RecordHandle列表,Client再使用ServiceAttributeRequest获取具体属性(如名称、协议栈)②。 |
| 可能追问 | ① 如果Server没有该UUID会怎样?② 如何实现安全服务发现?③ 是否支持属性变化通知? |
| 避坑提醒 | ❌ 不要只记“搜索服务”而忽略属性获取步骤;❌ 别忘记SDP本身不提供数据传输;❌ 区分“服务浏览”与“服务搜索”两个API。 |
问题3:ATT与GATT有什么区别?GATT Profile的层次结构是怎样的?
| 考察点 | 是否准确区分底层协议与上层框架,是否理解Profile→Service→Characteristic→Descriptor的层级。 |
| 回答框架 | ATT本质:属性表+句柄操作(读/写/通知)→ GATT包装:定义数据模型(Service/Char/Desc)→ 层次结构(Profile包含服务,服务包含特征,特征包含描述符)→ 举例说明。 |
| 示例回答 | ATT是L2CAP之上的属性协议,提供按Handle读/写/通知原语①;GATT在其上定义层次结构:一个Profile可包含多个Service,每个Service有多个Characteristic②,Characteristic可带Descriptor描述属性。 |
| 可能追问 | ① 一个Handle代表什么?② Characteristic属性(CCCD)如何工作?③ ATT MTU与L2CAP MTU关系? |
| 避坑提醒 | ❌ 不要把GATT和ATT混为一个概念;❌ 不要遗漏Descriptor(特别是CCCD);❌ 注意LE和BR/EDR下GATT实现差异。 |
本章复习卡:L2CAP、SDP、GATT、ATT 四个协议是蓝牙面试必考,建议用“定义→层次→功能→特性→场景”五步法覆盖所有追问。参考下方追问路径模拟。
模拟追问示例:面试官从“GATT/ATT区别”开始,可能依次追问“Profile结构”→“Characteristic属性”→“CCCD”→“Notify vs Indicate”→“MTU关系”。按上述路径准备即可全面覆盖。
—— 章节 2/30 · 蓝牙通信应用工程师面试宝典 ——