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时,做好掉电保护。
  • 调试时缩短信标广播间隔,量产时再调回正常值。

下一章,咱们聊聊节点入网后的“心跳”——心跳消息和节点移除机制。到时候见。