Zigbee网络中的消息传输方式
1、广播
广播是zigbee网络中的一种数据传输方式,它是由网络中的一个节点向其它节点发送消息的过程。
在zigbee网络中协调器,路由器和macRxOnWhenIdle域值为TRUE的终端设备可以参与广播转发,其余节点不参与。
能够接受广播帧的目的节点由广播帧中的目的地址来确定,不同的广播地址及其对应接收节点类型如下表所示:
在所有参与广播的节点中都需要维护一个包含若干条广播事务记录(Broadcast Transaction Rcord,BTR)的广播事务表(Broadcast Transaction Table,BTT),该表用来记录哪些节点已经成功转发了广播帧。
一个节点接收到一个广播帧时首先检查帧中的目的地址和自己的设备类型是否相符。
不相符则丢弃;相符的话设备从本地BTT中查找相应的BTR,若干存在,则对其进行更新;若不存在,则检查BTT 中是否有空的或者过期的BTR项。
如果没有,则丢弃广播帧;若有则添加新的BTR项并将广播帧提交到高层进行处理。
若节点属性中radius值不为0或者该设备不是终端设备则转发该帧。
BTT表中每个BTR都有有效期,在有效期过后,设备会将该BTR定义为失效以便后续写入新的BTR。
MAC PIB属性macRxOnWhenIdle值为FALSE的zigbee路由器接收到广播帧后将会以单播的形式将该帧发送到其邻居节点。
如果一个节点接收到一个广播帧后节点查找BTT中的广播帧序列号发现其另外一个邻居已经广播了该帧,则节点将忽略该广播帧。
为了方便重发广播帧,每个zigbee路由器的NWK层至少能够缓存1帧数据。
Zigbee中广播的主要用于路由发现。
广播过程如下图所示:
2、组播
组播就是针对zigbee网络的某个固定群组进行消息传送。
在zigbee网络中将多个节点在同一个Group ID下注册,从而使其逻辑上形成一个群组。
当针对该组传送数据帧,只有组内的所有节点都能够接收该帧。
只有数据帧可以使用组播方式进行传送,命令帧不能。
组播消息可以由终端节点发起,但是不能被发送到属性macRxOnWhenIdle为FALSE的节点。
参与组播的每个节点中都需要维护一个nwkGroupIDTable记录,其中标示哪个节点及其所属的组。
组播消息分为“成员模式”组播和“非成员模式”组播。
前者是指组播消息由组内成员发起;后者指组播消息由非组内成员发起。
当消息由组内成员发起时,设备就使用广播方式将消息发出,其它接收到的节点也会以广播的方式将接收到的帧进行转发。
广播方式完全按照上面所述的广播方式进行。
如果消息由非组内成员发起,则要将该消息传送到目的组之前节点首先要找到从发起节点到目的组中某个节点的路径。
如果有这样的一跳路径,节点就使用该路由将消息传送到该节点,然后组内节点再使用“成员模式”组播方式传送消息。
如果没有找到相关路由,则设备发起路由发现(该过程及将消息从源节点发送到某个组内节点的过程参考相关章节)。
当组内成员收到帧后将会帧中的模式位置为成员模式,然后以上面所述的成员模式将帧发送出去。
3、单播
单播是以单个节点的短地址或长地址作为目标发送消息的,这样就只有一个端点会接收到。
使用单播方式针对某一个节点进行数据或命令传输。
单播有两种方式,一种是将两个设备绑定,其中一个发送信息,只有与之绑定那个设备可以接受到信息,而其他节点不能接受到;另一种是直接指定目标地址。
在这种方式中某节点针对另一特定节点进行帧传输,则可将其发送帧的目标地址直接设置为想要其接受信息的目标设备的段地址或者长地址。