Michael 假如图中B设备发送Msg1消息给T设备如果中继Q,R,S,离得很近,那他们同时收到B发出的Msg1消息都会转发此时转发会不会出现数据碰撞。
理论上是不可能同时接收到B的数据的;就算真的是同时接收到B的数据,因为转发是通过广播通道,在转发的时候就随机插入010ms的随机时间,这样就降低碰撞的概率;因此,在实际的使用场景中,就不要将中继节点放得过于密集;后续v1.1可以优化这个问题
Michael 假如为了出现上面1这种碰撞情况中继Q,R,S转发数据时都加上随机延时再转发,例如当Q,R,S同时收到数据时由于R先中继消息Msg1,同时TTL减1,此时Q,S.的缓存存着上次B发出的待转发的数据,当再次收到R中继过后的Msg1的时候会不会覆盖掉上次Q,S.的缓存着的待转发数据,此时由于SRC,DST,SEQ都不变,唯一变的就是TTL,程序是通过 TTL小于当前缓存的TTL来判断是否要覆盖上一次的消息后再转发的吗。不明白当出现这种情况时中继是怎么处理的。
首先,你说的这种情况概率很低,跟中彩票一样;其次,就算是真的发生了,那也是用户在布这个中继节点不当导致的;再退一万步来说,真的发生这种情况话,Q和S都转发B的数据,因为他们已经通过内部的机制了;当如果Q和S再次收到R转发B的消息,因为Q和S已经中继过了,它们是不会再次转发的;关于MESH网络中的节点接收到一个网络封包时,它是如何处理的,我在你上一个贴子就已经告诉你,在我们的 <<BLE MESH各层详解>> 已经有细述,,具体的请研读那篇文章。