第3章:蓝牙协议栈与核心协议面试题

章节热点:高频考点集中在协议栈层次、L2CAP/ RFCOMM/ SDP 职责、配对绑定与 ATT 机制。面试官常从“协议栈分层”切入,考察你对数据传输路径、关键帧交互及实际调试中抓包字段的理解。

协议栈面试回答框架 整体层次叙述 核心协议三件套 关键机制解释 分层职责 & 分层联动 实战调试经验 从Host到Controller分层结构 L2CAP/SDP/RFCOMM功能及关系 配对绑定/ATT属性/MTU协商 结合抓包log说明职责 异常分析与常见问题

蓝牙协议栈知识结构速查

层 / 协议核心职责面试高频切入点
Controller (HCI)物理层、链路控制、包收发如何抓HCI log?ACL/ SCO区别
L2CAP协议多路复用、分段重组、MTU协商MTU协商失败怎么办?
SDP服务发现、Service Record查询服务UUID与Profile关系
RFCOMM串口仿真、多channel复用与L2CAP Channel对应关系
ATT / GATT属性操作、Service/Characteristic树Handle + UUID 读写流程
Security Manager配对、绑定、加密、密钥分发IO Capability & 配对交互

问题1:请你描述蓝牙协议栈的层次结构,并说明各层主要功能。

面试官考察点:验证是否具有完整协议栈认知,是否理解Host与Controller的划分,以及常见协议位置。
回答框架:从Controller层(物理+链路)→ HCI → Host层(L2CAP/SDP/RFCOMM/ATT/SM)由下至上,每层一句话点明职责,最后用数据传输路径示例串联。

简短示例回答:蓝牙协议栈分Controller和Host两部分。Controller负责射频、基带及链路控制;Host包含L2CAP(复用/分段)、SDP(服务发现)、RFCOMM(虚拟串口)、ATT(属性协议)及Security Manager。数据从应用经过GATT→ATT→L2CAP→HCI→Controller发送。

可能追问
  • HCI有两类传输方式,分别是什么?
  • L2CAP如何实现协议复用?
  • RFCOMM与L2CAP的Channel数量关系?
  • 你平常用什么工具抓HCI log?
避坑提醒:不要把Profile协议(如HFP、A2DP)当作协议栈内核,面试官更关注标准协议层而非应用Profile。

问题2:请解释L2CAP的MTU协商过程及其在调试中的意义。

面试官考察点:考察对L2CAP协议细节的掌握,是否理解MTU协商失败导致断连或数据异常。
回答框架:先说明MTU概念→协商发起时机(connection request/response包含MTU字段)→双方取较小值作为实际MTU→再给出调试中抓包关注点(如果MTU mismatch导致重组失败或丢包)。

简短示例回答:设备建立L2CAP通道时,双方在连接请求与响应中交换MTU。实际MTU取各自MTU的较小值。调试中若抓包发现MTU为48或过小,可能导致大数据包分片异常,表现为GATT Write Request失败。常用工具如hcitool或Bluez log查看协商值。

可能追问
  • 如果协商MTU为512,一次可以发送多少字节?
  • BLE中使用L2CAP MTU还是ATT MTU?有何区别?
  • 如何通过代码设置MTU?
避坑提醒:BLE的MTU实际指ATT MTU,不能与L2CAP MTU混淆。面试中优先明确是自己说的是BLE还是BR/EDR。

问题3:蓝牙配对过程涉及哪些关键协议交互?如果配对失败,你如何排查?

面试官考察点:安全机制理解、配对流程细节(IO能力协商、密钥生成)、实际调试思路。
回答框架:先概述三种配对方式(Legacy/ Secure Simple Pairing/ LE Secure Connections)→ IO Capability交换→ TK/ Link Key生成→ 加密连接建立。排查思路:抓取HCI log查看Pairing Request/Response及后续SMP命令,重点看IO Capability是否匹配(如NoInputNoOutput导致无法认证)。

简短示例回答:配对通常经过配对能力交换(IO Capability)、密钥生成(JustWork/Passkey/Numeric Comparison)、加密启动。排查时用btmon抓取HCI事件,检查配对失败原因(如Key Missing或PIN mismatch)。例如,耳机与手机如果是JustWorks,一方Request为0x01(NoInputNoOutput)即可。

可能追问
  • Secure Connections与Legacy配对的最大区别?
  • 什么场景下会出现“配对已绑定但无法加密”?
  • 如何强制重新配对?
避坑提醒:配对和绑定是两个阶段,面试时务必先区分。配对只是临时密钥交换,绑定才持久化,不要混用术语。