ZigBee协议学习之网络层
ZigBee的体系结构中,底层采用IEEE 802.15.4的物理层和媒介层,再次基础上,ZigBee联盟建立了自己的网络层(NWL)和应用层框架。
ZigBee网络层的主要功能包括设备的连接和断开、在帧信息传递时采用的安全机制、路由发现和路由维护的交互,并且,网络层完成对一跳邻居设备的发现和相关节点信息的存储。
ZigBee网络由所有节点都有两个地址:16位的网络地址和64位的IEEE扩展地址。其中,16位的网络地址仅仅在网络内部使用,用于路由机制和数据传输。这个地址实在节点加入网络时,有其父节点动态分配的。
1. ZigBee组网功能
ZigBee网络层的主要功能室路由,路由算法是它的核心。根据组网类型的不同,支持三种路由算法,星型路由、树形路由和网状路由。
1.1 星型网络
星型网络有一个中心节点,所有消息都经它传输。
1.2 树型网络
树型网络由一个顶端节点,下面有枝有叶,消息先上行再下传。
树型路由把网络看成是以协调器为根的一棵树,因为整个网络是由协调器所建立的,而协调器的子节点可以是路由器或者末端节点。
树型路由利用一种默认分布式地址分配算法,使用四个参数(由PAN协调器确定):PAN协调器的地址为0,深度为0,
- 树状网络的最大深度(不包括PAN协调器本身) Lm
- 网络路由器所能拥有的最大子节点数 Cm
- 网络路由器所能拥有的最大子路由器数 Rm
- 设备在网络中的深度 d (0---Lm-1)
- 来计算新节点的地址。在寻址时,根据地址就能计算出路径。路由只有两个方向--向子节点发送或者向父节点发送。无需路由表,节省存储资源。
一个父设备通过Lm,Cm和Rm来完成Cskip(d)的计算。
如果一个设备Cskip值为0,则表明该设备为终端设备。
如果设备的Cskip的值大于0,则表示其可以接受子设备,并且将
1. 父设备首先为它的第一个路由器子设备分配一个比它自己更大(+1)的地址
2. 给随后的路由器分配的地址将以Cskip(d)的数值为间隔,依次类推为所有的路由器分配地址
第n个终端设备的网络地址按照如下公式来分配:
以下图作为实例说明:Lm=3,Cm=2,Rm=2,d取值为[0,3]
每个深度对于的Cski值都计算出来,在每层之间,首先加入的节点(X)比父节点地址(C)大1,其次加入的节点(Y)的地址值为上一个节点X的地址值加上父节点的Cskip值。依次类推。
Cskip值为0的设备为终端设备,对于每个终端设备来说,其地址计算方式如下:
父设备直连的,第一(n)个终端设备的地址=它的父设备地址+该父设备的Cskip*Rm+1(n)
当一个设备想要去路由信息时,Cskip的值很重要。路由设备需要知道将要传递的信息的目的设备是否为自身的子节点。
如果路由设备在深度d,它自身的地址为A,需要传递的目的设备有一个目的地址D。如果满足A< D < Cskip(d-1)的话,那么设备D一定为设备A的子孙节点,进行下行路由(route down)。否则进行上行路由(route up)。
一旦可以确定目的地址是自身地址的子节点,下一步就是计算下一跳的地址。如果目的地址为终端设备类型,下一跳地址就是为目的地址(l例如信息在设备Y,前往地址为9的设备)。
如果目的地址为非直连子节点(例如信息在设备Y,前往地址为10的设备),则下一跳地址遵循如下的计算方式:
树族型拓扑的树簇算法是指消息沿着树形拓扑进行传输的算法,它是静态的,不需要存储路由表,适用于节点静止或者移动较少的场合
网状路由AODVjr算法是对Ad Hoc按照距离矢量路由算法的改进,按需分配的路由协议,只有在路由节点收到网络数据包时,并且网络数据包不在节点的路由表中时才会进行路由发现过程。AODVjr的优点是,相对于有线网络的路由协议而言,它不需要周期性的路由信息广播,节省了一定的网络资源和网络功耗。缺点是在需要时才发起路由寻找过程,会增加数据到达目的地的时间。由于ZigBee网络中个,对数据的实时性要求不大,而更重视对网络能量的节省,因此AODVjr更适合在ZigBee网络中。
依次路由的建立由以下三个步骤组成:
1. 路由发现
2. 反向路由建立
3. 正向路由建立
经过这三个步骤,即可建立起一条路由节点到目的节点的有效传输路径,在此过程中,AODVjr使用3种消息
Route Request(路由请求,RREQ), Route Replies(路由回复,RREP),Route Error(路由错误,RERR)
路由发现流程:
路由建立:
这两种算法的结合使用确定了WSN路由的三种模式
1. 禁止路由模式(SUPPRESS): 禁止对路径进行查找,只能使用树簇算法沿着树型拓扑进行路由。
具体操作,如果发现网络路由器存在,则数据包指向该路由器,否则,数据包沿着树形推进。
2. 使能路由模式(ENABLE): 将树簇算法和AODVjr算法相结合,视具体情况使用哪种算法。
具体操作:
如果发现网络路由器存在,则数据包指向该路由器
如果网络路由器不存在,路由器可以启动路由发现能力的话,则发起路由发现,数据包沿着计算的路由传送。
如果该路由器没有路由发现能力,数据包沿着树形推进。
3. 强制路由模式(FORCE):完全使用AODVjr算法,。
具体操作:只要设备具备路径查找能力,不管消息传输路径是否已经存在,都要启动路径查找过程,当查找完成后,数据包将沿着计算出来的路径传送,如果没有路由发现能力,数据包沿着树形推进。
这三种方式具体怎么选择?在代码里面,目前没有找到,疑惑中…..
1.3 mesh网络
网状网络与树型类型,但它的某些枝叶可以直接连接。网状路由是AODV路由算法的一个简化版本,非常适合于低成本的无线自组织网络的路由,适用于较大规模的网络,需要节点维护一个路由表,使用灵活,路由效率高。使用路由发现和维护机制。
除了以上两种路由方式外,PAN协调器或路由器本身还有邻接设备表,记录一定区域内与其具有邻接关系的设备。只需要一跳就可以发送到目的节点。
对于网状拓扑结构来说,要使用路由表来进行路由。
网状网络提供路径维护和网络自愈功能。
每一个路由器(包含协调器)都包含一个路由表,设备在路由表中保存数据包参与路由所需的信息,每一条路由记录都包含目的地址、下一级节点和连接状态。
路径发现表:保存路径发现过程中的临时信息,这些记录只在路径发现操作期间存在。
参考资料:http://blog.csdn.net/skyxfire/article/details/6698469
http://blog.csdn.net/tanqiuwei/article/details/7641375
ZigBee协议学习之网络层的更多相关文章
- zigbee学习之路(十二):zigbee协议原理介绍
一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...
- ZigBee协议基本介绍
ZigBee是一种短距离(10~100米).低速率(20~250Kbps).底成本.低功耗的无线网络技术,主要用于近离无线通讯.能够做到在数千个微小的传感器之间相互协调实现通讯,这些传感器只需要很少的 ...
- TCP/IP协议学习之实例ping命令学习笔记
TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...
- TCP/IP协议学习(五) 基于C# Socket的C/S模型
TCP/IP协议作为现代网络通讯的基石,内容包罗万象,直接去理解理论是比较困难的:然而通过实践先理解网络通讯的理解,在反过来理解学习TCP/IP协议栈就相对简单很多.C#通过提供的Socket API ...
- http协议学习系列
深入理解HTTP协议(转) http://www.blogjava.net/zjusuyong/articles/304788.html http协议学习系列 1. 基础概念篇 1.1 介绍 H ...
- BGP协议学习总结
BGP学习总结 BGP是目前使用的唯一的自治系统间的路由协议,它是一种矢量路由协议,基于TCP的179号端口,它采用单播增量更新的方式更新路由,与其他的路由协议不同的是,BGP只要TCP可达,就可以建 ...
- TCP/IP协议学习和理解
TCP:Transmission Control Protocol-传输控制协议 IP:Internet Protocol-网络协议 TCP/IP 不是一个协议,而是一个协议族的统称,里面包括了 IP ...
- HTTP协议学习笔记(四)
HTTP协议学习笔记(四) 与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的中转服务器提升传输效率. 1.用单台虚拟主机实现多个域名 ...
- HTTP协议学习笔记(三)
HTTP协议学习笔记(三) 1.状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务端向服务端发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误 ...
随机推荐
- URAL 1776 C - Anniversary Firework DP
C - Anniversary FireworkTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/c ...
- delphi HTML代码
################################属性 设置################################################字体设置{//-------- ...
- Android自己定义DataTimePicker(日期选择器)
Android自己定义DataTimePicker(日期选择器) 笔者有一段时间没有发表关于Android的文章了,关于Android自己定义组件笔者有好几篇想跟大家分享的,后期会记录在博客中.本篇 ...
- sqoop的安装与使用
1.什么是Sqoop Sqoop即 SQL to Hadoop ,是一款方便的在传统型数据库与Hadoop之间进行数据迁移的工具.充分利用MapReduce并行特点以批处理的方式加快传输数据.发展至今 ...
- [原]生产环境下的nginx.conf配置文件(多虚拟主机)
[原]生产环境下的nginx.conf配置文件(多虚拟主机) 2013-12-27阅读110 评论0 我的生产环境下的nginx.conf配置文件,做了虚拟主机设置的,大家可以根据需求更改,下载即可在 ...
- sql操作事务SqlTransHelper类实现
具体实现代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...
- 源码分析shiro认证授权流程
1. shiro介绍 Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户“登录”: 授权 - 访问控制: 密码加密 ...
- The Romantic Hero
Problem Description There is an old country and the king fell in love with a devil. The devil always ...
- Server Tomcat v7.0 Server at localhost failed to start.错误可能原因之一
故事由来: 学Servlet中,突然发现启动Tomcat时出现这个问题 故事梗概: 学习servlet尽然能碰到服务器起不来的,百思不得其解,然后我百度,我FQgoogle,找stackoverflo ...
- 用java 删除mongodb的数据
import java.net.UnknownHostException; import com.mongodb.BasicDBObject;import com.mongodb.DB;import ...