SIG蓝牙mesh笔记2_mesh组成
SIG 蓝牙 mesh 组成
mesh网络概述
蓝牙mesh网络是一种基于泛洪管理的mesh网络,消息是通过广播信道传递,收到消息的节点可以继续转发消息,这样就可以实现更远范围的消息传递。为了防止出现消息不受限制的转发传递,规定了以下两种方法来避免:
- 节点不会转发之前收到的消息,当收到新的消息时,会首先在缓存中检查是否存在相同消息,若存在,则忽略新的消息。
- 每个消息都会包含一个TTL(Time to Live)的字段,这是用来限制消息中继的次数,每次转发消息后,TTL的值就会减1,当TTL的值到达1时,消息就不会再次被中继。
网络和子网
共享以下几种网络资源的节点组成一个mesh网络:
- 用来identify消息源地址及目的地址的网络地址
- Netwoek Key, 用来在网络层加密
- Application Key, 用来在access layer加密
- IV index
IV Index 是一个32位的值,是一种共享网络资源,比如一个mesh网中的所有节点都共享相同的IV Index值。
IV Index从
0x00000000
开始,在IV-Update-procedure过程中递增,并由特定的进程维护,以保证整个mesh网内共享相同的IV。IV Index在网络中通过Secure Network beacons 共享, 一个子网收到 IV-Update时,会处理并传播该update。传播是通过在子网中传输Secure Network beacons实现的。如果一个在主子网中的节点收到IV-update时,会将其传播到其他所有的子网。
如果一个节点从网络中消失一段时间,该节点会扫描Secure Network beacons ,或者是使用IV Index Recovery procedure来重新设置其IV-Index的值。
一个mesh网络中可以存在一个或多个子网(比如一个宾馆的所有节点构成一个mesh网络,每个房间的节点都构成一个子网),子网中的节点有着同样的Network Key,他们可以在网络层相互通讯。一个节点可以属于多个子网,即一个节点可以配置多个Network Key。在Provision阶段,一个节点会被配到一个子网中,可以通过Configuration Model将节点陪孩子到多个子网中。
子网中有一类特殊的子网,被称为主子网,主子网是基于主NetKey的。主子网中的节点参与IV更新操作,并将IV值传递给其他子网。与之相对的是,其他组网中 的设备只是向子网中传播IV-Index。
包含Configureation Client Model的节点来配置网络资源, 这类节点称之为Configuration Client。通常情况下,Provisioner 负责在Provision阶段给节点分配unicast address以保证不会有重复的地址。Configuration Client负责分配NetKey, AppKey以保证网络中的节点可以在网络层和access层通讯。
设备和节点 devices & nodes
加入mesh网络的设备称之为节点,未配网设备称之为device。** Provisioner** 就是用来管理节点与未配网设备之间的消息传输。
未配网的设备不能收发mesh消息,但是它可以通过广播消息告诉provisioner该设备的存在。provisioner可以将一个未配网设备接入网络使之成为网络节点。
网络节点可以收发mesh消息,其是由Configuration Client来管理的(Configuration Client可以与Provisioner是同一个)。Configuration Client是配置节点之间如何传递消息。Configuration Client可以把节点从mesh网络中移除,使之成为未配网设备。
入网
当设备被provisioner添加到网络时,就成为网络节点。设备的配网过程与传统的蓝牙点对点配对过程不同。设备配网过程是通过advertising bearer 或者point-to-point GATT-based bearer实现的。通过advertising bearer 配网的过程是被所有节点所支持的,而通过point-to-point GATT-based bearer配网允许智能手机这类设备成为配网者(provisioner)。
mesh中的几个概念
mesh网络结构使用以下几个概念:states、messages、bindings、element、addressing、models、publish-subscribe、mesh keys、association。
States(状态)
state是一个用来表示element状态的一个值。
可以表现state的element称之为server。比如,灯控中,灯节点一般为server,其开关状态则是一个state, server根据收到的消息改变其状态。
可以访问state的element称之为client。比如,灯控中的开关,可以通过发送开关消息给server,实现开关控制。
包含多个值得状态称之为复合状态,比如灯的颜色会包含RGB等分量。
Bound states(关联状态)
当一个状态关联另一个状态,其中一个改变,会导致另一个状态改变,这种状态就称之为关联状态。关联状态可以存在于一个或多个element的不同models之间。在灯控中,较为常见的关联状态是电平状态跟开关状态的关联,当电平变化到0时,会导致开关状态也变为关。
Messages(消息)
消息会作用于状态, 对于每个状态(state)都会定义一系列消息,这些消息被server支持并且可以被client用来获取并改变server的状态。server也可以主动发送自身状态的消息,比如状态改变时。
消息包含操作码、相关的参数以及行为。操作码可以是1~3个字节,比如泰凌微的私有mesh就是用的三个字节(op[3])表示,其中op[0]为操作码,op[1~2]表示厂商ID。一字节的操作码用于某些特殊情况,比如需要将允许的参数个数设置为最大时;2个操作码时标准的消息。
一条包含操作码的消息的总长度是在下传输层决定的,这里可能会用的分段重组机制。为了最优化性能,我们应避免分段重组,最好将消息限制在一个分段长度以内。传输层允许最多11个字节的不分段消息,当使用一个字节操作码时,参数个数最多允许10个。当操作码为3个时,最多允许8个参数。
传输层的分段重组机制最多允许32个分段,因此消息的最大长度是384个字节。除去MIC检验的四个字节,一个操作码的消息最多允许379个参数。
消息可以是需要回应的,也可以是无需回应的。
Element
element是节点中一个可寻址的实体,每个节点都至少有一个element,一个主element,多个附加element。element的数量和结构是固定的,在节点的生命周期中保持不变。
主element使用节点在配网时的唯一地址(unicast address)寻址,每个附加element都使用子序列地址寻址。这些element地址允许节点识别节点内的收发消息。
如果一个节点内,element的数量和结构发生了变化,比如在固件升级时,那么需要再次配网。
models中的消息是根据消息的操作码和element地址来分发的。
一个element中不允许包含多个使用相同消息的model,当一个element中的多个model使用相同消息时,会造成过载。为了避免过载,一个节点内允许多个element存在,这样具备相同消息的model放在不同element中就可以了。
比如,对于一个灯设备来说,可能存在两个灯泡,每个都实现了亮度控制。这时就需要节点包含两个element来分别表示两个灯泡,当收到亮度命令时,节点会根据element的地址来决定哪个灯泡亮度应被修改。
Addresses 地址
有三种类型地址,唯一地址(unicast address)、虚拟地址、组地址。
唯一地址是在配网阶段被分配给节点的主element,每个mesh网络可以有32767个唯一地址。
虚拟地址可以代表多个element,每个虚拟地址表示一个标签化的UUID。每个被发往UUID的消息都在完整检验值中包含可整个标签UUID,以验证消息。为了避免检查每个已知的UUID,我们使用UUID的哈希值。共有16384个哈希值,每个都代表了一族虚拟地址。在虚拟地址中,只使用了16384个哈希值,因此每个哈希值都可以表示上百万个UUID,因此虚拟地址的数量可以被认为很大。
组地址可以表示多个element,每个mesh网络中共有16384个组地址。有一些固定的组地址用来访问所有主element。共有256个固定组地址,16128个动态分配的组地址。
Models
Model定义了一个节点的基础功能,一个节点可能包含多个Model。一个Model定义了其所需要的状态、作用于状态的消息、以及相关行为。
mesh应用使用了client-server结构,通讯使用“发布-订阅”机制。鉴于mesh网络的特点,以及配网的行为,应用不是简单的“端到端”模式。应用是定义在client model、server model和control model之中。
Server model: 由一个或者多个element中的多个state组成。Server Model 定义了一族主消息,收发主消息时element的行为,还有收发消息之后的附加行为。
Client model:定义了一族消息,client可以用来请求、改变相关server的状态。client没有state.
Control model: 包含client功能用来与其他server通讯,也包含server功能用来与其他client通讯。一个control model可以包含控制逻辑,即与其他model相互作用时,该model的一些规则及表现。
一个简单的设备可以包含server、client、control model。下图表示了一个control model例子。
照明控制器是一个control model实现,照明控制器需要作为client来控制灯设备(或传感器),也需要作为一个server被智能手机等设备控制。这样一个照明控制器可以存在于传感器中、灯设备中或者是一个独立的设备中。
Models可以定义网络节点的功能,比如秘钥管理、地址分配、消息中继灯。Models也定义了设备的表现,比如电源控制、照明控制、传感器数据收集。有的节点只实现了中继中能,比如代理节点。
一个消息可以应用于多个不同的models,消息的表现在每个model中都是相同的。
Model的特性是不可改变的,不能向一个model移除或者添加行为。如果一个新的行为必须要添加,则需要产生一个新的model。model支持扩展,新的model扩展原model时,会继承原model的相关行为。
一个element所包含的的model决定了该element的表现。
Model可以被SIG定义(SIG Model)也可以被厂商(Vendor Model)定义,model被唯一的标识符所识别,可以是16bit(SIG Model)或者是32bi(Vendor Model)t的一个值。
下面的例子中,一个设备包含了两个element,主element中包含了一个model,该model是扩展自附属model的,在附属model的基础上添加了一个新的状态。
由于State_X1与State_X2可以接收相同的消息,因此必须要放在两个element中。
智能插座例子
如上图所示,该设备由两个插座组成,包含两个element,分别代表两个插座。每个element都分配一个唯一地址。
每个element的功能由Generic Power Level Server model定义,该model定义了一族状态以及作用于状态的消息。
Generic Power Level Set 消息被传送到设备上用来控制电平,然后根据element的地址,来控制对应的插座。
插座也可以被实现了Generic Level Client model的设备控制,该model简单的设置电平,插座的实际控制是通过状态关联实现的。在每个插座中,Generic Power Actual state 是与Generic Level state关联的。Generic Level Client 向Generic Level Server 发送电平设置消息,然后Generic Level改变,与此同时Generic Power Actual state 也会改变,Power Actual state实际控制插座电源。
element可以报告状态,在插座的例子中,每个插座都可以汇报电源状态以统计耗电量。能耗是通过Sensor Server model定义的消息实现的,每个消息都有个element地址,这个地址唯一识别插座。
SIG蓝牙mesh笔记2_mesh组成的更多相关文章
- SIG蓝牙mesh笔记3_网络结构
目录 3. Mesh Networking 3.1 Bearers 承载层 3.2 Network Layer 网络层 3.2.3 Address validity 地址有效性 3.2.4 Netwo ...
- SIG蓝牙mesh笔记5_Provisionging
目录 Bluetooth Mesh Provisioning Provisioning bearer layer Generic Provisioning PDU Bluetooth Mesh Pro ...
- [蓝牙前沿应用] 照明即平台 —— 通过蓝牙增强服务提高照明投资回报率(蓝牙MESH、定位AoA、AoD)
1.照明即平台(LAAP) 随着照明设施向LED转型,他们也在利用类似于蓝牙MESH的技术,创建一个可连接的照明平台,作为他们建筑的中枢神经系统.这些系统除了提供先进的照明控制,还建立了一个增强版 ...
- 蓝牙mesh介绍
了解一下关于蓝牙Mesh的知识. 蓝牙mesh网络使用,并且依赖于低功耗蓝牙(BLE).低功耗蓝牙技术是蓝牙mesh使用的无线通信协议栈. 蓝牙BR / EDR能够实现一台设备到另一台设备的连接和通信 ...
- 解密蓝牙mesh系列
解密蓝牙mesh系列 https://mp.weixin.qq.com/s/KdVhkgcmHIboA0xPFqFCgQ 1.NRF52832 & NRF52840 BLE mesh 协议栈 ...
- 蓝牙mesh网络技术的亮点
蓝牙mesh网络技术的亮点 The highlights of Bluetooth mesh networking technology 导言 蓝牙是当今最主要的低功耗无线技术之一,对无线设备用户和开 ...
- 关于蓝牙Mesh您必须知道的七件事
蓝牙技术联盟于7月19日正式宣布,蓝牙(Bluetooth)技术开始全面支持Mesh网状网络.全新的Mesh功能提供设备间多对多传输,并特别提高构建大范围网络覆盖的通信能力,适用于楼宇自动化.无线传感 ...
- Android蓝牙学习笔记
一 Bluetooth基本概念 蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备.计算机及其终端设备.各种数字数据系统.甚至家用电器采用无线方式联接起来.它的传输距离为10cm-10m,如果增加 ...
- Android蓝牙操作笔记
蓝牙是一种支持设备短距离传输数据的无线技术.android在2.0以后提供了这方面的支持. 从查找蓝牙设备到能够相互通信要经过几个基本步骤(本机做为服务器): 1.设置权限 在manifest中配置 ...
随机推荐
- Oracle作业5——多表查询、子查询
一.基础练习: 1.查询和scott相同部门的员工姓名ename和雇用日期hiredate SELECT ENAME,HIREDATE FROM EMP WHERE DEPTNO=(SELECT DE ...
- iOS获取通讯录所有联系人信息
以下是2种方式: 第一种方法: GetAddressBook.h #import <Foundation/Foundation.h> @interface GetAddressBook : ...
- jQuery mouseove和mouseout事件不断触发
关于锋利的jQuery第三章结尾提示图片效果(鼠标放在图片上会出现一个大图跟随鼠标移动)实现时mouseove和mouseout事件不断触发的问题 html <ul class="bo ...
- hdu_4465_Candy
LazyChild is a lazy child who likes candy very much. Despite being very young, he has two large cand ...
- 浅析MySQL主从复制技术(异步复制、同步复制、半同步复制)
Preface As we all know,there're three kinds of replication in MySQL nowadays.Such as,asynchr ...
- Windows远程常见问题
1.window2003远程桌面“已达最大连接数”解决:1)mstsc /v:(此处为服务器IP) /console 任务管理器注销已断开用户 mstsc /v:192.168.4.3 /cons ...
- Python模块、包、异常、文件(案例)
Python模块.包.异常.文件(案例) python.py #模块 # Python中的模块(Module),是一个Python文件,以.py文件结尾,包含了Python对象定义和Python语句, ...
- 坑爹的jquery ui datepicker
1.坑爹的jquery ui datepicker 竟然不支持选取时分秒,害的我Format半天 期间尝试了bootstrap的ditepicker,但是不起作用,发现被jquery ui 覆盖了, ...
- Python入门 —— 04字符串解析
字符串 -字符串是 Python 中最常用的数据类型.(可以说是大多数语言都常用) 1. 创建字符串 ( '' 或 "" 和 '''''')(单,双和三引号)(字符串可以为空) - ...
- rem和em的用法
1.rem转化为向素值的方法 rem单位转化为像素大小取决于根元素的字体大小,即HTML元素的字体大小,根元素字体大小乘以rem. 例:根元素的字体大小 16px,10rem 将等同于 160px,即 ...