蓝牙mesh——————Mesh系统框架

接上篇,本篇主要介绍Mesh网络操作概述和Mesh层系统的框架。废话不多说,直接上mesh官方文档,本文包括翻译和我的一些理解。

2 Mesh系统结构

2.1 层结构

先看下mesh结构图,该结构图具有大小端问题,在代码编写中需要注意。

 

(1)Model Layer:定义了用于标准化典型用户场景操作的模型以及蓝牙网络模型规范或其他更高层规范中定义的,比如灯光和传感器这种更高层模型定义。

(2)Foundation Model Layer:定义用于配置和管理一个mesh网络的状态消息模块。(上面这两层见文档《Mesh Model Specification》)

(3)Access Layer:定义上层应用如何使用Upper Transport Layer,它定义了应用数据的格式;定义和控制应用数据在upper transport layer执行加密和解密,在被传输到上层之前检查进入的应用数据是否在正确的网络和应用密钥的上下文中被接收。

(4)Upper Transport Layer:加密、解密和认证应用数据并且用于提供进入消息的机密性。该层也定义了传输控制消息如何管理节点间的上层传输层,包括被朋友特性使用时。

(5)Lower Transport Layer:定义Upper Transport Layer层消息如何被分割重组到多个Lower Transport PDUs以传输大的Upper Transport层消息给其他节点。它还定义了单一控制消息去管理分割和重组。

(6)Network Layer:定义传输消息如何寻址到一个或多个元素,它定义允许传输PDUs被bearer层传输的网络消息格式。决定是否转发消息,接收或拒绝;定义一个网络消息如何被加密和认证。

(7)Bearer Layer:定义网络消息如何在节点之间传输。有两种承载被定义,广播承载和GATT承载。

2.2 mesh操作的概述

         定义了如下特性:

         (1)使得消息可以从一个元素传输到一个或多个元素; 

         (2)允许消息通过其他节点中继,以扩大通信范围;

         (3)安全消息抵抗已知的安全攻击;

         (4)和市场现存的设备工作;

         (5)及时传输消息;

         (6)有个别或多个设备改变或停止操作时,能继续工作;

         (7)能兼容未来版本;

         这个规范定义了泛洪网络,即使用广播信道传输消息,其他节点可以接收消息或中继消息,从而扩大原始消息的传输范围。任何在泛洪网络中的设备都能在任何时间发送消息,只要网络中监听和中继消息的设备密度足够。未来mesh版本将加强路由功能的mesh网络。

      这里有两个关键的方法,Network message cache和time to live(TTL)。网络消息缓存和生存时间。网络消息缓存就是通过添加消息到一个缓存列表中,防止设备接收之前接收过的消息。很好理解,接收一个消息时,检查该列表是否已经有该消息了,有则忽略,没有则添加到该列表。缓存列表是有一定长度的。生存时间值用来消息转播的次数。消息被一个设备接收并转播一次,TTL的值减一。

2.2.1 Network and subnets

         由节点组成的mesh网络分享四种共同资源:

         1)网络地址用于识别消息的源和目的;

         2)网络密钥用于网络层的安全和消息认证;

         3)IV Index用于扩大网络的生存时间。

         一个节点知道一个或多个网络密钥,可以属于一个或多个子网,在Provisioning时,一个网络在被provisioned到一个子网时,也能被添加到其他子网,通过configuration model。

         Provisioner需要管理地址分配使得没有重复地址,一个Configuration Client产生和分配网络key和应用key,以确保设备能够和分享了正确的key的两个网络的网络层和进入层进行通信。

2.2.2 Devices and nodes

         就是Provisioner来管理入网问题,client用来管理网络。

2.2.3 Adding Device to a mesh network

       Provisioner将设备添加到一个mesh网络,使其变为一个节点。这不同于点到点的绑定和配对,provisioning设备使用一个简单的广播bearer或者一个点到点的基于GATT的bearer。基于广播的Provisioning被所有的设备实现,基于GATT的 Provisioning允许设备变成一个Provisioner。

         为了帮助provisioning多个设备,Provisioner为一个设备设置一个attention timer,当这个timer设置为非零值时,这个设备能使用任何它可以使用的方式来识别自身。

         运行于这两个bearer的协议是从v4.2中的安全管理协议派生而来的,去认证设备使用有限的用户接口。

2.2.4 Communications support

       许多当前的设备不能广播或者理解未更新的mesh网络消息,在不能进行操作系统更新或者类似的硬件软件更新,为了能够使这些设备与mesh中的节点通信,该规范使能所有存在的设备的GATT连接。

2.2.5 Lower Power support

         在mesh网络中的许多设备为电池供电或者使用电能收集的技术。这个规范不要求设备在每次连接时进行协调传输建立连接重新开始安全,从而便于低功耗操作。需要低功耗支持的设备将与一个常开设备相连,用于存储和中继消息。然而,设备中继消息将在大部分时间接收或者发送数据,如此可能功耗会多于典型的小电池或电容器所能供应的。

2.3 Architectural concepts

         mesh网络结构使用几个概念:状态消息绑定元素地址模块发布-订阅mesh密钥以及关联

2.3.1 States

       状态是代表一个元素的条件值,一个发送状态的元素称为服务器;一个接收状态的元素称为客户端。

         具有两个或多个值组成的状态称为复合状态,比如一个颜色改变灯可以控制颜色的饱和度和亮度。

2.3.2 Bound states

         当一个状态绑定到另一个状态,在一个上面的改变将作用于另一个的改变。

2.3.3 Messages

         一个mesh网络中的所有通信都是通过发送消息来实现的。消息操作状态,对于每个状态,定义了一组服务器支持的消息,且一个客户端能够要求一个状态的值或者改变一个状态。

         消息由一个操作码,相关参数以及行为。一个消息大小,包括一个操作码,被底层传输层定义,会使用分割和重组机制。最大限度的提高性能和防止SAR的过度使用,设计目标是使消息能够在一个单独的片段中。

2.3.4 Elements

         元素是一个节点内可寻址的实体,每个节点有最少一个元素,主要元素,可能有一个或多个另外的第二元素。元素的个数和结构是静止的,在节点生命周期内是不改变的。

         主要元素在provisioning的过程中使用分配给节点的第一个单播地址。每个另外的第二元素使用之后的地址,这些单播元素地址允许节点识别是节点内的哪个元素在发送或接收一个消息。

         如果元素的数量和结构改变后,比如固件升级,这个节点将重新provisioned。

         模块中的消息调度基于操作码和元素地址。

         元素不允许有多个模块实体使用相同的消息,如果需要多个实体的话,就需要多个元素。

2.3.5 Addresses

         地址可以是单播地址、虚拟地址或组地址,有特殊值代表一个未分配的地址,不用于消息中。

         单播地址代表一个节点的一个单一元素,一个mesh网络中有32767个单播地址。

         虚拟地址是一个多播地址,能代表一个节点或多个节点的多个元素。每个虚拟地址逻辑上代表一个Lable UUID,是一个不需要集中管理的128位的值。每个消息发送一个Lable UUID包括全Lable UUID在用于认证消息的整体性检查值中。为了减少重复检查每个已经知道的Lable UUID,一个Lable UUID的hash表被使用。有16384个hash值,每个都包括一组虚拟地址。每个hash值代表百万个可能的Lable UUID,如此,虚拟地址的个数是非常大的。

      组地址也是一个多播地址,能代表一个节点或多个节点的多个元素。每个mesh网络有16384个组地址,有一系列固定组地址根据其节点的功能分配给子网的所有主元素,其他组地址动态分配,有256个固定组地址和16128个动态分配组地址。

2.3.6 Model

         模块定义节点的基本功能,一个节点能包括多个模块,模块定义需要的状态,在状态上的消息以及相关的行为。

         一个mesh应用使用特定的客户端-服务器架构与发布-订阅范例通信。由于网状网络的性质以及由配置客户端执行配置行为的认识,应用程序没有在单个端到端规范中定义为配置文件。代替这个的是,一个应用定义在一个客户端模块,一个服务器模块,一个控制模块。

2.3.8 Publish-subscribe and message exchange

         mesh网络中数据的发布和订阅被描述使用发布-订阅范例,节点产生消息发布给单播地址、组地址、虚拟地址;节点对这个接收消息有兴趣的将订阅这些地址。

         模块的发布地址和订阅列表在上层规范中使用Model Publication 和Subscription List状态来定义,这个状态由Configuration Server Model来管理。

2.3.9 Security

         所有消息被加密和认证使用两种key。一个key类型是用于网络层通信,如此所有在一个mesh网络中的通信能够使用相同的network key。另一个key类型用于应用数据。使用不同的key将敏感进入消息和不敏感的进入消息区分开来。在一个网络中没有未加密或者未认证的的消息。

         安全模式定义三种独立的key用于消息的安全,设备key、应用key、网络key。

         设备key便于配置客户端和一个节点之间密钥材料的机密性和认证。应用key便于预期节点之间设置应用数据的机密性和认证。网络key便于网络消息的隐私、机密性和认证。一个节点有一个单一设备key,多个应用key以及多个网络key

         设备key与应用key类似,由一个应用的上层发送的安全信息设计。然而,设备key仅被一个Configuration Client和一个单一节点知道,Client知道所有节点的设备key,这允许Client安全的发送key给所有节点。

         应用key仅能和一个单一网络key使用,一个网络key能有一个或多个应用key与之绑定。

         接入层的安全力度是基于每个模块的,每个服务器模块有一系列应用key绑定到其上面。这允许多实体去操作确切的节点功能。

        Network and application key identifiers,通过使用key 识别,能够去识别是哪个key的子集用于保护消息的。

问题:key识别用于相当于快速识别该消息是否是我们网络需要的,或者减少试错的时间?

        key识别是产生于网络或应用key,使用一个key生成函数。规范定义为网络key和应用key定义不同的识别。网络key识别在每个Network PDU中使用7bit值进行传输,而应用key识别在Lower Transport PDU中使用6bit值来传输。

2.3.9.4 Initialization vector index

         一个网络PDU包括一个24bit的序列数,允许一个元素传输16777216个网络PDU。序列数用于安全性随机数,提供唯一性,所以序列数不能耗尽。

         为了实现从一个IV索引逐渐向下一个转换

2.3.10 Friendship

         朋友关系是一个低功耗节点和其一个邻近的朋友节点之间的特殊关系,这些节点必须在单跳内,且在同一子网内。

         朋友关系由低功耗节点开始建立和初始化;一旦建立,朋友节点执行许多操作帮助减少低功耗节点的功耗。朋友节点为低功耗节点维持一个朋友队列,这个队列存储所有寻址到这个低功耗节点的输入消息。

2.3.11 Features

         Proxy Feature是在GATT和广播承载层之间接收和重传mesh消息。

2.3.12 Topology

         网络结构图

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值