zigbee协议与开发-NWK层作用解析

 在实际应用中,对MAC及下层的直接修改较少,因此直接看比较重要的NWK层。首先看一下NWK层的通信方式及支持的拓扑结构。

  •  协调器的NWK层为网络中每一个设备分配一个短地址。同时NWK层会限制数据帧传送的跳数(Hops),这个参数通常称为Radius,即通信半径。另外,通信机制分为三种:Broadcast,Multicast和Unicast。
    • 广播时,目的地址是0xffff,PAN ID也是0xffff;任何一个设备的APS子层可以调用NWK接口来发送一个广播数据;广播数据不需要ACK,所有广播数据会被协调器和路由器记录在一个叫BTT(Broadcast Transaction Table)的表中。
    • 多播时,消息发送到网络中具有相同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。

你可能感兴趣的:(WSN/Zigbee/NS2)