概述
**
AODV
**
- 基础知识
NS2(Network Simulator,version 2)是一种面向对象的网络仿真器,本质上是一个离散事件模拟器,由UC Berkeley开发而成。
NS2使用C++和Otcl作为开发语言。NS可以说是Otcl的脚本解释器,它包含仿真事件调度器、网络组件对象库以及网络构建模型库等。事件调度器计算仿真时间,并且激活事件队列中的当前事件,执行一些相关的事件,网络组件通过传递分组来相互通信,但这并不耗费仿真时间。所有需要花费仿真时间来处理分组的网络组件都必须要使用事件调度器。它先为这个分组发出一个事件,然后等待这个事件被调度回来之后,才能做下一步的处理工作。事件调度器的另一个用处就是计时。NS是用Otcl和C++编写的。由于效率的原因,NS将数据通道和控制通道的实现相分离。为了减少分组和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++写出并编译的,这些对象通过映射对Otcl解释器可见。
移动自组网路由协议分为两种:
(1)主动路由协议: 需要较高的资源代价如:带宽、能耗、cpu使用率、而且路由控制信息开销大、不适应于大规模移动自组网。 有DSDV、FSR、OLSR等主动路由协议 .
(2)按需路由协议: 不需要周期性地广播路由更新消息,能节省一定的网络资源,如能耗、带宽等 典型的路由协议有DSR、AODV、TORA等按需路由协议。
按需路由协议 AODV:基于距离矢量算法的路由协议 AOMDV:多径路由协议,是对AODV协议的扩展与AODV基本相同,主要区别在于AOMDV中路由协议发现过程中发现的路径数。
2.AODV路由原理
aodv是一种网络层按需路由协议,它的工作原理如下。
AODV(Ad hoc On-demand Distance Vector Routing)是一种按需路由协议。当一个节点需要给网络中的其他节点传送信息时,如果没有到达目标节点的路由,则必须先以多播的形式发出RREQ(路由请求)报文。RREQ报文中记录着发起节点和目标节点的网络层地址,邻近节点收到RREQ,首先判断目标节点是否为自己。如果是,则向发起节点发送RREP(路由回应);如果不是,则首先在路由表中查找是否有到达目标节点的路由,如果有,则向源节点单播RREP,否则继续转发RREQ进行查找。
3.AODV的路由维护方式。
路由维护的方式分为邻居发现和链路层反馈两种。邻居发现是节点周期性的广播TTL=I的HELLO广播报文,收到报文的节点知道发送者是其邻居,这样就维护和其邻居的本地互连性,HELLO报文格式和RREP报文格式相同。如果在一定时间内,节点没有收到邻居的HELLO报文,并且路由表中存在以该邻居作为下一跳的路由表项,节点就会广播RERR报文。链路层反馈是当转发数据报文时,如果在链路层收到下一跳节点路由信息里通告目的节点不可达的报文,即下一跳没有通往目的节点的路由,则表明路由中断,根据中断节点离源节点和目的节点跳数的比较来选择进行本地恢复或广播RERR报文。
在下面三种情况下,节点会发送RERR报文:(1)邻居发现时,当邻居不可达时,遍历路由表找到所有以该邻居作为下一跳的路由表项,构造RERR报文,把这些路由表项中的目的地址、序号依次放入RERR报文的不可达目的节点地址数组、序号数组中,然后广播此报文;(2)转发数据报文时,存在到目的节点的路由,但其标志为DOWN,说明此路由表项过期,构造RERR报文,把这个路由表项中的目的节点地址和序号放入报文不可达目的节点地址数组和不可达目的节点序号数组中,并丢弃数据报文;(3)转发数据报文时,存在到目的节点的路由;其标志为UP,但实际转发时,收到链路层的不可达报文,如果当前节点到目的节点的跳数大于到源节点的跳数,会广播路由错误报文,这是通过链路层反馈得到邻居节点不可达信息,采用和第一种情况相同的方式构造RERR报文。
收到RERR报文的节点,对报文中每个不可达目的节点,在路由表中查找以不可达目的节点为目的节点并且以RERR报文发送者作为下一‘跳的路由表项,把路由标志置为DOWN状态,并判断路由表项的前向节点地址是否为空,如果不为空,则把这个不可达目的节点信息放入新构造的RERR报文中。
只有当使用一条状态为UP的路由表项转发报文失败时,并且当前节点到目的节点的跳数小于到源节点的跳数,才进行本地恢复。当前节点把转发失败的数据报文插入报文缓存队列中,并把使用到的那个路由表项置为REPAIR状态,然后广播RREQ报文,同时开启一个本地恢复定时器,如果在定时器到期时,当前节点仍然没有收到RREP报文,则会把使用的路由表项置为DON。如果收到RREP报文,则说明到目的节点的路由恢复。
当中断节点发送RREQ报文时,原来路径中的上一跳节点和下一跳节点由于具有到中断目的节点的活跃路由,都会发送RREP报文。根据收到RREP报文时更新到目的节点路由的条件(3)得知,为了消除回环,只有当从新路径比原来路径到失败目的节点的跳数小时,才接受RREP报文。
4.AOCDV路由过程
a)AODV路由发现
AODV路由协议是一种典型的按需驱动路由协议,该算法可被称为纯粹的需求路由获取系统,那些不在活跃路径上的节点不会维持任何相关路由信息,也不会参与任何周期路由表的交换。此外,节点没有必要去发现和维持到另一节点的路由,除非这两个节点需要进行通信。移动节点间的局部连接性可以通过几种方法得到,其中包括使用局部广播Hello消息。这种算法的主要目的是:在需要时广播路由发现分组一般的拓扑维护;区别局部连接管理(邻居检测)和一般的拓扑维护;向需要连接信息的邻居移动节点散播拓扑变化信息。
AODV使用广播路由发现机制,它依赖中间节点动态建立路由表来进行分组的传送。为了维持节点间的最新路由信息,AODV协议借鉴了DSDV中的序列号的思想,利用这种机制就能有效地防止路由环的形成。当源节点想与另外一个节点通信,而它的路由表中又没有相应的路由信息时,它就会发起路由发现过程。每一个节点维持两个独立的计数器:节点序列号计数器和广播标识。源节点通过向自己的邻居广播 RREQ(Route Requests)分组来发起一次路由发现过程。
(b)AODV协议反向路由的建立
在RREQ分组中包含了两个序列号:源节点序列号和源节点所知道的最新的目的序列号?源节点序列号用于维持到源的反向路由的特性,目的序列号表明了到目的地的最新路由。当RREQ分组从一个源节点转发到不同的目的地时,沿途所经过的节点都要自动建立到源节点的反向路由。
节点通过记录收到的第一个RREQ分组的邻居地址来建立反向路由,这些反向路由将会维持一定时间,一该段时间足够RREQ分组在网内转发以及产生的RREP分组返回源节点。当RREQ分组到达了目的节点,目的节点就会产生RREP分组,并利用建立的反向路由来转发RREP。
©AODV协议正向路由的建立
RREQ分组最终将到达一个节点,该节点可能就是目的节点,或者这个节点有到达目的节点的路由。如果这个中间节点有到达目的的路由项,它就会比较路由项里的目的序列号和RREQ分组里的目的序列号的大小来判断自己已有的路由是否是比较新的。
如果RREQ分组里的目的序列号比路由项中的序列号大,则这个中间节点不能使用己有的路由来响应这个RREQ分组,只能是继续广播这个RREQ分组。中间节点只有在路由项中的目的序列号不小于RREQ中的目的序列号时,才能直接对收到的RREQ分组做出响应?如果节点有到目的地的最新路由,而且这个RREQ还没有被处理过,这个节点将会沿着建立的反向路由返回RREP分组。
在RREP转发回源节点的过程中,沿着这条路径上的每一个.节点都将建立到目的节点的同向路由,也就是记录下RREP是从哪一个邻居节点来的地址,然后更新有关源和目的路由的定时器信息以及记录下RREP中目的节点的最新序列号。对于那些建立了反向路由,但RREP分组并没有经过的节点,它们中建立的反向路由将会在一定时间(Active-Route-Timeout)后自动变为无效。收到RREP分组的节点将会对到某一个源节点的第一个RREP分组进行转发,对于其后收到的到同一个源的RREP分组,只有当后到的RREP分组中包含了更高的目的序列号或虽然有相同的目的序列号但所经过的跳数较少时,节点才一会重新更新路由信息,以及把这个RREP分组转发出去。
这种方法有效地抑制了向源节点转发的RREP分组数,而且确保了最新及最快的路由信息。AODV协议中规定,源节点将在收到第一个RREP分组后,就开始向目的节点发送数据分组。如果以后源节点了解到的更新的路由,它就会更新自己的路由信息。
最后
以上就是轻松小懒虫为你收集整理的AODV原理总结的全部内容,希望文章能够帮你解决AODV原理总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复