移动Ad Hoc下按需距离矢量路由协议AODV实验报告
一、实验内容
通过分析AODV路由帧类型及作用,并仿真网络建立、节点间通信、节点加入、节点退出,进一步分析各帧在其中工作流程,通过Python仿真实现代码,介绍改算法的优缺点及个人思考。
二、实验原理
AODV是为快速移动自组网设计的数据包路由协议,较适用于中小规模的无线自主网络,按需路由协议,只有当到达某目的节点的路由不存在时才会激活该协议发起路由请求,使用节点序列号机制避免环路产生,传输层使用的是UDP协议,网络各节点使用IP地址统一编址,每一个节点维护一个包含到达目的节点路由信息的路由表
AODV路由帧类型主要包括:
1、RREQ – 路由请求帧2、RREP – 路由应答帧3、RERR – 路由错误帧4、HELLO – 活跃路由链路监测帧
1.1 RREQ 报文
a. 对RREQ 的处理
接收到RREQ 的结点做如下处理:
(1)创建一个表项,先不分配有效序列号,用于记录反向路径。(2)如果在“路由发现定时”内已收到一个具有相同标识的RREQ 报文,则抛弃该报文,不做任何处理;否则,对该表项进行更新如下:
I.下一跳结点=广播RREQ 的邻居。
II.跳数=RREQ 报文的“跳计数”字段值。
III.设置表项的“过时计时器”。
(3)如果满足以下条件,则结点产生“路由回答报文”RREP,并发送到信源;否则更新RREQ 报文并广播更新后的RREQ 报文。
I.该结点是信宿。
II.结点的路由表中有到信宿的活动表项,且表项的信宿序列号大于RREQ中的信宿序列号。
(4)更新RREQ 报文并广播更新后的RREQ 报文
I.信宿序列号=本结点收到的信宿相关的最大序列号。
II.跳计数加1。
1.2 RREP 报文
(1)信宿结点产生RREP执行如下操作:
I.如果收到相应的RREQ 的信宿序列号与信宿维护的当前序列号相等,则信宿将自己维护的序列号加1,否则不变。
II.跳计数=0。
III.定时器值。
(2)中间结点产生的RREP 执行如下操作:
I.本结点获取的该信宿的最大序列号。
II.跳计数=本结点到信宿的跳数(查相应表项即可得到)。
III.更新本结点维护的“前向路由表项”的下一跳和“反向路由表项”的前一跳
b. 对RREP 的处理
结点对接收到的RREP 作如下处理。
(1)如果没有与RREP 报文中的信宿相匹配的表项,则先创建一个“前向路表”空表项。
(2)否则,满足如下条件对已有表项进行更新。
条件:
I.现有表项的信宿序列号小于RREP 报文中的序列号。
II.现有的表项没有激活。
III.信宿序列号相同,但RREP 报文的“跳计数”值小于表项相对应的值;通过更新或创建,产生一个新的前向路由。
更新:
IV.下一跳=广播RREP 的邻居结点。
V.信宿序列号=RREP 中的信宿序列号。
VI.跳计数加1。
(3)按照上述的过程,任何转发RREP 的结点,都记录了到信宿的下一跳,当RREP到达信源时。结点地址匹配,不再转发RREP,信源到信宿的前向路由已经建立起来了。信源可以沿这条前向路径进行数据传输。
1.3 RRER 报文
邻居间周期性的互相广播“Hello”报文,用来保持联系,若在一段时间内没有收到“Hello”报文,则认定为链路断。例如当结点X、Y 之间链路产生断路使数据无法通过此条链路传至信宿,则结点X 会产生RRER 报文向信源报告此情况。RRER 通过广播形式传送,维护路由表的结点收到此报文会更新路由表(将X、Y间的路由设成无效),并转发RRER 报文。
1.4 Hello消息
定义:Hello消息帧其实就是TTL=1时的RREP帧,Hello消息帧用于监测活跃路径上相邻节点的链接状况。
例如:1、活跃路径节点以HELLO_INTERVAL为周期发送Hello消息2、当某节点ALLOWED_HELLO_LOSS * HELLO_INTERVAL毫秒时间内没有收到该路径上的邻居节点发送来的Hello消息帧或其他任何帧时,该节点就认为与它与邻居节点的链路已断3、在DELETE_PERIOD的时间内没有收到来自邻居节点的Hello消息,则认为该链路已失效S
三、实验环境
乌班图系统、python3.7、pycharm
四、实验步骤
1、仿真移动Ad Hoc网络构建
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分组转发出去。
2、仿真消息发送
① 源节点希望向某个目的节点发送数据,但当前路由表中并无该节点的路由信息时,启动路由发现过程;
② 源节点向其邻居广播一个 RREQ(路由请求)消息,进行路由探测;
③ 每个收到RREQ消息的节点向其邻居扩散该消息,直至消息到达一个知晓目的节点路由的节点(中间节点或目的节点);同时建立反向路由;
④ 该中间节点或目的节点向源节点发送一个 RREP(路由响应)消息,当RREP消息到达源节点时,建立起源节点到目的节点的路由。
3、仿真节点的加入
4、仿真节点的删除
不在活动路径上的节点的移动不会影响到到该路径的目的地的路由。如果源节点在活动会话期间移动,它可以重新启动路由发现过程,以建立到目标的新路由。当目标节点或某些中间节点移动时,将向受影响的源节点发送一个特殊的RREP。周期性的hello消息可用于确保对称链接,以及检测链接失败。或者,使用链路层确认(LLACKS)可以检测到此类故障,而且延迟要小得多。如果尝试将数据包转发到下一跳失败,也会指示链接失败。一旦无法到达下一跳,中断的上游节点将传播一个具有新序列号(即,一个大于先前已知序列号1的序列号),并对所有活动的上游邻居跳转计数为1。这些节点随后将该消息转发给它们的活动邻居,以此类推。
节点间因n5节点删除导致通信变化
五、输入输出样例
程序界面
控制台及各节点控制入口
发送信息时路由表的变化
六、遇到的问题及解决办法
① AODV协议中如何解决路由广播消息的循环发生问题?
答:AODV协议中为了解决广播消息的循环问题需要需要采用时间控制策略机制来实现。以时间作为目标序列号来解决环路的发生。其主要思想是对于消息项序列的重新设计,添加时间,避免因为节点休眠重启或者路由超时删除时,路由消息项序号重新计数引发的重复的广播过期路由消息项的问题。按照路由的更新的原则,选择消息序列号的最新消息项,从根本上解决了路由消息循环传输的问题,确保在任何时刻网络中都不会存在路由消息循环。这样,在网络结构发生改变时,有效的避免了路由广播消息的循环发生问题。
② AODV 协议如何进行路由发现和路由建立?
答:在节点需要对某一位置的目的节点进行通信而没有可用路由时启动路由发现过程,在网络中广播PREQ消息。
AODV优点:AODV在中小规模Ad Hoc网络优势较为明显,路由发现和维护过程都是按需的,节点只存储需要的路由,减少了内存的需求和不必要的复制。
AODV缺点:路由表仅维护一条到指定目的节点的路由,当某条链路失效时,信源节点必须要重新发起路由发现过程,这在网络拓扑快速变化的场景下,尤其重要。
总结:目前,随着物联网的发展,AODV无论在民用(车载自组织网络等)、军用都有很大的使用范围,而AODV的拥塞控制、能耗控制、时延控制等仍是研究的热点。