万字好文,彻底了解的BLE mesh的神级文章

一. Mesh整体介绍

1. 概念

BLE Mesh(Bluetooth Low Energy Mesh)是一种基于蓝牙低功耗(BLE)的网络协议,专门设计用于创建大规模的设备网络,支持设备之间的多对多通信。这使其特别适合智能家居、工业自动化、照明控制等场景。以下是对 BLE Mesh 的详细介绍:

a. 网络架构

  • 节点(Node): 网络中的每个设备被称为节点。每个节点可以发送和接收消息。
  • 元素(Element): 一个节点可以包含一个或多个元素,每个元素是可以独立控制的基本功能单位。
  • 模型(Model): 定义元素的行为和功能,如开关、调光器等。
  • 消息(Message): 节点之间通过消息进行通信,消息可以是命令、状态更新或数据。

b. 网络特性

  • 多对多通信: BLE Mesh 支持多对多通信,允许节点之间自由发送和接收消息。
  • 转发机制(Relaying): 中继节点(Relay Node)可以转发消息,使得消息可以传递到远离源节点的设备。
  • 低功耗(Low Power): 支持低功耗节点(Low Power Node),这些节点依赖于朋友节点(Friend Node)来缓存消息,从而减少能耗。

c. 网络组成

  • Provisioning(配置过程): 将新节点加入网络的过程,通常由一个配置器(Provisioner)来管理。
  • 地址分配: 每个节点在网络中都有一个唯一的地址,支持单播、组播和广播通信。
  • 安全性: BLE Mesh 使用 AES-CCM 加密来确保消息的安全性,支持消息加密和网络密钥管理。

d. 应用场景

  • 智能照明: 实现远程和自动控制灯光,包括调光、开关和色彩控制。
  • 楼宇自动化: 控制暖通空调、门锁、传感器等设备,实现智能楼宇管理。
  • 工业物联网(IIoT): 监控和控制工业设备,实现设备间的高效通信。
  • 智能家居: 家庭中的各种设备,如门锁、温控器、传感器等都可以通过 BLE Mesh 进行互联。

e. 优势

  • 扩展性强: BLE Mesh 网络可以包含成千上万个节点,适合大规模部署。
  • 可靠性高: 通过中继机制和组播通信,确保消息能够可靠传输,即使部分节点出现故障。
  • 低功耗: 特别适合电池供电的设备,通过低功耗特性延长设备的使用寿命。

f. 实现与支持

  • BLE Mesh 是由蓝牙技术联盟(Bluetooth SIG)定义和维护的标准,许多芯片厂商和设备制造商都提供对 BLE Mesh 的支持。
  • 设备可以使用手机、平板或专用的配置器来配置和管理 BLE Mesh 网络。

BLE Mesh 是一种强大且灵活的网络协议,能够满足现代物联网设备的通信需求,特别适用于需要大规模部署和高可靠性的场景。

2. 发展历程

BLE Mesh 的发展历程反映了蓝牙技术联盟(Bluetooth SIG)及其成员持续推进和优化低功耗蓝牙技术,以满足物联网(IoT)和智能设备市场的需求。以下是 BLE Mesh 发展的主要阶段和里程碑:

a. 蓝牙技术的早期发展

  • 1998年: 蓝牙技术由爱立信公司发起,随后多个公司组成了蓝牙特别兴趣小组(Bluetooth SIG)。
  • 2000年: 蓝牙 1.0 标准发布,主要用于短距离设备间的点对点通信。

b. 低功耗蓝牙(BLE)的引入

  • 2010年: 蓝牙 4.0 标准发布,引入了低功耗蓝牙(Bluetooth Low Energy,BLE),专注于低功耗、低成本的短距离通信。这为 BLE Mesh 的发展奠定了基础,特别是在电池供电设备中。

c. BLE Mesh 的研发阶段

  • 2014年左右: 随着物联网的兴起,对支持大规模、多对多通信的需求日益增加。蓝牙技术联盟开始关注如何在 BLE 环境中实现网状网络。
  • 多家公司参与: 一些公司和研究机构开始开发自己的 BLE Mesh 解决方案,但缺乏统一的标准,导致市场上出现多个不兼容的方案。

d. BLE Mesh 标准的制定

  • 2015年: 蓝牙技术联盟正式启动 BLE Mesh 标准化工作,目标是创建一个统一、互操作的网状网络标准。
  • 2017年7月: BLE Mesh 标准(Bluetooth Mesh Profile 和 Bluetooth Mesh Model)正式发布。该标准定义了基于 BLE 的网状网络的基础架构、通信协议和安全机制。

e. 标准发布后的发展

  • 2018年起: BLE Mesh 得到广泛支持,许多芯片厂商和设备制造商开始推出兼容 BLE Mesh 的产品。
  • 生态系统扩展: 智能照明、工业自动化、智能家居等领域开始大量采用 BLE Mesh,推动了整个生态系统的发展。
  • 软件工具和开发包: 为开发者提供了许多支持 BLE Mesh 的软件工具和开发套件(SDK),如 Nordic Semiconductor、Silicon Labs 等公司的解决方案。

f. 持续优化和扩展

  • 2019年及以后: 蓝牙技术联盟持续改进 BLE Mesh 标准,发布了多次技术更新和新功能扩展,如增强的安全性、改进的配置流程以及更高效的通信机制。
  • 应用场景扩展: 随着技术的成熟,BLE Mesh 开始应用于更多复杂场景,如智能楼宇、智慧城市、资产追踪等。
  • 2023年蓝牙发布了BLE Mesh 1.1, 由原来的BLE Mesh profile更名为BLE Mesh protocol

g. 未来展望

  • 物联网的深度融合: BLE Mesh 将继续在物联网领域发挥重要作用,推动设备间更高效、更智能的互联互通。
  • 与其他技术的集成: 未来可能会与 5G、Wi-Fi 等其他通信技术集成,提供更全面的连接解决方案。

通过这些发展阶段,BLE Mesh 已成为支持物联网设备大规模部署和可靠通信的重要技术,为智能化的未来奠定了坚实的基础。

3. 架构

a. Mesh在蓝牙中的架构

整体传统蓝牙跟低功耗蓝牙以及BLE Mesh的架构以及依赖关系分别如下,绿色部分为BLE Mesh部分

b. BLE Mesh自身架构

如果了解过BLE Mesh可以看到Mesh 1.1的架构跟Mesh 1.0架构稍微有点区别,主要是把provisioning抽象出来了。上面主要分为两个部分:Mesh networking stack/Mesh provisioning stack.

  • The mesh networking stack used by mesh nodes to communicate with each other
  • The mesh provisioning stack used to provision devices on the network.

承载层(Bearer Layer)

Bearer Layer 定义了Mesh节点怎么传递网络消息的。定义了两种Bearer,广播advertising bearer 和GATT bearer 。Advertising Bearer 利用的是BLE 广播包的advertising 和scanning的功能来传递接收mesh的报文。

The GATT Bearer 允许不支持Advertising Bearer的设备间接的与mesh节点进行通讯。怎么通讯呢?使用前面讲的代理(Proxy Protocol)。Proxy Protocol是封装在GATT里面,当然会用特别定义的GATT characteristics。支持Proxy Feature的Proxy Node也就是代理节点,因为可以同时支持两种Bearer Layer,所以可以作为mesh节点和非mesh节点的中间桥梁。

网络层(Network Layer)

网络层定义了几件事情, 一个是定义了多种网络地址类型,我之前有说过关于Mesh地址的内容。二是定义了网络层的格式,打通传输层(Transport layer)和承载层(Bearer layer);三是定义了一些输入输出Filter,决定哪些消息需要转发,处理还是拒绝。四是定义了网络消息的加密和认证。

底层传输层(Lower Transport Layer)

这层做的事情很简单,就是拆拆拼拼。把太长的传输层的包拆成若干个分给网络层,把短的网络层的包再组成一个长的传输层的PDU(Protocol Data Unit)。

上层传输层(Upper Transport Layer)

上层传输层主要是负责加密,解密和应用数据授权。一句话,消息的安全性和机密性就是有这一层负责的。还有就是会定义一些节点间在这一层的一些会话,比如Friend功能,心跳包(Heartbeats)。

访问层(Access Layer)

访问层主要负责:1.定义更高层的应用如何跟upper transport layer通讯。2.定义应用数据的格式。3.定义和控制upper transport layer应用数据的加解密。4.在把应用数据扔到上层之前,会检查校验接收过来的应用数据是否合法。

基础Model层(Foundation Models Layer)

基础model层定义访问层(access layer)的状态,消息,模型配置和mesh网络管理。

Model层(Model Layer)

Model层定义了典型的用户场景标准化操作的相关models(相关的models定义在Bluetooth Mesh Model specification文档中)。更高层次模型规范的例子包括照明和传感器的模型。

4. 名词概念

二. Mesh provisioning stack

我们先来介绍下Mesh provisioning stack,主要是这个是Mesh入网的第一步,也就是红框部分, 注意这部分都是大端架构来进行协议通信的!

把这块差分开就如下所示:

PB-ADV 承载:允许通过广播承载(Advertising Bearer)对未配置设备进行配置。
PB-GATT 承载:允许通过 Mesh 配置服务(Mesh Provisioning Service)对未配置设备进行配置。
PB-Remote 承载:允许超出未配置设备直接无线电范围的配置器(Provisioner)通过支持远程配置服务器(Remote Provisioning Server)模型的节点与未配置设备进行通信。这个节点用作转发器,利用 PB-ADV 或 PB-GATT 与未配置设备通信。通过这种方式,配置器可以使用网状网络的节点来配置远程未配置设备。

PB-Remote 承载架构如图所示:

1. Provisioning bear

配置承载层是 BLE Mesh 中负责在配置过程中传输数据的基础层。不同的承载层提供了不同的传输方式,用于将配置数据从配置器(Provisioner)传输到未配置设备(unprovisioned device )。以下是常见的配置承载层:

PB-ADV(广告承载)

    • 通过广播(Advertising)方式传输配置数据。
    • 使用 BLE 广播通道,适合近距离设备间的配置。
    • 主要用于无需复杂连接的场景,提供快速、低功耗的设备配置方式。

PB-GATT(GATT 承载)

    • 基于 GATT(通用属性协议)传输配置数据。
    • 通过 Mesh 配置服务(Mesh Provisioning Service)在 BLE 连接通道上传输。
    • 适用于需要可靠连接的设备,尤其是在智能手机或其他支持 GATT 的设备进行配置时常用。

PB-Remote(远程承载)

    • 允许配置器通过网状网络的中继节点(Mesh Relay)远程传输配置数据。
    • 配置器可通过支持远程配置服务器模型(Remote Provisioning Server)的节点将数据传递给超出直接无线电范围的未配置设备。
    • 适合大型网状网络,尤其是需要跨越较大距离或存在物理障碍的场景。

一共分为6中角色

分类

角色

扮演角色

交互数据layer

PB-ADV

PB-ADV Client

Provisioner

generic provisioning layer

PB-ADV Server

unprovisioned device

generic provisioning layer

PB-Remote

PB-Remote Client

PB-Remote Server

PB-GATT

PB-GATT Client

Provisioner

PB-GATT Server

unprovisioned device

a. PB-ADV

PB-ADV 是一种配置承载层,用于通过广播信道(advertising channels 37/38/39)使用通用配置 PDU(Generic Provisioning PDUs)来配置未配置设备(这个我们在后面介绍)。这种配置机制是基于会话的。未配置设备每次只能支持一个会话,而配置器则没有此限制。会话通过链接建立过程来建立。PB-ADV 配置承载层在关闭链接时需要提供关闭原因,并在链接关闭时提供关闭原因。

使用 PB-ADV 时,配置器(Provisioner)应扮演 PB-ADV 客户端角色,未配置设备(unprovisioned device)应扮演 PB-ADV 服务器角色。PB-ADV 承载层用于传输通用配置 PDU。PB-ADV 承载层的最大传输单元(MTU)大小为 24 个字节。

使用 PB-ADV 时,通用配置 PDU 应通过由 «PB-ADV» 标识的 PB-ADV 广告类型(AD type)发送。支持 PB-ADV 的配置器和未配置设备应尽可能接近 100% 的占空比进行被动扫描,以避免错过任何传入的 PB-ADV PDU。

PB-ADV 广告类型包含一个 PB-ADV PDU 字段。PB-ADV 广告类型的格式定义见表

其中AD Type为:0x29

其中PB-ADV(0x29)是未入网之前发送的广播数据包,Mesh Message(0x2A)是入网之后发送的数据包,Mesh Beacon(0x2B)可以是入网之前/入网之后发送的数据包

需要注意的是:广播类型必须是ADV_NONCONN_IND,否则会被对方忽略

下面我们来分别介绍下这三种类型:PB-ADV/Mesh Message/Mesh Beacon

ⅰ. PB-ADV

整个PB-ADV是广播数据的LTV(length-type-valve),其中length就是长度,type就是我们上面表格中的0x29,其中PB-ADV PDU格式为:

Link ID就是为了标识ID,Transaction Number就是传输标号,Generic Provision PDU我们在后面介绍。

我们来看下一个btsnoop的巩固下格式:

其中可以看到length是23,Type是PB-ADV,data就是按照PB-ADV格式来的

ⅱ. Mesh Beacon

其中Mesh Beacon的格式也是广播数据的LTV(length-type-valve)模型

其中Beacon有三种类型。如下:

其中Beacon Data对应不同类型的数据格式不同

1. Unprovisioned Device Beacon

用途

  • 用于设备未加入 Mesh 网络时的发现和配网(Provisioning)。
  • 设备通过此 Beacon 宣告自身可被配网,例如新设备首次上电或重置后。

数据格式

2. Secure Network Beacon

用途

  • 用于已加入网络的节点周期性广播网络状态,维护网络安全性。
  • 分发网络密钥更新、IV Index(初始化向量索引)等安全参数。
  • 防止重放攻击(Replay Attack)。

数据格式

3. Private Beacon

用途

  • 用于厂商自定义的私有 Beacon,可携带特定数据(如设备状态、传感器数据等)。
  • 需遵循蓝牙 Mesh 规范中的私有 Beacon 格式。

数据格式

b. PB-GATT

PB-GATT 是一种配置承载层,用于通过代理 PDU(Proxy PDUs)封装配置 PDU(Provisioning PDUs),并通过网状网络配置服务(Mesh Provisioning Service)进行设备配置。PB-GATT 是为了解决配置器因应用接口限制而无法支持 PB-ADV 的情况而提供的。

使用 PB-GATT 时,配置器(Provisioner )应扮演 PB-GATT 客户端角色,未配置设备(Provisioner )应扮演 PB-GATT 服务器角色。

为了支持 PB-GATT 服务器的超低功耗运行,并允许其在不需要保持空闲链接的情况下计算 Diffie-Hellman 共享密钥,PB-GATT 客户端与 PB-GATT 服务器之间的连接间隔应在 250 到 1,000 毫秒之间。

PB-GATT 服务器应能够在单个写入命令 ATT PDU 中接收一个代理 PDU。PB-GATT 服务器应使用单个句柄值通知(Handle Value Notification)ATT PDU 将配置 PDU 发送给 PB-GATT 客户端。

如果协商的 ATT_MTU 小于所需的代理 PDU 大小,则网状网络配置数据输入和配置数据输出特性在传输时需要进行分片和重组。在处理之前,每个 PDU 都应完全重组。

PB-GATT 服务器应能够在一个或多个 ATT PDU 中接收代理 PDU。根据消息的大小和协商的 ATT_MTU,PB-GATT 服务器应使用一个或多个句柄值通知 ATT PDU 向 PB-GATT 客户端发送代理 PDU。

下图说明了配置协议、PB-GATT 服务器和网状网络配置服务的交互。

其中牵扯到的服务有:

ⅰ. 发现服务流程

步骤一. Node节点广播

我们直接来看下btsnoop,可以看到node广播数据

步骤二. provisioner发起ble连线,连接gatt

步骤三. provisioner进行GATT discovery流程,查看对方是否支持Mesh provisioning service

步骤四. provisoner发现node的服务特征

可以发现node回复有Mesh provisoning Data In/Out

步骤五. 服务特定Descriptor发现

可以发现只有一个CCC description, 也就是indication/notification的enable/disable

步骤六. 使能indication/notification

c. PB-Remote

2. Provisioning transport

我们可以看到provisioning transport分为有以上三个。我们来一一介绍。

a. Generic provisioning layer

在介绍常规的PB-ADV/PB-GATT/PB-Remote后,因为部分依赖于Generic provisioning layer ,所以我们来介绍下generic provisioning layer ,这个主要用于advertising bearer以及PB-ADV provisioning bearer。

通用供应层负责在不可靠的无连接供应承载器上传输Generic Provisioning PDU 。就像PB-ADV就是传输的这个。我们在前面介绍过了PB-ADV的格式,我们在结合generic provisioning PDU再来贴下

Field

Size(octets)

Description

Length

1

表示后面数据的长度

AD Type

1

PB-ADV类型

Link ID

4

链路的标识符

Transaction Number

1

事务的标识符

Generic Provisioning PDU

1-24

配网PDU

而其中Generic Provisioning PDU格式为:包括Generic Provisioning Control (GPC) 跟Generic Provisioning Payload

Field

Size(octets)

Description

Generic Provisioning Control

1-17

配网数据控制域

Generic Provisioning Payload

0-64

配网数据载荷

在结合下拆分开格式为:

在Generic Provisioning Control byte 0的bit 0/bit 1叫做Generic Provisioning Control Format (GPCF) ,分别表示start/ack/continue/control

4种Generic Provisioning Control Format 对应的格式不同,我们来一一介绍

ⅰ. Transaction Start PDU

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

在结合到PB-ADV中的格式为:

ⅱ. Transaction Acknowledgment PDU

用于响应Provisioning PDU消息,其数据格式如下:

结合到PB-ADV中的格式为:

Padding=0b000000,GPCF=0b01,Data域为空。

ⅲ. Transaction Continuation

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

结合到PB-ADV中的格式为:

ⅳ. Transaction Bearer Control

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

结合到PB-ADV格式为:

可以看到有三种Link Open、Link ACK、Link Close,我们来分别介绍下

1. Link Open

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

Device UUID为配网者选择的设备的UUID,为16个byte

结合PB-ADV跟Transaction Bearer Control格式如下:

我们先来看一个btsnoop

2. Link ACK

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

结合PB-ADV跟Transaction Bearer Control格式如下:

3. Link Close

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

结合PB-ADV跟Transaction Bearer Control格式如下:

参数域为关闭原因,其具体含义如下:

4. Link Establishment流程

PV-ADV在交换配网数据之前需要建立一个链接(Link),使用Transaction Bearer Control消息来建立链路。未配网设备发出的Unprovisioned Beacon里面包含了UUID等信息,配网者收到多个Unprovisioned Beacon后,需要选择一个设备,然后开始配网,选择了这个设备的第一件事就是建立链路。链路建立的流程如下:

我们也分析一个btsnoop来加深下流程分析

① Unprovisioned device发送Beacon广播

格式先不用纠结,我们后面再介绍,你就知道,这个就是发送一个mesh beacon就好了,意思就是告诉provisioner期待入网,并且Unprovisioned device的uuid为16个byte全0

② 配网者选择一个Unprovisioned Beacon,然后向该设备发送一个Link Open消息,该消息带有该设备的Device UUID,并在PB-ADV的Link ID字段填上一个未使用的ID值。

③ 未配网设备收到Link Open消息后,需要响应一个Link ACK消息,其消息的Link ID字段为接收的Link Open的Link ID。

④ Link通道建立完成后,两者之间进行配网流程。

这个过程我们在其他章节介绍

⑤ 配网结束发送Link Close关闭通道。

每一个Generic Provisioning PDU发送时都要附加20-50ms的延时。对于分段消息,发送端通过Transaction Start和Transaction Continuation发送所有分段,接收端收到所有分段后计算FCS,然后再响应Transaction Acknowledgment消息。

b. Proxy protocol

BLE Mesh Proxy Protocol 是 BLE Mesh 网络中的一种关键协议,用于让传统的 BLE 设备与 Mesh 网络进行通信。由于普通 BLE 设备(非 Mesh 设备)无法直接参与 Mesh 网络,Proxy Protocol 提供了一种桥接机制,使它们可以通过支持 Proxy 功能的 Mesh 节点(称为 Proxy 节点)访问 Mesh 网络的功能。

BLE Mesh Proxy Protocol 的主要功能和概念:

  • Proxy 节点
    • Proxy 节点是具有 BLE Mesh 功能的设备,它能够与 Mesh 网络通信,同时也支持与传统 BLE 设备(例如手机、平板等)建立标准的 BLE 连接。
    • Proxy 节点通过 BLE GATT(通用属性配置文件)服务来提供访问 Mesh 网络的入口。
  • Proxy 协议的工作原理
    • Proxy 协议允许普通 BLE 设备通过标准 BLE 连接访问 Mesh 网络中的功能。
    • 它使用了 Proxy PDU(Protocol Data Unit),这些 PDU 被封装在 GATT 的特定特征中,用于传输 Mesh 数据。
    • Proxy 节点通过 Mesh Proxy Service 向传统 BLE 设备暴露 Mesh 网络数据。
  • Mesh Proxy Service
    • Proxy 节点通过 GATT 提供 Mesh Proxy Service。该服务包含两个主要特征:
      • Mesh Proxy Data In:用于从传统 BLE 设备向 Mesh 网络发送数据。
      • Mesh Proxy Data Out:用于从 Mesh 网络向传统 BLE 设备发送数据。
  • Proxy Protocol 数据传输
    • Mesh Proxy Protocol 使用 Proxy PDU 来封装和传输 Mesh 网络中的消息。
    • 在 BLE 连接中,Mesh 消息通过 GATT 服务传输,Proxy 节点充当桥梁,将消息从 BLE 网络传递到 Mesh 网络,反之亦然。
  • 使用场景
    • 手机与 Mesh 网络通信:例如,用户通过手机控制家中的智能灯光,这些灯具组成一个 Mesh 网络。手机通过 Proxy 协议与最近的 Proxy 节点通信,从而访问和控制整个 Mesh 网络。
    • Mesh 网络配置与管理:Proxy 协议也可以用于通过普通 BLE 设备(如手机)配置和管理 Mesh 网络中的设备。

Proxy 协议的优点:

  • 兼容性:使得普通 BLE 设备能够与 Mesh 网络通信,无需特殊的 Mesh 功能。
  • 灵活性:通过 Proxy 节点,可以方便地使用标准 BLE 设备来控制和管理 Mesh 网络。

主要特点总结:

  • 使用 GATT 代理服务桥接 BLE 设备和 Mesh 网络。
  • 通过 Proxy PDU 实现 Mesh 消息的封装和传输。
  • 支持低功耗设备与 Mesh 网络的通信。

Proxy 协议的设计确保了 BLE Mesh 网络的广泛兼容性和实用性,使得普通 BLE 设备能够轻松接入并参与 Mesh 网络。

注意:proxy PDU并不仅仅用在provisioning stack中,我们放在这里介绍,是因为我们这里用到了proxy PDU

PDU格式为:

Field

Size(octets)

Description

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

ⅰ. Proxy filtering

每个代理过来的消息,接收端收到都要进行dst地址的检查,为了避免无效地址的消息,在代理端增加过滤机制。配置黑白名单,通过Message Type=0x02的Proxy PDU来配置,其Data域的数据格式如下:

Field

Size(octets)

Description

Opcode

1

0x00:设置过滤表类型
0x01:添加地址到过滤表
0x02:删除过滤表中的地址
0x03:当前过滤表的状态
0x04-0xFF:RFU

Parameters

Variable

消息参数

每个Opcode对应的Parameters对应的格式如下:

ⅱ. Proxy Server/Client

Client:只能使用GATT连接,不能使用ADV进行mesh通信的节点。
Server:能在ADV Bearer和GATT Bearer之间转换的节点。

① client连接server

② server端初始化过滤名单为空的白名单

③ 连接成功后,server端发送Secure Network Beacon给client端。

④ client设置过滤表类型,server响应过滤表状态。更改过滤表类型后,新的过滤表为空。

⑤ client修改黑白名单内容,两者之间根据过滤表进行通信。

3. Provisioning protocol

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

provisioning protocol 分为两个角色:Provisioner/Provisionee

The Provisioner is a device that initiates the provisioning protocol. The Provisionee is a device that
participates in the execution of the provisioning protocol with the Provisioner, upon request from the Provisioner .

我们本次介绍的主要就是配网过程,也就是红框部分!

Provisioning PDUs的消息格式如下:

其中Type定义在Assigned number中,有以下定义:

a. Provisioning Invite

配网者发起,表明配网程序开始。格式如下:

Value

Description

0x00

Attention Timer关闭

0x01-0xFF

Timer开启的剩余时间,单位1s

b. Provisioning Capabilities

未配网设备发送此消息告诉配网者当前节点支持的配网功能。

Field

Size(octets)

Notes

Number of Elenments

1

当前设备有多少个元素,取值范围为0x01-0xFF。配网者可以通过此字段计算出下一个未配网设备的首元素地址

Algorithms

2

支持的算法

Public Key Type

1

支持的Public Key类型

Static OOB Type

1

支持的Static OOB类型

Output OOB Size

1

设备支持的最大Output OOB的长度
0x00:不支持output OOB
0x01-0x08:设备支持的最大Output OOB的长度
0x09-0xFF:RFU

Output OOB Action

2

设备支持的Output OOB的行为

Input OOB Size

1

设备支持的最大Input OOB的长度
0x00:不支持Input OOB
0x01-0x08:设备支持的最大Input OOB的长度
0x09-0xFF:RFU

Input OOB Action

2

设备支持的Input OOB的行为

c. Provisioning Start

配网者发送此消息告诉未配网设备选择的配网方式。

Field

Size(octets)

Notes

Algorithms

1

使用的算法

Public Key

1

是否使用Public Key
0x00:不使用OOB Public Key
0x01:使用OOB Public Key
0x02-0xFF:无效值

Authentication Method

1

授权方式选择
0x00:使用No OOB方式授权
0x01:使用Static OOB方式授权
0x02:使用Output OOB方式授权
0x03:使用Input OOB方式授权
0x04-0xFF:无效值

Authentication Action

1

授权行为

若授权方式为No/Static OOB,Action=0x00。

若授权方式为Output OOB,取值含义如下:

0x00:Blink

0x01:Beep

0x02:Vibrate

0x03:Output Numeric

0x04:Output Alphanumeric

0x05-0xFF:RFU

若授权方式为Input OOB,取值含义如下:

0x00:Push

0x01:Twist

0x02:Input Numeric

0x03:Input Alphanumeric

0x04-0xFF:RFU

Authentication Size

1

授权码的长度
若授权方式为No/Static OOB,Size=0x00。
若授权方式为Output/Input OOB,取值含义如下:
0x00:无效
0x01-0x08:授权码长度
0x09-0xFF:RFU

d. Provisioning Public Key

配网者发送此消息,传输Public Key。

e. Provisioning Input Complete

未配网设备发送此消息,表明Input操作完成,参数域为空。

f. Provisioning Confirmation

发送给对端的OOB授权码数据。

Output OOB方式:未配网设备展示授权码,配网者输入授权码,配网者响应Confirmation消息。
Input OOB方式:配网者展示授权码,未配网设备输入授权码,未配网设备响应Input Complete消息,然后配网者响应Confirmation消息。

g. Provisioning Random

发送给对端的随机值认证确认信息。

未配网设备收到配网者发送的Confirmation信息,然后响应Confirmation信息回配网者,此时配网者收到后发送Random消息,未配网设备收到后验证Confirmation信息,验证完毕后再响应Random消息回配网者,然后配网者也进行Confirmation的验证操作。

h. Provisioning Data

配网者传递给未配网设备的配网信息。
配网信息中Provisioning Data主要有以下信息:

Field

Size(octets)

Notes

Network Key

16

配网者分配的NetKey

Key Index

2

NetKey对应的Index值

Flags

1

网络更新状态的标志位

Key Refresh Flag=0:表示当前网络处于Key Refresh Phase 0。

Key Refresh Flag=1:表示当前网络处于Key Refresh Phase 2。

IV Update Flag=0:表示当前网络未进行IV Update。

IV Update Flag=1:表示当前网络正在进行IV Update。

IV Index

4

当前的IV Index值

Unicast Address

2

配网者分配的首元素的单播地址

i. Provisioning Complete

未配网设备发送此消息表明配网成功。参数域为空。

j. Provisioning Failed

未配网设备发送此消息表明配网失败。参数域为失败原因。

k. Provisioning Record Request

l. Provisioning Record Response

m. Provisioning Records Get

n. Provisioning Records List

o. 流程整理

官网文档的图示如下:

① Link通道链路建立完成后,配网者发送Provisioning Invite PDU,未配网设备收到后开启Attention Timer,可以是闪灯,震动或者声音来提醒配网者你配置的是这个设备,接着再响应Provisioning Capabilities PDU告诉配网者,这个设备支持的配网方式。

② 配网者发送Provisioning Start PDU告诉设备配网端选择的配网方式,未配网设备收到此消息后,需要停止Attention Timer。Provisioning Start PDU选择的方式有选择最优的算法,OOB方式等。然后进入第二阶段Public Key交换。

③ 若设备的能力中不能通过OOB的方式传输Public Key,即Public Key Type域为0x00,此时配网者发送Provision Public Key消息,设备端收到后响应Provision Public Key消息,使两端交换Public Key。

④ 若设备能通过OOB的方式传输Public Key,比如NFC等,则配网者通过OOB的方式将Public Key传输至未配网设备端。

⑤ 设备端收到Public Key后,两端计算ECDHSecret值。接下来进入第三阶段OOB认证。

⑥ OOB认证有四种方式,当配网者选择No OOB认证的方式时,配网者发送Provisioning Confirmation消息,参数域为空,设备收到后响应Provisioning Confirmation消息,表示确认。

⑦ 当配网者选择Static OOB认证的方式时,配网者发送Provisioning Confirmation消息,参数域为Static授权数据,设备收到后响应Provisioning Confirmation消息,表示确认。

⑧ 当配网者选择Output OOB认证的方式时,收到Start PDU消息后,设备按照被选择的Output Action,做出相应的操作,比如闪灯,声音,震动,屏上显示数字或字符等,配网者将观察到的数据通过Provisioning Confirmation发送给未配网设备,设备收到并确认后响应Provisioning Confirmation消息。

⑨ 当配网者选择Input OOB认证的方式时,配网者发送完Start PDU后,在配网端显示授权信息,如屏幕显示数字或者字母等,设备端收到Start PDU后,弹框需要用户输入观察到的授权码,输入完毕后,通过Provisioning Input Complete消息发送给配网者告诉配网者这边输入完毕,配网者收到后发送Provisioning Confirmation发送给未配网设备,设备收到并确认后响应Provisioning Confirmation消息。

⑩ 配网者收到未配网设备响应的Provisioning Confirmation消息后,确认无误后,发送Provisioning Random消息ConfirmationProvisioner。

⑪ 设备端收到Random消息后,验证无误后,响应Provisioning Random消息,其参数域值为ConfirmationDevice。

⑫ 配网者收到后验证random值的有效性。开始进入第四阶段,配网数据的的分发。配网者发送Provisioning Data PDU,包含设备需要的配网信息,其中的信息通过授权后的数据信息进行加密传输。

⑬ 设备收到数据后,响应Provisioning Complete消息,配网结束。

⑭ 若配网期间出现错误,发送Provisioning Failed消息给对端,配网结束。

⑮ 配网结束后,发送Link Close消息关闭链路。

我们来分析一个btsnoop来看下整个流程

ⅰ. 配网者发送Provisioning Invite PDU

配网者发起,表明配网程序开始,Attention的值为5S

ⅱ. 待配网者响应Provisioning Capabilities PDU

参数如下:

Field

Size(octets)

Notes

Number of Elenments

1

1个元素

Algorithms

2

0x03,代表支持

BTM_ECDH_P256_CMAC_AES128_AES_CCM

BTM_ECDH_P256_HMAC_SHA256_AES_CCM

Public Key Type

1

0x00,代表不支持OOB

Static OOB Type

1

0x00,代表不支持Static OOB

Output OOB Size

1

0x04,设备支持的最大Output OOB的长度为4

Output OOB Action

2

0x08, 设备支持的Output OOB的行为,仅仅支持显示数字

Input OOB Size

1

0x00:不支持Input OOB

Input OOB Action

2

0x00, 设备支持的Input OOB的行为,都不支持

根据参数写上,我们就做这条路来继续交互

ⅲ. 配网者发送Provisioning Start PDU

Field

Size(octets)

Notes

Algorithms

1

0x01 :BTM_ECDH_P256_HMAC_SHA256_AES_CCM

Public Key

1

0x00:不使用OOB Public Key

Authentication Method

1

0x00:使用No OOB方式授权

Authentication Action

1

0x00 Action None

Authentication Size

1

0x00 授权码的长度

ⅳ. 交互public key

根据上面的交互,我们匹配到了这条路

所以我们继续分析

ⅴ. 交互Provisioning Confirmation

ⅵ. 交互Provisioning Random

ⅶ. Provisioning Data

配网者传递给未配网设备的配网信息。

ⅷ. Provisioning Complete

未配网设备发送此消息表明配网成功。参数域为空。

三. Mesh networking stack

1. network layer

BLE Mesh 网络层(Network Layer)是 BLE Mesh 协议栈的重要组成部分,负责在节点之间转发消息,确保消息能够跨越多个中继节点到达目标节点。以下是 BLE Mesh 网络层的主要功能和特点:

消息转发

  • 中继功能:网络层支持节点作为中继,将接收到的消息转发给其他节点,扩展了网络的覆盖范围。
  • TTL(生存时间):消息中包含一个 TTL 字段,指示消息还能转发的次数,防止消息在网络中无限传播。

地址管理

  • Unicast 地址:分配给单个节点的唯一地址,用于点对点通信。
  • Group 地址:用于将消息发送给一组节点,实现组播通信。
  • Virtual 地址:使用哈希算法生成的地址,支持更灵活的组播通信。

加密与认证

  • 网络密钥(NetKey):用于网络层的加密和认证,确保消息的完整性和机密性。
  • 消息认证码(MIC):附加在消息中的认证码,验证消息的完整性和真实性。

去重功能

  • 网络层通过消息序列号和源地址来识别和丢弃重复消息,防止网络资源浪费和循环。

低功耗支持

  • 支持低功耗节点(Low Power Node, LPN)和好友节点(Friend Node),通过减少消息转发频率和存储消息来优化低功耗设备的能耗。

网络消息格式

  • 网络消息通常由以下部分组成:
    • 网络头部(Network Header):包含TTL、控制位、源地址、目标地址等信息。
    • 网络帧控制字段(Control Field):标识消息类型(数据或控制消息)。
    • 负载(Payload):实际的应用层数据或控制信息。
    • 消息认证码(MIC):用于消息认证。

支持多种消息类型

  • 数据消息(Data Message):承载应用层的数据。
  • 控制消息(Control Message):用于网络管理和控制,如心跳消息、配置消息等。

路径选择与优化

  • 虽然 BLE Mesh 网络是基于泛洪(Flooding)方式的,但网络层仍支持基本的路径优化,如通过 TTL 值限制消息传播范围。

BLE Mesh 网络层的这些功能和特点使其能够在大规模分布式网络中高效地管理消息传递、确保网络的可靠性和安全性,并支持不同类型的节点和用例。

a. 地址

在BLE Mesh网络中,网络层定义了四种基本类型的地址,每种地址都有其特定的用途和作用。以下是这四种地址的简要介绍:

未分配地址(Unassigned Address)

    • 这是默认的地址,当一个节点还没有被分配任何地址时,会使用未分配地址(0x0000)。这个地址表示该节点尚未在网络中注册,不能参与任何通信。

单播地址(Unicast Address)

    • 单播地址是唯一分配给每个节点的地址,用于一对一的通信。每个节点都需要有一个唯一的单播地址,这个地址的范围是从0x0001到0x7FFF。单播地址用于目标明确的消息传递,比如控制单个设备的状态。

虚拟地址(Virtual Address)

    • 虚拟地址是一种基于UUID的地址,用于标识具有相同UUID的节点组。它允许多个节点共享一个虚拟地址,实现基于特定属性或功能的消息广播。虚拟地址使用128位的UUID来表示,适用于需要逻辑分组的场景。

组播地址(Group Address)

    • 组播地址用于一对多的通信,允许将消息发送给属于同一组的多个节点。组播地址的范围是从0xC000到0xFEFF。组播地址用于需要控制一组设备的场景,比如同时打开或关闭一组灯具。

通过这四种地址类型,BLE Mesh网络能够灵活地支持各种通信需求,从单个设备的精确控制到整个设备组的管理。下面是整个

b. PDU介绍

网络层数据大小为18-29字节

Field

Size(octets)

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。

c. Network layer behavior

Relay/Proxy

网络层负责消息的转发。

若当前节点支持中继,且接收到的消息TTL大于2,目的地址非本节点元素的单播地址。则该消息可以被中继,将TTL减1,附加一个随机延迟,然后再广播出去。

若当前节点支持代理,且接收到的消息TTL大于2,目的地址非本节点元素的单播地址。若该消息来自GATT连接,则该消息TTL减1,再通过ADV Bearer转发出去;若该消息来自ADV Bearer,则该消息TTL减1,再通过GATT Bearer转发出去。

Network Message Cache

TTL从时间上保证了一条消息不能无限次中继,每中继一次TTL减1,为1时就不再中继。

而Network Message Cache就从空间上保证,同一条消息不会被同一节点中继两次。

Network Layer消息接收

① 检查NID是否匹配已知的NID。

② 授权匹配NetKey。

③ 检查SRC/DST是否有效。

④ 检查是否处于cache中。

⑤ 上报至传输层。

⑥ 检查是否可以被代理或中继。

Network Layer消息发送

① 设置IVI域为32bits IV只得最低有效位。

② 设置NID域为通过加密key生成的NID。

③ 对DST和TransportPDU进行加密,生成NetMIC。

④ 对CTL/TTL/SEQ/SRC进行混淆处理。

⑤ 将消息发送至所有的网络接口,通过该接口规则对消息进行过滤,然后发送至Bearer Layer。

2. Lower transport layer

BLE Mesh的下层传输层(Lower Transport Layer)是网络层和上层传输层之间的桥梁,负责消息的分片、重组、加密和解密等任务。它在整个数据传输过程中起到了至关重要的作用。以下是对BLE Mesh下层传输层的详细介绍:

消息分片与重组

  • 分片:当应用层或上层传输层发送的消息长度超过基础BLE链路层支持的最大传输单元(MTU)时,下层传输层会将长消息分片为多个较小的段,每个段可以独立传输。
  • 重组:接收端的下层传输层会将收到的各个分片重新组合成完整的消息,再交给上层处理。

消息类型

  • 单个分片消息(Single Segment Message):适用于长度小于等于BLE链路层MTU的消息,可以在一次传输中完成。
  • 分段消息(Segmented Message):适用于长度超过MTU的消息,需要分片传输,多个分片需要按照顺序接收并重组。

可靠性和重传

  • 确认机制:下层传输层支持可靠传输,即通过接收端的确认(ACK)来确保消息成功到达。如果发送端在规定时间内未收到ACK,会进行重传。
  • 重传机制:对于分段消息,若某些分片丢失或未能被接收端确认,发送端会重新发送丢失的分片,确保消息的完整性和可靠性。

加密与解密

  • 加密:在发送消息前,下层传输层会对消息进行加密,以确保数据在传输过程中的安全性。
  • 解密:接收端在收到消息后,会使用与发送端相同的加密密钥进行解密,确保消息的完整性和机密性。

心跳消息

  • 下层传输层还负责处理心跳消息,这种消息用于网络拓扑的管理和健康监控,帮助节点了解网络中的其他节点的存活状态。

应用场景

  • 下层传输层在BLE Mesh网络中非常关键,确保消息能够可靠、完整地传输和接收,同时也提供了安全保障,适用于智能家居、工业自动化等需要稳定和安全数据传输的场景。

总的来说,BLE Mesh的下层传输层通过分片与重组、加密与解密、可靠传输等机制,为BLE Mesh网络提供了稳定和安全的数据传输基础。

a. Lower Transport PDU

在Lower Transport PDU中的第一个byte的有SEG filed中决定是否分段

在network layer中有CTL Field中,决定是Access Message还是Control Message,所以对于Lower Transport PDU有以下四种格式:

ⅰ. 未分段接入层消息(Unsegmented Access Message)

未分段接入层消息(6-16字节)的每个分段的结构如下:

Field

Size(bits)

Notes

SEG

1

SEG=0,表示当前消息是未分段消息

AKF

1

AKF=1,表示使用Appkey加密;

AKF=0,表示使用DevKey加密,AID=0b000000

AID

6

AppKey ID,当AKF= 1时有效

Upper Transport Access PDU

40-120

上层传输层接入消息PDU

接入层消息至少有4字节的TransMIC,以及1字节的Opocde,所有未分段接入层消息最少为5字节。
接入层消息最大为15字节,除去4字节的TransMIC,所以从Model Layer下来的消息最大为11字节,超过11字节就要分段。

ⅱ. 分段接入层消息(Segmented Access Message)

分段接入层消息(5-16字节)的每个分段的结构如下:

Field

Size(bits)

Notes

SEG

1

SEG=1,表示当前消息是分段消息

AKF

1

AKF=1,表示使用Appkey加密;

AKF=0,表示使用DevKey加密,AID=0b000000

AID

6

AppKey ID,当AKF= 1时有效

SZMIC

1

TtansMIC的大小。SZMIC=0,表示TransMIC为4字节;SZMIC=1,表示TransMIC为8字节

SeqZero

13

SeqAuth的最低13位有效位

SegO

5

表示当前分段位第几个分段

SegN

5

表示此条消息总共有多少分段

Segment m

8-96

此分段的消息内容,只有最后一个分段的size才小于96

SeqN为5bit,说明最大支持32个分段,每个分段满载的payload为12字节,所以Upper Transport Layer下发的消息包括TransMIC最大为32*12=384字节。

对于同一条消息的不同分段,只有SegN和Segment m不同。

SeqAuth是第一个分段的IV|SeqNum组合值,通过接收消息的IV,SeqNum和SeqZero三者组合而成SeqAuth,对于同一条消息的所有分段具有同样的SeqAuth值。

ⅲ. 未分段控制消息(Unsegmented Control Message)

未分段控制消息(1-12字节)的每个分段的结构如下:

Field

Size(bits)

Notes

SEG

1

SEG=0,表示当前消息是未分段消息

Opcode

7

分段控制消息的Opocde,见Upper Transport Layer

Parameters

0-88

此分段的消息内容,只有最后一个分段的size才小于64

未分段的控制消息最大size为11字节。

在Upper Transport Layer的控制消息中提到当Opcode=0x00是为Lower Transport Layer预留。

当Opcode=0x00时表示当前消息为分段确认消息(大小为7字节)。其实也是一种控制消息而已。

其消息格式为:

Field

Size(bits)

Notes

SEG

1

SEG=0,表示当前消息是未分段消息

Opcode

7

Opcode=0x00

OBO

1

OBO=0,表示是当前节点的行为;

OBO=1,表示这是Friend替LPN发的分段确认消息

SeqZero

13

确认分段的SeqZero

RFU

2

Reserverd for Future Use

BlockAck

32

分段的Bitmap位

ⅳ. 分段控制消息(Segmented Control Message)

分段控制消息(5-12字节)的每个分段的结构如下:

Field

Size(bits)

Notes

SEG

1

SEG=1,表示当前消息是分段消息

Opcode

7

分段控制消息的Opocde,见Upper Transport Layer

RFU

1

RFU

SeqZero

13

SeqAuth的最低13位有效位

SegO

5

表示当前分段位第几个分段

SegN

5

表示此条消息总共有多少分段

Segment m

8-64

此分段的消息内容,只有最后一个分段的size才小于64

ⅴ. 分段/重组

分段流程

① Access PDU大于12字节,Control PDU大于8字节进行分段,填充各个字段。

② 若目的地址为组播地址或者虚拟地址,把所有分段广播出去多次,并且每次之间附加上一个小的随机延时。结束。

③ 若目的地址为单播地址,先把所有分段广播出去一次,然后启动一个至少200+50TTL ms的定时器(segment transmission timer)。

④ 在timer期间,若收到对端的分段确认消息,然后根据分段确认消息里面的BlockAck域,将对端未收到的分段,再重新发送一次,然后再重启segment transmission timer。

⑤ 若收到的BlockAck域为0x00000000,表示对端busy或者资源不足,本端则取消分段消息的发送,结束。

⑥ 若收到的ack消息表示分段消息接收完毕,则关闭timer,消息发送成功,结束。

⑦ 若timer耗尽,仍未收到分段确认消息,则再次广播所有分段,重启timer。此操作至少进行2次,若多次仍未有确认消息,则消息发送失败,结束。

重组流程

① 收到第一个分段消息,储存此分段消息的SeqAuth,开启一个至少10s的incomplete timer。

② 若收到的消息的目的地址为单播地址,开启一个至少150+50TTL ms的acknowledgment timer,标记ack消息的BlockAck字段,表示此分段已收到。

③ 若acknowledgment timer耗尽,将此期间标记的Ack消息发送至对端。

④ 再次收到分段消息,若此消息的SeqAuth小于第一个分段的SeqAuth,则此消息是过期的,需要被抛弃。标记ack消息的BlockAck域,若此时acknowledgment timer耗尽,则重启acknowledgment timer,注意此时BlockAck域不清零。若此时incomplete timer未耗尽,则需要重启incomplete timer,重新开始计时。(incomplete timer的意义在于规定两次分段的最大时间间隔)

⑤ 若incomplete timer耗尽,则消息接收失败,结束。

⑥ 若已接收完毕所有分段后仍受到分段消息,需要立即响应ack消息。(说明对端未收到ack消息)

3. Upper transport layer

上层传输层负责接入层(Access layer)消息的加密,和控制消息的交互。

ⅰ. Access PDU

由Access层下发来的消息为Access PDU,Access PDU经过Appkey或者DevKey加密后生成4/8字节的TransMIC(transport message integrity check)。

Encrypted Access Payload的最大size为380个字节。

ⅱ. Control PDU

用于节点之间控制消息即非应用消息的传递,用于特殊消息收发通道的建立,主要为Friend消息和Heartbeat消息。

CTL消息在这一层不需要加密,所以没有TransMIC,但NetMIC(利用NetKey二次加密的MIC)为8个字节。

Access PDU中的payload包含Opcode,而CTL PDU中Opcode单独提出来。在每个分段的CTL PDU都有Opocde,分段只是对Param域进行分段。

控制消息有以下几种类型:

Value

Opcode

Notes

0x00

-

Reserved for lower transport layer

0x01

Friend Poll

LPN向Friend请求Friend存储的消息

0x02

Friend Update

Friend通知LPN安全更新和消息

0x03

Friend Request

LPN向所有Friend请求建立Friendship

0x04

Friend Offer

Friend收到LPN的请求后发出邀请

0x05

Friend Clear

Friend与LPN建立Friendship后,通知LPN之前的Friend移除Friendship

0x06

Friend Clear Confirm

Old Friend收到Clear消息响应给New Friend

0x07

Friend Subscription List Add

通知Friend添加某个LPN的订阅地址

0x08

Friend Subscription List Remove

通知Friend移除某个LPN的订阅地址

0x09

Friend Subscription List Confirm

Friend响应订阅地址操作已完成

0x0A

Heartbeat

节点发送心跳消息

0x0B-0x7F

RFU

Reserved for Future Use

4. Access layer

Access layer将Model下发的消息转化成Mesh协议栈规定的格式,并将下层的数据上传至指定的Model。

5. Foundation model layer

6. Model layer

编写Mesh的Model需要先知道节点(node),元素(element),模型(model)的概念

节点(Node)

简单来讲,一个节点就是一个mesh芯片。要使一个节点成为Mesh网络里面的点,需要配网者(provisioner) 配网,配置客户端(configuration client) 配置后才能正常使用。

元素(Element)

一个元素就是执行一组功能的单位实体,一个节点里面至少有一个元素,称做主元素(primary element),其余的是次要元素(secondary element)。

每个元素都会被配网者分配一个单播地址(unicast address)作为唯一标识。

模型(Model)

一个模型定义了特定功能的实现及交互流程。模型一般是配套的,设计一组Model,既需要设计Client又需要设计Server。一端发送指定类型消息,对端响应另一指定消息,这些都属于模型的设计范畴。



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wireless_Link

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

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

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

打赏作者

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

抵扣说明:

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

余额充值