一、NWK层的几张表1、RoutingTablea、Destinationaddress(2byte):目的地址Status(1bits):ACTIVE(0)路由条目可用;DISCOVERY_UNDERWAY(1)路由条目正在发现;b、DISCOVERY_FAILED(2)/INACTIVE(3)路由失效;VALIDATION_UNDERWAY(4)路由可用;Reserved(5-7)保留。c、Noroutecache(1bit):是否可存储源路由表(用于manytoone),多对一网络中,节点保存的对集中器的路由条目中,改位置1,表示集中器有源路由表;清0,表示无源路由表。d、many-to-one(1bit):用于manytoone中,代表Destinationaddress地址是集中器,集中器设备会每隔一段时间(如30s)给周围的路由器设备广播RouteRequestCommand(且是manytoone类型路由发现)。e、Routerecordrequired(1bit):用于manytoone中,当Noroutecache为1时,表示集中器没有源路由表,则每次节点给集中器发送数据前,需先发送一条routerecordcommand命令帧,该帧经过的每一跳路由设备均需将其网络地址填在命令帧的payload中的RelayList字段中,集中器收到该命令时,可用该payload的RelayList中的路由给节点发送数据;Noroutecache为0时,表示集中器有源路由表,则节点只需在收到RouteRequestCommand(且是manytoone类型路由发现)时,建立对集中器的路由表条目后,给集中器发送一条routerecordcommand命令帧,集中器收到后将payload中的RelayList字段的路由保存在源路由表中,然后清零Routerecordrequired位。f、GroupIDflag(1bit):用于多播路由(一对多),Destinationaddress地址是一个组ID,仅当非组内成员给组内成员发送数据时,才需路由表,因非组内成员发送数据时是用单播,组内成员收到数据后改位多播;当组内成员给组内成员发送数据时,直接用多播发送。g、Next-hopaddress(1bit):下一跳地址。2、RoutingDiscoveryTableRouterequestID(1byte):路由发现条目ID。Sourceaddress(2byte):路由发现发起者地址,其与RouterequestID共同确定路由发现条目。Senderaddress(2byte):传输RouteRequestCommand命令的上一跳地址(同时是Forwardcost成本最少的路径上一跳地址)。Forwardcost(1byte):RouteRequestCommand从发起者到本设备的最低成本值。Residualcost(1byte):RouteReplyCommand从响应者到本设备的最低成本值,也称剩余成本。Expirationtime(2byte):路由发现条目的超时时间。3、NeighborTableExtendedaddress:邻居节点IEEE地址。Networkaddress:邻居节点网络地址。Devicetype:邻居节点设备类型:0:协调器1:路由器2:终端设备RxOnWhenIdle:邻居节点的接收器在待机时是否开启:1:开0:关。Relationship:邻居节点与本节点的关系:0:父设备1:子设备2:兄弟姐妹3:都不是4:曾经的字设备5:未授权的子设备TransmitFailture:表示本设备发送给该邻居设备的数据的成功率,该值越大,表示越失败。LQI:表示邻居设备发送数据到本设备时的linkcost,可转换成链路成本。OutgoingCost:表示本设备发送数据到邻居设备时的链路成本。Age:邻居表的老化时间,每收到linkstatuscommand时,该值清零,值越大表示该邻居表条目越老;LQI/OutgoingCost/Age值均由邻居设备linkstatuscommand命令更新。Incomingbeacontimestamp:用于信标网络,当收到邻居设备信标帧时,保存当前的时间戳(单位为symbols)。Beacontransmissiontimeoffset:用于信标网络,邻居设备信标帧与其父设备信标帧的时间差;Incomingbeacontimestamp--Beacontransmissiontimeoffset=邻居设备的父设备发送信标帧的时间。ExtendedPANID:该网络的扩展标识。Logicalchannel:该网络的通道。Depth:该网络的深度,最大15。Beaconorder:是否支持信标网络。Permitjoining:是否允许加入,1:允许0:不允许Potentialparent:是否为潜在父设备,1:是,0:不是;对于路由设备,可配置其可加入的子节点数目(路由节点数目或终端节点数目),当子节点数目还未满时,则可作为潜在的父设备,否则不行。二、LinkstatuscommandABLinkstatuscommandAddr:无AbroadcasttoBLinkstatuscommandAddr:AIncomingcost:LQI-aOutgoingcost:0LQI-aBbroadcasttoALQI-bLinkstatuscommandAddr:BIncomingcost:LQI-bOutgoingcost:LQI-aAbroadcasttoBLinkstatuscommandAddr:AIncomingcost:LQI-aOutgoingcost:LQI-b1、以上Linkstatuscommand具体命令格式参考Zigbeespe。2、Linkstatuscommand在如下两点有重要作用:A、manytoone:集中器广播RouteReqcommand时,节点收到后,根据Linkstatuscmd命令保存的In/outcost来计算RouteReqcmd上一跳到本节点的成本Cost,同时建立节点到集中器的Routetable条目,目的地址为集中器,Next-hop为成本Cost最小的传递RouteReqcmd上一跳地址。B、Two-way-route(nwkSymLink=TRUE):origintor发起RouteReqcmd时,节点收到后,与Many-to-one一样原理建立路由表,目的地址为origintor;在responder返回RouteReplycmd时,节点收到后,根据Linkstatuscmd命令保存的In/outcost来计算RouteReplycmd上一跳到本节点的成本Cost,同时建立节点到Responder的Routetable条目,目的地址为Responder,Next-hop为成本cost最小的传递RouteReplycmd上一跳地址。因此,Two-way-route可以建立两条路由表。BbroadcasttoA三、单播路由四、一对多(多播)路由五、多对一(manytoone)路由