mesh工作原理

MESH原理讲解
mesh工作原理_第1张图片

1.mesh的基础知识

1.1什么是mesh
SIG MESH目前采用的是基于flooding (泛洪) 协议的MESH网络技术。
Mesh网络由Mobile Phone、Node组成,其中Mobile是智能手机,作为Mesh网络的控制端。
Node是网络中的节点设备。BLE Mesh网络是采用广播的方式实现的,基本步骤是:
a.由手机端发出控制或读取类型的数据给节点A
b.由节点A广播消息出去;
c.当节点B收到节点A的消息后,再把节点A的消息广播出去;
d.以此类推,利用感染的方式,一传十,十传百,让所有在无线范围内的装置都收到此消息。
MESH还会对网络中的数据进行特殊的加密,防止通过监听和中间人攻击等手段窃取网络数据。

mesh工作原理_第2张图片

1.2 Mesh的协议栈

mesh工作原理_第3张图片

mesh协议栈分为7层,分别为模型层(model)、基础模型层(foundation model)、访问层(access)、上层传输层(upper transport)、底层传输层(lower transport)、网络层(network)、承接层(bearer),Mesh协议是基于BLE协议栈为底层而建立起来的协议栈。

1.2.1各层概念-作用

下面我们来讲解各层在mesh设备运行时的作用

a.模型层
模型层定义了用于标准化典型用户场景操作的模型,模型规格 中定义的行为、消息、状态、状态绑定等的实现,并在蓝牙Mesh模型规范 [11] 或其他更高层规格中定义。较高层模型规格的例子包括照明和传感器模型。

b.基础模型层
基础模型层定义了访问层的状态、信息以及配置和管理网状网络所需的模型,配置和管理网状网络所需的模型主要是下面4个:
1.Configuration Server model
2.Configuration Client model
3.Health Server model
4.Health Client model

c.访问层
访问层负责定义应用如何利用上层传输层,包括:
定义应用数据的格式
定义并控制在上层传输层执行的加密和解密过程
在将数据上传到更高的层之前,对来自上层传输层的数据 进行验证,判断其是否适 用于该网络和应用
d.上层传输层
从访问层接收访问层载荷包并使用app key对其进行加密和验证,然后将这些信息发送到对端设备的上层传输层,而对端设备的上层传输层会用相同的app key去验证接收到的信息的合法性
内部生成的上层传输层控制消息(friendship),同样的将这个信息传送到对端设备的上层传输层;然而,控制信息则仅在网络层被加密与验证(net key);
e.底层传输层
底层传输层从上层输层接收上层传输PDU,然后将这个信息发送到对端设备的底层传输层,关于对端的概念,比如A-》B,那么就A而言,B就是A的对端设备。
底层传输层主要负责对上层传输层PDU进行分组后传输给对端的底层传输层,对端底层传输层再对分组的PDU进行重组
f.网络层
定义了底层传输层PDU的网络PDU格式,意思就是底层传输PDU被合并并组装成网络PDU,然后再被转送到承载层进行广播
网络层同时负责消息的二次加密解密(net key),网络层PDU数据要进入底层传输层时会用net-key进行解密,同理,底层传输层PDU数据要进入网络层,需要net-key对数据进行加密。

g.承载层
有两种承载方式:PB-ADV与PB-GATT
PB-ADV承载利用BLE的GAP广播和扫描来传送和接收网络PDU
PB-GATT承载让不支持mesh协议栈的设备通过GATT层与mesh网络的节点间接地进行通信(代理)

1.2.2 基本概念

(1)元素和模型
元素包含定义一个节点功能的实例,每个节点都可以包括一个或者多个元素,且至少存在一个叫首要元素的元素,就类似于一个BLE设备可以包括一个或者多个profile一样。
举个例子,一个调光的灯泡通常会有一个元素,这个元素就会向外公开其具备的一个或者多个功能,例如通用开关和亮度控制功能。在这个例子中,Light Lightness Server Model就用于实现开/关和亮度等级控制功能。
另外一个例子就是调光灯泡还包含有一个占用传感器,此时这个节点将会有两个Element(元素):
1.用于灯泡的控制
2.用于传感器的控制
首要元素用于灯泡控制,第二个元素用于传感器的控制。
节点中的每个元素都有一个唯一的地址,称为单播地址。这允许每个元素独立于同一节点内的其他元素进行寻址,也就是说可以通过单播地址找到节点的各个元素

Model一个模型定义了特定功能的实现及交互流程,相当于ble profile。

下面框图解释说明了元素与模型的关系,可以看出,元素包含了模型。模型包含了它的ID、状态、订阅的地址及应用所需数据。
mesh工作原理_第4张图片

(2)地址
消息必须从一个地址发送给另一地址的节点,蓝牙mesh定义了三种类型的地址:
1、单播地址:单播地址仅可识别单一元素,在启动配置过程中,单播地址会被分配给设备
2、多播地址:多播地址地址可以由蓝牙技术联盟定义,也可以动态分配,它可以表示一个或多个元素的。目前已经定义了4组蓝牙技术联盟多播地址,分别是All-proxy、All-friends、Al-relay和All-nodes
3、虚拟地址是可以分配给一个或多个节点的一个或多个元素的地址,它采用128位UUID值的形式,任何元素都可以与之相关联,它基本上相当于一个标签

(3)发布和订阅
mesh工作原理_第5张图片

1、发送消息的行为称为发布,通常消息被发送到多播或虚拟地址。节点可以订阅特定地址接收发布的消息

2、在上面的图中,我们可以看到节点“1号开关”发布至多播地址“厨房”,而1号电灯、2号电灯和3号电灯节点均订阅了厨房的多播地址,因此可接收并处理发布到该地址的消息。换句话说,可以使用1号开关开启或关闭1号电灯、2号电灯和3号电灯,而2号开关发布到多播地址“餐厅”,此时只有3号电灯节点订阅了这一地址,因此它是2号开关控制的唯一一盏电灯。请注意,这一例子也说明了节点可以订阅一个以上不同地址的消息——既强大又灵活

2.mesh的组网配置过程**

启动配置是设备加入mesh网络并成为节点的过程,它会生成各种安全密钥,并且本身也是是一个安全的过程。可使用平板电脑等设备上的应用进行配置,用于配置设备入网的设备称为启动配置设备(Provisioner)。进行配置有以下几个步骤:
mesh工作原理_第6张图片

1、Beacon广播
为支持各种不同的蓝牙mesh功能,引入了全新的GAP广播类型<>广播类型。未经配置的设备会通过使用广播<>广播类型的封包来说明它的存在。用户可以以这种方式启动设备广播,例如同时按下几个按钮、或长按某个按钮

2、邀请
启动配置设备将以启动配置邀请PDU(Provisioning InvitePDU)向设备发送邀请。Beacon设备会作出响应,在Provisioning Capabilities PDU中响应自身的信息。

3、交换公共密钥
启动配置设备和要进行配置的设备可以直接或者通过带外(OOB)方式交换他们的公共密钥,这些密钥可以是静态或暂时的。

4、认证
在认证步骤期间,要进行启动配置的设备会通过一定的形式给用户输出一个随机的数字。例如,它可能会闪烁LED灯数次,用户将设备输出的数字输入到启动配置设备中,两台设备之间进行这一随机数的加密交换,以完成两个设备彼此之间的认证。

5、启动配置数据的分配
认证成功完成后,会通过两台设备的私有密钥和交换的对称公共密钥生成会话密钥。会话密钥随后用于保护完成配置过程所需数据的后续分发,包括称为网络密钥(Netkey)的安全密钥。启动配置设备配置完成后,会为配置的设备分配网络密钥Netkey,这是一项mesh安全性参数,也称为IV索引和单播地址,现在的设备被称为节点。

2.1 入网认证的具体流程

入网方式有两种,一种是PB-ADV,一种是PB-GATT,虽入网方式不同,但入网的配置过程是一致的。
由于我们的需求应用是PB-GATT,所以用该方式作为举例
a.连接
provisioner与设备直接建立BLE连接进行配置入网
b.交换公钥

Provisioner与设备进行交换公钥,交换后对数据进行ECDH加密

mesh工作原理_第7张图片
c.认证
mesh工作原理_第8张图片

加密后生成认证值,再次交换,检测认证值,完成认证

d.配置参数

认证完成后开始配置参数,如net-key,netkey-index,key refresh flag,IV Update Flag,IV_index与主元素的unicast addr
最后设备回复complete,此时入网配置完成

mesh工作原理_第9张图片

2.2 mesh工作流程与数据包

入网成功完成后,mesh设备之间,他们的通信方式是广播和接收,是没有绑定连接的。
Mesh网络中包含4个角色:代理(proxy)、中继(relay)、友(friend)、低功耗(LPN)

代理
mesh工作原理_第10张图片

代理的作用是与不支持mesh协议栈的设备,以GATT的方式进行连接通信,使得设备可与网络进行通信,图为代理节点的工作流程,代理设备B与不支持PB-ADV的设备A进行连接通信后,设备A就可通过代理B间接与节点C、D、E进行控制状态和读取消息

中继

中继的作用是扩大节点的传送范围。如图所示,当A设备发送单播地址时,若被中继节点B接收到,且B设备无此单播地址,此时B设备会检测数据包里的TTL是否大于1,若大于1,B设备会把此数据包再次广播出去,且TTL-1,当TTL为1时,中继会结束消息广播。

当A设备发送组播地址时,即使中继设备C订阅了这个地址,只要TTL大于1,C也会将消息中继转发出去并TTL-1,因为地址为组播地址,订阅此地址的不只1个节点。

mesh工作原理_第11张图片

友与低功耗
低功耗:低功耗节点,该节点长时间处于睡眠状态,在指定时间唤醒,唤醒期间处理所有睡眠期间的消息,处理完消息后再次进入睡眠状态。
友:友谊节点,在LPN睡眠期间,替LPN缓存消息,当LPN唤醒时,将缓存的消息发送至LPN。

1个友节点可与多个低功耗节点建立friendship。当需要改低功耗设备参数时,从发送消息节点到友节点,参数存储在友节点,低功耗设备按指定时间唤醒,向友节点发起收集参数广播,友节点接收到后发送参数广播,低功耗设备得到参数并更改状态

关于低功耗设备与友设备建立friendship与交流的过程。此过程是在上层传输层实现的。Friend request、friend poll等命令,均属于上层传输层操作码类型。

mesh工作原理_第12张图片
mesh工作原理_第13张图片

数据包格式

mesh工作原理_第14张图片

其中需要解释的是:
CTL:控制着消息的性质,有访问和控制两种性质。
TTL:为中继转发次数,转发一次TTL-1,等于1时不再转发
SRC:发射端地址
DST:目标地址(指某节点某元素的单播地址,或某组的组播地址或虚拟地址)
NetMIC:消息校验码

3:举例 realtek 灯控(代码解析)

网络配置参数

这是关于对节点特征的定义
Role:定义扮演的mesh角色,一种是device角色,一种是provisioner角色,前者是被配置设备,后者是给人配置的设备。
Relay:置一表示支持中继角色
Proxy:置一表示支持代理角色
Fn:置一表示支持friend角色
Lpn:置一表示支持低功耗角色
Prov:置一表示在系统开始后会先广播入网配置广播(PB-GATT)
Snb:置一表示状态可以被config beacon改变
Bg_scan:置一表示在系统开始后会进行扫描

灯元素与元素内各类模型(蓝牙联盟官网经典模型)
generic_on_off_server
light_lightness_server
light_ctl_server
light_ctl_temperature_server
light_hsl_server
light_hsl_hue_server
light_hsl_saturation_server

你可能感兴趣的:(#,BLE,MESH,mesh,云原生,cloud,native)