4. 配网流程(Provisioning):配网角色、配网协议、配网过程详解
配网,说白了就是把一个还没入网的设备,正式拉进蓝牙Mesh网络的过程。我刚开始接触蓝牙Mesh时,觉得配网不就是发个密码吗?后来踩了坑才发现,这里面的门道还真不少。
配网是整个Mesh网络的入口。设备能不能安全、可靠地加入网络,全靠这一步。咱们今天就把配网这件事彻底讲透。
4.1 配网角色:谁在干活?
配网过程中,有两个核心角色。你想想看,一个要入网,一个负责拉它入网,就这么简单。
- 未配网设备(Unprovisioned Device):就是那个还没入网的新设备。它处于广播状态,等着被“领走”。
- 配网器(Provisioner):负责把未配网设备拉进网络。配网器可以是手机App、网关,甚至是一个专门的开发板。
我个人习惯把配网器想象成“门卫”。它要验证新设备的身份,给它分配网络地址,还要告诉它网络的密钥。嗯,这个比喻挺形象的。
关键点:配网器必须是一个可信的设备。如果配网器被篡改,整个网络的安全性就崩塌了。我在项目中遇到过有人用不安全的手机App做配网器,结果网络密钥被截获,整个系统都得重来。
4.2 配网协议:数据怎么传?
配网协议定义了配网过程中数据交换的格式和流程。它基于蓝牙的PB-ADV(Advertising Bearer)或PB-GATT(GATT Bearer)来传输数据。
说白了,就是配网器和未配网设备之间,通过广播包或者GATT连接来“对话”。
| 承载方式 | 说明 | 适用场景 |
|---|---|---|
| PB-ADV | 基于蓝牙广播包,不需要建立连接 | 设备数量多、快速配网场景 |
| PB-GATT | 基于GATT连接,需要先配对 | 手机App配网、需要交互的场景 |
我记得有一次做智能照明项目,客户要求所有灯必须在5秒内完成配网。用PB-ADV就搞定了,因为广播包不需要握手,速度更快。但如果需要用户输入PIN码,那就得用PB-GATT了。
4.3 配网过程详解:五步走
配网过程分为五个步骤。每一步都有明确的目的和协议交互。咱们一步步来看。
4.3.1 第一步:信标广播(Beaconing)
未配网设备会定期广播一个特殊的包,叫“未配网设备信标”。这个包里包含了设备的UUID和一些能力信息。
配网器扫描到这些信标后,就知道附近有设备等着入网了。
小技巧:如果你发现设备一直搜不到,可以检查一下信标广播间隔。有些设备为了省电,广播间隔设得很长,比如5秒一次。我建议调试时把间隔设短一点,比如200ms,等配网成功后再改回去。
4.3.2 第二步:邀请(Invitation)
配网器发现设备后,会发送一个“配网邀请”包。这个包的作用是:告诉设备“我要给你配网了,把你的能力报上来”。
设备收到邀请后,会回复一个“配网能力”包。里面包含了设备支持的安全算法、公钥类型、输入输出能力等信息。
举个例子,如果设备没有显示屏也没有按键,那它只能通过“无输入无输出”方式配网。配网器就得根据这个信息,选择合适的认证方式。
4.3.3 第三步:交换公钥(Exchange Public Keys)
这一步是为了建立安全通道。配网器和设备各自生成一对椭圆曲线密钥(P-256),然后交换公钥。
为什么要交换公钥?因为后续的认证和密钥分发,都要基于这个公钥进行加密。说白了,就是先互相认识一下,建立信任基础。
我曾经遇到过一个坑:设备生成的公钥是固定的,没有随机化。结果攻击者可以重放公钥,破解后续的加密通信。嗯,这个问题后来通过固件升级解决了。
4.3.4 第四步:认证(Authentication)
认证是配网中最关键的一步。它要确认:配网器和设备都是合法的,不是假冒的。
认证方式有三种:
- 无输入无输出(No OOB):不需要用户交互,直接认证。安全性最低,适合简单设备。
- 静态OOB:设备上有一个固定的PIN码,用户输入后完成认证。安全性中等。
- 动态OOB:设备生成一个随机数,用户通过某种方式(比如扫描二维码)输入。安全性最高。
注意:千万不要在生产环境中使用“无输入无输出”方式。我见过有人图省事,所有设备都用No OOB配网,结果网络被轻易入侵。你想想看,如果智能门锁用No OOB,那跟没锁有什么区别?
认证过程中,配网器和设备会交换一系列确认值。如果确认值匹配,认证通过。否则,配网失败。
4.3.5 第五步:分发数据(Distribution of Provisioning Data)
认证通过后,配网器会生成并分发以下数据给设备:
- 网络密钥(NetKey):用于网络层加密,所有节点共享。
- 应用密钥(AppKey):用于应用层加密,不同应用可以有不同的密钥。
- 单播地址(Unicast Address):设备在网络中的唯一地址。
- 设备密钥(Device Key):用于设备与配网器之间的安全通信。
这些数据都是加密传输的。设备收到后,会保存到非易失性存储器中。这样,即使设备断电重启,也能直接加入网络,不需要重新配网。
避坑指南:我曾经在项目中遇到一个问题:设备配网成功后,重启就丢失了网络密钥。查了半天,发现是Flash写入操作没有做掉电保护。写入一半时断电,数据就损坏了。解决方案是:先擦除再写入,并加上校验和。
4.4 配网后的状态变化
配网完成后,设备的状态会发生以下变化:
- 从“未配网设备”变为“已配网节点”。
- 停止广播未配网信标,开始参与Mesh网络通信。
- 可以接收和转发Mesh消息。
嗯,到这里,配网流程就全部结束了。设备正式成为Mesh网络的一员。
4.5 小结
配网是蓝牙Mesh的入口,也是安全的第一道防线。我个人觉得,配网设计得好不好,直接决定了整个网络的可靠性和安全性。
如果你正在做产品开发,我建议你:
- 优先使用动态OOB认证,至少也要用静态OOB。
- 配网数据写入Flash时,做好掉电保护。
- 调试时缩短信标广播间隔,量产时再调回正常值。
下一章,咱们聊聊节点入网后的“心跳”——心跳消息和节点移除机制。到时候见。