BleMesh总结

概念

BleMesh依赖于低功耗蓝牙 - 低功耗蓝牙技术是蓝牙mesh使用的无线通信协议栈。
蓝牙具有一对一、多对一及多对多三种通信方式。
BleMesh采用的是多对多的通信方式,Mesh网络中的所有设备都可以互相进行通信。
未加入mesh网络的设备称为"unprovisioned devices(未配网设备)";
已加入mesh网络的设备称为"node(节点)";
未配网设备转换为节点的过程称为"provisioning(配置)";
一个节点具有多个组成部分,每个可以独立进行控制,每个组成部分称为"element(元素)";
一个元素有多种情况,这种情况称为"state(状态)",例如Generic OnOff状态;
Properties(属性)代表具体含义的数据
Message(消息)用来操作状态值,分为三种:GET、SET、STATUS,SET消息又分为有响应式/无响应式。

BleMesh总结_第1张图片
element.png
BleMesh总结_第2张图片
节点、元素、状态.jpg

加入Mesh网络

设备加入mesh网络的过程称为provisioning,用于驱动provisioning过程的设备称为provisioner,provisioning成功后成为node,还需要经过一系列的配置。
配网过程应该遵循配网协议


BleMesh总结_第3张图片
provisioning架构.png

配网有5个阶段:

  • Beaconing 信标
    发起广播通知配网

  • Invitation 邀请
    provisioner发送配网邀请PDU,待配网设备作出响应,在Provisioning
    Capabilities PDU中回复关于自身的信息。

  • Exchange public keys 交换公钥
    provisioner与设备间互换公共密,公钥会用于分发配网数据时Session Key的产生。

  • Authentication 认证
    provisioner与设备间通过特定动作进行身份认证。

  • Distribution of provisioning data 分发配网数据
    从公钥和两个设备的私钥派生出Session Key,配网的信息交互的过程会用这个Session key来加密,将配网数据PDU包含“NetKey、DeviceKey...”发送给设备。

BleMesh总结_第4张图片
配网流程.png

蓝牙Mesh协议架构

BleMesh总结_第5张图片
Mesh架构.png

蓝牙Mesh加密

NetKey:网络消息加密加密,成为网络的一员。
AppKey(ApplicationKey):处理应用层数据,有AppKey才能实现上层传输层以上的所有功能。
DevKey(DeviceKey):每个节点的devKey唯一,用于配网阶段和配网器进行安全传输用,只有配网器与入网的节点知道DevKey。

Mesh攻击

垃圾桶攻击(Trashcan Attacks):

重放攻击(Replay Attacks):
通过SEQ Number与Iv Index来保证消息是最新的
每条指令都会携带Seq,当下一个seq小于上一条时则该指令不会执行,provisioner端记录seq变化,同时node也存在记录,当node重置或者Iv Index更新时,seq都会重置。

节点角色

代理:实现Gatt和蓝牙Mesh节点之间的mesh消息发送与接收。
中继:转发从其他设备接收到的消息,数据包包含TTL字段,用于限制中继的跳数。
低功耗/友好:两个节点互帮互助,由友好节点存储消息,在低功耗节点需要消息时,友好节点才会传送消息,他们关系称为"friendShip",一般低功耗节点受限于功耗,而友好节点相反,功率不受限的节点很适配作为友好节点。

地址分配

UnicastAddress:

一个network最多支持32767(0x7FFF)个地址

GroupAddress:

动态分配的地址(Dynamically Assigned) -> 0xC000-0xFEFF
固定地址(Fixed Address) – 由蓝牙技术联盟分配,分为五段:
保留供将来使用 (RFU) –> 0xFF00-0xFFFB

  • 发送到启用代理(proxy)功能的所有节点
    All-proxies -> 0xFFFC
  • 发送到启用friend功能的所有节点
    All-friends -> 0xFFFD
  • 发送到启用中继(relay)功能的所有节点
    All-relays -> 0xFFFE
  • 发送到所有节点
    All-nodes -> 0xFFFF
    发送到固定节点的所有消息都由节点的主元素(primary eleme6 nt)进行处理

Model

节点的基本功能都由模型来定义和实施,模型位于元素内,模型能定义并实施节点的功能和行为,而状态能定义元素的状态/条件。
蓝牙Mesh网络通过客户端-服务器架构进行通信
服务器模型(Server Model):暴露元素的状态,定义模型能够发送/接收消息,并根据这些消息定义元素的行为。
客户端模型(Client Model):对状态进行访问,请求、更改或使用服务器的状态
控制模型(Control Model):具有多种功能,可能同时含有一个或多个客户端模型、服务器模型

Configuration Server Model (Root Model)

表示mesh网设备的配置,该model只有主元素支持,该model定义了多种状态


BleMesh总结_第6张图片
Configuration Server Model.png

Configuration Client Model (Root Model)

该模型表示该元素可以控制节点的配置
主要的作用是设备上述Configuration Server Model所拥有的状态。
Config Model App Bind 该消息作用将appKey bind to Model,将appKey绑定至model如何理解?
当一个元素收到一个模型与AppKey绑定的消息并成功执行后,它应该将AppKey索引对应的AppKey绑定到特定的模型上,并给模型返回AppKey状态消息。
每个server Model都有一组绑定到它的appKey,这些key值就负责加密、认证有这些model处理的消息。

你可能感兴趣的:(BleMesh总结)