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.状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务端向服务端发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误 ...
随机推荐
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种, ...
- iOS开发——语法篇OC篇&静态方法与实例方法
静态方法与实例方法 方法是类的行为,写在接口和实现两个文件中.在接口部分声明方法,在实现部分实现方法. 1.类方法与实例方法 Objective-C中的类可以声明两种类型的方法:实例方法和类方法.实例 ...
- shared_ptr的简单实现
前面讲到auto_ptr有个很大的缺陷就是所有权的转移,就是一个对象的内存块只能被一个智能指针对象所拥有.但我们有些时候希望共用那个内存块.于是C++ 11标准中有了shared_ptr这样的智能指针 ...
- Innode引擎监控的开启的方法
查看当前InnoDB引擎信息 mysql> show innodb status\G 开启InnoDB监控,有四种: 1. innodb_monitor mysql> create tab ...
- 双系统下,Windows如何正确删除Linux系统
一般电脑装了双系统,特别是Windows加Linux的电脑,不可以在Windows中直接删了linux,因为一般安装linux的时候,grub都写进了mbr,直接删了Windows就进不了了,除非原来 ...
- Nodejs的mysql模块学习(一)
介绍 mysql npm包 是一个nodejs的模块,由JavaScript编写 安装 npm install mysql 建立连接 var mysql = require('mysql');//引用 ...
- css笔记14:css文件之间可以相互引用
css文件之间相互引用是通过@import指令完成的 格式: @import url("被引用的css文件"); 顺便说一句,如果希望在html或者php文件中引用某个xxx.c ...
- 【安卓面试题】使用SQLiteOpenHelper的getReadableDatabase()获得的数据库能不能,做写的操作
可以! 不要被Readable的意思误导啦,readable是可读的意思,但不代表不能写哦. getReadableDatabase() 会获取用于操作SQLiteDatabase的实例. getRe ...
- LeetCode 42
Trapping Rain Water Given n non-negative integers representing an elevation map where the width of e ...
- 关于docker中的几个小命令
问题 A VirtualBox machine with the name 'vagrant_c__devops_docker_vagrant' already exists. 解决命令:VBoxMa ...