1.Mesh简介

Blutooth Low Energy Mesh 是基于低功耗蓝牙技术(BLE)的网状网络解决方案。目前使用的是泛洪网状网络(flooding-based mesh network)。

BLE的通信信道有adversing信道(37、38、39)和data信道(0-37).详细见下图。

Mesh主要工作在advertising信道上,通过scan和advertising进行接受和发送。而data信道主要为了兼容不支持advertising设备,可以通过LE link方式进行通信。通俗一点说就是mesh的网络通信通过广播和扫描来进行收发。广播发送,扫描接受。因为Mesh是网状网络结构,所以中间节点在收到信息后进行判断,如果不是自己需要的则进行转发,从而可以使信息快速、大面积的向外传播。这就是泛洪。而通过广播来进行数据收发,所以Mesh节点使用的通信信道就是广播信道。而有一些不支持广播通信的设备,就需要使用数据信道,通过Proxy(代理)节点,接入到mesh网络中。

1.1Device UUID

每个设备出厂时被分配一个唯一的16字节UUID,称作Device UUID,用于唯一标识一个Mesh设备,不用依赖蓝牙地址来标识设备。在建立pb-adv link时,需要Device UUID字段来标识device。然后,当mesh device获取mesh地址后,即可用mesh address来唯一标识device。

1.2Mesh地址

除了建立le link,mesh通信并不依赖蓝牙地址,即节点的蓝牙地址可以一样,或者随机变化。mesh定义了一套长度为2字节的mesh地址,分为unassigned address、unicast address、virtual address和group address,地址范围如下图。

mesh地址并不是出厂时设置的,而是由用户自己统一管理和分配的。用户在配置设备入网时,通过provisioning流程给设备分配地址。provisioner需要确保给每个设备分配的地址是不重复的。mesh设备可能不止一个mesh地址,设备内每个element会被分配一个地址,且地址是连续的。多地址被设计用于区分mesh设备上重复的功能模块model。

1.3应用模型

BLE是master连接slave的一对一通信,而mesh网络是多对多通信。因而,mesh网络存在一个天然特性,就是节点之间并不知道其他节点的存在。此时,需要一个第三方,通常是Provisioner,来扮演月老的角色,将节点之间联系起来。例如一个通用的开关,出厂后不知道自己要控制哪盏或者哪些灯,需要provisioner通过configuration配置开关发布publish消息(设置目的地址为单播、组播、广播地址)。如果是组播,则需同事配置相应的灯泡订阅subscribe消息(设置分组,即增加组播地址到订阅表)。然后,开关就可以控制这一盏灯、一组灯或者所有灯。

Mesh将典型应用场景的操作进行了标准化,每个Mesh设备上的应用是以model为单位进行组织的。model定义了一个model id、一套opcode和一组状态,规定发送和接收哪些消息,分别操作哪些状态。Model和BLE的GATT service是类似的,都用于定义一个特定的应用场景。

为了支持多个相同的model,定义了element的概念,每个element会单独分配一个element address,且地址是连续的。第一个element(primary element)的element address是在provisioning过程中分配的node address,其他element的地址顺序往后排。例如一个Mesh设备上有两盏完全一样的且可以独立控制的灯,开关设备去控制这个灯设备,需要区分控制哪盏灯。让这两盏灯对应的两个medel分开放在两个element中,这样每盏灯分别有一个mesh address,就可以通过mesh address将两盏灯区分开来了,进行单独控制。当然,两盏灯的model也可以订阅同一个组地址,实现同时控制。这样即能独立控制,也能同时控制。

设备上element、model组成情况通过composition data page 0表达,provisioner可以通过获取设备的composition data page 0来辨识设备支持的应用。

1.4安全性

mesh中有很多保护网路安全和隐私的设计,能够抵挡被动监听、中间人攻击、重放攻击、垃圾桶攻击和暴力破解等常见的攻击、

mesh网络中所有mesh消息都会被加密和校验,防止被窃听和篡改。mesh网络中密钥分两层:Netkey和Appkey,每层最多可以有4096个密钥,通过12Bit的Index标识。AppKey必须绑定有且只能一个NetKey。应用层发送消息会依次经过AppKey和NetKey两层加密和校验,接受信息会依次经过NetKey和AppKey两层解密和校验。采用两层密钥,是为了防止relay节点窃听货篡改消息。例如节点A通过节点B转发给节点C发数据,A/B/C有相同的NetKey,A/C有相同的AppKey,而B没有该AppKey。那么A和C间的应用层通信对B来说是保密的,B只是使用NetKey在网络层帮忙转发,因为没有AppKey而不能进行窃听或者篡改应用层消息。

NetKey支持多个密钥,多密钥可以用来划分网络范围,实现设备间的隔离。Key index为0的是主网络密钥,其余的都是普通的其他子网络密钥。只有主网络中的节点才能参与IV Updata Procedure,并将IV更新信息传递到其他子网中。也就是说,只有主网络节点才能更新IV index网络参数,其他子网的节点只能被动的接收IV index更新。这样不平等的网络密钥设计的目的是约束子网络节点的数据发送频次,防止子网络节点滥用IV index更新而耗尽IV index,从而导致网络安全问题。通常大部分节点在主网络中,部分节点同时处于主网络和某个子网络,少量节点只处于某个子网络,此时这些少量节点只能在子网络内进行局部通信,从而限定这些少量节点的通信范围,例如酒店顾客只能控制自己房间内的灯。

Device上的NetKey和AppKey是provisioner通过provision和configuration分发和管理的。provisioner是网络管理员,他管理着所有的key,即管理网络中各个device各自可以使用哪些key,而device间只有共享相同的密钥才能相互通信,例如灯和灯的开关使用相同的密钥。provision过程会分发mesh address和有且只有一个NetKey,后续通过configuration来管理,例如通过configuration增加NetKey和AppKey。

Provision过程还会随机生成一个特殊的AppKey,称作DevKey。DevKey只有provisioner和device两者知道,不和任何其他device共享,保证了provisioner可以单独和某一个device进行秘密的一对一通信。configuration配置被限制只能使用DevKey,只有provisioner才知道device的DevKey,所有只有provisioner才可以配置device。例如,开关只能控制灯泡亮灭,而不能去配置灯泡的分组。

1.5 Provisioning

device出厂默认是没有地址和密钥的,需要通过provisioning过程从provisioner获取。device被provisioning后,就称作node。provisioning过程类似于Bt pairing中的secure connection,采用ecdh算法进行密钥协商和发布,通过authenticaion data进行身份鉴权,能够防止窃听、暴力破解和中间人攻击。

privisioning流程可以工作在advertising信道和data信道两种信道上,分别对应pb-adv和pb-gatt两种传输层。device是被强制要求支持pb-adv的,如果同时支持pb-gatt,被provisioning时可以任选一个。

1.6 Configuration

网络参数的管理是在model层实现的,称作configuration models。可以配置的网络参数有很多,例如NeyKey和AppKey增加、删除、修改等,model的密钥绑定、消息发布、消息订阅等,节点应用结构Composition data page 0的获取,节点的默认ttl、支持的deature、网络重传次数等。

网络参数的配置被限定为只能使用DevKey,也就是说只有provisioner才能配置节点的网络参数。

1.7 Proxy(代理)

mesh主要工作在advertising 信道上,为了兼容一些不能灵活自有的advertising的设备,mesh定义了proxy特性。基于BLE GATT profile,定义了proxy service,让这些设备利用BLE link的方式连接到支持proxy的节点上,从而接入Mesh网络。

蓝牙Mesh学习总结一(蓝牙Mesh介绍)相关推荐

  1. 蓝牙Mesh学习总结三(Mesh术语解释)

    1.设备(Device) 未配网的支持蓝牙Mesh的设备,比如一个刚买回来的灯.也称为"未配网的设备"(unprovisioned devices). 2.节点(Nodes) 已经 ...

  2. 蓝牙Mesh学习总结四(Mesh数据包分析)

    蓝牙mesh数据包的结构如下图: 总长31个字节. Length (1Byte):数据长度 Type (1Byte):广播类型 IVI (1bit):用来认证加密Network PDU的IV inde ...

  3. esp32系列(5):esp32 蓝牙架构学习

    目录 1 ESP32 蓝牙架构学习 1.1 蓝牙 1.1.1 HCI 接口选择 1.1.2 蓝牙运行环境 1.1.3 框架 1.1.3.1 控制器 1.1.3.2 BLUEDROID 1.2 经典蓝牙 ...

  4. 蓝牙Mesh学习笔记(一)

    Mesh系统结构 1 Mesh网络分层 1.1 模型层(Model layer) 1.2 基础模型层(Foundation Model layer) 1.3 接入层(Access layer) 1.4 ...

  5. 天猫精灵连接蓝牙摸索1 关于阿里巴巴蓝牙MESH芯片TG7100B LINUX 开发环境塔建图文说明

    天猫精灵连接蓝牙摸索1 关于阿里巴巴蓝牙MESH芯片TG7100B LINUX 开发环境塔建图文说明 环境搭建好后,再结合我的第二篇博文,可以实现以下效果(点击可以查看第二篇博文): 天猫精灵连接蓝牙 ...

  6. 天猫精灵 python_天猫精灵连接蓝牙摸索1 关于阿里巴巴蓝牙MESH芯片TG7100B LINUX 开发环境塔建图文说明...

    天猫精灵连接蓝牙摸索1 关于阿里巴巴蓝牙MESH芯片TG7100B LINUX 开发环境塔建图文说明 以下是本人亲测的截图及运行过的代码复制过来的,指令的具体流程是按阿里巴巴的TG_B_7101_产品 ...

  7. 蓝牙MESH网关_智能蓝牙Mesh灯控,让你一机掌控亮与暗

    随着物联网在人们日常生活中的广泛应用和日益成熟,智能家居已然呈星星之火之势,智能照明作为智能家居的重要组成部分,现在市场上的智能照明产品也随处可见,如智能LED灯.而对于智能LED灯来说,一套好的智能 ...

  8. ble 低功耗蓝牙开发学习 嵌入式交流学习

    ble 低功耗蓝牙开发学习 嵌入式交流学习 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 这篇文章教你学会低功耗蓝牙开发,从0到深入,适合自学的学生.初级工程师 前言 随着疫情爆发 ...

  9. 蓝牙ble学习开发资料

    1.蓝牙核心规范 这个是蓝牙官方的文档,也是最权威的文档,所有开源的.闭源的蓝牙协议栈都是根据这个展开的,为了对比学习,我收集了从v4.0到v5.3的文档,ble也是从v4.0开始支持的. 2.蓝牙核 ...

最新文章

  1. CentOS上安装skype
  2. laravel 重要概念 以及实现方式
  3. opencv5-objdetect之级联分类器
  4. 对计算机病毒防治最科学的方法是什么,常见的计算机病毒防治措施有什么
  5. 五、鼎捷T100生产管理之报工
  6. css 实现一个尖角_用CSS实现页面的尖角、小三角、不同方向尖角
  7. scp 及 ssh 命令出错解决
  8. 华为OD机试 - 勾股数元组
  9. 录屏怎么录?你知道多少录屏软件?
  10. 会议OA项目(我的会议中的会议排座送审功能)
  11. VUE实现前台图片 标注(添加矩形框)、放大、缩小、拖拽
  12. BF、KMP、BM、Sunday算法讲解
  13. 微金所获2015(行业)最具影响力品牌奖
  14. 题解报告:P2404 自然数的拆分问题(dfs+回溯)
  15. 计算机修改人类记忆曲线,遗忘曲线
  16. Matlab使用串口通讯
  17. Ubuntu 下面的aMule 的 Kad 或者 Ed2k 连不上
  18. MD5加密算法及Java实现
  19. 【洛谷 P1046】[NOIP2005 普及组] 陶陶摘苹果 题解(比较)
  20. 如何在外网上中山大学的校园网

热门文章

  1. JavaSE基础自学----异常2
  2. 中国人为何勤劳却不富有?
  3. S7-1200 对 V90 PN 进行位置控制的三种方法
  4. vue v-lazy无法加载图片
  5. 问题错误功能测试报告
  6. STM32Duino 下载 https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.jso
  7. 《Deep Learning》你需要知道的答案
  8. 了解一下中美程序员工作的区别
  9. Rxjava响应式编程
  10. fastadmin 导出