Ble Mesh技术(十二)之Provisioning

本文详细解析了蓝牙Mesh网络中未配网设备如何通过配网者进行配网的过程,包括配网数据格式、链路建立流程以及配网流程的四个阶段。深入探讨了ProvisioningPDUs消息类型及其参数,OOB授权机制,以及配网数据的加密传输。

任何一个出厂的mesh设备是一个未配网设备(Unprovisioned Device),需要使用配网者(Provisioner)对未配网设备进行配网,使其成为mesh网络中的一个节点。要使未配网设备成为一个节点,需要配网者为其分配一个NetKey(表示该设备属于哪一个子网),一个IV Index(表示该设备是有效的),一个Unicast Address(作为该节点的唯一标识)。配网的流程其实就是配网者如何安全有效不冲突地将这些数据下发给未配网设备。

1. 配网数据格式

配网有两种方式,一种是通过ADV广播的方式进行配网(PB-ADV),另一种是通过GATT连接的方式进行配网(PB-GATT)。

1.1. Unprovisioned Beacon

任意一个未配网设备上电后都会无限制地发送未配网Beacon(Unprovisioned Beacon),表明他期待配网者让他加入网络。未配网Beacon的数据格式如下:
unprovisionbeacon

Field Size(octets) Description
Length 1 表示后面数据的长度
AD Type 1 Mesh Beacon类型
Beacon Type 1 0x00,表示当前Beacon类型为未配网Beacon
Device UUID 16 设备唯一标识符
OOB Information 2 该设备支持的带外通信方式
URI Hash 4 URI的前4位,作为带外信息的Public Key,此域为可选项

未配网设备除了发送Unprovisioned Beacon外,还会广播一个单独的不可连接广播包,里面包含了Uniform Resource Identifier(URI),配网者可以使用这个URI值作为公钥与设备通信。Beacon中的URI hash字段表示应该使用哪个URI值,其中:
U R I _ H a s h = s 1 ( U R I _ D a t a ) [ 0 − 3 ] URI\_Hash =s1(URI\_Data)[0-3] URI_Hash=s1(URI_Data)[03]
OOB Info域一共16个bit位,每个位代表的含义如下:

Bit Description
0 Other
1 Electronic/URI
2 2D machine-readable code
3 Bar code
4 Near Field Communication(NFC)
5 Number
6 String
7 RFU
8 RFU
9 RFU
10 RFU
11 On box
12 Inside box
13 On piece of paper
14 Inside manual
15 On device
1.2. PB-GATT

手机端通过GATT连接的方式进行配网,数据通过proxy协议交互,Proxy PDU格式的Message Type设置为0x03,表示之后的Data域为Provisioning PDUs

1.3. PB-ADV

通过ADV的方式进行配网,数据格式如下:
PB-adv

Field Size(octets) Description
Length 1 表示后面数据的长度
AD Type 1 PB-ADV类型
Link ID 4 链路的标识符
Transaction Number 1 事务的标识符
Generic Provisioning PDU 1-24 配网PDU

可以看到ADV配网PDU的最大长度仍为31字节。
每一条独立的配网PDU具有不同的Transaction Number,但是分段消息的不同分段具有相同的Transaction Number。
配网者发送的Provisioning PDU中的Transaction Number范围为0x00-0x7F。0x7F的下一个TN为0x00。
未配网设备发送的Provisioning PDU中的Transaction Number范围为0x80-0xFF。0xFF的下一个TN为0x80。
在PB-ADV中最后一个字段为Generic Provisioning PDU,其详细的数据格式如下:
geneprovpdu

Field Size(octets) Description
Generic Provisioning Control 1-17 配网数据控制域
Generic Provisioning Payload 0-64 配网数据载荷

可以看出实际的Generic Provisioning PDU会大于24字节,因此这里会有分段的行为。
Generic Provisioning PDU共有四种形式:

① Transaction Start

表示开始传输分段消息,其数据格式如下:
transstart

Field Size(bits) Description
SegN 6 最后一个分段的分段号
GPCF 2 0b00,表示这条消息为Transaction Start消息
TotalLength 16 Provisioning PDU的大小
FCS 8 Frame Check Sequence
Data ≥ 8 \geq8 8 Provisioning PDU的第一个分段
② Transaction Acknowledgment

用于响应Provisioning PDU消息,其数据格式如下:
transack
Padding=0b000000,GPCF=0b01,Data域为空。

③ Transaction Continuation

表示传输分段消息附加段,其数据格式如下:
transcontinuation

Field Size(bits) Description
SegmentIndex 6 当前分段的分段号
GPCF 2 0b10,表示这条消息为Transaction Continuation消息
Data ≥ 8 \geq8 8 Provisioning PDU的分段载荷
④ Transaction Bearer Control

用于管理承载层的会话,即建立配网者与未配网设备的通道,其数据格式如下:
transcontrol

Field Size(bits) Description
BearerOpcode 6 控制消息的操作码
0x00:Link Open
0x01:Link ACK
0x02:Link Close
0x03-0x3F:RFU
GPCF 2 0b11,表示这条消息为Transaction Bearer Control消息
Parameters variable Control消息的参数

Control消息有以下三种:

A. Link Open

配网者发起,要求与未配网设备建立一个链接,设备收到后需要响应一个Link Ack消息,一个设备只能同时处理一个Link(??),因此在Link存在期间,无视Link Open消息。其数据格式如下:
linkopen
Device UUID为配网者选择的设备的UUID。

B. Link ACK

未配网设备收到配网者的Link Open消息后,响应的消息。数据格式如下:
linkack

C. Link Close

配网者和未配网设备都可发起,该消息至少发送三次,不需要ack。用于告知对端链路关闭,当前配网流程结束及配网的结果。
其数据格式如下:
linkclose
参数域为关闭原因,其具体含义如下:

Reason Value Reason Notes
0x00 Success 配网成功
0x01 Timeout 配网超时
0x02 Fail Control配网失败
0x03-0xFF Unrecognized 未定义的原因
1.4. Provisioning PDUs

PB-ADV通过Transaction Start/Acknowledgment/Continuation/Bearer Control来进行链路的建立和分段数据的发送,同样的功能PB-GATT使用Proxy协议来实现。两种方法的最终目的是为了传输Provisioning PDUs,来进行配网数据的交换。
Provisioning PDUs的消息格式如下:
provpdus

Field Size(bits) Description
Padding 2 0b00
Type 6 Provisioning PDUs的类型
0x00:Provisioning Invite
0x01:Provisioning Capabilities
0x02:Provisioning Start
0x03:Provisioning Public Key
0x04:Provisioning Input Complete
0x05:Provisioning Confirmation
0x06:Provisioning Random
0x07:Provisioning Data
0x08:Provisioning Complete
0x09:Provisioning Failed
0x0A-0xFF:RFU
Parameters variable Provisioning PDUs的消息参数

配网PDU根据功能不同分为以下几种类型。

① Provisioning Invite

配网者发起,表明配网程序开始。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值