美文网首页
BleMesh总结

BleMesh总结

作者: 最黑暗的自己 | 来源:发表于2020-07-28 20:33 被阅读0次

    概念

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

    element.png 节点、元素、状态.jpg

    加入Mesh网络

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


    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...”发送给设备。

    配网流程.png

    蓝牙Mesh协议架构

    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定义了多种状态


    Configuration Server Model.png

    Configuration Client Model (Root Model)

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

    相关文章

      网友评论

          本文标题:BleMesh总结

          本文链接:https://www.haomeiwen.com/subject/lewmuhtx.html