第3章:蓝牙协议栈与核心协议面试题
章节热点:高频考点集中在协议栈层次、L2CAP/ RFCOMM/ SDP 职责、配对绑定与 ATT 机制。面试官常从“协议栈分层”切入,考察你对数据传输路径、关键帧交互及实际调试中抓包字段的理解。
蓝牙协议栈知识结构速查
| 层 / 协议 | 核心职责 | 面试高频切入点 |
|---|---|---|
| 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配对的最大区别?
- 什么场景下会出现“配对已绑定但无法加密”?
- 如何强制重新配对?
避坑提醒:配对和绑定是两个阶段,面试时务必先区分。配对只是临时密钥交换,绑定才持久化,不要混用术语。