本章介绍蓝牙协议(重点介绍:BLE)的基本特点、版本演进、协议的构成、等基础知识,本章重在了解,目的是对BLE协议有个大概的认知,即了解BLE协议栈的全貌。后续的章节会对每一部分单独进行详细的讲解。
00-蓝牙的历史
01-蓝牙协议栈
蓝牙协议栈由主机 + HCI(可选) + 控制器三大块组成,其中对于单芯片方案是没用HCI的。
- 主机(Host) :主机部分由核心协议层(L2CAP、SDP、SMP、ATT)和核心规范(GAP、GATT)构成;
- 控制器(Controller):此部分拆分为低功耗蓝牙(Vol 6: Low Energy Controller)和经典蓝牙(Vol 2: BR/EDR Controller)两个章节说明
HCI:此部分定义了主机和控制器之间通信的接口标准(Vol 4: Host Controller Interface),可以是UART、USB等通信方式。

上图中红色部分是BR/EDR经典蓝牙的必选项,绿色部分是LE低功耗蓝牙必选项,蓝色部分是公共部分;当然经典蓝牙也可以具备绿色部分特性。HCI接口根据芯片架构有关,是可选项。
- BLE协议栈的实现方式采用分层的思想:
- 控制器部分包括:物理层(PHY)、链路层(LL)、控制接口层(HCI)
- 主机部分包括:裸机链路控制及自适应协议层(L2CAP)、安全管理层(SMP)、属性协议层(ATT)、通用访问配置文件层(GAP),通用属性配置文件层(GATT)
下图为一个经典BLE系统框架图,尔其中的 Host 、 Controller 就是BLE协议栈。

02-物理层
- BLE的物理层定义了如何使用无线电发射器/接收器来编码和解码用于传输和接收的数字数据,以及应用的其他无线电相关参数和属性。现阶段可以略过
主要了解下Frequency Band
- BLE在2400Mhz至2483.5 MHz的2.4GHz免授权频段内工作。BLE采用40个信道,每个信道间隔为2MHz,分为数据信道和广播信道;广播信道占用3个,用于发现设备、建立连接、广播数据;数据信道占用37个,用于已建立连接设备间的数据通信。建立连接的两个设备,必须同一时间处于同一信道上才能通信。
- 其中37/38/39固定为广播信道,其余为数据信道。

03-链路层(LL)
04-HCI层
- HCI (Host Controller interface), 为Host访问Controller提供一组标准的接口
- 主要完成3个任务:
- Host通过HCI发送命令给Controller
- Controller通过HCI将事件发送给Host
- 传递ACL Data(面向连接,在连接通道上进行数据传输)
- 这里所说的接口既包括两个设备之间的物理接口,也包括逻辑接口。逻辑接口定义了命令、事件和数据的封包格式。而物理接口定义了主机和控制器之前如何传输这些数据。蓝牙规范定义了4种物理接口,3线 串口 、4线串口、HID、SDIO。这里不做过多介绍。
05-L2CAP层
06-SMP层
- SMP(Secure manager protocol)。定义了蓝牙设备配对、认证、解密等行为的安全操作,SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。
- 这一部分在后续“高阶”BLE安全研究过程中很重要。
07-ATT层
- ATT(属性协议):定义了访问对端设备上数据的一组规则,是GATT规范的基础,也是低功耗蓝牙的基石。定义了Host端属性报文格式和报文类型。这一层的关键词是Attribute(属性)。一个属性其实就是一条数据,属性是BLE数据提供单元,也是蓝牙空中传播数据的最上层,BLE开发过程中接触最多的就是这一层。
ATT数据格式(本章简单了解即可)

08-GATT层
- GATT(Generic Attribute Profile, 通用属性规范),自己本身不提供数据,而是将ATT层提供的属性组合起来构成的服务。通过ATT层可以读写对端设备的属性值,各个属性之间有什么联系各个属性之间怎么组合起来的,是由GATT层负责。服务是GATT层的关键字,服务由属性组成。
- 一个BLE设备可以由多个服务组成,一个服务可以包含多个特征(characteristic),一个特征可以包含多个属性。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑,但互联互通就会出问题。
09-GAP层
- GAP(Generic Access Profile, 通用访问规范):定义了所有蓝牙设备的基础功能,设备间发现、连接、配对绑定的流程;蓝牙设备中四种角色;广播和扫描响应报文的格式;还有一些通用蓝牙参数定义,比如设备地址、名称、配对秘钥和设备的外观特征值,用于区分是什么设备,手机还是电脑;明确了作为一个低功耗蓝牙设备的基本需求,包含哪些层级以及如何协同工作的。 规范了一些通用的蓝牙参数:蓝牙设备地址、设备名称、配对秘钥、外观特征值(用于区分设备是手机还是电脑)。 其他详情可参考
《Core_v5.3.pdf》中 Part C: Generic Access Profile 章节部分。
参考:
蓝牙协议学习入门 - SeeDeer的博客
蓝牙技术联盟核心规范: b55K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3u0D9N6h3g2@1L8$3!0@1K9q4)9J5k6h3y4G2L8b7`.`.
九筒网络安全研究社,专注于汽车安全、车联网安全、IoT安全、工控安全领域的研究!
团队博客: 九筒网络安全研究社 - 团队博客
GitHub: 32cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1j5&6i4K6u0V1N6r3!0F1k6H3`.`.
微信公众号:九筒网络安全研究社
CSDN: 九筒网络安全研究社 - CSDN
看雪论坛: 九筒网络安全研究社 - 看雪论坛
FreeBuf: 九筒网络安全研究社 - FreeBuf
腾讯开发者社区: 九筒网络安全研究社 - 腾讯云开发者社区
知乎: 九筒网络安全研究社 - 知乎
作者
