Bluetooth MESH目前采用的是基于flooding协议的MESH网络技术。在发布的协议版本中,有提到在未来的修订版本中可能会加入基于路由协议的MESH网络。
的确,flooding协议是相对比较初级的MESH网络技术。由于在网络层中的数据包都是以广播的形式发送并且转发,会在网络中产生大量重复发送的数据包,从而对网络的整体功耗有很大程度的负面影响。目前的flooding MESH协议,只适合于规模比较小的网络,而且不适合于网络数据量比较大的应用场景。
在介绍网络层协议之前,首先对BLE MESH的网络架构做个了解(图片来源于协议规范)。
上图中一共有四种连接,五种节点,下面分别做介绍:
四种连接:
(1) ADV(Not Relayed):两个节点之间可以互相收发广播消息,但是由于不是中继节点,不能中继转发数据包;
(2) ADV(Low power):用于low powernode与friend node之间收发数据包,如上图中的J与P之间的连接、L与O之间的连接。在这个连接上,low power node会主动发起请求建立friendship连接,以及从friend node查询是否有自己的数据。
(3) ADV Bearer:两个节点之间可以基于advertisingbearer收发广播消息,并且可以作为中继转发;
(4) GATT Bearer:用于没有ADVbearer能力的节点也能参与MESH网络。比如,节点T可以通过代理协议与其它节点在GATT连接上收发代理PDU。
五种节点:
(1) Node: 网络边缘的节点,没有relay功能。
(2) Low power node: 低功耗节点,由于有friendnode的存在,low power node不需要一直在广播信道发送或者监听数据包,可以更节省功耗。Low power node只需要定期的从它的friend node查询是否有数据到达就可以。
(3) Relay node: 是网络层扩展网络覆盖范围的核心节点,在接收到其它节点发送的数据包之后,根据网络的设定条件判断是否需要转发。
(4) Friend node: 作为low powernode的代理节点功能,当有low power node节点的数据下达时,可以在friend node缓存,等待low power node查询并且获取。
(5) Friend feature(not used): 在上图中,节点N具有friendfeature,但是它没有相应的low power node,所以friend feature没有使用。
在Provisioning节点为网络中的节点设定好相应的role之后。节点在网络层发送、中继以及接收数据包主要依赖于网络PDU的格式,其中,最主要的决定网络层行为的几个关键参数是NID、TTL、SRC以及DST。网络层PDU的组成以及描述如下表所示(图片来源于协议规范):
当一个节点收到网络数据包时,它需要根据下图所示的流程进行处理(图片来源于协议规范):
(1) 如果节点接收到数据包,首先判断NID是否匹配,如果不匹配,则直接丢弃该数据包;
(2) 判断NID满足之后,需要对网络数据包进行完整性验证,如果验证不通过,则丢弃该数据包;
(3) 对源地址和目的地址进行有效性判断,如果地址无效,丢弃该数据包;
(4) 在cache中查找是否之前已经收到过该数据包,如果收到,则丢弃该数据包;
(5) 如果没有收到,则将该数据包放入cache,并根据节点类型、TTL值以及DST值进行判断是否需要转发,只有在如下三个条件都满足的情况下才relay该数据包。
Ø 节点类型为relay node;
Ø TTL值大于等于2;
Ø DST地址不为本节点;
(6) 如果不满足relay条件,则丢弃该数据包。
(7) 如果满足条件,在relay数据包时,需要将数据包报文中的TTL值减1,然后继续广播。
下面以前文所列的拓扑图为例,介绍一个数据包的转发的完整过程:
场景:节点J需要发送数据包给节点E,TTL值设定为3.
(1) 首先,节点J发送数据包给节点P;
(2) 节点P收到收据包,由于转发条件都满足,节点P将TTL修改为2,广播该数据包。此时,节点A、Q以及H都会收到该数据包;
(3) 由于节点A以及节点H不是relay节点,将不会转发该数据包。
(4) 节点Q收到数据包后,判断转发条件都满足,节点Q将TTL修改为1,广播该数据包。此时,节点A、B、C、D、E以及R都会收到该数据包;
(5) 由于节点A、B、C、D不是relay节点,将不会转发该数据包。节点E收到数据包之后,判断DST地址是自己,则会处理并且将该数据包发给上层。节点R收到数据包时,虽然它是relay节点,但是由于TTL为1,节点R会丢弃该数据包。
小结:
BLEMESH的flooding协议虽然比较简单,但是它有比较明显的缺点,比如,大量的广播包转发消耗更多的网络能量,所以目前BLE MESH的应用范围还是比较受限。正如协议中所描述,在后续的修订版本中可能会引入基于路由协议的MESH网络,到那时BLE MESH的应用范围能够更广泛。