Ble Mesh技术(四)之Access Layer

Access Layer将Model下发的消息转化成Mesh协议栈规定的格式,并将下层的数据上传至指定的Model。

1.Payload

前面讲到Model下发的数据包含3个信息,分别是Model ID/Opcode/Payload,因为Opcode包含Model ID,所以从Model层下来的有效信息只有Opcode和Payload。
access payload
一条Access消息的最大长度是384字节,每一条消息经过Upper Transport Layer加密后会生成4/8字节的TransMIC,未分段消息会生成4字节TransMIC,分段消息生成4/8字节TransMIC,由用户选择。因此Access未分段消息的最大长度是11字节,分段消息的最大长度是380或者376字节,至于为什么是这样的大小,在Lower Transport Layer会详细介绍。

2.消息的下发与上报

之前提到Model是依附在Element上的,每个Element都有一个由配网者分配的唯一的单播地址(Unicast Address),且每个Model都绑定着至少一个Appkey,设置了Publish/Subscribe Address。所谓的注册就是将这些信息都关联并存储起来。

2.1. 消息下发

Access Layer收到Model下发下来的消息,会根据下发来的Model ID找到对应的存储信息,在源地址(SRC)字段填上该Model对应的Element的单播地址,在目的地址(DST)字段填上Publish地址,以及一些其他信息,比如IV/SeqNum/TTL等,还有设置publish参数的一些重传附加参数,这些参数传至Upper Transport Layer,UTrans Layer会根据此参数进行重传相关操作。

2.2. 消息上报

Access Layer收到Transport Layer上报上来的消息,会根据消息的DST字段,找到当前节点中订阅了该地址或者Element地址为该地址的所有Model,再判断该消息与该Model是否绑定了同一个Appkey,满足了要求再上报至Model Layer,Model再进行Opcode和Payload的检查。

3. Device Key

我们之前提到过配网者配置客户端,其实配置客户端就是包含了configuration client model的节点。在每一个节点都有一个configuration server Model 和一个 health server Model。当节点通过配网者配网后成为一个Mesh节点后,需要通过配置客户端对该节点进行配置,比如配置发布订阅地址等。此时配置客户端和该节点的消息加密使用Device Key代替Appkey,Device Key只有该节点和配置客户端知道,且每个Device key都是唯一的,避免其他节点窃听。可以把Device key看做一个特殊的Appkey。

4. Acknowledged/Unacknowledged Messages

最先说的Mesh的消息发送分为Publish和Respond两种,当Publish的消息为Acknowledged MSG,对端收到后则需要Respond一个对应的消息。其中Ack MSG为Get/Set消息,响应的消息为Status消息。Unack MSG为set unack消息。
get_set_msg
一般来说server端收到ack消息后除了会对client响应一个状态外,还会把当前状态的改变后的结果通过Publish地址向四周广播,告诉周围对此节点感兴趣的节点。比如说遥控器发送一个ack命令给窗户,要打开窗户,窗户收到后响应一个status回遥控器,表示我窗户已经打开了,此时窗户再把窗户打开的状态向四周广播,空调订阅了窗户的pub地址,收到窗户打开的消息,于是自动就把空调关了。
如果client发送ack msg至一个单播地址,对端收到后需要附加一个20-50ms延迟再进行Respond。
如果client发送ack msg至一个组播或者虚拟地址,对端收到后需要附加一个20-500ms延迟再进行Respond。
这样做的目的是,减少空中的消息出现冲突的概率。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值