概念
BleMesh依赖于低功耗蓝牙 - 低功耗蓝牙技术是蓝牙mesh使用的无线通信协议栈。
蓝牙具有一对一、多对一及多对多三种通信方式。
BleMesh采用的是多对多的通信方式,Mesh网络中的所有设备都可以互相进行通信。
未加入mesh网络的设备称为"unprovisioned devices(未配网设备)";
已加入mesh网络的设备称为"node(节点)";
未配网设备转换为节点的过程称为"provisioning(配置)";
一个节点具有多个组成部分,每个可以独立进行控制,每个组成部分称为"element(元素)";
一个元素有多种情况,这种情况称为"state(状态)",例如Generic OnOff状态;
Properties(属性)代表具体含义的数据
Message(消息)用来操作状态值,分为三种:GET、SET、STATUS,SET消息又分为有响应式/无响应式。
加入Mesh网络
设备加入mesh网络的过程称为provisioning,用于驱动provisioning过程的设备称为provisioner,provisioning成功后成为node,还需要经过一系列的配置。
配网过程应该遵循配网协议
配网有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...”发送给设备。
蓝牙Mesh协议架构
蓝牙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定义了多种状态
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处理的消息。