目录
[一. BLE协议栈总览](#一. BLE协议栈总览)
[二. 逐层详解(从下往上)](#二. 逐层详解(从下往上))
[2.1 PHY(物理层)------卡车与公路](#2.1 PHY(物理层)——卡车与公路)
[2.2 链路层(Link Layer)------仓库调度员](#2.2 链路层(Link Layer)——仓库调度员)
[2.3 HCI(主机控制器接口)------对讲机系统](#2.3 HCI(主机控制器接口)——对讲机系统)
[2.4 L2CAP(逻辑链路控制与适配协议)------分拣中心](#2.4 L2CAP(逻辑链路控制与适配协议)——分拣中心)
[2.5 SMP(安全管理协议)------安保协商服务(可选)](#2.5 SMP(安全管理协议)——安保协商服务(可选))
[2.6 ATT(属性协议)------快递单](#2.6 ATT(属性协议)——快递单)
[2.7 GATT(通用属性规范)------包裹打包规范](#2.7 GATT(通用属性规范)——包裹打包规范)
[2.8 GAP(通用访问规范)------业务流程](#2.8 GAP(通用访问规范)——业务流程)
[2.9 应用层(APP)------你(寄件人/收件人)](#2.9 应用层(APP)——你(寄件人/收件人))
[三. 数据包传输示例:心率传感器发送一次心率值](#三. 数据包传输示例:心率传感器发送一次心率值)
[四. 总结](#四. 总结)
一. BLE协议栈总览
BLE协议栈采用分层设计,如图1-1所示。
图1-1 蓝牙体系结构
各层之间通过标准接口通信,下层为上层提供服务,上层调用下层功能。这种分层结构使得协议栈易于实现、维护和扩展。对于刚接触的友友,我就类比生活中的实际情况来帮助大家一起了解一下,如表格1-1所示。
| 层 | 全称 | 比喻角色 |
|---|---|---|
| PHY | 物理层 | 卡车与公路 |
| LL | 链路层 | 仓库调度员 |
| HCI | 主机控制器接口 | 对讲机系统 |
| L2CAP | 逻辑链路控制与适配协议 | 分拣中心 |
| ATT | 属性协议 | 快递单 |
| GATT | 通用属性规范 | 包裹打包规范 |
| SMP | 安全管理协议 | 安保协商服务(可选) |
| GAP | 通用访问规范 | 业务流程 |
| APP | 应用层 | 你(寄件人/收件人) |
| [表格1-1 ble层级模型] |
二. 逐层详解(从下往上)
2.1 PHY(物理层)------卡车与公路
技术职责:
- 负责实际的无线电信号收发,工作在2.4GHz ISM频段(2.400-2.4835GHz)。
- 划分了40个信道,每个信道带宽2MHz 。其中3个是广播信道(37、38、39),用于设备发现和广播;其余37个是数据信道,用于连接后的数据传输。如图2-1所示。
- 调制方式为GFSK(高斯频移键控),支持多种物理层模式:
- LE 1M:1Mbps速率,最常用。
- LE 2M:2Mbps速率,吞吐量更高,但功耗稍大。
- LE Coded:带有前向纠错编码,传输距离更远(可达数百米),但速率降低(125kbps或500kbps)。
图2-1 ble信道及中心频率
比喻解读 :
PHY就是运输的卡车和公路。卡车(无线电波)在2.4GHz这条高速公路上行驶,运送着货物(数据比特)。不同的物理层模式好比不同型号的卡车:LE 1M是普通卡车,LE 2M是快递小跑车,LE Coded是越野重卡,虽然慢但能跑更远。
2.2 链路层(Link Layer)------仓库调度员
技术职责:
- 控制射频状态机,管理设备的五种状态:**就绪、广播、扫描、发起、连接,**如图2-2所示。
- 负责广播信道 和数据信道的调度。在广播态,设备在三个广播信道上发送广播包;在连接态,调度员根据连接参数(连接间隔、从机延迟、监督超时)安排数据包的收发时机。
- 实现自适应跳频:每次通信都切换到不同的数据信道,以避开干扰,提高可靠性。
- 数据包封装:添加前导码、访问地址、CRC校验等,保证数据完整。
- 可选加密:链路层可对数据包进行加密(使用AES-128),但通常SMP负责密钥管理。
关键概念:
- 广播包:包含设备地址、设备名称、广播数据等,用于被发现。
- 数据包:在连接中传输,包含L2CAP数据。
- 连接间隔:两个相邻连接事件之间的时间,范围7.5ms~4s,直接影响功耗和实时性。
- 从机延迟:允许从设备跳过若干连接事件,以省电。
图2-2 链路层状态机
比喻解读 :
链路层是仓库调度员。他指挥着卡车队伍:派几辆广播车(广播包)在固定路线上来回宣传;一旦有客户(中心设备)响应,就建立专线(连接),调度员决定每辆专线卡车的发车时间(连接间隔)和可以跳过的次数(从机延迟),并根据实时路况(跳频算法)选择最佳路线,避免拥堵。
2.3 HCI(主机控制器接口)------对讲机系统
技术职责:
- HCI是主机(Host) 与控制器(Controller) 之间的标准接口(interface)。主机通常运行在应用处理器上(如手机AP),包含L2CAP及以上层;控制器则是蓝牙芯片硬件,包含链路层和PHY。
- HCI通过物理总线(UART、USB、SDIO等)传输命令、事件和数据。主机发送HCI命令给控制器,控制器执行后返回HCI事件;数据则通过HCI数据包在两边传递。
比喻解读 :
HCI就像是办公室(主机)和仓库(控制器)之间的对讲机系统。办公室通过对讲机下达指令(如"发一辆广播车"),仓库执行后汇报情况(如"已发出");实际的货物(数据)也通过对讲机通道交换。对讲机的物理形式可以是各种线缆(UART、USB),但通信语言(HCI协议)是统一的。
2.4 L2CAP(逻辑链路控制与适配协议)------分拣中心
技术职责:
- 协议多路复用:上层可能有多个协议(如ATT、SMP),L2CAP为它们分配不同的逻辑信道(用CID标识),并把数据分发到正确的上层。
- 分段与重组:上层的ATT MTU可能很大(比如512字节),而链路层最大数据包长度只有27字节(后来扩展到251字节)。L2CAP负责将大的ATT PDU拆分成多个链路层数据包,在接收端再组装起来。
- 此外,L2CAP还支持面向连接的信道 (用于可靠传输)和无连接的信道(用于广播)。
关键概念:
- CID(信道标识符) :用于区分不同逻辑信道,如ATT固定使用0x0004,SMP固定使用0x0006。0x0005 是 L2CAP 的"低功耗信令信道"。
- MTU(最大传输单元):L2CAP层能接收的最大数据包大小,默认23字节(减去L2CAP头后实际ATT有效载荷为20字节),可通过协商增大。
比喻解读 :
L2CAP是分拣中心。来自不同部门(ATT、SMP)的包裹汇集到这里,分拣员根据CID把它们放到不同的传送带上。如果某个部门的包裹太大(比如ATT的"快递单"特别长),分拣中心会把它拆成几个小包裹,分别装车,到达目的地的分拣中心后再重新组装,交给对应的部门。
2.5 SMP(安全管理协议)------安保协商服务(可选)
技术职责:
- SMP负责BLE设备之间的配对、密钥生成、身份验证和加密,确保通信安全。
- 主要流程:
- 配对(Pairing):交换配对信息,生成短期密钥(STK)用于加密链路。
- 绑定(Bonding):存储长期密钥(LTK),后续连接可直接复用,无需重新配对。
- 加密:使用密钥对链路层数据包进行加密(AES-128)。
- 身份验证:通过数字比较、密码输入、OOB等方式验证设备身份,防止中间人攻击。
比喻解读 :
SMP是安保协商服务。当两个设备第一次打交道(配对)时,需要核实对方身份(身份验证),并约定一个临时密码(STK)加密通信内容。如果以后要长期合作(绑定),就互相存下对方的长期密钥(LTK),下次见面直接对暗号,不用重复身份核实。整个过程中,所有的货物(数据)都被加密,只有合法收件人才能拆包。
2.6 ATT(属性协议)------快递单
技术职责:
- ATT定义了客户端-服务器 模式下数据交互的基本单元------属性(Attribute),以及对该属性的操作(读、写、通知、指示等)。
- 每个属性由四个部分组成:
- 句柄:属性的唯一16位索引。
- 类型:用UUID标识,如0x2A37表示"心率测量"。
- 权限:对该属性的读写、安全权限(如是否需要加密)。
- 值:实际数据(如心率数值88)。
- ATT PDU(协议数据单元)有多种类型,如读请求(Read Request)、读响应(Read Response)、写命令(Write Command,无需应答)、通知(Notification,无需应答)、指示(Indication,需要应答)等。
比喻解读 :
ATT就是快递单。每一张快递单(属性)上都有唯一的单号(句柄)、物品分类(UUID)、收发要求(权限)和具体内容(值)。客户端(如手机)可以查看快递单内容(读请求),可以修改内容(写请求),也可以要求服务器(如心率设备)定期把新内容填上去并通知自己(通知/指示)。
2.7 GATT(通用属性规范)------包裹打包规范
技术职责:
- GATT基于ATT,定义了如何使用属性来构建具有实际意义的服务(Service) 和特征(Characteristic),形成规范的数据模型。
- 服务:包含一个或多个特征,用于描述设备的一个功能模块,例如"心率服务"(包含心率测量特征和心率传感器位置特征)。
- 特征 :包含一个值 (Value)和零个或多个描述符(Descriptors)。值存放具体数据,描述符描述值的属性(如单位、表示格式、是否可通知)。
- 服务、特征和描述符本身也是属性,通过特定的UUID进行标识。
比喻解读 :
GATT是包裹打包规范。它规定了一个包裹(服务)里应该有哪些物品(特征),物品如何包装(特征声明),以及附带的说明书(描述符)。例如"心率服务"包裹里有一个"心率测量"物品(特征),它的值就是心率数,旁边还附带了一张小卡片(描述符)写着"单位是bpm"。手机作为客户端,按照这个规范就能轻松解析出心率数据。
2.8 GAP(通用访问规范)------业务流程
技术职责:
- GAP定义了设备在BLE网络中的角色 和工作模式 :
- 广播者(Broadcaster):只发送广播包,不接收连接。
- 观察者(Observer):只扫描广播包,不发起连接。
- 外设(Peripheral):可广播,可接受连接(如心率传感器)。
- 中心(Central):可扫描,可发起连接(如手机)。
- 管理设备发现:通过广播包携带设备名称、UUID等信息,让周围设备知道自己的存在。
- 管理连接建立:中心设备收到广播后,可发起连接请求,双方进入连接态。
- 处理连接参数更新:连接后可协商新的连接间隔等参数。
比喻解读 :
GAP是业务流程,规定了整个快递业务怎么开展。比如,有的车只负责到处广播(广播者),有的车专门在路边看广告(观察者),有的车既打广告又愿意接单(外设),有的车专门找广告车谈合作(中心)。业务流程还规定了广告牌上要写什么信息(广播数据),以及双方达成合作的具体步骤(连接流程)。
2.9 应用层(APP)------你(寄件人/收件人)
技术职责:
- 应用层是最终用户逻辑,由开发者实现。它利用GATT/GAP API,完成具体的业务功能,比如读取心率数据、发送开关指令等。
- 应用层不关心数据如何打包、传输,只关心数据的内容和含义。
比喻解读 :
应用层就是你本人------寄件人或收件人。你决定寄什么(心率数据),或者想看什么(手机显示心率)。至于快递公司怎么运、走哪条路,你完全不用操心,只需要把包裹交给客服(GATT API)即可。
三. 数据包传输示例:心率传感器发送一次心率值
假设心率传感器(外设)测量到心率值为80bpm,并通过"通知"发送给手机(中心)。数据从应用到PHY的封装过程如下:
- 应用层:产生心率值80,调用GATT API发送通知。
- GATT层:将心率值打包进"心率测量"特征,生成ATT通知PDU(Opcode = 通知,句柄=心率测量特征值句柄,值=80)。
- ATT层:将ATT PDU交给L2CAP,指定CID为ATT固定信道(0x0004)。
- L2CAP层:添加L2CAP头(包含CID和长度),如果ATT PDU超过链路层最大长度,则分段。这里假设MTU较小,L2CAP将数据分成两个分段。
- HCI层:每个L2CAP分段封装成HCI数据包,通过UART发送给控制器。
- 链路层:控制器接收HCI数据包,组装成链路层数据包(添加访问地址、LLID、CRC等),根据连接参数和跳频算法,选择下一个数据信道,在下一个连接事件中通过PHY发送。
- PHY层:将数据包调制成GFSK射频信号,在2.4GHz频段发送出去。
手机接收端则反向操作:PHY接收射频信号→链路层解析、校验→通过HCI上报主机→L2CAP重组→ATT解析→GATT解析特征值→应用层得到心率80。
四. 总结
通过"快递公司"的比喻,逐层剖析了BLE协议栈:
- PHY 是卡车和公路,负责物理传输。
- 链路层 是调度员,管理广播、连接和跳频。
- HCI 是对讲机,连接主机和控制器。
- L2CAP 是分拣中心,负责多路复用和分段重组。
- ATT 是快递单,定义数据的基本读写格式。
- GATT 是打包规范,组织成服务和特征。
- SMP 是安保,保障通信安全。
- GAP 是业务流程,规范设备发现和连接。
- 应用层 是你自己,最终的使用者。
理解BLE协议栈的分层思想,有助于我们在实际开发中快速定位问题,也为我们深入掌握蓝牙技术打下坚实基础。下一篇文章,我们将进入实战环节,讲解如何基于GATT服务与特征进行开发,实现一个简单的蓝牙应用。后续会单独给各个层级单开章节进行详细讲解。
由于个人水平有限,文中若有任何疏漏或表述不清之处,欢迎在评论区指正与交流。
后续更新预告 :我将持续更新ble系列的技术科普,下一篇计划《BLE 广播(Advertising)机制详解》。如果本文对你有帮助,欢迎点赞、收藏、关注,这是对我最大的鼓励!
五、本系列内容
本蓝牙系列文章以下内容(持续更新中):
2️⃣ BLE Advertising 机制详解
3️⃣ BLE GATT / ATT 深入理解
4️⃣ BLE Service 与 Characteristic 开发
5️⃣ BLE Notify / Indicate 机制
6️⃣ BLE 连接参数与功耗优化
7️⃣ BLE 实际开发流程
8️⃣ BLE 抓包分析(Ellisys / nRF Sniffer)