zoukankan      html  css  js  c++  java
  • SIG -MESH -1

    协议栈

       node:成为蓝牙mesh网络中一员的设备被称为节点(Node)

      

    蓝牙mesh规格定义了节点可能拥有的特性。具有这些特性中的一个或多个,即表示节点可以在网络中扮演相应的特殊角色。定义的特性包括:

    中继(Relay)

    中继节点可通过广播承载层,接收并重新发送蓝牙mesh消息。中继特性能让蓝牙mesh消息在设备之间实现多次跳跃,传送距离可超过两台设备之间直接进行无线电传输的范围,从而覆盖整个网络。

    好友(Friend)

    好友节点能够存储发往相关低功耗节点的消息,随后再进行转发。

    低功耗节点 (LPN)

    低功耗节点功率受限,可借助好友节点的支持,在蓝牙mesh网络中有效地运作,借此大幅降低空占比。

    代理(Proxy)

    代理节点可通过承载层(广播承载层或GATT承载层)接受信息,并通过另一个广播承载层或GATT承载层重新发送消息。

    代理节点的根本目的是执行承载层转换。它能够实现从广播承载层到GATT承载层的转换,反之亦然。因此,不支持广播承载层的设备可通过GATT连接来收发各类蓝牙mesh消息。

    mesh代理服务包含两个GATT特性:mesh代理数据输入和mesh代理数据输出。代理客户端(Proxy Client) 使用“GATT Write Without Response”子程序,将代理协议(见下图)PDU写入mesh代理数据输入特性,并从GATT通知中的mesh代理数据输出特性接收代理协议PDU。这就是互联GATT设备通过代理节点在蓝牙mesh网络中进行数据交换的机制。

    蓝牙mesh网络引入了全新的协议栈。如之前所述,这一协议栈建立在低功耗蓝牙技术之上。下图描绘了协议栈的层级

    蓝牙mesh网络协议栈

    该规格是深入了解各层责任的最佳方式。为帮助您更好地了解其工作原理,以下列出了协议栈各层负责的工作:

    承载层(bearer layer):承载层定义了如何使用底层低功耗堆栈传输PDU。目前定义了两个承载层:广播承载层(Advertising Bearer)和GATT承载层。

    蓝牙mesh网络设备默认使用的是广播承载层,它负责在低功耗蓝牙广播数据包内收发蓝牙mesh数据包。

    具有低功耗蓝牙协议栈、能够进行广播和扫描的设备具有基本的、必备的低功耗特性,因此能够支持广播承载层、乃至完整的蓝牙mesh网络协议栈。

    既不支持也无法升级使用广播承载层的设备,则必须使用GATT承载层。使用GATT承载层时需要将蓝牙mesh协议数据单元(PDU)封装在代理协议(Proxy Protocol)中

     网络层(network layer):网络层定义了各种消息地址类型和网络消息格式。中继和代理行为通过网络层实施。

    底层传输层(lower transport layer):在需要之时,底层传输层能够处理PDU的分段和重组。

    上层传输层(upper transport layer):负责对接入层进出的应用数据进行加密、解密和认证。它还负责称为“传输控制消息”(transport control messages)这一特殊的消息,包括与“friendship”相关的心跳和消息。

    接入层(access layer):负责应用数据的格式、定义并控制上层传输层中执行的加密和解密过程,并在将数据转发到协议栈之前,验证接收到的数据是否适用于正确的网络和应用。

    基础模型(foundation models):基础模型层负责实现与mesh网络配置和管理相关的模型。

    模型(models):模型层与模型等的实施、以及诸如行为、消息、状态等的实施有关。

    网络和子网

    有4个公共的资源

    network address

    network keys--in the network layer

    app keys--in the access layer

    an iv index

    一个网络里面可以有多个network keys

    device keys--更新 network keys 和 app keys

     

    节点(如照明装置、温控设备、制造设备和电动门)是蓝牙mesh网络中能够发送、接收或中继消息的设备。消息(message)用于在节点之间传输数据,地址(address)用于定义消息源(source)地址和目的(destination)地址。

    元素(Elements)有以下几个特性

    低功耗 (Low-Power) 特性 、Friend 特性、中继 (Relay) 特性、代理 (Proxy) 特性

    低功耗 (Low-Power) 特性

    功率受限的节点可能会利用低功耗特性来减少无线电接通时间并节省功耗。同时低功耗节点(LPN)可以与friend节点协同工作。

    Friend 特性

    功率不受限的节点很适合作为friend节点。Friend 节点能够存储发往低功耗节点(LPN)的消息和安全更新;当低功耗节点需要时再将存储的信息传输至低功耗节点。

    中继节点能够接收和转发消息,通过消息在节点之间的中继,实现更大规模的网络。节点是否能够具备这一特性取决于其电源和计算能力。

    代理节点能够实现GATT和蓝牙mesh节点之间的mesh消息发送与接收。承担这一角色的节点需要固定的电源和计算资源。

     一些节点的复杂性高于其他节点,由多个称为元素(Element)的独立部分组成。每个节点至少拥有一个元素,称为主元素(Primary Element),同时还可能包含其他多个元素(图3)。元素由定义节点功能和元素条件的实体组成。例如,一个灯泡内有一个元素, 并具有两种功能:

    • 节点 = 灯泡

    • 一个元素 = 主元素

    • 节点功能

                        - 开/关

                        - 亮度

    • 元素条件/状态

                        - “开”或“关”

                        - 0 – 10 (亮度等级)

    图 3 –节点必须至少有一个元素,也可能包含多个元素

    节点中的每个元素都有一个唯一的地址,称为单播地址(unicast address),使每个元素都有址可寻。我们将在后续的解密蓝牙mesh系列文章中进一步解释“寻址”。

    模型 (Model) 和状态 (State

    模型能够定义并实施节点的功能和行为,而状态 (State) 能够定义元素的条件(图4B)。

    图4A - 节点、元素与模型

    图4B - 节点、元素、模型以及状态之间的关系

    以灯泡为例,该模型的功能是开关和调节亮度。相关的状态分别为“开”/ “关”和0-10:

    • 模型 (节点功能)

                 1. 开/关

                        状态 -> “开”或“关”

                 2. 亮度 (0-10)

                        状态 -> 0-10

    模型的定义能让您在mesh网络中对节点及其功能进行配置

    其他:

    绑定状态” (Bound State) 这一术语的定义源自一种状态的变化导致另一状态变化的情况。级别状态和开/关状态通常就相互绑定。如果级别从0变为1,则“开/关”的状态也从“关”变为“开”。

    每个模型都有唯一的标识符。蓝牙技术联盟采用16位的模型,而供应商采用32位(其中包含蓝牙技术联盟指定的16位公司标识符以及16位供应商指定的模型标识符)。这确保了每个模型的地址都独一无二并且能确定被寻址到。

    蓝牙mesh网络可借助消息,通过客户端 - 服务器架构进行通信

    服务器的功能是暴露元素的状态。最简单的状态之一是二进制开关,其中状态为“开”或“关”。简单的服务器模型是通用开/关服务器模型 (Generic On/Off Server Model) ,其中包含表示开关开启或关闭的状态。

    客户端可对状态进行访问,请求、更改或使用服务器的状态。举例来说,一个简单的客户端模型就是通用开/关客户端模型(Generic On/Off Client Model)(二进制开关)。通用开/关客户端模型通过发送消息来控制通用开/关服务器模型。例如,客户端可利用这一机制开启或关闭指示灯。

    地址有四种类型,其中的三类用于消息的传送:单播(unicast)、虚拟(virtual)和群组(group)地址。第四种被称为未分配(unassigned)地址。地址长度为16位,并按下述定义进行编码(图2)。

    图2 - mesh地址编码

       未分配地址(Unassigned Address)

    未经配置的元素或未被指定地址的元素拥有的就是未分配地址。鉴于这些元素没有唯一的地址,它们不会用于消息的传送。

       单播地址(Unicast Address)

    在“启动配置”(provisioning)期间,启动配置设备(provisioner)会在网络节点的生命周期内为节点中的每个元素分配一个单播地址。单播地址可能出现在消息的源地址字段或目的地址字段中。发送到单播地址的消息只能由一个元素进行处理。

       虚拟地址(Virtual Address)

    虚拟地址是与特定的UUID标签相关联的一组元素;这些地址可能会被发布或订阅。UUID标签是与多个来自一个或多个节点的元素相关联的128位值。

    对于虚拟地址,15和14位分别设置为1和0(图2);13 – 0位被设置为散列值(hash value)(提供16,384个散列值)。散列(hash)来自于Label UUID。使用订阅元素(subscribing element)来检查完整的128位UUID是十分低效的,特别当UUID跨越多个消息段时更为低效。散列值提供了一种更为有效的方式来确定哪些消息被发送至哪些元素。

       群组地址(Group Address)

    群组地址是蓝牙mesh网络中的另一种多播地址(multicast address),它通常代表一个或多个节点中的多个元素,包含两种类型:

      • 动态分配的地址(Dynamically Assigned) -> 0xC000-0xFEFF

      • 固定地址(Fixed Address) –  由蓝牙技术联盟分配,分为五段:

        • 保留供将来使用 (RFU) –> 0xFF00-0xFFFB

        • All-proxies -> 0xFFFC

          • 发送到启用代理(proxy)功能的所有节点

          • All-friends -> 0xFFFD

    -  发送到启用friend功能的所有节点

          • All-relays -> 0xFFFE

    -  发送到启用中继(relay)功能的所有节点

          • All-nodes -> 0xFFFF

    -  发送到所有节点

        • 发送到固定节点的所有消息都由节点的主元素(primary element)

          进行处理

    • 蓝牙mesh网络通过消息进行通信。消息可以分为控制消息和接入消息。

    控制消息--即控制指令,

    • 与蓝牙mesh网络操作有关的消息,例如心跳(heartbeat)和friend的请求消息。

    接入消-获取状态

    • 接入消息(Access Message) - 该类消息允许客户端模型检索或设置服务器模型中的状态值,或被服务器用于报告状态值。

    元素是节点内唯一可被寻址的实体(节点中可包含一个或多个模型),并由状态(state)定义元素的状况变化

    入消息分为两类:经确认的(acknowledged)和未经确认的(unacknowledged)。经确认的消息被发送至每个接收元素,并经其确认。响应通常为状态消息。对于未经确认的消息则不作出响应。例如蓝牙mesh网络的状态消息就是一种未经确认的消息。

  • 相关阅读:
    桂林游览3
    其实她们也是屌丝,但2的好像只有我。。。
    屌丝吖
    我觉得拍照这丫头狠有天赋
    《那些年啊,那些事——一个程序员的奋斗史》——56
    《那些年啊,那些事——一个程序员的奋斗史》——57
    《那些年啊,那些事——一个程序员的奋斗史》——57
    《那些年啊,那些事——一个程序员的奋斗史》——56
    《那些年啊,那些事——一个程序员的奋斗史》——59
    《那些年啊,那些事——一个程序员的奋斗史》——58
  • 原文地址:https://www.cnblogs.com/jack-hzm/p/8328599.html
Copyright © 2011-2022 走看看