zoukankan      html  css  js  c++  java
  • Mesh Profile (3.7)访问层

    (翻译自《MeshProfile v1.0》3.7 Access Layer)

    综述

    访问层定义了更高层次的应用如何使用高传输层。

    该层定义了应用数据的格式;

    定义和控制了应用数据在高传输层的加密(应用数据的加密本身发生在高传输层);

    在递交收到的数据到更高层之前,访问层检查了数据是否通过正确的网络和应用秘钥接收。

    模型标识符

    一个模型通过唯一的标识符标识区分。

    对于SIG定义的模型,该标识符16bit。

    对于由厂商定义的模型,该表示符32bit。厂商模型ID由两部分组成:16bit的蓝牙组织公司标识符和16bit厂商赋值模型标识符。

    访问层负载数据

    访问层数据逻辑上由两个部分组成:

    Opcode    1,2,3octet    操作码

    Parameters   0~379octet  应用参数 

    一个访问层负载数据最多发送32个分片,每个分片12octets。这意味着包含TransMIC,最多384octets。(分片行为发生在低传输层,此时已经计算出TransMIC)。

    对于4octets的TransMIC,访问层负载数据最多380octets(含操作码)。因此,当操作码为1octet时,参数字段最大为379octet;操作码为2octets时,参数字段最大378octet;操作码为3octets时,参数字段最大377octets。

    低传输层将消息分片为更小的PDU,然后递交给网络层。

    操作码

    操作码是一个包含1,2或者3个octets的数组。第一个octet决定了整个操作码中octet的个数。

    如果操作码第一个octet的最高有效位是0,那么该操作码包含1octet。

    如果操作码第一个octet的最高两位有效位是10,那么该操作码包含2octets。

    如果操作码第一个octet的最高两位有效位是11,那么该操作码包含3octets。

    1octet的操作码用于SIG定义的应用操作码。一共127个可定义操作码,0x7F保留为将来可能的扩展使用。

    2octet的操作码用于SIG定义的应用操作码。一共有16384个可定义的操作码。

    3octet的操作码用于制造商定义。对于每个厂商ID,有64个操作码(6bit)。剩下的2octet(16bit)用于厂商ID。

    应用参数

    参数由每一个操作码各自定义。参数的长度可以是0。

    访问层行为

    发送一个访问层消息

     一条消息通过模型发送到一个目的地址。这个目的地址可以是单播地址,组地址或者虚拟地址。

    一条消息的源地址,是发送元素的单播地址。

    TTL字段由应用定义,表示了从源地址到目的地址传输过程中的跳数。

    SRC字段表示了消息起源的节点上发送该消息的元素的单播地址。

    DST字段可以被设置为单播地址,组地址或者虚拟地址,表示消息的指向。

    访问层并不保证消息的分发。每个模型决定一个消息是否应该别重传和如何处理潜在的拷贝操作。

    如果一个消息是一条收到的消息(该收到的消息是发向单播地址)的响应回复,那么该响应消息的传输应该有一个20~50ms的随机延时

    如果一条小时是一条收到的消息(该收到的消息是发向组地址或者虚拟地址)的响应回复,那么该响应消息应该有一个20~500ms的随机延时。

    这样减少了多个节点同时响应一条消息的可能性,进而增加了消息成功分发的可能性而减少了消息冲突。

    由于带宽(在所有节点和所有蓝牙设备间共享)的限制,观察由节点发起的通信的体量是很重要的。一个节点在一个可移动的10s的窗口内应该发起少于100个低传输层PDU(经过了分片)。

    接收一个访问层消息

    如果遇到下列情况,一条消息要被递交给模型处理:

    • 操作码属于被寻址的元素
    • 目的地址被设置为该模型中某个元素的单播地址,或者该模型的元素订阅的组地址和虚拟地址。或者目的地址是节点主元素固定的的组地址(all-proxied, all-friend, all-relays, all-nodes)。
    • 该模型被绑定到用于加密该消息传输的应用秘钥和设备秘钥上。(如何理解模型和秘钥的绑定关系?

    安全考虑

    消息错误处理过程

    非确认消息和确认消息

    非确认消息

    确认消息

    发布和订阅

    发布

    订阅

  • 相关阅读:
    关于dubbo创建服务和引用服务时,会报错:cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 问题的解决
    解决 Maven工程运行报错Failed to clean project: Failed to delete
    Linux学习_004_使用CentOS 7.5卸载自带jdk安装自己的JDK1.8
    Linux下的JDK和OpenJDK有什么具体的区别
    常用的大数据技术有哪些?
    如何隐藏你的 Linux 的命令行历史
    Securi-Pi:使用树莓派作为安全跳板
    在 Linux 上管理加密密钥的最佳体验
    在 Linux 下使用任务管理器
    在 Linux 中安装 Lighttpd Web 服务器
  • 原文地址:https://www.cnblogs.com/minnowbin/p/9636059.html
Copyright © 2011-2022 走看看