第五章:zigbee学习笔记之网络层帧格式分析(下)

本文原地址:https://blog.csdn.net/tainjau/article/details/87338803

写在前面

  • 去年刚入职的时候,了解了一阵子zigbee,写了学习笔记的第四章(上),后来因为业务繁忙(自己也懒)所以就没更新博客了,过年期间复盘了以下,发现实在不能这样堕落啊,所以最近要重新写点博客了。ps:这篇是去年写的,一直躺在有道云笔记里面,今天拿出来更新上去好了。
  • 上一章提到了,NWK层的帧区别是又帧头的帧控制域(Frame Control)的前两个bit控制的,而数据帧和命令帧格式有所却别,不同处如下图。
    在这里插入图片描述

1、数据帧

  • 数据帧的网络层报头域有控制域和根据需要适当组合而得到的路由域组成。数据帧的Payload携带的信息就是将来应用层的数据。ps:将来应用层的读属性,写属性等aps层是数据,都是用数据帧发出来的。

2、命令帧

  • 命令帧的区别是根据NWK payload中的命令帧标识符(NWK Command Identifier)来决定的,该域是由一个字节组成。
    在这里插入图片描述

2.1、路由请求命令(Route Request)

  • 设备使用路由请求命令来请求在其无线通信范围内的其他设备发现到达目的设备的路由,以便在网络中建立一条稳定的使信息更快更经济地到达目的设备的路由。路由请求命令的载荷格式如下图。
    在这里插入图片描述
2.1.1、命令选择域(Command Options)
2.1.1.1.多对一路由(Many-to-one)

在这里插入图片描述
ps:关于many-to-one更具体的知识,可以参考这篇文档:https://www.silabs.com/community/wireless/zigbee-and-thread/knowledge-base.entry.html/2017/12/18/_many-to-one_source-JRvm

0:表示不适用many-to-one机制,即单播路由发现。
1:表示启用many-to-on机制,整个网络中,会由中心节点,周期性发出many-to-one(默认60s,广播),使得整个网络中,具有路由能力的设备都收到这个命令帧,并解析出到中心节点的路径。

2.1.1.2.Destination IEEE address
2.1.1.3.多播子域(Mulicast)
  • 多播子域是1位。只有命令帧请求多播组路由时,它的值是1,在这个情况下,目的地址域包含期望组的Group ID。

2.2、路由应答命令(Route reply)

  • 路由应答命令的目的设备使用路由应答命令来通知路由请求的源设备已接收到请求命令。ZigBee路由请求所经路由器建立一种能使帧更快捷地从源地址路由到目的地址的状态路由应答命令的载荷格式如下图所示。

    在这里插入图片描述
  • ps:当zigbee网络中的A路由设备需要知道去往B设备的路径时,可以发起到B设备的路由发现(不带many-to-one),B设备收到后,将会把路径用route reply应答回去。

2.3、网络状态命令(Network Status)

  • 设备使用网络状态命令报告从特定设备的NWK 层到到网络中其他设备的对等NWK 层实体产生的错误和其他情况。NWK 状态命令还可以用来诊断网络问题,例如地址冲突。
  • 当然,网上也有文章称它为路由错误命令。当设备无法向前传送数据时,便使用路由错误命令。该命令通知发送数据帧源设备,在传送数据帧时出现错误。
    在这里插入图片描述
  • 以下是网络状态命令对应的Error Code:
    在这里插入图片描述
    详细介绍如下:
    在这里插入图片描述

2.4、断开命令(Leave)

  • 网络层管理实体用断开命令通知网络中的其他设备设备正在离开网络或者请求一个设备离开网络(即设备离网),帧格式如下:
    在这里插入图片描述
2.4.1、重新连接子域(Rejoin)
  • 重新连列子域是1bit在比特5的位置上。如果这个子域的值是1,同它目前父设备断开的设备重新连接到网络(rejoin)。如果该子域值是0,设备将不重新连接网络。
2.4.2、请求子域(Request)
  • 请求子域长度是1bit在bit6位置上。如果该bit的值是1,那么断开命令帧请求另一个设备离开网络。如果该子域值是0,那么断开命令帧表明发送设备准备断开网络。
2.4.3、断开子设备子域(Remove Children)
  • 断开子设备子域是1bit长度在bit7的位置。如果该bit的值是1,那么该设备的子设备也离开网络(leave)。

2.5、路由记录命令(Route Record)

  • 路由记录命令允许把一个单播数据包在通过网络时采取的路由记录在命令负载中,并发给目标设备。route record通常会在路由设备拥有到中心节点的路径后,发送的第一条数据前会将route record发送给中心节点,使中心节点具有到该路由设备的路径(中心节点的源路由表建立)
  • 路由记录命令的负载必须按下图格式编排。
    在这里插入图片描述
2.5.1、应答计数器域(Relay Count)
  • 包含路由记录命令的应答列表域的应答数。发起设备把它初始化为0,且每接收一个应答加1。
2.5.2、 应答列表域(Relay List)
  • 应答列表域是应答数据包的节点的2字节的短地址的列表。地址是最少的有意义的格式。在发送一个数据包之前接收节点附加它们的短地址给列表。

2.6、重新连接请求命令(Rejoin Request)

  • 重新连接请求命令允许设备重新连接它的网络。通常是响应通信失败才这么做,例如当终端设备不能同它的发起父设备通信。
    在这里插入图片描述
  • capability information信息如下:
    在这里插入图片描述

2.7、重新连接请求命令(Rejoin response)

  • 设备发送重新连接响应命令来通知它的短地址的子设备和重新连接状态。帧格式如下
    在这里插入图片描述
2.7.1、网络地址域(Short Address)
  • 如果重新连接成功,那么这个2字节域包含一个新的被指定的重新连接设备的短地址。如果重新连接没成功,这个域包含广播地址(0xffff)。
2.7.2、重新连接状态域(Rejoin Status)
  • 0x00:表示rejoin请求成功

2.8、链路状态命令

  • 连接状态命令帧允许邻居路由器之间通信,直到它们彼此的输入链路成本。
  • 这就是我们常说的邻居表相关信息。默认情况下,整个网络中,会每个16s发一次链路状态,来维护设备之间的邻居表。
    在这里插入图片描述
    在这里插入图片描述
2.8.1、连接状态命令选择域(command option)
  • 命令选项域的条目数子域指明了链路状态表中的链路状态条目数。如果这是发送者链路状态的第一帧,第一帧子域设置为1,如果这是发送者链路状态的最后帧,最后帧子域设置为1。如果发送者链路状态正好为一帧,第一帧和最后帧位都应该设置为1。
  • 如上图,entry count的数目为2,因此link status list就有两个信息。
2.8.2、链路状态表域
  • 链路状态条目按网络地址以递增顺序排序。如果所有的路由器邻居不适合一个帧,应发送多个帧。当发送多个帧时,帧N 的链路状态列表的最后网络地址等于帧N+1 的链路状态列表的第一个网络地址。
    每个链路状态条目包含一个路由器邻居的网络地址,首先是最低字节,其次是链路状态字节。输入消耗域包含设备估计的邻居的链路消耗,这是1 至7 之间的一个值。输出消耗域包括来自邻居表的输出消耗域的值。

2.9、网络报告命令(Network report)

  • 网络层报告命令允许设备报告网络事件给协调器。可以报告的事件是无限电通信信道条件和PAN ID冲突。网络层报告命令载荷格式如图下图所示。
    在这里插入图片描述
2.9.1、命令选择域(command options)
  • 命令选择区域包含了记录信息计数器子域(Report information count)和记录命令标识符(Report command identifier)
2.9.2、EPID域
  • EPID域包含64位EPID,识别报告设备是哪个网络的成员

2.10、网络更新命令(Network update)

  • 网络更新命令允许由NIB中的nwkManagerAddr参数确定的设备广播配置信息的改变到网络中的所有设备。例如广播网络将改变短PAN标识符。

剩下的目前还没碰到,有碰到再更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值