AODV路由协议详解
移动Ad Hoc网络概述
由于移动Ad Hoc网络的以上特点,传统的路由协议如RIP(Routing Information Protocol,路由信息协议)和OSPF(Open Shortest Path First,开放式最短路径优先协议)无法很好的在移动Ad Hoc网络上运行。目前常见的应用于移动Ad Hoc网络的路由 Routing)、DSR(Dynamic Source Routing)、AODV(Ad Hoc On-Demand Distance Vector)和ZRP(Zone Routing Protocol)等。本文将会使用AODV路由协议作为移动Ad Hoc网络的路由协议。
AODV协议概述
AODV协议消息格式
这一节将会介绍AODV路由协议所定义的三种消息–RREQ、RREP、REER的数据格式。HELLO消息为设定了特殊值的RREP消息,会在RREP的介绍中进行描述。最后还会对另外一种特殊的消息RREP-ACK做一个简要描述。
RREQ消息格式
当节点需要与某个目的节点传输数据,但没有目的节点的合法路由,可以向全网广播RREQ消息,向网络寻求到目的节点的路由,并且在约定的时间内等待携带有到目的节点路由信息的RREP消息回来,若规定时间内无收到RREP回复,则重发RREQ消息,直到达到最大发送次数。其他节点根据收到RREQ消息的接口建立从当前节点到源节点的反向路由。表1是RREQ的消息格式介绍,介绍了每个字段的名称与比特数。表2是对RREQ各个字段的解释。



RREP消息格式
RREP消息用于单播回复RREQ消息,目的是为了告知发送RREQ消息的源节点到目的节点的路由。通过RREP消息可以建立从收到RREP消息的节点到RREP消息中的目的节点的正向路由,用于以后发送数据到目的节点。表3介绍了RREP的消息格式,给出了每个字段的位置与比特数。表4是对RREP部分字段的解释。


Hello消息用于活跃节点向所有邻近节点广播自身的存在,当一个节点处于正在使用的路由中时,需要定时向邻近节点广播Hello消息,若邻近节点收到Hello消息,则更新路由表中对应节点的生存时间。
Hello消息是一种特殊的RREP消息,其特殊之处在于为某些字段设置了特殊值,描述如表5

RERR消息格式
当链路发生故障导致一个或者多个目的节点不可达时,RERR消息就会被发送,设计RERR消息是为了能通知网络中其他节点哪些目的节点因为故障导致不可访问,表6是RERR消息的格式,表7是对RERR消息中部分字段的解释。


RREP-ACK消息格式

AODV协议过程
路由表和序列号
发送RREQ消息
RREQ消息的构建过程具体如下:RREQ消息中的目的IP地址字段为目的节点IP地址,如果源节点路由表中有目的节点的序列号(但已过期),则填进序列号字段,如果没有,则消息中的U标志位设为1。每个节点维护自己的唯一的RREQ ID,每次发送RREQ消息,则给RREQ ID加一,然后再填入RREQ中的字段。跳数字段设为0。

二进制指数退避方法设置等待时间的过程如下,第一次等待时间为NET_TRAVERSAL_TIME毫秒,第二次为NET_TRAVERSAL_TIME2毫秒,第三次为NET_TRAVERSAL_TIME2*2毫秒,每一次的等待时间都是上一次的两倍,这是为了避免网络堵塞。
RREQ消息使用广播发送,所以可能会造成网络中存在大量的RREQ消息。为了控制RREQ消息的传输范围,我们可以修改IP头部中的TTL字段,避免每一次RREQ消息都被网络中所有节点接收。举个例子,一开始TTL设置为1,则RREQ消息只能发送到源节点的邻近节点,如果目的节点不在这些邻近节点中,则再次发送RREQ消息,此时TTL设置为2,则收到RREQ消息的节点就会更多,当最终源节点收到RREP回复时,可能有的节点还没有收到过源节点发送的RREQ消息,这样就有效的避免了大量的RREQ消息在网络中传播。
处理和转发RREQ消息
产生RREP消息过程
接收和转发RREP消息过程

Hello消息发送与处理过程


发送和处理RERR消息
小结
主要对AODV路由协议进行了详细的介绍,在对AODV协议做了一个总体概述后,详细的介绍了AODV的控制消息RREQ、RREP、RERR、RREP-ACK和Hello的消息格式和用途,并对部分消息字段做出了解释,接着分小结介绍了每一种控制消息的发送和处理过程。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220765.html原文链接:https://javaforall.net
