承载层将网络层的数据通过ADV或者GATT的方式广播出去,并把各个接口接收到的数据送至网络层。
1. Advertising Bearer
通过广播进行数据收发。
发送数据的广播类型为不可连接,不可扫描,不可定向广播类型。
mesh在Bearer层的数据格式如下:
Filed | Size(octs) | Notes |
---|---|---|
Length | 1 | 表示当前数据包的总长度 |
AD Type | 1 | 表示当前数据包为Mesh数据包 |
NetworkPDU | 18-29 | Network层的PDU |
mesh数据的接收则通过广播承载层,开启尽可能全窗的扫描事件。
2. GATT Bearer
有的设备不支持广播承载层,(比如手机的蓝牙限制了广播的参数设置等??),导致不能通过广播的方式进行mesh消息的发送,要想加入mesh网络可以通过建立GATT连接的方式,将mesh的数据包转化为proxyPDU的形式进行通信。
3. Proxy protocol
3.1. Proxy PDU
Field | Size(bits) | Notes |
---|---|---|
SAR | 2 | 0b00:表示消息是一个完整的消息 0b01:表示分段消息的第一个分段 0b10:表示分段消息的中间某一段 0b11:表示分段消息的最后一分段 |
Message Type | 6 | 0x00:Network PDU 0x01:Mesh Beacon 0x02:Proxy Configuration 0x03:Provisioning PDU 0x04-0x3F:RFU |
Data | variable | message |
3.2. Proxy filtering
每个代理过来的消息,接收端收到都要进行dst地址的检查,为了避免无效地址的消息,在代理端增加过滤机制。配置黑白名单,通过Message Type=0x02的Proxy PDU来配置,其Data域的数据格式如下:
Field | Size(octs) | Notes |
---|---|---|
Opcode | 1 | 0x00:设置过滤表类型 0x01:添加地址到过滤表 0x02:删除过滤表中的地址 0x03:当前过滤表的状态 0x04-0xFF:RFU |
Parameters | Variable | 消息参数 |
每个Opcode对应的Parameters对应的格式如下:
Opcode | Parameters | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Size(octs) | Notes | |||||||||||||
0x00 | 1 | 0x00:白名单 0x01:黑名单 0x02-0xFF:Prohibited | ||||||||||||
0x01 | 2*N | 需要添加的地址列表,每个地址2字节 | ||||||||||||
0x02 | 2*N | 需要删除的地址列表,每个地址2字节 | ||||||||||||
0x03 | 3 |
|
3.3. Proxy Server/Client
Client:只能使用GATT连接,不能使用ADV进行mesh通信的节点。
Server:能在ADV Bearer和GATT Bearer之间转换的节点。
① client连接server
② server端初始化过滤名单为空的白名单
③ 连接成功后,server端发送Secure Network Beacon给client端。
④ client设置过滤表类型,server响应过滤表状态。更改过滤表类型后,新的过滤表为空。
⑤ client修改黑白名单内容,两者之间根据过滤表进行通信。