解密蓝牙mesh系列

2023-11-10

转载自 蓝牙技术联盟 

蓝牙mesh网络 - 低功耗

低功耗蓝牙

低功耗蓝牙(Bluetooth Low Energy)是一项相当成功的无线技术。如今已经很难找到不支持低功耗蓝牙的智能手机或平板电脑了。可以说它是可穿戴技术兴起的关键因素。在医疗设备、智能家居设备、传感器等很多设备中,低功耗蓝牙的身影随处可见

目前有数十亿支持低功耗蓝牙的设备已投入使用。那么,这些设备都能成为蓝牙mesh网络的一员吗?这也是本文将会回答的问题。知道你已经迫不及待,早想对着电脑屏幕、平板电脑或手机大喊“天呐,快告诉我吧!”, 我就不卖关子啦:

答案就是YES。

低功耗蓝牙设备只要具有正确的低功耗蓝牙功能和一些附加软件,就能加入蓝牙mesh网络中。以智能手机为例,可能只需要一个可以与蓝牙mesh网络对话的普通应用程序(App)就足够了。换句话说,这是任何开发者都能编写的应用程序。

未来充满无限可能性,现在就让我们一探究竟吧!

承载层(bearer layer)

要了解非mesh低功耗蓝牙设备如何成为蓝牙mesh网络的一员,我们需要回顾一下蓝牙mesh协议栈(见 《解密蓝牙mesh系列 第二篇》)。

图 1 – 蓝牙mesh协议栈

蓝牙mesh网络采用低功耗蓝牙作为其射频通信协议栈。而具体如何使用,则是蓝牙mesh网络协议栈最底层的承载层需要负责的工作。

目前定义了两个承载层:广播承载层 (advertising bearer)和GATT承载层 (GATT bearer)。蓝牙mesh网络设备默认使用的是广播承载层,它负责在低功耗蓝牙广播数据包内收发蓝牙mesh数据包。

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

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

节点与特性

成为蓝牙mesh网络中一员的设备被称为节点(Node)。很多种产品类型都能够成为节点:照明灯、灯具开关、温控器、窗锁、占用传感器等。然而,无论产品类型如何,节点都可能提供某些超出其产品本身功能的特定蓝牙mesh网络服务。

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

中继(Relay)

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

好友(Friend)

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

低功耗节点 (LPN)

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

代理(Proxy)

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

代理节点(Proxy Node)

图 2 – 代理节点

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

节点可通过在特性字段中设置代理特性位(proxy feature bit),来表示自身可用作代理节点。特性字段是所有节点都具有的成分数据状态的一部分。

蓝牙mesh代理服务

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

图 3 – 代理服务器与代理客户端

发现代理节点

低功耗蓝牙设备使用GAP广播来帮助其他设备发现自己。蓝牙mesh代理节点使用完全相同的技术,即通过“GAP可连接型广播(connectable advertising)数据包”,对自身的可用性、可作为代理节点的角色、及其身份进行广播。

 

网络ID是从网络密钥(NetKey – 参照《解密蓝牙mesh系列 | 第六篇》)派生而来的唯一公共标识符。节点标识由代理服务器节点的单播地址和网络标识符的组合派生而来,例如启用该标识的子网的网络ID。

如果代理服务器是多个子网的成员,则它将对包含每个子网的网络ID广播数据包进行交替操作,每次处理一个广播数据包。

节点标识广播的主要用途是将启动配置设备(Provisioner)快速连接至刚刚完成启动配置的节点,从而完成新节点的配置。

代理协议

代理客户端和代理服务器使用代理协议进行通信,并向对方发送代理PDU。这些PDU就像是存放各类蓝牙mesh PDU的容器。

蓝牙mesh接入消息使用核心蓝牙mesh协议栈,因此消息包含在网络PDU内。网络PDU可被封装在代理PDU中。

蓝牙mesh配置文件规格中定义了各种Beacon,包括未经启动配置的设备Beacon、以及安全网络Beacon。可通过代理协议将蓝牙mesh Beacon纳入网络。

启动配置过程涉及其自身协议,且启动配置PDU也可在代理PDU内进行交换

最后,代理客户端和代理服务器可以交换特殊的代理配置消息,这些消息也可被封装于代理PDU中。

大多数类型的mesh数据可使用代理协议进行交换,因此可通过连接至代理节点的GATT客户端进行收发。

不同设备代理PDU的大小各异,PDU的大小是根据低功耗蓝牙属性协议(ATT)的最大传输单元(MTU)进行动态设置的,这是通过GATT连接来传输代理PDU的基础。此外,代理协议可以将完整的蓝牙mesh消息封装在代理PDU或多段消息的各个段中,借此来容纳较长的蓝牙mesh消息。

需要注意的一点是,任何蓝牙mesh节点(而非只有代理节点)都可以实施代理协议,从而支持基于GATT连接的直接交互。这在启动配置(provisioning)场景中非常有用。

关于代理协议的更多信息,包括代理PDU的格式,可参考蓝牙mesh配置文件规格: https://www.bluetooth.com/specifications/mesh-specifications。

代理过滤器和代理配置

代理客户端可通过对代理服务器所应用的过滤器进行配置,对接收到的网络流量进行精确的控制。过滤器采用白名单和黑名单的形式,同时这些名单会指定各自的目标地址列表。列表中的地址可能是其所支持的地址类型的任意组合,即单播、群组或虚拟地址。如果消息的目标地址未包含在白名单过滤器中,则消息会被代理服务器的代理过滤器(Proxy Filter)滤掉。同样,如果消息的目的地包含在黑名单过滤器中,也会被滤过。

代理配置(Proxy Configuration)消息在代理客户端和代理服务器之间进行交换,并实现代理过滤器的配置。

使用低功耗蓝牙智能手机或平板电脑启动配置

通常使用智能手机或平板电脑执行启动配置流程,以将新设备添加至蓝牙mesh网络。大多数此类设备不会实施完整的蓝牙mesh网络协议栈,而且与蓝牙mesh网络进行的所有交互(包括启动配置)都很可能会使用代理协议。如前所述,启动配置PDU可被封装于代理PDU中,因此可通过代理服务器节点、利用GATT连接进行交换。蓝牙mesh配置文件规格中将采用代理协议的启动配置协议称为PB-GATT。

在上期介绍了启动配置流程,本系列后续文章中将进一步深挖有关启动配置安全性的细节问题。

借助代理节点使用代理协议时需要注意什么?

智能手机等设备要想通过代理节点、借助代理协议与蓝牙mesh网络通信,则必须扫描并连接至代理节点。换句话说,它必须支持GAP中央设备的角色。

此外,必须首先对智能手机进行启动配置。如果未经启动配置,任何设备都无法与蓝牙mesh网络中的节点进行交互。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解密蓝牙mesh系列 的相关文章

  • ImageJ - 如何导入和显示网格?

    如何在 ImageJ 上打开并显示网格 使用 obj stl 或 dxf 格式 我尝试通过 file open 打开文件 但使用3DViewer http rsbweb nih gov ij plugins 3d viewer or the
  • 思腾合力赞助CCF YOCSEF太原第十一届学术委员会第三次全体会议

    2024年1月6日 由思腾合力赞助的 CCF YOCSEF太原第十一届学术委员会第三次全体会议暨AC换届选举活动 在山西大学举办 华北区教育行业负责人宋肖敏出席本次会议 会议汇聚了众多学术界和企业界的精英 共同探讨人工智能和计算机科学的未来
  • 网工我劝你,这11种协议报文格式要烂熟于心!

    你们好 我的网工朋友 你最熟悉的报文是啥 TCP UDP 在网络世界里 就如同道路系统让车辆畅通无阻一样 网络协议是确保信息顺畅传输的关键 作为网络工程师 理解网络协议的种类与结构至关重要 今天就和你一起探索一下11种关键协议报文格式啊 包
  • PDH光端机技术与应用:稳定可靠的数据传输解决方案

    在当今数字化 网络化日益加速的世界中 数据传输的稳定性和可靠性至关重要 PDH Plesiochronous Digital Hierarchy 准同步数字系列 光端机技术 作为早期的数字传输系统之一 虽然已被更先进的SDH Synchro
  • 通过一个寒假能学会黑客技术吗?看完你就知道了

    一个寒假能成为黑客吗 资深白帽子来告诉你 如果你想的是学完去美国五角大楼内网随意溜达几圈 想顺走一点机密文件的话 劝你还是趁早放弃 但是成为一名初级黑客还是绰绰有余的 你只需要掌握好渗透测试 Web安全 数据库 搞懂web安全防护 SQL注
  • 网络空间安全女生就业,怎么学?

    我实验室的学长们基本都是以红队和复现为主 如果学校好点可能还有更多的选择 如果想在这个方向深入下去 推荐流程是先打两年CTF 把大概的技术方向摸一摸 大一的话 如果学校还不错 那就优先建议打好基础 包括C语言 Python一类 建议把CTF
  • 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • 前端必备的 web 安全知识手记

    前言 安全这种东西就是不发生则已 一发生则惊人 作为前端 平时对这方面的知识没啥研究 最近了解了下 特此沉淀 文章内容包括以下几个典型的 web 安全知识点 XSS CSRF 点击劫持 SQL 注入和上传问题等 下文以小王代指攻击者 话不多
  • 「网络安全渗透」如果你还不懂CSRF?这一篇让你彻底掌握

    1 什么是 CSRF 面试的时候的著名问题 谈一谈你对 CSRF 与 SSRF 区别的看法 这个问题 如果我们用非常通俗的语言讲的话 CSRF 更像是钓鱼的举动 是用户攻击用户的 而对于 SSRF 来说 是由服务器发出请求 用户 日 服务器
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理

    文章目录 1 什么是DES 2 DES的基本概念 3 DES的加密流程 4 DES算法步骤详解 4 1 初始置换 Initial Permutation IP置换 4 2 加密轮次 4 3 F轮函数 4 3 1 拓展R到48位 4 3 2
  • 如何使用Imagewheel搭建一个简单的的私人图床无公网ip也能访问

    文章目录 1 前言 2 Imagewheel网站搭建 2 1 Imagewheel下载和安装 2 2 Imagewheel网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar临时数据隧道
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 揭秘网络世界的幕后密码——Wireshark网络协议分析软件

    在我们日常生活中 计算机和互联网已经成为不可或缺的一部分 然而 很少有人真正了解网络背后复杂的工作原理和通信协议 幸运的是 有一款强大而实用的软件 Wireshark 可以帮助我们深入了解网络世界的幕后密码 Wireshark是一款免费的网
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • LibGDX 网格高度图法线和灯光

    我正在尝试让网格法线和灯光在 LibGDX 项目中工作 我已经有了从高度图纹理像素生成的纹理网格 问题是我无法正确点亮法线 另外 我不能 100 确定我在 TerrainChunk 类中正确设置了法线顶点 这是主类代码 package co
  • 如何计算具有三角形面的网格的质心?

    我想根据以下描述计算网格的新质心 但我不想使用 Blender 的内置函数来计算质心 如所解释的here https blender stackexchange com questions 14294 how to recenter an
  • 为什么从搅拌机导出到 Unity 时我的 (FBX) 网格体有孔?

    我现在正在学习雕刻我的角色 当我将 FBX 文件从 Blender 导出到 Unity 时 网格物体的脸上有一个巨大的洞 我该如何预防 解决这个问题 它在 mixamo 中工作得很好 在此输入图像描述 https i stack imgur
  • 如何在 Matlab 中计算 3D 网格的投影

    我正在尝试使用 matlab 从不同视图计算 3d 网格的 2d 投影 我现在使用的解决方案是绘制 3D 网格 旋转它并制作屏幕截图 我想知道是否有任何 matlab 内部函数或任何其他解决方案允许我在给定一组顶点和三角形的情况下计算投影而
  • THREE.JS 加载 STL 网格数组

    因此 我有一个数据库 其中包含文件引用列以及对其所需的子 STL 文件的任何引用 我可以将一两个模型加载到 THREE js 查看器中 因此所有这些都可以正常工作 但是当我加载四个左右的数组时 事情开始变得毛茸茸的 分配的网格 ID 开始变
  • 在网格挤出过程中计算 UV 坐标

    我目前正在为平面形状实现网格挤出算法 让我们假设为矩形 当我拉伸这个矩形时 我为 3d 形状创建了四个新边 产生 8 个新三角形 和一个新底部 当我复制所有顶点以使最终的立方体有 24 个顶点时 这种方法效果很好 但我现在想避免这些额外的顶

随机推荐

  • Ribbon 负载均衡

    介绍 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具 Ribbon是Netflix发布的开源项目 主要功能是提供客户端的软件负载均衡算法和服务调用 Ribbon客户端组件提供一系列完善
  • react后台web端替换高德key之后报错10008

    web端高德地图添加key步骤 2021年12月02日升级之后新申请的key都有安全秘钥 10008的报错原因 https lbs amap com api javascript api guide abc prepare 解决方法 在 文
  • JavaScript(客户端脚本语言)

    js与html结合方式 ECMAScript规范 Function 代表函数 1 JavaScript发展史 1992年 nombas公司 C 最早的客户端脚本语言 专门用于表单验证 后更名为 scriptEarth 网景 scriptli
  • UnityWebRequest图片上传和下载

    上传 IEnumerator UpLoadTexture byte bytes WWWForm form new WWWForm string id Photo DateTime Now ToString yyyy MM dd hh mm
  • IntelliJ IDEA或goland没有 Go SDK选项 显示 no version

    1 首先 保证安装正常 环境变量正常配置 参考 Go语言环境安装及配置 ThrAvicii的博客 CSDN博客 go语言安装 2 在IDEA中安装Go语言支持插件 使用GOLand请忽略此步骤 3 重点 配置SDK 找不到 显示no ver
  • 2023美国大学生数学建模竞赛中文题目发布

    2023年美国大学生数学建模竞赛竞赛将于北京时间 2023年2月17日 早晨6 00点 至 北京时间 2023年2月21日 上午9 00 举行 赛题已发布 请同学们按照要求参赛 预祝同学们获得理想的成绩 Problem A Problem
  • Docker安装与简单操作

    文章目录 Docker安装 1 Docker离线安装 第一步 下载离线安装包 第二步 下载离线安装工具 第三步 将下载好的文件放在一个目录 如 第四步 在linux环境下 创建 docker文件夹 然后拷贝下载好的资源到此目录 如 第五步
  • 程序员由于天天和逻辑打交道,所以在世故的人眼里往往显得过于简单。

    程序员由于天天和逻辑打交道 所以在世故的人眼里往往显得过于简单 近来看组织行为学 发现其中一节列了很多特别的技能 考虑到也许他们对程序员群体很有启示意义 就追加了一点说明 把它放在博客里 相信这对想成为管理者的程序员是有意义的 我个人的观点
  • Go RSA的使用样例

    GenerateRSAKey 是生成公钥和密钥对 RSA Encrypt 是加密方法 RSA Decrypt 是解密方法 运行示例 代码 package main import crypto rand crypto rsa crypto x
  • R语言中将数据框(data.frame)中字符型数据转化为数值型

    as data frame lapply data as numeric
  • 矩阵乘法(C++)

    题目描述 Alice在学线性代数 她觉得线代的计算特别麻烦 于是就来找你 希望你可以给她写一个程序计算两个矩阵的乘积 矩阵乘法介绍 矩阵A是一个N行P列的矩阵 矩阵B是一个K行M列的矩阵 当P K时 A和B可以相乘 仅限于AB BA不一定可
  • JavaWeb笔记---html/css基础学习1

    1 B S软件的结构 JavaSE是属于C S Client Server 结构 B S软件的结构 客户端与服务器端交互 2 网页的组成 内容 表现 行为 1 内容 页面中可以看到的数据 2 表现 内容的展现形式 3 行为 页面中的元素与输
  • Linux查看进程、端口号的各种用法

    1 根据进程名称查看进程号 ps ef grep redis 结果如下 root instance xfl1djr7 ps ef grep redis root 23297 1 0 Jun12 00 01 33 usr bin redis
  • maven仓库快速镜像

    国内连接maven官方的仓库更新依赖库 网速一般很慢 收集一些国内快速的maven仓库镜像以备用 国内OSChina提供的镜像 非常不错
  • 网络编程_常用的基本函数介绍——htonl、ntohl、htons、ntohs

    1 htonl函数 将主机的unsigned long值转换成网络字节顺序 32位 一般主机跟网络上传输的字节顺序是不通的 分大小端 函数返回一个网络字节顺序的数字 include stdafx h include
  • uni-app如何配置隐私政策

    uni app如何配置隐私政策 在manifest json中 的privacy中可以配置 注意点 隐私政策可以使用http 地址 如果隐私政策需要使用本地文件 可以把html放在hybrid文件夹中 注意a链接的地址 正确写法如下图
  • React 好用的工具库

    俗话说的好 工欲善其事 必先利其器 笔者在开发 React 项目的时候 总结出一些很不错的 React 库 可以提高开发效率 满足业务需求 接下来将一一介绍它们 UI组件库 Ant Design 要说 React 最受欢迎的 UI 组件库
  • elasticsearch7新特性_Elasticsearch 7.0 已经发布,盘他!

    Elastic ON 北京分享了Elasticsearch7 0在Speed Scale Relevance等方面的很多新特性 比快更快 有传说中的那么牛逼吗 盘他 通过本文 你能了解到 Elasticsearch Kibana 7 部署体
  • Linux中Docker入门知识基础

    Linux中Docker入门知识docker基础 1 Docker概述 我们开发的代码会接触到不同环境 开发环境 测试环境以及生产环境 1 1 Docker概述 Docker 是一个开源的应用容器引擎 Docker 可以让开发者打包他们的应
  • 解密蓝牙mesh系列

    转载自 蓝牙技术联盟 蓝牙mesh网络 低功耗 低功耗蓝牙 低功耗蓝牙 Bluetooth Low Energy 是一项相当成功的无线技术 如今已经很难找到不支持低功耗蓝牙的智能手机或平板电脑了 可以说它是可穿戴技术兴起的关键因素 在医疗设