一、BLE连接概览
BLE连接相比经典蓝牙有显著差异:
-
无连接模型:基于广播(Advertising)和扫描(Scanning)
-
快速连接:典型连接建立时间 < 3ms
-
状态简化:仅4种状态(Standby/Advertising/Scanning/Initiating/Connection)
-
跳频简化:40个信道(2MHz间隔),37个数据信道 + 3个广播信道
二、广播与扫描阶段
- 广播类型与事件
| 广播类型 | 说明 | 应用场景 |
|---|---|---|
| Connectable Undirected | 可连接无定向广播 | 最常见,允许任何设备连接 |
| Connectable Directed | 可连接定向广播 | 快速连接已知设备(白名单) |
| Scannable Undirected | 可扫描无定向广播 | 允许扫描响应,不可连接 |
| Non-connectable | 不可连接广播 | 仅广播数据(如Beacon) |
| Scan Response | 扫描响应 | 响应主动扫描的额外数据 |
- 广播信道与数据信道分布
cpp
广播信道(3个):37(2402MHz), 38(2426MHz), 39(2480MHz)
数据信道(37个):0-36,自适应跳频(AFH)
三、完整连接流程图

图1:BLE完整连接流程图说明
此流程图展示了BLE设备从上电到应用通信的完整生命周期,关键阶段解析如下:
-
角色选择(节点B):BLE连接前必须确定角色。外围设备(Peripheral,从设备)进入广播状态,周期性在3个广播信道发送数据;中心设备(Central,主设备)进入扫描状态,监听广播信道发现设备。角色不是固定的,设备可以时分复用两种角色(如手机同时作为Central连接手环,作为Peripheral被电脑连接)。
-
广播与扫描交互(C→E 与 D→F→G):外围设备以可配置间隔(20ms-10.24s)在信道37、38、39循环发送广播包(ADV_IND)。中心设备以主动或被动扫描模式监听,被动扫描仅接收广播数据,主动扫描额外发送SCAN_REQ请求扫描响应(SCAN_RSP)获取更多数据(如设备名称、发射功率)。
-
连接发起(H→I→J) :中心设备发现目标后,在同一广播信道立即发送CONNECT_IND(连接指示),包含关键参数:接入地址(Access Address,随机32位值,用于标识此连接)、CRC初始值、跳频算法参数、连接间隔、从设备延迟、监督超时等。外围设备收到后停止广播,双方进入连接状态。
-
连接后流程(K→L→M→N→O→P):进入连接状态后,立即切换到37个数据信道,使用自适应跳频(AFH)避开干扰信道。链路层(LL)协商加密,安全管理层(SMP)执行配对(根据IO能力选择Just Works/Passkey Entry/Numeric Comparison/OOB),生成并分发LTK(长期密钥)。通用属性协议(GATT)执行MTU交换(默认23字节,最大512字节)和服务发现,最后应用层通过特征值读写或通知进行数据通信。
-
连接维护(Q分支):BLE支持连接参数更新(Connection Parameter Update)动态调整通信间隔(7.5ms-4s)以平衡功耗和吞吐量;无数据传输时进入睡眠,通过连接事件(Connection Event)周期性唤醒。断开时发送LL_TERMINATE_IND,双方返回初始状态。
四、链路层(LL)连接建立时序

此序列图详细展示了BLE链路层(Link Layer)从广播到加密通信的精确时序,体现BLE"无连接"模型的本质:
-
广播阶段(步骤1-4) :外围设备的链路层以
T_advEvent间隔(由advInterval+ 随机延迟0-10ms组成,避免多设备碰撞)在3个广播信道循环发送ADV_IND广播包,包含自身地址(AdvA)和广播数据(AdvData)。中心设备可发送SCAN_REQ请求扫描响应,外围设备返回SCAN_RSP补充设备名称、128位UUID等元数据。此过程完全单向,不建立任何持久状态。 -
连接建立阶段(步骤5-8) :这是BLE连接的关键创新。中心设备不通过配对或协商建立连接,而是单方面发送CONNECT_IND,包含:
-
Access Address:随机生成的32位值,成为此后数据信道的物理层同步字
-
Hop Increment:5-16的跳频步长,与信道映射共同决定跳频序列
-
Channel Map:37位掩码,标记可用/不可用数据信道(AFH基础)
-
连接参数:间隔(1.25ms倍数)、从设备延迟(可跳过N个连接事件)、监督超时
外围设备收到后立即停止广播 ,双方基于公式
nextChannel = (currentChannel + hopIncrement) mod 37计算跳频序列,进入连接状态。 -
-
连接事件机制(步骤9-12) :BLE连接不是持续占用信道,而是周期性的"连接事件"。在每个
connInterval(如50ms),中心设备在计算的数据信道上发送数据(或空PDU维持同步),外围设备必须在150±2μs内响应。这种时分双工(TDD)机制是BLE低功耗的核心------设备在连接事件间可深度睡眠。 -
连接参数更新(步骤13-14):初始参数由中心设备在CONNECT_IND中强制指定,但外围设备可通过L2CAP信号或LL层请求更新,动态调整间隔(如从50ms改为1s以省电)或监督超时。
-
加密启动(步骤15-19) :配对完成后,链路层使用生成的Session Key(SK)启动加密。中心设备发送
LL_ENC_REQ携带随机数(Rand)、加密 diversifier(EDIV)和SK的一部分(SKDm),外围设备响应SKDs,双方组合成完整SKD生成会话密钥,通过LL_START_ENC序列启用AES-CCM加密。 -
连接终止(步骤20-22) :正常断开时一方发送
LL_TERMINATE_IND携带原因码(如User Terminated Connection);异常断开(如超出监督超时、瞬间干扰导致连续丢包)由链路层自动检测并上报。
五、GAP层配对流程详解

图4:BLE GAP层配对流程时序图说明
此图展示了BLE 4.2+引入的LE Secure Connections配对流程,相比Legacy Pairing大幅提升安全性,分为五个阶段:
-
阶段1:配对特征交换(步骤1-3) :中心设备发起
Pairing Request,携带IO能力(Display/Keyboard/None/YesNo)、OOB数据可用性、认证需求(MITM保护、绑定、SC支持)和最大密钥长度。外围设备响应Pairing Response,双方协商使用LE Secure Connections(椭圆曲线)还是Legacy Pairing(传统TK),并确定最终认证方法。 -
阶段2:认证阶段1(步骤4-分支):根据IO能力选择三种方法之一,与经典蓝牙SSP类似但基于椭圆曲线:
-
Numeric Comparison:双方交换公钥(P-256曲线),计算并承诺Commitment值,交换Nonce后各自计算6位数字。用户确认两设备显示数字相同,可防止MITM攻击。这是BLE最安全且用户友好的方法。
-
Passkey Entry:一方输入6位密码,另一方显示,通过20轮逐位验证(每轮交换Commitment和Confirm值),适合一方无显示器场景(如键盘配对PC)。
-
Just Works:直接交换公钥计算密钥,无MITM保护,仅防止被动窃听,用于双方均无IO能力(如两个传感器)。
-
-
阶段3:认证阶段2(步骤5-6) :双方使用椭圆曲线Diffie-Hellman(ECDH)计算共享密钥DHKey,交换
DHKey Check值验证计算一致性,确认无中间人篡改公钥。此阶段确保密钥的前向安全性。 -
阶段4:密钥计算与分发(步骤7-12):基于DHKey派生三种密钥:
-
LTK(Long Term Key):16字节,用于链路层加密,配合EDIV和Rand存储
-
IRK(Identity Resolving Key):用于解析私有地址(Resolvable Private Address),保护设备隐私
-
CSRK(Connection Signature Resolving Key):用于签名数据(Signed Write),无加密时提供数据完整性
双方通过SMP协议交换这些密钥,实现绑定(Bonding)------永久存储配对信息供下次快速重连。
-
-
阶段5:启用加密(步骤13-15) :配对完成后,链路层使用LTK启动加密(通过
LL_ENC_REQ),后续所有数据传输经AES-CCM加密,配对流程结束。