配网流程
* Beacon(信标)广播:未配网设备发广播告知配网者我未配网。
信标是一个传统的BLE的应用场景。蓝牙mesh提供了同样的广播机制。
如果一个未配网的设备支持PB-ADV bearer, 它就会广播 未配网设备信标。这是一个特别的报文,使得配网器provisioner能够发现这个设备。
如果使用的是PB-GATT bearer,需要一个叫做Mesh Provisioning Service的 GATT Service。通过beacon包中UUID来判断对应需要配网的设备。配网器是通过标准的BLE SCAN(扫描)的流程来找到这个设备的。
(用户可能需要根据制造商的说明,按照一定的流程,例如键入一组按钮,或将某一按钮长按一段时间等,以此方式启动新设备的广播。)
用户还需要在provisioner设备中启动“添加设备到网络”的流程,以便从Beacon(信标)设备接收广播数据包。需要记住的一点是,provisioner设备可能是智能手机或平板电脑应用,因此在实际操作中会涉及到智能手机解锁、应用程序启动、也许还需要登录应用程序(为了进一步确保安全性),并通过其用户界面启动Beacon设备搜寻。这样,provisioner设备就会意识到新设备的存在和准备就绪状态,可进入后续的启动配网流程。
* 邀请:信标阶段结束以后,配网器和未配网设备通过PB-ADV或者PB-GATT进行了初步的接触,接下来配网器会发送一个配网邀请PDU,未配网设备就会相应的发一个响应包来回应有关自身的信息。(这些信息将用于认证(Authentication)步骤)
* 交换公共密钥:配网设备将与待配网的设备交换公共密钥,来创建安全通道,以完成剩余的配网流程。
蓝牙mesh 协议规定在交换公钥阶段,可以使用两种算法交换设备的 ECDH 公共密钥:通过蓝牙通道进行明文交换,通过00B 隧道进行交换。在邀请阶段,设备会告知配网器是否存在 00B 公钥,而配网器在交换公钥的第1条信息中,则告知设备是否使用 OOB 公钥。使用 00B 公钥交互方式可以较为可靠地预防中间人攻击,对安全性有很大的提升。当邀请阶段结束后,配网器即开始与末配网设备进入交换公钥的交互流程。
provisiooing start (配网开始)消息由配网器发送给未配网设备。
配网开始消息表示配网器告诉未配网设备公钥交换流程开始,配网需从前面的provisioning Capabiliy (配网能力) 消息中选择公钥交换流程的具体參数。
* 认证(Authentication):配网设备会基于对新设备功能的了解,向其发送消息,指示其输出单一或多位数值,即对其所支持的多种用户操作(例如按下按钮)作出响应;然后,待配网设备和配网设备交换密码散列。
* 启动配置数据的分配: 认证成功完成之后,会通过两台设备的私有密钥(Private Key)和交换的对等公共密钥生成会话密钥(Session Key)。随后,会话密钥即可用于保护完成启动配置流程所需数据的后续分发,包括网络密钥(NetKey)和设备的唯一地址,即单播地址(Unicast Address)。
注: 配网阶段:provisioner为设备分配单播(mesh)地址和netkey;配置阶段:节点使用DevKey,provisioner为节点配置发布地址,订阅地址等(可选的配置),配置完成后,节点元素使用netkey(用于网络层安全,使相同netkey的节点在一个网络中,节点通过广播方式发布消息,若配置发布地址则发布消息到配置的地址A;若节点未配置订阅地址A则该节点就不能处理该消息),AppKey(用于保护应用层消息,仅用于provisioner(配置者)与provisionee(被配置者)之间进行私有通信,即再次配置时使用)。
【组内节点可以只配置发布地址到组播地址,不配置订阅地址到组播地址,即可实现组内其他节点发布消息到组播地址时,该节点可以不处理】
网络配置参数
关于对节点特征的定义
Role:定义扮演的mesh角色,一种是device角色,一种是provisioner角色,前者是被配置设备,后者是给人配置的设备。
Relay:置一表示支持中继角色
Proxy:置一表示支持代理角色
Fn:置一表示支持friend角色
Lpn:置一表示支持低功耗角色
Prov:置一表示在系统开始后会先广播入网配置广播(PB-GATT)
Snb:置一表示状态可以被config beacon改变
Bg_scan:置一表示在系统开始后会进行扫描
组网时,provisioner会获取节点支持的model id(即节点支持那些功能,是server midel还是client model)
参考:
https://blog.csdn.net/qq_38531460/article/details/125509061