蓝牙协议栈基础:L2CAP、SDP、GATT、ATT 协议理解与问答框架

本章定位:蓝牙协议栈核心逻辑层(L2CAP/SDP/GATT/ATT)是大厂高频面试区域,侧重协议分层职责、数据封装、服务发现与属性交互。以下框架助你快速组织4类协议的标准回答路径。
定义与分层 核心功能+PDU 关键特性 与相邻协议关系 ✓ 一句话说清协议职责✓ 指出所属蓝牙版本✓ 上下层关系(如L2CAP位于HCI之上) ✓ 数据单元名称(如L2CAP PDU)✓ 分段/重组、通道复用等机制 ✓ QoS、MTU协商、流控✓ 或SDP的UUID唯一性✓ GATT的Server/Client架构 面试高频场景举例

四协议核心对比表

协议 所在分层 核心职责 关键概念 面试高频词
L2CAPHCI 之上数据分段/重组、通道复用、MTU 协商L2CAP PDU、CID、ERTMMTU 协商、分段机制
SDPL2CAP 之上服务发现、属性查询UUID、ServiceRecord、AttributeIDUUID 查找、服务浏览
GATTATT 之上数据交互框架(Client/Server)Profile、Service、Characteristic、DescriptorWrite/Read/Notify
ATTL2CAP 之上属性表读写、句柄操作Attribute Handle、UUID、PermissionsHandle 寻址、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 追问路径 ATT 与 GATT 区别? Profile 结构? CCCD 如何工作? ATT 句柄含义? Service/Char 封装? Notify 与 Indicate ATT MTU 范围? 与L2CAP MTU关系 Buffer 管理
模拟追问示例:面试官从“GATT/ATT区别”开始,可能依次追问“Profile结构”→“Characteristic属性”→“CCCD”→“Notify vs Indicate”→“MTU关系”。按上述路径准备即可全面覆盖。

—— 章节 2/30 · 蓝牙通信应用工程师面试宝典 ——