AODV工作过程总述:
⚠️当源节点S需要和目的节点D通信时,若在S的路由表中已存在了S-D的路由,则直接传输信息,此时AODV不会进行任何操作。若路由表中没有S-D的有效路由,AODV会发起路由发现过程,通过广播RREQ(RouteRequest)信息来查找相应路由。当这个RREQ到达目的节点(或找到一个拥有足够新的到D的路由的目的节点)时,路由就确定了。这里的足够新时是通过序列号来判断的。
⚠️目的节点(中间节点)通过原路返回一个RREP(RouteReply)消息来向源节点确定路由的可用性。在维护路由表的过程中,当该路由不再被使用时,节点就会从路由表中删除相应的项。
⚠️节点会监视一个活动路由(有限跳数,可用于数据转发的路由表)中下一跳节点的状态。当发现有链路断开时,节点会使用RERR(RouteError)消息通知上游节点。上游的节点会使用该RERR分组拷贝通知更上游的节点。RERR消息中指明了由于断链而导致无法到达的目的节点。每个节点都保留了一个“前驱列表”来帮助完成错误报告的功能。该列表保存了把自己作为到当前不可达节点的下一跳的相邻节点
⚠️序列号可以防止路由环路,并且当链路发生断裂时,通过增加序列号和度量值(跳数)来使路由表项无效。
运行方式
1.路由发现
🌟AODV是典型的按需驱动路由协议,仅在节点需要通信时发起路由发现过程。移动节点间的局部连接性可以通过以下多种方式获得(如局部广播hello消息),算法的主要目的是在需要时广播路由发现分组。建立路由后进行拓扑维护,向需要连接信息的邻居节点散播拓扑变化信息。AODV依赖中间节点动态建立路由表来进行分组的传送。为了维护节点间最新的路由,AODV借鉴了DSDV中序列号的思想,可以有效的防止环路的产生。
🌟当一个节点想和另一个节点通信,而他的路由表中又没有相应的路由信息时,它就会利用RREQ发起路由发现过程。每个节点维护两个独立的计数器:节点序列号计数器和广播标识。
🌟RREQ分组中包含了两个序列号(源节点序列号和源节点知道的最新的目的节点序列号)源节点序列号用于维持到源的反向路由特性,目的节点序列号表明了到目的节点的最新路由。
2.反向路由的建立
🌟当RREQ分组从一个源节点转发到不同的目的地时,沿途所经过的节点都要建立反向路由。节点通过记录收到的第一个RREQ分组的邻居地址来建立反向路由,这些反向路由会维持一段时间(该时间应足够RREQ分组在网内转发以及产生的RREP分组返回源节点)。当RREQ分组到达了目的节点,目的节点就会产生RREP分组,并利用建立的反向路由来转发RREP。
3.正向路由的建立
🌟RREQ分组最终将到达一个节点,该节点很可能就是目的节点,或者这个节点有到达目的节点的路由。若这个中间节点有到达目的节点的路由项,他就会比较路由项里的目的序列号和RREQ分组里的目的序列号的大小来判断自己已有的路由是否是比较新的。如果RREQ分组里的目的序列号比路由项中的序列号打,则这个中间节点不能使用已有的路由来响应这个RREQ分组,只能是继续广播这个RREQ分组。中间节点只有在路由项中的目的