1,消息缓存队列和TTL
蓝牙Mesh采用了消息缓存队列和TTL的优化方案来避免消息的无限制转发。
消息缓存 Message cache:设备都会缓存收到消息的关键信息,以确定是否已经转发过此消息,如果是就忽略此消息。Message cache至少需要能缓存两条消息
Time to Live(TTL): 每个消息都会包含一个Time to Live(TTL)的值,来限制中继的次数,最大可以中继126次。消息每转发一次TTL的值就减1,TTL值为1就不再转发
2,广播与扫描
Mesh节点在网络内发送数据不会像普通BLE广播需要等一个固定的广播间隔,而是延迟一小段随机时间后发送,所以为了数据不丢失,节点会启用100%占空比来扫描广播信道,扫描窗口时间=扫描间隔
3,节点
为正式加入Mesh网络的设备
3.1,功能:
中继功能(Relay):那些使能了此特性的节点可以通过Advertising Bearer接收并转发消息给mesh网络其他设备,它只转发不在消息缓存和TTL的值大于1的消息,转发前会把TTL的值减1。支持中继功能的节点称为中继节点
代理功能(Proxy):为了兼容不支持蓝牙Mesh的BLE设备(比如手机),能够采用BLE GATT Bearer的方式和BLE设备通信,实现mesh广播数据包和GATT通信数据包的转换,支持代理功能的节点称为代理节点
低功耗功能(Low Power):主要是应用在低功耗设备上,减少设备工作时间,大部分时间处于休眠状态,需要配合朋友节点,支持低功耗功能的节点称为低功耗节点
朋友功能(Friend):帮助低功耗功能节点缓存消息,便于低功耗节点唤醒后向其查询消息,支持朋友功能的节点称为朋友节点
4,设备
未配网设备:尚未加入Mesh网络的设备叫做未配网设备
配网:未配网的设备成为节点的过程
配网器:对未配网设备进行配网从而成为网络节点
节点:加入到Mesh网络之后的设备,成为蓝牙Mesh网络的一份子
5,地址
单播地址:分配给节点中的元素地址,地址范围0x0001~0x7FFF,
未分配地址:即无效地址,固定为0x0000,地址的初始值,常用于屏蔽一个设备
组播地址:用于表示一个或多个节点的多个元素,地址范围0xC000~0xFFFF,其中包含256个固定组播地址
虚拟地址:用于表示一个或多个节点的多个元素,每一个虚拟地址逻辑上对应一个128-bit的Label UUID,通过对该Label UUID作哈希运算得出虚拟地址的低14位数值,虚拟地址的范围为0x8000~0xBFFF
6,可共享资源
节点的网络地址(Network Address)、网络密钥(Network Key)、应用密钥(Application Key)和 IV Index
7,模型
模型(Model)定义了节点基本功能的最小单位模型,包含实现这个功能所必需的状态和操作状态的消息及其他一些行为
在蓝牙mesh模型里,消息通信基于客户端-服务器的架构,对外提供状态访问接口的叫做服务器(Server),而访问服务器状态的叫做客户端,模型分为三种
服务器模型:服务器模型包含了一个或多个元素上的一种或多种状态,比如灯泡上包含有通用开关服务器模型(Generic OfOff Server)和灯泡亮度服务器模型(Light Lightneww Server)
客户端模型:客户端模型定义了一系列的消息,用于客户端去请求、设置服务端的状态,比如开关中含有通用开关客户端模型(Generic OnOff Client)以及灯亮度客户端模型(Light Lightness Client),客户端模型不含有状态
控制模型:控制模型可以包含一个或多个客户端模型,用来和其他节点的服务端模型通信;也可以包含一个或多个服务端模型,用于响应其他节点客户端模型发来的消息
蓝牙技术联盟定义的模型被称为标准模型(SIG Adopted Model),16bit标识,目前SIG定义好的模型包括Generic、Sensors、Time and Scenes、Lighting;由厂商定义的模型称为厂商模型(Vendor Model),32bit标识。
8,发布和订阅
与MQTT不同,MQTT是向主题进行发布和订阅,这个是对上面所说的地址进行发布和订阅。(单播那些)
9,网络安全
mesh对传输的数据进行分层次加密,网络层(Network Layer)数据通过网络密钥(Network Key)加密;应用密钥(App Key)用于加密接入层(Access Layer)数据;配置模型(Configuration Model)的数据则采用设备密钥(Device Key)进行加密
10,连接拓扑图
11,Mesh网络架构
BLE层: 蓝牙mesh建立在BLE物理层和链路层之上,采用Advertising和Connection两种数据传输方式
承载层(Bearer Layer) :把BLE层的数据抽象并供上层使用, 目前定义了两种承载,广播承载和GATT承载, 分别对应BLE的Advertising和Connection方式
网络层(Network Layer) :定义了PDU的格式,负责基于地址的消息传输,实现对承载层的消息报文进行加解密和认证行为
底层传输层(Lower Transport Layer):负责将数据分段和重组,保证数据的完整
上层传输层(Upper Transport Layer): 负责应用层信息数据的加密,解密和认证;它还定义了节点间传输控制信息,包括了朋友特性的应用实现
接入层(Access Layer):定义应用数据的格式,定义并控制应用数据在上层传输层的加密解密的过程;它确保从下层接收到的数据是正确的并传输到更高层的应用(指定到Model)
基础模型层(Foundation Model Layer):定义了配置和管理Mesh网络所需的访问层的状态、消息、 模型等, 实现mesh网络的配置