零散的知识点(不断更新)

版权声明:本BLOG上原创文章未经本人许可,不得转载,否则属于侵权行为 https://blog.csdn.net/weixin_40204595/article/details/83006526

写在前面:本篇主要用来记录工作中或平时随时发现的一些零零碎碎的知识点,可能会涵盖很多方面和很多领域,都统一记录在这篇blog中的,当然,本篇也会随时更新。

正文:

一、

    因为这篇记录的内容比较杂乱,前面先加个目录吧,说明一下都有哪些知识点。

    1、功率换算关系:dBm跟w换算关系。

    2、蓝牙mesh相关。

二、dBm与w的换算关系

  一个“基准”,两个“原则”。

  一个基准:30dBm = 1w

  两个原则:+3dBm,功率乘2倍,-3dBm,功率乘1/2;

                    +10dBm,功率乘10倍,-10dBm,功率乘1/10;

看一下Ble4.0的功率范围:

 

换算关系:

  -20dBm转换成功率: -20dBm = 30dBm - 10dBm - 10dBm - 10dBm - 10dBm - 10dBm 

                                                    = 1 x 1/10 x 1/10 x 1/10 x 1/10 x 1/10

                                                    = 0.00001w = 0.01mW

  +10dBm转换成功率: +10dBm = 30dBm - 10dBm - 10dBm

                                                    = 1 x 1/10 x 1/10

                                                    = 0.01w = 10mW

    三、蓝牙mesh相关

    1、网络泛洪: 

     蓝牙mesh网络采用一种称为“网络泛洪(flooding)”的方式来发布和中继消息。这意味着消息不会通过某一进程进行路由, 也不会沿着由一系列特定设备构成的特定路径来进行传输。相反,传输范围内的所有设备都会接收消息,负责中继的设备能将消息转发至其传输范围内的所有其他设备。“网络泛洪”这项技术在使用中往往是利弊参半。在蓝牙mesh网络的设计中,我们对此进行了针对性的优化,相信能够扬长避短。

网络泛洪的优势:

网络泛洪的优势在于无需特定设备专门扮演集中式路由器的角色。集中式路由器一旦发生故障,就可能会导致整个网络无法运行。没有特定的路由也可能对网络造成灾难性的影响,但这种情况也可以通过在mesh网络中采用网络泛洪的方法来避免。网络泛洪的方式也意味着消息一般能够通过多重路径到达其目的地。这就构建了一个相当可靠的网络。

    2、代理节点:

    蓝牙mesh网络会指定一台设备来扮演代理节点(proxy node)的角色。代理节点包含一项标准:低功耗蓝牙GATT服务,具有两个GATT特性,分别是mesh代理数据输入(Mesh Proxy Data In)和mesh代理数据输出(Mesh Proxy Data Out)。诸如智能手机等低功耗蓝牙设备均可使用这些特性,与mesh网络进行数据收发。

    这种mesh规格定义了一种代理协议(proxy protocol),同时通过代理节点的两个GATT特性交换的数据中包含代理协议PDU。

    4、几个简单概念:

    节点:由数千台设备组成的网络,每台设备均通过低功耗蓝牙(LE)无线连接进行通信。蓝牙mesh网络中的这些设备被称为节点 (node) 。

    元素:每个节点至少拥有一个元素,称为主元素(Primary Element),同时还可能包含其他多个元素。元素由定义节点功能和元素条件的实体组成。例如,一个灯泡内有一个元素, 并具有两种功能:

    节点中的每个元素都有一个唯一的地址,称为单播地址(unicast address),使每个元素都有址可寻。我们将在后续的解密蓝牙mesh系列文章中进一步解释“寻址”。

    模型和状态:节点的基本功能(注意,只是功能)都由模型 (Model) 来定义和实施。模型位于元素内,元素必须具有至少一个模型(图4A)。模型能够定义并实施节点的功能和行为,而状态 (State) 能够定义元素的条件(图4B)。

以灯泡为例,该模型的功能是开关和调节亮度。相关的状态分别为“开”/ “关”和0-10。

    5、

  • 中继(Relay)特性:通过广播承载层接收并重新发送mesh消息、以构建更大规模网络的能力。

  • 代理(Proxy)特性:在GATT和广播承载层之间接收并重新发送mesh消息的能力。

  • 低功耗(Low-Power)特性:能够以明显较低的接收端占空比在mesh网络中运行。通过将无线电接收器启用时间最小化可实现节点功耗的降低,只有在绝对必要时才启动接收器。低功耗节点(LPN)通过与好友(friend)节点建立友谊(friendship)关系来实现这一点。

  • 好友(Friend)特性:通过存储发往LPN的消息,仅在LPN明确发出请求时才进行转发来帮助LPN运行的能力。

    6、设备要想成为蓝牙mesh网络的成员,则必须经过一个称为“启动配置(provisioning)的安全流程,将设备添加到网络中。

         作为mesh网络成员的设备称为“节点”,而不构成节点的设备就称为“设备”

    7、启动配置设备(Provisioner)

      启动配置的流程会将普通的“设备(Device)”变身为“节点(Node)”,使其正式成为蓝牙mesh网络的成员。

      运行启动配置应用程序的设备称为“启动配置设备(Provisioner)”。

      启动配置协议(Provisioning Protocol)

    在启动配置期间,启动配置设备(个人理解为已经入mesh的设备)会采用称为“启动配置协议”的蓝牙mesh协议,与将要被启动配置(未入mesh网络的设备)的设备进行通信。启动配置设备可通过PB-ADV或PB-GATT承载层[i]两者中的任何一个使用启动配置协议,确保在较早版本的智能手机上亦可实施启动配置设备的应用程序,只要它们支持低功耗蓝牙(Bluetooth Low Energy)和GATT。

  8、向网络中添加新设备

设备添加至网络的过程中,最重要的一点是要为其提供网络所有其他节点拥有的网络密钥。当然,这一过程本身必须是安全的,这样恶意设备才无法窃取添加新设备时进行的通信,也无法窃取NetKey。

当购买了新的设备(Device)并需要将其添加至当前蓝牙mesh网络时,用户将使用启动配置设备( Provisioner),同时参考这一新设备制造商的说明,将其添加至蓝牙mesh网络。这样,新设备(Device)就变身为节点(Node),成为蓝牙mesh网络的成员。

该流程涉及几个步骤,见下方流程图:

                                                  

(1)Beacon广播     

蓝牙mesh网络规格中介绍了新的GAP广播类型,包括 <<Mesh Beacon>> 广播类型[ii]。

设备( Device)可采用<<Mesh Beacon>> 广播类型来发出广播,声明自己是未经启动配置的设备,可被启动配置。用户可能需要根据制造商的说明,按照一定的流程,例如键入一组按钮,或将某一按钮长按一段时间等,以此方式启动新设备的广播。

用户还需要在启动配置设备中启动“添加设备到网络”的流程,以便从Beacon设备(Device)接收广播数据包。需要记住的一点是,启动配置设备可能是智能手机或平板电脑应用,因此在实际操作中会涉及到智能手机解锁、应用程序启动、也许还需要登录应用程序(为了进一步确保安全性),并通过其用户界面启动Beacon设备(Devices)搜寻。这样,启动配置设备就会意识到新设备(Device)的存在和准备就绪状态,可进入后续的启动配置流程。

(2)邀请   

接下来,启动配置设备将以启动配置邀请PDU(Provisioning Invite PDU)的形式向要进行启动配置设备发送邀请,这是启动配置协议的一部分。Beacon设备会在启动配置功能PDU中回应有关自身的信息。

启动配置功能PDU可提供一系列信息,例如其所拥有的元素数量、所支持的启动配置相关算法等。它还能指示设备(Device)拥有的输入输出功能类型,这些信息将用于认证(Authentication)步骤。

(3)交换公共密钥(Public Key)   

包括启动配置设备在内的所有蓝牙mesh设备都支持FIPS P-256椭圆曲线算法,因此必须拥有公共密钥。可通过基于该算法的非对称加密来创建安全通道,以完成剩余的启动配置流程。为此,启动配置设备会与将被启动配置的设备(Device)交换公共密钥。需注意的是,将被启动配置的设备(Device)可以通过带外方式(Out of Band),例如QR码,来提供公共密钥。本系列的后续文章将重点讨论mesh安全性,包括启动配置的安全性。

(4)认证(Authentication)

启动配置设备基于对新设备(Device)功能的了解,向其发送消息,指示其输出单一或多位数值,对其所支持的多种用户操作(例如按下按钮)作出响应。值的形式会因设备差异而有所不同。一台设备可能会在LED面板上显示一个三位的数值,另一台设备则可能是红色LED灯闪烁几次,闪烁的次数就是输出的验证值。启动配置设备的用户将观察到设备(Device)输出的值,并将值输入启动配置设备的用户界面。

然后,设备(Device)和启动配置设备交换密码散列,这些数据来源包括设备(Device)输出的随机值,允许它们完成对彼此的验证

(5)启动配置数据的分配   

认证成功完成之后,会通过两台设备的私有密钥(Private Key)和交换的对等公共密钥生成会话密钥(Session Key)。随后,会话密钥即可用于保护完成启动配置流程所需数据的后续分发,包括网络密钥(NetKey)和设备的唯一地址,即单播地址(Unicast Address)。

启动配置完成后,启动配置设备就会拥有网络的NetKey,这是一个称为“IV索引(IV Index)”的蓝牙mesh安全性参数,且拥有一个由启动配置设备分配的单播地址[iii]。至此,新设备就正式成为了节点,即成为蓝牙mesh网络中的一员。

9、从网络中移除节点

从网络中移除节点涉及两个步骤:

  1. 首先,使用启动配置设备应用,将想要移除的节点添加至“黑名单”。

  2. 其次,启动一项称为密钥刷新程序(Key Refresh Procedure)的流程。

黑名单

使用启动配置设备,用户必须将想要移除的节点添加至黑名单。黑名单的目的很简单,就是当启动密钥刷新程序时,确保新的安全密钥不会被发放至黑名单中的节点。

密钥刷新程序

通过密钥刷新程序,除了黑名单中的节点,网络中的所有节点都会被发放新的网络密钥、应用密钥、以及所有相关衍生数据。也就是说,构成网络和应用安全性基础的整套安全密钥都会被替换。

10、低功耗蓝牙设备只要具有正确的低功耗蓝牙功能和一些附加软件,就能加入蓝牙mesh网络中。以智能手机为例,可能只需要一个可以与蓝牙mesh网络对话的普通应用程序(App)就足够了。

11、承载层

                                                             

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

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

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

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

12、代理节点相关

代理节点:

代理节点的根本目的是执行承载层转换。它能够实现从广播承载层到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

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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_40204595/article/details/83006526