Ble Mesh技术(七)之Network Layer

Network Layer负责消息的二次加解密,以及消息中继,代理的操作。

1. Network Layer消息格式

网络层数据大小为18-29字节
Ble Mesh技术(七)之Network Layer_第1张图片

Field Name Size(bits) Notes
IVI 1 32bits IV值的最低有效位
NID 7 由NetKey生成的7bits NID
CTL 1 CTL=0,表明这条消息是access msg;CTL=1,表明这条消息是control msg。
TTL 7 Time To Live值
SEQ 24 Sequence Number
SRC 16 源地址
DST 16 目的地址
TransportPDU 8-128 传输层下发的数据载荷。CTL=0, 最大载荷为128bits;CTL=1,最大载荷为96bits。
NetMIC 32/64 Network Message Integrity Check。CTL=0,NetMIC =32bits;CTL=1,NetMIC=64bits。

当网络层的数据为分段接入层消息(Segmented Access message),其最小长度为5字节,此时的NetMIC为4字节,所以接入层消息在网络层封装后的最小长度为9+9=18字节。
当网络层的数据为未分段控制消息(Unsegmented Control message),其最小长度为1字节,此时的NetMIC为8字节,所以控制消息在网络层封装后的最小长度为9+9=18字节。
所以Network层的消息最小长度为18字节,最大长度为满载荷29字节。

2. Relay/Proxy

网络层负责消息的转发。
若当前节点支持中继,且接收到的消息TTL大于2,目的地址非本节点元素的单播地址。则该消息可以被中继,将TTL减1,附加一个随机延迟,然后再广播出去。
若当前节点支持代理,且接收到的消息TTL大于2,目的地址非本节点元素的单播地址。若该消息来自GATT连接,则该消息TTL减1,再通过ADV Bearer转发出去;若该消息来自ADV Bearer,则该消息TTL减1,再通过GATT Bearer转发出去。

3. Network Message Cache

TTL从时间上保证了一条消息不能无限次中继,每中继一次TTL减1,为1时就不再中继。
而Network Message Cache就从空间上保证,同一条消息不会被同一节点中继两次。

4. Network Layer消息接收

① 检查NID是否匹配已知的NID。
② 授权匹配NetKey。
③ 检查SRC/DST是否有效。
④ 检查是否处于cache中。
⑤ 上报至传输层。
⑥ 检查是否可以被代理或中继。

5. Network Layer消息发送

① 设置IVI域为32bits IV只得最低有效位。
② 设置NID域为通过加密key生成的NID。
③ 对DST和TransportPDU进行加密,生成NetMIC。
④ 对CTL/TTL/SEQ/SRC进行混淆处理。
⑤ 将消息发送至所有的网络接口,通过该接口规则对消息进行过滤,然后发送至Bearer Layer。

你可能感兴趣的:(BLE,MESH)