技术篇之理解蓝牙Mesh的地址概念

概述

众多通信协议上都离不开地址的概念,大名鼎鼎的IP地址、基石的MAC地址,蓝牙Mesh也不例外,本文将着重讲解Mesh地址的概念,希望能够帮助读者以小窥大,洞悉蓝牙Mesh。

地址的分类

在蓝牙Mesh规范中,将地址分为四类:

  1. 单播地址(Unicast Address)用于唯一标识网络中节点的元素地址。
  2. 组播地址(Group Address)用于表示网络中的组地址,组地址可以被一个或多个节点所共有。
  3. 虚拟地址(Virtual Address)作用类似与组地址,不同点在于其地址空间为2^16。
  4. 未分配地址 (Unassigned address)表示此地址不能被使用。

单播地址

单播地址被用于唯一的标识蓝牙Mesh网络中节点的元素(Element),单播地址从0x0001开始到0x7FFF结束,该地址是在蓝牙Mesh设备配网阶段由配置者分配给设备的,单播地址在各节点之间不能重复,而在节点内必须递增。例如:网络由三个节点组成,节点A有1个元素,节点B有2个元素,节点C由2个元素,节点A的地址为0x0001,节点B的第一个元素如果为0x0002的话,第二个元素必须为0x0003,节点C同理。单播地址在网络中用于唯一的标识网络的节点的元素,因此在网络数据包中源地址(SRC)字段必须设置为该单播地址,而目的地址(DST)则无此要求。

组播地址

组播地址一般被用于元素模型的订阅(Subscribe)和发布(Publish)地址,组播地址从0xC000开始,到0xFEEE结束可以被任意使用,而0xFF00到0xFFFB为保留地址,不能使用。0xFFFC到0xFFFF用于特殊使用:

  1. 0xFFFC 代指所有的代理节点(Proxy Node)
  2. 0xFFFD 代指所有的朋友节点(Friend Node)
  3. 0xFFFE 代指所有的转发节点(Relay Node)
  4. 0xFFFF 代指所有的节点(All Nodes)

蓝牙Mesh网络的通信模型是取决于目的地址(DST)字段,如果目的地址为单播地址,那么该消息只能被单播地址为该目的地址的元素所处理,如果目的地址为组播地址的话,该消息可以被订阅该地址的模型所处理。由此推出通信模型:

  1. 客户端/服务端模型
  2. 订阅/发布模型

虚拟地址

虚拟地址一般用法与组播地址类似,虚拟地址是通过Label UUID 生成,由0x8000开始到0xBFFF结束,Label 有16字节构成,其地址空间无限大,可以弥补组播地址的空间约束性,但是Label UUID在上传输层(Upper Transport Layer)加密时必须作为参数参与运算
E n c A c c e s s P a y l o a d , T r a n s M I C = A E S − C C M ( A p p K e y , A p p l i c a t i o n N o n c e , A c c e s s P a y l o a d , L a b e l U U I D ) EncAccessPayload, TransMIC = AES-CCM (AppKey, Application Nonce, AccessPayload, Label UUID) EncAccessPayload,TransMIC=AESCCM(AppKey,ApplicationNonce,AccessPayload,LabelUUID)

未分配地址

未分配地址0x0000,用于设备处于未配网状态时或其发布订阅地址未配置时初始地址。该地址不能用于网络数据的发送。

你可能感兴趣的:(通讯技术,IOT)