1-蓝牙Mesh的基本概念

1,088 阅读11分钟

蓝牙Mesh的基本概念

广播和洪泛

  • 蓝牙mesh技术是基于低功耗蓝牙广播报文(Advertising)来实现的,这是一种基于洪泛(Managed-flooding)的信息传递机制,当蓝牙mesh网络中的一个节点需要向另一个节点发送消息时,它会广播一条消息,所有收到这个消息的结点都接受并且转发这条消息,这样就可以保证目标结点只要在整个网络的覆盖范围内,就能收到这条消息。 这种机制也有一个问题,就是网络的信息泛滥,一条消息可能会被网络中的所有节点都转发一次,这样大大增加了网络中无用信息的数量,蓝牙mesh网络采用了信息缓存(Message Cache)队列和TTL(Time To Live,信息寿命)字段这两种方案来避免信息被无限制地转发下去,在今后的协议版本中,也会考虑加入路由机制来减少网络中的无用信息数量。
    • Message cache:设备都会缓存收到消息的关键信息,以确定是否已经转发此消息,如果是就忽略此消息。Message Cache需要至少能缓存两条消息。
    • Time to Live:每个消息都会包含一个TTL的值,来限制中继的次数,最大可中继126次。消息每转发一次TTL的值就减1,TTL值为1就不再转发。

节点和设备

  • 在蓝牙mesh网络中,我们通常把还未加入蓝牙mesh网络的设备叫作未配网设备(Unprovisioned Device),未配网设备加入一个蓝牙mesh网络之后就被称为节点(Node)。
  • 把一个未入网设备加入蓝牙mesh网络变成节点的过程叫作配网过程(Provisioning),在蓝牙mesh网络中,通常是由一个配网器(Provisioner)来将未配网设备进行配网从而变成蓝牙mesh网络中一个节点的。节点进入蓝牙mesh网络后,节点自身具备配置服务端(Configuration Server)的功能,可以被网络中已存在的配置客户端(Configuration Client)管理,例如,配置节点的转发功能、配置节点的订阅地址或者将节点移出蓝牙mesh网络等。

网络和子网

一个蓝牙mesh网络中有4种资源是被整个网络共享的:有节点的网络地址(Network Address)、网络密钥(Network Key)、应用密钥(Application Key)和IV Index。在这个基础上,蓝牙mesh网络可以划分出多个子网(Subnet),这样就可以针对不同区域做到隔离,例如在酒店蓝牙mesh网络里,可以单独将某个房间的设备划分到该房间的子网。一个节点可以同时处于一个或多个子网内,在设备入网时,通常被配置在主子网(Primary Subnet)内,配置客户端可以根据需要将节点划分到不同的子网内。
  • Network Address
  • Network Key
  • Application Key
  • IV Index
    • IV 索引是一个32位值,它是共享网络资源,网络中的所有节点共享IV索引的相同值,并将其用于它们所属的所有子网。IV索引从0x0000000开始,并在IV更新过程中递增,每个Network PDU中包含了IV Index的最低位,如果主子网上的设备在主子网上收到更新,则应将IV更新传播到所有其他子网。

元素

一个节点是由元素组成的,节点至少要包含一个主元素(Primary Element),也可以包含多个元素,每个结点里包含的元素个数和结构是固定的,每个元素都有自己的地址,主元素的单播地址在配网过程中由配网器下发,而节点中其余元素的地址则依序增加。
    

地址

蓝牙mesh网络节点的地址是一个16bit的编码,地址共分为4类:未分配地址(Unassigned Address)、单播地址(Unicast Address)、组播地址(GroupAdress)、虚拟地址(Virtual Address)。
  • 其中未分配地址是0x0000,通常用于屏蔽一个设备。
  • 单播地址分配给节点中的某个元素,用于对这个元素进行寻址和定位,在一个蓝牙mesh网络中,总共有32767个单播地址,范围是从0x0001到0x7FFF。
  • 虚拟地址的范围是从0x8000到0xBFFF。虚拟地址用于表示在一个或多个节点里的多个元素。每个虚拟地址都和一个标签(Label UUID)的哈希码对应,总共有16384个虚拟地址可供使用,而每个虚拟地址都能对应上百万个标签,所以可以认为虚拟地址的数量是无穷的。
  • 组播地址的范围是从0xC000到0xFFFF,在一个蓝牙mesh网络里,共有16384个组播地址,组播地址和虚拟地址类似,都能用于表示一个或多个节点里的多个元素。组播地址包括256个固定组播地址和16128个可供动态分配的组播地址。

状态

状态(State)用于表示节点中元素处于的某一个特定状况。元素的状态是通过客户-服务端的机制来访问的,例如,某个节点(比如插座)中的元素有通用开关模型的开关服务端,用来代表这个元素的开关状态;另一个节点里的元素(比如开关按钮)有通用开关模型的开关客户端,这样就可以通过开关按钮上的开关客户端发送开关模型定义好的消息去访问或控制插座上开关服务端的开关状态。

消息

  • 蓝牙mesh网络节点之间的通信都是通过广播消息来实现的。每个状态都关联了一系列的消息,客户端会发送这些消息给服务端去读取或设置服务端的状态,服务端也会在状态改变时发出对应广播消息来通知其他节点的客户端。
  • 蓝牙mesh的消息定义包括了消息报文格式及消息的交互机制。消息报文格式由操作码和相关参数组成,操作码分为1字节操作码(最常用的标准命令)、2字节操作码(标准命令)、3字节操作码(厂商自定义命令)。
  • 消息报文的最大长度依赖于传输层,尽管传输层具备拆包组包机制(SAR),但为了高效地利用广播报文,蓝牙mesh协议设计的一个指导思想就是尽可能在单个广播报文中传输一个完整的消息报文,因此在不使用拆包组包机制的情况下,传输层最多能给上层应用提供11个字节的包含操作码的有效荷载。传输层的分包组包机制最多可以将一个消息报文拆成32个分组,因此在使用分包组包机制的情况下,消息报文最长可以达到384字节。
  • 消息分为需要回复的消息和不需要回复的消息,节点在收到需要回复的消息后,需要给发出这个消息的节点一个回复。节点在收到不需要回复的消息后则不需要发送回复。

模型

模型(Model)定义了节点具备的基本功能,包含实现这个功能所必须的状态和操作状态的消息及其他一些行为。一个节点中可以包含多个模型。在蓝牙mesh模型里,采用客户端—服务端的架构进行通信,因此,在蓝牙mesh网络中的应用也被定义成这3种模型:服务端模型、客户端模型和控制模型。
  • 服务端模型(Server Model):服务端模型包含一个或多个元素上的一种或多种状态,服务端模型定义了一系列必需的消息,以及元素收到这些消息时的应对方式。
  • 客户端模型(Client Model):客户端模型定义了一系列的消息,用于客户端去请求、设置服务端的状态。客户端模型不需要有任何状态。
  • 控制模型(Control Model):控制模型可以包含一个或多个客户端模型,用来和其他节点的服务端模型通信,也可以包含一个或多个服务端模型,用于响应其他节点客户端模型发来消息。

发布和订阅

  • 在蓝牙mesh网络中,节点在需要时可以向单播地址、组播地址、虚拟地址发布消息,而其他节点可以通过订阅这些地址来获得这些消息。
  • 当节点里的模型要发布消息时,发布的目标地址可以是单播地址、组播地址、虚拟地址,如果模型发布的这条消息是另一条消息的回复,那么发布的目标地址是收到的消息的源地址。如果节点模型要发布的消息是一条自发的消息,那么发布的目标地址是这个模型的发布地址。
  • 节点如果订阅某些消息,那么节点里的每个模型都可以订阅一个或多个组播地址或者虚拟地址。如果节点收到的消息的目标地址在这个节点的订阅地址列表中,那么节点会处理这条消息。如果节点具有多个元素,那么每个元素都会处理这条消息。
  • 发布地址和订阅地址列表都是可以由配置服务器模型来设置的,一个节点可以支持任意多个订阅地址(上限取决于设备本身资源),便于灵活使用,例如蓝牙mesh灯可以订阅“灯具”组播地址,也可以订阅“客厅”组播地址,或者订阅“1楼”“家庭”组播地址。

mesh网络安全

mesh网络中传输的所有数据对应不同网络层次和不同应用,它们都是经过加密的。蓝牙mesh又规定了采用不同的密钥进行加密,所有网络层(Network Layer)的数据都要使用网络密钥(Access Layer)进行加密,应用密钥(App Key)则是用于加密接入层(Access Layer)的数据,配置模型(Configuration Model)的数据则采用设备密钥(Device Key)进行加密。通过这样分层次地加密,蓝牙mesh可以做到根据不同应用场景来实现不同等级的数据加密来保证整个网络的数据安全。

mesh网络拓扑

节点要实现mesh网络定义的这些属性,需要4大功能:转发、代理、低功耗、朋友。所有的mesh设备可以有选择地支持4大功能的一种或几种。
  • 转发功能:收到一条消息后将其转发出去,这样可以扩大mesh网络的覆盖范围,支持转发功能的结点被称为转发结点。
  • 代理功能:为了兼容旧的不支持蓝牙BLE广播包传播的设备(比如手机),具备代理功能的设备可以与旧设备建立低功耗蓝牙GATT连接,在mesh广播数据包和mesh GATT连接数据包之间转换,支持代理功能的节点被称为代理节点。
    • 也就是使有代理特性的节点能够采用BLE GATT Bearer的方式在数据信道和BLE设备通信。
  • 低功耗功能:能够有效降低设备工作时间占空比的功能,让mesh设备做到可以使用电池供电,需要与朋友功能配合使用。支持低功耗的节点被称为低功耗节点。
  • 朋友功能:帮助其他支持低功耗功能的节点缓存信息,让支持低功耗功能的节点能在低功耗状态工作,支持朋友功能的节点被称为朋友节点。

畅想

智慧家居、智慧农业等这些场景,世界正在慢慢打开这扇智慧大门,它们也正在慢慢改善我们的认知、生活、环境。希望我们都有这个机会,为国家、社会、人民谋福利。