打印

Zigbee解析: NWK层作用

[复制链接]
781|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一代掌门|  楼主 | 2016-9-11 22:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在实际应用中,对MAC及下层的直接修改较少,因此直接看比较重要的NWK层。
首先看一下NWK层的通信方式及支持的拓扑结构:
·    协调器的NWK层为网络中每一个设备分配一个短地址。同时NWK层会限制数据帧传送     的跳数(Hops),这个参数通常称为Radius,即通信半径。另外,通信机制分为三种:Broadcast,Multicast和Unicast。
o  广播时,目的地址是0xffff,PAN ID也是0xffff;任何一个设备的APS子层可以调用NWK接口来发送一个广播数据;广播数据不需要ACK,所有广播数据会被协调器和路由器记录在一个叫BTT(Broadcast Transaction Table)的表中。
o  多播时,消息发送到网络中具有相同Group ID的节点,即同级节点。每个节点可以属于多个不同的Group,同时会保留这种身份记录在多播表中。多播有两种模式:MemberMode和Nonmember Mode,前者多播由组成员发送消息,后者由非成员将消息转发到成员节点。在Zigbee中,多播只限于数据,对命令不进行多播。
·   除了上述基本模式,还有一种Many-to-One,即多个节点向单个节点发送数据,非常适用于WSN。只不过是所有节点(包括协调器和路由器)向Sink节点发送数据。
接下来,看一下Zigbee中NWK支持的两种常用拓扑:
1.Hierarchical Topology(Tree)
·    Zigbee支持树形拓扑(即Mesh网状拓扑的一种),特别是提供了一种叫缺省分布式地址分配的方式,可以为树形拓扑结构中每一个节点单独分配地址,分配地址时只需要知道树的深度和最大孩子节点数即可。这种算**用到一个CSkip函数,参数d表示深度,其示意图如下:
      2.  Mesh拓扑:这种拓扑允许节点自动选择路由,因此可以自修复路由,更加健状,但是需要更多自行处理。
再接下来,看一下NWK层最最重要的功能:Route,分为以下几个部分
·             Route Discover:路由发现由协调器节点和路由器节点完成,它们会根据LQI(Link Quality Indicator)来评估包传输成功率。在这个过程中,会用到Routing Table,Routing Discovery Table及每个节点都有一个Neighbor Table(如下表)。此外,APL层可以调用NLME-Route-Discoery.request原语来请求NWK实现路由发现。如果RD请求只包含一个目的地址,那就是为Unicast通信找路由;否则如果目的地址是一个16位的Group ID,则是多播寻路由;如果APL层没有提供任何目的地址,那么就是请求Many-to-one方式寻路由。对于广播方式,不需要也不允许请求Routing Discovery。
·    Route Maintenance and Repair
最后,看一下NWK层提供的管理服务功能这一点对于理解组网过程十分重要。主要包括网络发现、网络形成等。
·    Network Discovery:由APL层调用,NWK层就会利用MAC层的信道扫描来发现是否存在其它网络,扫描完成后会向APL层返回相关的参数。
·    Network Formation(生成协调器):NWK层在收到APL的请求后,可以将一个节点设置为协调器。首先,在上一步的主动扫描后,会进行一个ED扫描,该请求是由NLME向MLME提出。根据ED扫描结果,NWK层会选择一个Frequency Channel和一个PAN ID。通常协调器为设置0x0000作为 它自身的MAC地址。
·    Establishing the device as a router:由APL调用NWK层的NLME-START-ROUTER原语来完成。
·    Joining and Leaving a network:协调器和路由器的NWK层允许其它设备通过请求MLME并设置macAssociationPermit=TRUE,来完成加入或者退出一个网络。当然,节点的高层可以调用NLME-JOIN原主来请求NWK层将节点加入到一个已经存在的网络;相反,应用层也可以调用NLME-LEAVE原语来离开一个网络。
·    Resetting the NWK Layer:由APL层调用NLME-RESET原语实现;
·    Synchronization:由NLME-SYNC原语实现,主要用于节点间同步或者从协调器或路由器提取数据。
NWK层数据帧(Frame)格式:


NWK层数据按类型分为Data和Command,格式如下:

其中,Command包括以下:


以下是每一种命令中,NWK Payload的格式:

我们据此来分析一下前面提到的,TI Packet Sniffer收到的每一个数据包中的NWK Payload内容:

根据上面看到的,该包是Link Status查询包,这是Zigbee-PRO新增的命令,上面没有这个包的格式,无法继续分析,但是已经知道该包的含义。因此可以确定Collector路由器节点启动后会周期性发送NWK层的Link Status以测试链路层的状态,该消息的Radius是1。


相关帖子

沙发
dirtwillfly| | 2016-9-29 21:36 | 只看该作者
感谢分享

使用特权

评论回复
板凳
一代掌门|  楼主 | 2016-10-5 22:16 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

191

帖子

4

粉丝