蓝牙组织官方网站上给出了 mesh 网络的 Spec,最新版本的协议栈可以在官方网站上面下载,mesh 协议栈相关的 Spec 有 3 个,其中的 mesh profile 是对协议栈进行整体介绍的文档,所以这里主要从这个文档分析;

从文档的名称就可以看出来他是个大的 profile,所以 mesh 几乎是纯软件的实现,与硬件打交道很少,在 Spec 上给出了 mesh 协议栈的架构图:

BLE MESH 视频教程 ble mesh 协议_BLE MESH 视频教程

咋一看,吓一跳,分层很多,分这么多层,主要是希望在软件架构中进行清晰的抽象,将 mesh 协议栈的所有功能,分别抽象到不同的层次结构上,将单一的功能抽象到单一的层次。

因为 mesh 协议栈使用广播/扫描作为数据交互的载体,并且能够支持中继,数据的转发,同时,由于真实的广播(legacy ADV)一次携带的数据是有限的(31 Bytes),所以针对稍微大一点的数据,需要提供分片和重组的机制,最后标准化流程中,定义数据的格式,对信息的交互起到更好的作用,同时 mesh 网络强制开启安全模式,涉及到数据的加密解密流程;

根据上面分析的 mesh 的特性,按照数据流的方向,将功能分别拆解出来,就形成了上面这个图,接下来详细介绍一下每一层的作用:

(1) Model layer:根据用户的使用场景,定义的标准化的操作;

(2) Foundation Model layer:定义了用于配置和管理mesh网络的状态、消息以及model。

(3) Access layer: 定义应用层的数据格式。应用层数据的加解密功能在这一层完成,并验证接收的数据是否认证通过。

(4) Upper transport layer:对应用数据进行加解密以及鉴权。

(5) Lower transport layer: 主要对upper transportlayer的数据包进行分段和重组。

(6) Network layer: 网络层是MESH网络的关键层。这一层主要负责将传输层的数据包传输给一个或者多个其它节点。数据包是否被拒绝、或者被在本节点做进一步处理、或者数据包将会被前传给其它节点是网络层的核心功能。同时,网络层还对本层消息进行加解密和鉴权。定义了多种输入输出的 Filter;

(7) Bearer layer:定义了网络层数据包如何在节点之间传递。当前协议版本定义了两种承载,一种是广播承载,另一种是GATT承载。

(8) Bluetooth low energy core specification:这一层是在MESH协议发布之前所定义的 BLE Core Specification。