本文内容参考:
特此致谢!
一、序言
本人近期刚刚接触ZigBee(从笔者近期的专栏和文章就能够看出来),多多少少摸着了一点门道,但离着精通还相去甚远。在工作中,总是听到一个有多年ZigBee经验的同事和供应商在讨论问题的时候反复提到两个词(就像《亮剑》中八路军总部那个二把刀翻译总是听到"平安县城")一样:many to one和link status。在我刚刚接触的ZigBee入门知识中,完全没有这两个词,入门文章以及视频中也没有提及,想来这应该属于深入知识了。因此,专门在网上看了有关这两个概念的相关文章,将这两个概念的具体含义弄清楚,并在此做记录,以供后来和我有相同需求的人参考。
二、具体概念讲解
笔者一开始以为many to one和link status这两个概念是紧密联系在一起的,因为老听那位同事把这两个词放在一起说。但后来读了文章之后发现,这俩还不是一回事,并不"搭界"。因此在这里一个一个介绍。
1. Many-To-One(MTO)
上边说的many to one,其实正确的写法应该是Many-To-One(或者Many-to-One、many-to-one),简称MTO。
Many-to-One Routing,是一种简单的路由机制,使得整个网络中的路由设备拥有回到中心节点的路由。
Many-to-One Route Discovery:多到一的路由发现;
- 多:指的是ZigBee网络中的Router设备,毕竟Coordinator只有一个;
- 一:就是Coordinator(Concentrator,集中器、中心节点)设备了。
在这种机制下,中心节点周期性发送Many-to-One Route Discovery广播(协议栈默认设置为60s,可以在Plugin中更改)。当网络中的路由设备收到这条广播之后,其拥有回到中心节点的下一跳路由,并将此跳节点信息存储在自己的路由表中。至此,只要网络中的路由设备收到Many-to-One route discovery的广播,就知道回中心节点的路由(上行路由已经确认)。
参考《Z-Stack 3.0 Developer's Guide.pdf》中的"5.4.2 Many-to One Route Discovery",如下:

下图(指上图)显示了many-to-one route discovery(多对一路由发现)过程的示例。为了初始化many-to-one route discovery,concentrator(中心节点)向整个网络广播多对一的路由请求。在收到路由请求后,每个设备都会为集中器添加一个路由表条目,并将中继该请求的单跳邻居存储为下一跳请求。不会生成route reply。
其实这一段就是上边那段的意思。机制简单来说就是:
Concentrator广播一个MTO路由请求命令,附近的Router收到后将
信息(路由条目,单跳邻居)存下来,然后Router接着转发广播(注意最大跳数为30)。这样所有路由需要发送数据到Concentrator的时候就会找到这个单跳邻居,然后将数据发送给这个邻居,让它接着转发这个数据包。
更多内容请看下回。