<!--
该章节小编将讲解中继节点的特性以及其工作流程,毫无疑问Relay Node在整个Mesh网络中置关重要的,可能很多读者可能会觉得 “这有什么难的?不就是帮忙转发其他的节点的Network PDU,从而扩大Mesh网络的范围嘛”;那么,你知道:
现在,你还敢这么“嚣张”地说:“这有什么难的吗?”
但是,你们都不要怕;以上问题统统将会从下述的内容中找到答案😄。
如上所述,中继节点就是于用于中继或者转发其他节点的数据,从而扩大整个Mesh网络。但是,Spec中规定了很多的条件去限制过多的中继而导致网络堵塞;以下几点小编觉得还是有必要提醒一下读者:
中继的数据包必须是Network PDU,如Beacon和非Mesh Message是不会被中继的
Relay Node只中继通过广播承载接收到的Network PDU,大前提是收到的Network PDU中的目标地址不是该中继节点元素的单播地址;如果目标地址刚好跟节点元素的单播地址匹配上了,那么直接处理不再转发;否则中继该Network PDU (TTL>=2);还有,通过GATT承载接收到的Network PDU是不会被中继的,但是有这么特殊情况:
如果通过GATT承载接收到的Network PDU的目标地址跟接收到的这个节点不匹配,而且该节点又支持中继特性,那么它会将Network PDU通过ADV承载重传出去,其中其他的内容均不变,TTL域的值减去1
如果支持Relay & Proxy并且其Feature均被使能,那么这意味着该节点一定要支持ADV & GATT承载
至于,TTL相关的更多细节请参考BLE Mesh各层帧包格式详解
本节内容将是整篇文章的核心所在,在前言中所提及的问题将统统在这里得到答案;废话不多说,先上图:
由上图可知,在中继Network PDU之前都是经过层层判断的;其中在前言中所提及的问题,小编相信读者应该可以 “拨开云雾,见阳光” 了:
至于中继的Network PDU要发送多少次 (在37、38、39通道发送表示为一次) ,每次的时间间隔是多少?这些内容请参考Configuration Model浅析.Relay & Relay Retransmit。
由于中继特性的功能比较单一简单,因此读者只需要记住上述的如何中继Network PDU即可。但是,为了方便网络封包是否中继的查阅以及比对,小编觉得还是有必要将接受到Network PDU的整个处理过程贴出来: