蓝牙基础(四):蓝牙状态、角色、地址与网络结构
liwen01 2025.10.01
前言
在一个笔记本电脑上,它的蓝牙可以同时连接:手机,蓝牙耳机、音响、键盘、鼠标、打印机等等外设。
这些设备有些是 BR/EDR, 有些是BLE,所以笔记本电脑的蓝牙肯定是双模蓝牙,能同时支持BR/EDR 和 BLE 设备。
在这个由多个蓝牙设备组成的网络中,它们处于什么状态,各自的角色是什么,它们又是通过什么来区分彼此?
实际在不同的蓝牙版本中,它们的定义有很大的变化。
在查看蓝牙相关资料时,有些概念容易被搞混,也常常造成理解上的偏差。
(一)蓝牙状态
BR/EDR 与 BLE 使用不同的控制器,所以它们的链路控制器的状态也存在明显差异。
(1)经典蓝牙状态
STANDBY(待机状态):设备默认状态,在该状态下设备没有发出任何蓝牙射频信号,所以它功耗最低。在此状态下,它只是在等待外部命令触发状态切换。
INQUIRY(查询状态):用于主动查找附近的蓝牙设备,设备发送 Inquiry 请求,目标设备在 Inquiry Scan 状态中会响应。
INQUIRY SCAN(查询扫描状态):设备周期性监听查询请求(Inquiry packets),如果收到合法的 Inquiry 请求,设备会回应其地址和信息。
PAGE(寻呼状态):发起连接使用的状态,发起方已知目标设备的地址,发送 Page(寻呼包)尝试建立连接、Page 包中包含目标设备的 BD_ADDR、重复发送寻呼直到目标设备响应或超时。
PAGE SCAN(寻呼扫描状态):目标设备在该状态中监听寻呼包,如果接收到寻呼包,进入配对流程并建立连接。
SYNCHRONIZATION TRAIN(同步训练状态):发送一组同步包,让对方设备更容易锁定频道,减少设备发现时间。
SYNCHRONIZATION SCAN(同步扫描状态):设备监听并锁定同步训练包,成功锁定后进入下一步操作(如连接、配对)。
CONNECTION(连接状态):双方已经完成握手(Paging)并建立同步,可进行数据传输,包括 L2CAP 数据包、控制包、音频数据等。
(2)经典蓝牙 Page 状态
使用 Wireshark 搭配 Bluetooth Dongle 抓取的 HCI 数据包,你会发现:没有 Page 阶段的数据包,因为它发生在控制器内部的射频层(Baseband + LMP)。
你在 Wireshark 的 HCI 视图中只能看到:
Sent: Create Connection
Event: Connection Complete
中间的 page 流程是控制器内部完成的,这部分数据不需要经过 Wireshark,所以也就显示不了。
(3)经典蓝牙 CONNECTION 子模式
它们的关系可以简化为下面关系:
Connection State
├── Active Mode
│ ├── Sniff Mode
│ ├── Hold Mode
│ └── Park Mode
└── Connectionless Peripheral Broadcast Mode
注意:在蓝牙核心规范V5.3中,Active Mode 模式下已经没有 Park Mode 这个模式了。
Active Mode(活动模式):Active Mode 是默认模式。在此模式中,设备(从机)保持同步并始终监听主机(Master)的 Poll 包。主从设备之间的通信是持续的、周期性的。从机必须在每个主机 Poll 时间点监听,功耗较高。
Sniff Mode(嗅探模式):Sniff 模式是一种低功耗模式。从机不再持续监听,而是按照约定的 Sniff 间隔(T_sniff) 定期监听主机。其余时间从机关闭接收机进入休眠。在 Sniff 窗口期间,从机能收发数据;窗口外从机不响应主机。
例如耳机在待机播放时段,保持低功耗但仍能响应主机的控制命令。优点是节能,缺点是通信延迟变高
Hold Mode(保持模式):Hold 模式也是低功耗模式的一种,但与 Sniff 不同。从机在指定时间内完全不参与连接通信;在 Hold 时间结束后,再恢复到 Active 模式。Hold 模式通常在从机需要执行其他任务(如扫描、建立新连接、或暂时关闭射频)时使用
比如:一个设备可能暂时挂起当前连接以执行页面扫描操作(Page Scan)
(4)BLE 蓝牙状态
BLE 状态机以 Standby 为中心,其他状态围绕它转换,设计更为节能与高效。
Standby(待机)状态 :BLE默认状态为 Standby,不进行任何广播、扫描或连接操作,该模式下功耗最低。它是所有状态的中心枢纽,可跳转到任何其他状态。
Advertising(广播)状态:设备周期性发送广播包(ADV),告诉周围设备“我在这儿”。
Scanning(扫描)状态 :设备监听并接收广播包,可选择性回应广播设备,实现设备发现(如手机找蓝牙耳机)。
Initiating(发起连接)状态:主设备(Central)在此状态下发起连接请求给广播设备(Peripheral)。
Connection(连接)状态:设备之间建立了一个正式的连接。使用数据通道进行定时通信,支持读写服务、通知、长连接等操作。
Synchronization(同步)状态:用于周期性广播同步(如广播音频);设备不建立连接,仅同步获取广播内容。
Isochronous Broadcasting(等时广播)状态:BLE 5.2 引入的状态,支持等时性数据广播(如 LE Audio);广播音频数据流,无需连接即可接收;
(5)经典蓝牙与BLE蓝牙状态的区别
经典蓝牙 BR/EDR更适合持续大数据量的通信(如音频、文件传输);
BLE 更适合低功耗、间歇、小数据量通信,特别是物联网设备;
| 特性/对比点 | 经典蓝牙(BR/EDR) | BLE(低功耗蓝牙) |
|---|---|---|
| 状态机复杂性 | 更复杂,包含 Inquiry、Page 等 | 更简洁,以 Standby 为中心的放射状状态图 |
| 广播机制 | 没有通用广播,需先发现、再配对 | 支持广播和扫描机制,无需连接也能传输信息 |
| 连接建立过程 | 分为 Inquiry + Page 两阶段 | Advertising + Initiating 一步完成 |
| 功耗控制 | 设计为连续音频或数据传输,功耗较高 | 设计为间歇通信,功耗非常低 |
| 通信角色 | Piconet 主从结构(固定主从) | Central-Peripheral 灵活切换 |
| 支持的应用 | 传统音频(如耳机)、数据同步等 | IoT、传感器、手环、LE Audio 等 |
| 新特性支持 | 不支持 LE Audio 等新协议 | 支持 Periodic Advertising、Isochronous Channel 等 |
(二)蓝牙角色
在不同版本和不同模式中,蓝牙的角色有些混乱。一会是 Master/Slave, 一会又是 Central/Peripheral 。
在蓝牙5.2 之前,BR/EDR 控制器中一般称呼为 Master/Slave,BLE 控制器中一般称呼为 Central/Peripheral。
但是在蓝牙 5.3 中,它们统一称呼为 Central/Peripheral。
(1)经典蓝牙角色
经典蓝牙常见于:耳机、音箱、鼠标、键盘等
- 手机/电脑:一般做 Master(主设备),负责发起连接、控制时隙。
- 耳机/音箱/键盘/鼠标:一般做 Slave(从设备),等待手机/电脑来连。
(2)BLE 蓝牙角色
在BLE蓝牙控制器中,控制器的角色有好几个:Advertiser(广播者)、Scanner(扫描者)、Initiator(发起者)、Central(中心设备)、Peripheral(外设设备)
Advertiser(广播者):在广播信道上周期性发送广告包,一般用于被发现、连接或广播数据。
Scanner(扫描者):主动扫描广播信道,接收广告包。可以选择发出 Scan Request 获取更多信息。
Initiator(发起者):接收广播后,主动发起连接请求的一方。一旦连接成功,就转变为 Central。
Central(中心设备): 类似 Master,控制连接的时间和数据传输, 常见于手机、PC 等。
Peripheral(外设设备):被 Central 连接的一方,常见于手环、传感器、耳机等。
BLE蓝牙 从“广播 → 扫描 → 建链”过程中,角色会逐步转化:
Advertiser → Peripheral
Scanner/Initiator → Central
(3)其它层的角色
上面那说的 Central(原 Master) / Peripheral(原 Slave)是物理层 / 链路层 (Controller) 里的角色。
在蓝牙协议栈的不同层中,它们又有定义一些不同的角色
- Link Layer(底层链路角色):Central / Peripheral → 确定“谁发起连接,谁维持时钟”
- Host 层协议(GATT/ATT/SM)角色:Client / Server → 确定“谁请求,谁提供数据”
- Profile 层(应用协议角色):Source/Sink, Host/Device, Controller/Target → 确定“谁是功能提供方,谁是功能使用方”
它们之间不是一一对应的,而是逐层映射:
- 物理连接角色(Central/Peripheral) → 决定谁主导链路
- 协议角色(Client/Server) → 决定谁发起请求
- 应用角色(Source/Sink 等) → 决定谁产生/消费具体业务数据
(三)蓝牙地址
蓝牙中设备地址 Bluetooth Device Address 与 接入地址 Access Address 是两个完全不同的概念,但有时候它们容易被理解混乱。
(1)BD_ADDR 设备地址格式
每个蓝牙设备都有一个唯一的 48 位地址(6 字节),类似于以太网中的MAC 地址,用于标识设备身份。
主要应用于:设备发现与连接,访问控制(如连接白名单),通信加密中的密钥派生。
BD_ADDR 的整体格式为 :蓝牙设备地址 = NAP + UAP + LAP
| 字段 | 名称 | 位数 | 说明 |
|---|---|---|---|
| NAP | Non-significant Address Part | 16 bits | 地址的高 16 位,通常表示厂商编号(OUI),由 IEEE 分配给厂商 |
| UAP | Upper Address Part | 8 bits | 地址的中间 8 位,通常用于形成 Access Code(访问码)时使用 |
| LAP | Lower Address Part | 24 bits | 地址的低 24 位,由设备制造商分配给设备,用于唯一标识设备 |
(2)BD_ADDR 设备地址分类
BD_ADDR
├── Public Device Address (公共地址)
│ └── 来源:IEEE 注册的 EUI-48(厂家分配)
│ └── 作用:全局唯一,适用于 BR/EDR 或 BLE
│
└── Random Device Address (随机地址)
├── Static Random Address (静态随机地址)
├── Private Resolvable Address (RPA,可解析私有地址)
└── Private Non-Resolvable Address (NRPA,不可解析私有地址)
Public Device Address(公共地址):结构与普通以太网 MAC 地址完全一致,它由蓝牙设备制造商在出厂时烧录进控制器(Controller),在全世界范围内唯一。
传统蓝牙 BR/EDR(例如音箱、耳机等)几乎都使用 Public Address,设备在广播时直接使用 BD_ADDR 作为标识,可用于长期绑定(bonding)和身份识别。
Random Device Address(随机地址):因为固定的 BD_ADDR 会暴露设备身份(例如 MAC 地址可被追踪),所以 BLE 支持使用随机地址。随机地址又分为三大类。
(A)Static Random Address(静态随机地址):
在设备启动时随机生成,在一次启动周期内保持不变,通常用于无隐私要求但又不想使用公共地址的场景。比如:一些 BLE 外设(如手环、灯泡)在上电后广播自己的随机固定地址。
(B)Private Resolvable Address(RPA,可解析私有地址):
周期性变化(例如每 15 分钟更新一次),地址高2位为01;它的变化过程可被“已配对的设备”解析。比如:手机与手环已配对后,即使地址变化,仍能识别对方。
(C) Private Non-Resolvable Address(NRPA,不可解析私有地址):
周期性变化,每次广播可能都不同,完全无法解析(无 IRK 参与),地址高2位为00;主要应用于一次性连接请求,或者是不需要被识别身份的设备广播(如匿名信标)。
(3) Access Address 地址
Access Address: 是蓝牙链路层中用于标识和同步数据包的一个 32-bit(4字节)地址。
它存在于所有蓝牙物理层(PHY)数据包的包头部分,作用类似于一个“信道标识符”,帮助接收方判断接收到的数据包属于哪个连接或广播。
蓝牙中根据通信类型不同,Access Address 有两种主要用途:广播信道(Advertising Channel) 和 数据信道(Data Channel)
(A)广播信道(Advertising Channel)
所有的广播信道都使用同一个固定的 Access Address:0x8E89BED6, 这个值在规范中是固定定义的,全球蓝牙设备统一使用
它应用于:广播包(Advertising Packet)或扫描包(Scan Request/Response)
(B)数据信道(Data Channel)
当两个设备成功建立连接(Connection)后,Link Layer 会为该连接生成一个唯一的 Access Address。因此在连接阶段的 Access Address 是专属于该连接的。
(四)蓝牙网络结构
蓝牙通信体系结构(主要是 BR/EDR 模式)中定义了两种典型拓扑结构:Piconet(微微网) 和 Scatternet(散射网)
(1) Piconet(微微网)
Piconet 是蓝牙设备之间通过一条共享的物理链路建立起来的 基本网络单元。
在一个 Piconet 中,最多允许 8 个活跃设备同时参与通信(1 个 Central + 最多 7 个 Peripheral)
所有设备共享同一个:
- 跳频序列(Frequency Hopping Sequence)
- 时钟参考(Clock Reference)
- 访问码 Access Code(由 Central 的 BD_ADDR 派生)
因此,一个 Piconet 的物理信道由 Central 的 BD_ADDR 和时钟共同定义。
蓝牙 BR/EDR 使用时分双工 (TDD):每个时隙 625 μs;
Central 与 Peripheral 交替发送:
- 偶数时隙 → Central 发送;
- 奇数时隙 → Peripheral 响应;
这样实现双向通信的同步控制。
(2)Scatternet(散射网)
Scatternet 是由两个或多个 Piconet 通过共享设备互联 而成的更大网络结构。
也就是说,一个设备可以同时属于多个 Piconet,用于桥接通信。
在 Scatternet 中:某个设备可能在一个 Piconet 中充当 Central,在另一个中充当 Peripheral;
每个 Piconet 有自己独立的:时钟,跳频序列,访问码;
共享设备通过 时间分片(Time Sharing) 的方式在多个 Piconet 之间切换。
Scatternet 网络它更多是一个理论拓扑结构或过渡性历史概念,应用极少,主要存在于早期研究、学术实验和少数特种系统。
现代蓝牙体系基本以 BLE 多连接和 Mesh 网络取代了 Scatternet。
结尾
本章主要介绍了蓝牙的状态、角色、地址与网络结构,这些都是蓝牙链路层中的知识。下一章将继续介绍蓝牙链路层的数据安全、可靠性、数据组成与处理流程。

浙公网安备 33010602011771号