BLE 技术(八)--- BLE MESH 各层报文是如何设计的(上)?

本文详细介绍了SIG MESH协议中各层报文的设计和处理方式,从Bearer Layer、Provisioning、Network Layer到Transport Control messages。Bearer Layer包括Advertising Bearer和GATT Bearer,分别用于广播和GATT连接传输MESH消息。Provisioning过程涉及Unprovisioned Device Beacon和安全链路建立。Network Layer处理消息的安全寻址、过滤及分组。Transport Control messages涵盖Heartbeat、Friendship管理和分片报文确认。通过这些机制,SIG MESH确保大规模物联网设备的安全、可靠和高效通信。
摘要由CSDN通过智能技术生成

前言:

前篇博文BLE MESH 是如何设计的 介绍了SIG MESH 为解决大规模物联网设备之间安全可靠高效通信的问题,采用了哪些设计来传递消息并应对各种网络攻击的、如何支持低功耗节点和大量现有BLE GATT 节点的入网通信等。前篇博文从解决问题的角度介绍了SIG MESH 协议的设计方案,本篇博文从MESH 消息报文在各协议层的传递过程,介绍SIG 是如何设计MESH 报文结构的、又是如何处理MESH 报文消息的。
BLE MESH 消息流程图

  • Bearer Layer:定义了如何使用底层BLE 协议栈传输MESH 消息报文PDU,目前定义了Advertising Bearer 和GATT Bearer 两种承载层。其中GATT Bearer 是为了让现有无法升级MESH 协议的BLE 设备接入MESH 网络,Advertising Bearer 是MESH 协议主要的承载层,Advertising Bearer 又可分为Mesh Beacon Advertising Bearer 和Mesh Advertising Bearer,前者主要用来启动配网和更新安全密钥,后者主要用来传输消息;
  • Network Layer:定义了MESH 消息报文如何安全寻址到一个或一组元素,启动配网后分发的NetKey 就是用于网络层消息报文加解密认证和完整性校验的(实际使用的是NetKey 派生的EncryptionKey 和PrivacyKey)。网络层为不同的承载层定义了不同的网络接口(包括用于本节点内不同元素间通信的本地网络接口),可通过配置 input / output filter 对经网络接口输入或输出的消息进行过滤,从网络接口接收到的报文根据其目的地址字段判断是需要中继/代理转发还是递交上层处理;
  • Lower Transport Layer:定义了如何将上层传输层消息分段为多个网络层协议可以处理的大小,如何将来自网络层协议的分段数据重新组合为完整消息递交给上层传输层处理,还定义了用于确认重传的分段消息应答报文。如果是Friend 节点接收到了要发送给与其建立友谊关系的低功耗节点的报文,则在该层将消息报文放入对应的Friend Queue,待收到来自LPN 的Friend Poll 报文后将缓存报文发送给LPN;
  • Upper Transport Layer:定义了如何对应用消息(也即来自访问层的Access PDU)进行加解密认证和完整性校验(应用消息使用与模型绑定的AppKey 加密认证,配置消息使用为目标节点分配的DevKey 加密认证)。上层传输层也会为每个消息分配一个序列号SEQ 用于防护中继/重放攻击,该层还定义了用于管理Friendship 和Heartbeat 相关的控制报文(用于管理LPN 与FN 之间友谊建立/终止、订阅地址添加/移除、消息轮询与发送,心跳报文发布/接收、节点距离或跳数Hop count 计算等过程);
  • Access Layer:定义更高层应用程序如何使用上层传输层,比如定义应用程序数据的格式(通常指各种 Model)、定义和控制上层传输层执行的应用数据加密和解密过程(AppKey 通常是绑定到特定Model 的)、验证从上层传输层接收的数据是否适用于正确的网络和应用程序(报文中的NetKeyIndex 和AppKeyIndex 等信息)等,通过验证的消息根据目的地址和模型识别码递交给目标元素和目标模型处理;
  • Foundation Model Layer:定义了配置和管理MESH 网络及其节点设备所需的状态、消息和模型。基础模型层主要定义了两组模型:一组是配置服务端模型和配置客户端模型,MESH 网络所有设备节点都需要实现配置服务端模型(包含一系列与配置相关的状态和消息),为该设备节点提供各种配置能力(比如配置发布消息时的目的地址和TTL、元素或模型的订阅地址、设备节点可能扮演的Relay/Friend/Low Power/Proxy 角色等),用户可以使用实现了配置客户端模型的设备(比如智能手机APP)凭对应的DevKey 来获取或改变设备节点的配置状态;另一组是健康服务端模型和健康客户端模型,MESH 网络所有设备节点的主元素都需要实现健康服务端模型(包含一系列与故障相关的状态和消息),为该设备节点提供各种故障报告和诊断能力(比如当前故障、注册故障等),用户可以使用实现了健康客户端模型的设备(比如智能手机APP)凭对应的AppKey 来获取或接收设备节点的健康状态;
  • Model Layer:定义了用于标准化典型用户场景操作的模型,目前SIG MESH Model Specification 中定义了Generics、Sensors、Time and Scenes、Lighting 等四组模型,每组模型都包含一系列具体的模型,每个模型都定义了一组状态、状态间的绑定关系、作用于状态的消息、响应消息的行为等。除了上述SIG 定义的Bluetooth SIG models,供应商也可以在SIG 模型无法满足需求的情况下定义Vendor models;
  • Application Layer:应用开发服务于用户场景、依托于各种标准化模型,通过业务逻辑把不同功能的Model 组合起来,实现一个特定功能或者服务,比如楼宇照明网络中的复杂灯控功能、工厂车间或农业大棚传感网络中的复杂监测功能、智能家居各种MESH 设备间的复杂联动功能等。

一、SIG MESH Bearer Layer

SIG MESH 作为网络协议,是承载在BLE 物理层数据链路层之上的,为了使用BLE 协议栈传输MESH 消息报文PDU,引入了MESH Bearer Layer。

目前MESH Bearer Layer 定义了Advertising Bearer 和GATT Bearer 两种承载层:GATT Bearer 是为了让无法升级MESH 协议的BLE 设备能够接入MESH 网络;Advertising Bearer 则是SIG MESH 网络主要的消息报文传输承载层。

1.1 Advertising Bearer Layer

虽然BLE 5.x 协议为了提高传输速率和扩大传输距离,新增支持LE 2M PHY 和LE Coded PHY 两种空口报文;为了提高广播能力,新增支持Extended Advertising Channel(可以将数据信道作为广播信道使用,且单个扩展广播包可承载更多载荷数据)。

但是,目前的SIG MESH 1.0.1 协议并不支持BLE 5.x 协议的新特性,仍然使用传统的 3 个固定广播信道(channel 37、38、39)和LE 1M PHY 空口报文来传输MESH 消息报文(或许后续的MESH 2.x 协议支持BLE 5.x 协议新特性吧)。

SIG MESH 广播包并不需要对方连接,也不会响应对方的扫描请求,因此MESH Advertising Bearer Layer 使用ADV_NONCONN_IND 广播报文来承载MESH 消息报文。不可连接不可扫描非定向的广播报文payload 支持的AdvData 最大长度为 31 octets,所以MESH Advertising Bearer 报文的最大长度也只有 31 字节。
SIG MESH Advertising Bearer 报文格式
AdvData 被划分为一系列AD structures,每个AD structure 包含AD Length、AD Type、Content 三个字段。每个MESH 广播报文只包含一个AD structure,MESH 协议仅支持如下三种广播报文(参阅:Assigned Numbers – GAP):

AD Type
               
Type Name
                             
Content
0x29 «PB-ADV» PB-ADV PDU,包含 Link ID (4 octets)、Transaction Number (1 octets)和Generic Provisioning PDU (1 - 24 octets) 三部分
0x2A «Mesh Message» Network PDU (1 - 29 octets)
0x2B «Mesh Beacon» Mesh Beacon PDU,包含Beacon Type (1 octets) 和Beacon Data 两部分,其中Beacon Type 目前只定义了Unprovisioned Device beacon 和Secure Network beacon 两种类型
  • «PB-ADV»:主要用于启动配网过程中邀请入网–>创建安全通道–>身份认证–>安全密钥分发等过程必要信息的传输,可以承载的Generic Provisioning PDU 最大为24 个字节。Link ID 用于标识Provisioner 与New Device之间建立的通信链路,Transaction Number 则用于标识每个单独的Generic Provisioning PDU(分段或重传报文的Transaction Number 相同,新的单独PDU 报文则Transaction Number 自增 1);
  • «Mesh Message»:主要用于承载MESH 网络层的消息报文,可承载的Network PDU 最大为29 个字节;
  • «Mesh Beacon»:目前定义了Unprovisioned Device beacon 和Secure Network beacon 两种类型:Unprovisioned Device beacon 主要用于未配网设备对外广播,以便Provisioner 能发现自己,并向自己发出入网邀请;Secure Network beacon 主要用于识别并通知子网内的设备节点进行 IV Index 更新或密钥刷新过程。

MESH 网络节点之间通过ADV_NONCONN_IND 广播报文进行通信时,需要设备同时支持GAP Observer role 和GAP Broadcaster role。由于MESH 网络节点设备随时都有可能接收到消息报文,为了避免丢失传入的广播数据包,MESH 设备应以尽可能接近 100% 的占空比执行被动扫描过程(也即scanWindow 尽可能等于scanInterval)。为了尽量降低多个MESH 设备节点同时广播导致广播信道上数据包冲突的概率,广播间隔advInterval 应尽可能设置为随机值。

1.2 GATT Bearer Layer

MESH GATT Bearer Layer 是为了让无法升级MESH 协议的BLE 设备能够接入到MESH 网络中而设计的,GATT Bearer Layer 使用Proxy protocol 通过GATT 连接在两个设备之间发送或接收Proxy PDU。

使用BLE GATT 连接传输数据需要在GATT Server 实现相应的GATT Service 和Characteristic,GATT Client 则通过发现Service、读写Characteristic 实现服务数据的传输。
MESH Proxy Server-Client GATT Services
MESH GATT Bearer 定义了两个角色:GATT Bearer Server 和GATT Bearer Client,由于二者使用Proxy protocol 通信,因此也可称为MESH Proxy Server 和MESH Proxy Client。

MESH GATT Bearer 也提供了两个GATT 服务:Mesh Provisioning Service 和Mesh Proxy Service,每个Service 都提供了两个Characteristic(参阅:Assigned Numbers – 16-bit UUIDs):

GATT Services UUID GATT Services Name GATT Characteristic
0x1827 Mesh Provisioning Service Mesh Provisioning Data In (0x2ADB)
Mesh Provisioning Data Out (0X2ADC)
0x1828 Mesh Proxy Service Mesh Proxy Data In (0X2ADD)
Mesh Proxy Data Out (0X2ADE)

GATT Bearer Client 发现GATT Bearer Server 提供的Service 和Characteristic 后(可参阅:GATT ProfileService Discovery),通过Mesh Provisioning/Proxy Data In Characteristic 的Write Without Response 方法向GATT Bearer Server 发送数据,通过Mesh Provisioning/Proxy Data Out Characteristic 的Notify 方法从GATT Bearer Server 接收数据,实现在GATT 连接上发送或接收Proxy PDU 的功能。

MESH GATT Bearer 通过Mesh Provisioning Service 或Mesh Proxy Service 传输的Proxy PDU 格式如下:
MESH Proxy PDU Format
MESH Proxy PDU 目前支持的消息类型有四种:

  • Network PDU:MESH 网络层的消息报文,同MESH Advertising Bearer 中的«Mesh Message»,是否需要分段传输取决于ATT_MTU 的配置值;
  • Mesh Beacon:同MESH Advertising Bearer 中的«Mesh Beacon»,目前定义了Unprovisioned Device beacon 和Secure Network beacon 两种类型;
  • Proxy Configuration:主要用于Proxy Client 向Proxy Server 配置过滤条件,Data 部分由Opcode(1 octets) 和Parameters(variable) 两部分构成(相当于配置Proxy Client 的订阅地址列表),比如向Proxy Server 维护的白名单或黑名单中新增或删除地址;
  • Provisioning PDU:用于Provisioner 与New Device之间启动配网过程中必要信息的交换,MESH Advertising Bearer 中的Generic Provisioning PDU 由«PB-ADV» 承载,MESH GATT Bearer 中Provisioning PDU 则是由«PB-GATT» 承载。

由此可知,MESH Advertising Bearer 和MESH GATT Bearer 封装的有效载荷Network PDU、Mesh Beacon、Provisioning PDU 都是相同的,只是MESH Bearer Layer 封装的外壳有区别。

二、SIG MESH Provisioning

一个BLE 新设备要想加入到一个MESH 网络中并与其它MESH 节点通信,需要通过执行启动配网过程Provisioning。启动配网过程是 Provisioner 向对外广播Unprovisioned Device beacon 报文的设备发起入网邀请–>创建安全通信链路–>验证入网者身份–>分发网络安全密钥等一系列过程的组合(参阅博文:启动配网与密钥分发)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流云IoT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值