从图中可以看出,其实Mesh是建立在BLE上面的一层协议,就是说原有的BLE芯片需要做Mesh的功能并不需要重新设计,只需要在原有的基础上支持Mesh协议就即可。
在Mesh的规范中定义了几个世岁角色:
Unprovisioned device就是没有组网的蓝牙设备,虽然它没有在Mesh的网络中搜银睁,但是它仍然能通过广播的方式告诉Provisioners自己的存在。
Provisioners 可以邀请unprovisioned device加入到Mesh的网络中,但是Unprovisioned device需要经过身份的认证才能加入到Mesh当中。
已经加入到Mesh网络中的设备称为Node,即节点。Node都是由Provisioners邀请Unprovisioned device转化而来的。
Mesh的规范中指出,一个节点可以加搏睁入到多个mesh network中。
BleMesh依赖于低功耗蓝牙 - 低功耗蓝牙技术是蓝牙mesh使用的无线通信协议栈。蓝牙具有一对一、多对一及多对首返多三种通信方式。
BleMesh采用的是多对多的通信方者卖饥式,Mesh网络中的所有设备都可以互相进行通信。
未加入mesh网络的设备称为"unprovisioned devices(未配网设备)";
已加入mesh网络的设备称为"node(节点)";
未配网设备转换为节点的过程称为"provisioning(配置)";
一个节点具有多个组成部分,每个可以独立进行控制,每个组成部分称为"element(元素)";
一个元素有多种情况,这种情况称为"state(状态)",例如Generic OnOff状态;
Properties(配芦属性)代表具体含义的数据
Message(消息)用来 *** 作状态值,分为三种:GET、SET、STATUS,SET消息又分为有响应式/无响应式。
设备加入mesh网络的过程称为provisioning,用于驱动provisioning过程的设备称为provisioner,provisioning成功后成为node,还需要经过一系列的配置。
配网过程应该遵循配网协议
配网有5个阶段:
NetKey:网络消息加密加密,成为网络的一员。
AppKey(ApplicationKey):处理应用层数据,有AppKey才能实现上层传输层以上的所有功能。
DevKey(DeviceKey):每个节点的devKey唯一,用于配网阶段和配网器进行安全传输用,只有配网器与入网的节点知道DevKey。
垃圾桶攻击(Trashcan Attacks):
重放攻击(Replay Attacks):
通过SEQ Number与Iv Index来保证消息是最新的
每条指令都会携带Seq,当下一个seq小于上一条时则该指令不会执行,provisioner端记录seq变化,同时node也存在记录,当node重置或者Iv Index更新时,seq都会重置。
代理:实现Gatt和蓝牙Mesh节点之间的mesh消息发送与接收。
中继:转发从其他设备接收到的消息,数据包包含TTL字段,用于限制中继的跳数。
低功耗/友好:两个节点互帮互助,由友好节点存储消息,在低功耗节点需要消息时,友好节点才会传送消息,他们关系称为"friendShip",一般低功耗节点受限于功耗,而友好节点相反,功率不受限的节点很适配作为友好节点。
一个network最多支持32767(0x7FFF)个地址
动态分配的地址(Dynamically Assigned) ->0xC000-0xFEFF
固定地址(Fixed Address) – 由蓝牙技术联盟分配,分为五段:
保留供将来使用 (RFU) –>0xFF00-0xFFFB
节点的基本功能都由模型来定义和实施,模型位于元素内,模型能定义并实施节点的功能和行为,而状态能定义元素的状态/条件。
蓝牙Mesh网络通过客户端-服务器架构进行通信
服务器模型(Server Model):暴露元素的状态,定义模型能够发送/接收消息,并根据这些消息定义元素的行为。
客户端模型(Client Model):对状态进行访问,请求、更改或使用服务器的状态
控制模型(Control Model):具有多种功能,可能同时含有一个或多个客户端模型、服务器模型
表示mesh网设备的配置,该model只有主元素支持,该model定义了多种状态
该模型表示该元素可以控制节点的配置
主要的作用是设备上述Configuration Server Model所拥有的状态。
Config Model App Bind 该消息作用将appKey bind to Model,将appKey绑定至model如何理解?
当一个元素收到一个模型与AppKey绑定的消息并成功执行后,它应该将AppKey索引对应的AppKey绑定到特定的模型上,并给模型返回AppKey状态消息。
每个server Model都有一组绑定到它的appKey,这些key值就负责加密、认证有这些model处理的消息。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)