3. 蓝牙协议栈核心原理:经典蓝牙与BLE架构、HCI、L2CAP、ATT/GATT
协议栈分层是蓝牙通信的基石,面试中常要求你清晰对比经典蓝牙(BR/EDR)与低功耗蓝牙(BLE)各层职责,并深入理解HCI、L2CAP、ATT/GATT的交互机制。下图为两套协议栈的分层对照,面试时可以此为骨架展开回答。
📌 面试问答卡 1
面试问题:请对比经典蓝牙(BR/EDR)与低功耗蓝牙(BLE)的协议栈架构差异。
面试官考察点:
- 是否理解两套协议栈的分层结构及各自核心协议
- 能否从功耗、数据模式、连接方式等角度阐述差异
- 对HCI分界、上层协议栈演进的认知
回答框架:
- 分层对比:给出经典(BB+LMP→HCI→L2CAP→SDP/RFCOMM)与BLE(LL→HCI→L2CAP→ATT/GATT)的路线图
- 关键差异:BLE采用属性协议(ATT)与通用属性配置文件(GATT)替代SDP;BLE无SCO/eSCO语音通道;BLE使用广播和连接
- 功耗根源:BLE Controller只有Link Layer,无LMP复杂状态机;PHY简化(GFSK,1Mbps/2Mbps)
简短示例回答(85字):经典蓝牙协议栈包括Baseband、LMP、HCI、L2CAP、SDP、RFCOMM等;BLE则使用Link Layer、HCI、L2CAP、ATT、GATT、SM。核心差异在于BLE用ATT/GATT基于属性进行服务发现与数据交互,替代SDP/RFCOMM;同时去掉语音通道,专注低功耗数据通信。
可能追问:
- BLE为什么不需要RFCOMM?如何替代串口通信?
- 经典蓝牙的SCO和eSCO在音视频场景下的优势是什么?
- BLE的广播包在协议栈中如何生成和解析?
📌 面试问答卡 2
面试问题:HCI(Host Controller Interface)在蓝牙协议栈中扮演什么角色?请描述HCI命令、事件和数据流的工作机制。
面试官考察点:
- 是否清楚HCI是Host与Controller之间的标准化接口
- 能否准确区分命令包(Host→Controller)、事件包(Controller→Host)以及数据包(双向)
- 是否有HCI log或抓包的实际调试经验
回答框架:
- 角色定义:HCI是Host(SoC/AP)与Controller(Bluetooth芯片)之间的协议边界
- 报文类型:HCI命令(如LE Create Connection)、HCI事件(如Connection Complete)、HCI ACL数据、HCI SCO/eSCO数据
- 传输层:UART、USB、SDIO等,需要处理流控与分包
- 调试价值:通过HCI trace可分析蓝牙连接、配对、数据交互全流程
简短示例回答(95字):HCI定义Host与Controller通信的标准化接口。Host下发命令(如扫描、连接)通过HCI命令包;Controller异步返回事件包(连接完成、断开等);ACL/SCO数据通过数据包双向传输。UART是常用传输层,需要实现HCI流控。实际开发中利用HCI log可快速定位连接失败或配对异常。
可能追问:
- HCI命令的同步语义如何保证(Command Complete vs Command Status)?
- HCI UART流控(CTS/RTS)不当时会出现什么问题?
- BLE扩展广播中HCI命令是如何变化的?
📌 面试问答卡 3
面试问题:请解释BLE协议栈中L2CAP与ATT/GATT的层次关系,并说明它们如何协同实现BLE服务发现与数据交互。
面试官考察点:
- 是否理解L2CAP提供复用与分段重组(SAR),ATT/GATT构建服务模型
- 能否讲清GATT的Service、Characteristic、Descriptor三层结构
- 是否熟悉MTU协商、通知/指示、信用流控等机制
回答框架:
- L2CAP职责:为上层提供逻辑信道(固定信道如ATT CID 0x0004),支持分段重组、MTU协商;BLE特有信用流控(LE Credit Based Flow Control)
- ATT属性协议:定义属性(UUID、handle、permissions),支持Read/Write/Notify/Indicate操作,Client-Server模型
- GATT组织:基于ATT定义服务(Service)、特征(Characteristic)及其描述符,构成Profile
- 协同流程:GATT Client(主动端)通过L2CAP信道发送ATT请求,Server响应;数据经过L2CAP分段/重组后转发给Controller发送
简短示例回答(98字):L2CAP为ATT提供固定信道(CID 0x0004),负责ATT数据包的分段与重组,并支持MTU协商。ATT基于属性表实现客户端-服务器读写操作。GATT利用ATT构建服务(Service)、特征(Characteristic)描述符层次。例如电池服务包含电量百分比特征(Notify属性),通知时通过L2CAP传递ATT手通知包,Controller空口发送。
可能追问:
- BLE L2CAP的信用流控如何避免拥堵?
- ATT通知与指示在可靠性上的差异是什么?
- MTU协商失败后流程如何?