一:详细解释
AODV(Ad hoc On-demand Distance Vector Routing)是一种按需路由协议。当一个节点需要给网络中的其他节点传送信息时,如果没有到达目标节点的路由,则必须先以多播的形式发出RREQ(路由请求)报文。RREQ报文中记录着发起节点和目标节点的网络层地址,邻近节点收到RREQ,首先判断目标节点是否为自己。如果是,则向发起节点发送RREP(路由回应);如果不是,则首先在路由表中查找是否有到达目标节点的路由,如果有,则向源节点单播RREP,否则继续转发RREQ进行查找。
二:概述
1:AODV是为快速移动自组网(MANET)设计的数据包路由协议,是网络层协议
2:较适用于有大量节点的无线自主网络
3:按需路由协议,只有当到达某目的节点的路由不存在时,才会激起该协议发起路由请求
4:使用节点序列号机制避免环路产生
5:传输层使用的是UDP协议
6:网络各节点使用的是IP地址统一编制
7:每一个节点维护一个包含到达目的节点路由信息的路由表(路由表字段包含:目的节点IP地址、目的节点序列号、目的节点序列号的有效标志位、下一条节点IP地址、本节点到达目的节点的跳数、前驱节点列表、生存时间、网络层接口、其他的状态和路由标志位等)。
8:路由表每项只记录下一跳路由信息,而不是整条路由信息。
9:源节点和目的节点都维护各自的序列号(源节点发送路由请求RREQ/目的节点返回路由应答RREP,都要更新各自序列号。序列号是用来表示路由信息的新旧程度的。)
三:AODV路由帧格式:
1:RREQ--路由请求帧
2:RREP--路由应答帧
3:RERR--路由错误帧
4:HELLO---活跃路由链路检测帧
四:路由帧格式详解
1:RREQ路由请求帧
在两个节点之间的路由有效、通信正常的情况下,AODV路由协议不起作用。只有当源节点S需要向目的节点D发送数据包,但又没有D节点的路由入口时,才会发起路由请求,即发送路由广播帧RREQ。当RREQ在网络中传播时,中间节点会更新各自到源节点的路由,我们称之为反向路由。RREQ请求帧中包含源节点以前记录的到目的节点的序列号,但此序列号可能不是最新(最大)的。中间节点如果有到目的节点的路由时,只有该节点记录的目的节点序列号比RREQ中的目的节点序列号更大时,才认为这条路由是有效的。(目的节点序列号>RREQ,更新。)
2:RREP路由应答帧
当RREQ最终到达目的节点时,目的节点通过向该反向路由(即该RREQ传播路线)发送RREP应答帧,从而在该条路径的各个节点建立通向目的节点的前向路由。
只有在以下情况下才会产生RREP:该节点本身就是目的节点;该节点是中间节点,但是他有通向目的节点的活跃路径。
当RREP传播到源节点时,中间节点根据该RREP更新他们各自指向目的节点的路由信息。节点只对第一次收到的RREQ发送RREP应答帧。
3:RERR路由错误帧
发生以下情况,则广播RERR路由错误帧:一个节点检测到与一个邻居节点的链路断裂(即该邻居节点不可达);节点收到一个数据包,而该节点路由表没有志向数据包制定的目的地址的有效路由,并且该路由并非处于修复状态;节点收到来自邻居节点的RERR路由错误信息帧,该帧可能指示多个目的节点不可达。
RERR信息的发送方式:单播(将RERR信息单播发送给一个接收者)、重复单播(将RERR信息分别的单播发送给多个接收者)、广播(将RERR信息同时发送给多个接收者,使用IP地址255.255.255.255进行广播,TTL=1)。
五:路由发现和维护
1:路由发现过程
广播RREQ路由请求帧,中间节点更新各自到源节点的路由表,如果收到RREQ的节点不是目的节点,并且没有到达目的节点的更新的有效路由,则转发该RREQ,中间节点维护指向路由源节点的反向路由。目的节点或存在到目的节点有效路由的中间节点产生RREP路由应答帧,RREP通过之前建立的反向节点单播至源节点,源节点收到RREP应答帧,至此源节点可以向目的节点发送数据包。
2:路由发现算法
源节点:应用层有数据发送请求,并且指向目的节点的路由有效,直接通过该路由发送数据包,如果没有到达目的节点的有效路径,则产生RREQ广播帧,RREQ的序列号、ID字段加1,将源节点的IP,序列号、目的节点的IP、序列号等信息添加到RREQ中,广播至网络。
中间节点:如果中间节点路由表中记录的到目的节点的路由有效,并且记录的目的节点的序列号大于或者等于RREQ中的目的节点序列号,则该中间节点可以产生路由应答帧。如果该中间节点不产生应答帧,更改RREQ中的目的节点序列号至当前最大,跳数字段加1,然后转发。
目的节点:目的节点的序列号加1,产生RREP应答帧(包括源节点IP、目的节点IP和更新后的序列号),单播发送至源节点。
这个图我有些疑问,如果D已经知道了目的地F的路径,那么D向源节点A通知了路径,那么F还要不要通知呢?
六:路由维护
Hello消息:Hello消息帧就是TTL=1时的REEP帧,Hello消息帧用于检测活跃路径上相邻节点的链接状况。只有当某节点位于某活跃路径之上时,他才能发送Hello消息帧。活跃路径节点以HELLO_INTERVAL为周期发送Hello消息。在DELETE_PERIOD的时间内没有收到来自邻居节点的Hello消息,则认为该链路失效;发起一次指向该邻居节点的局部修复,路由修复超时以后,路有错误信息RERR向源节点和目的节点发送,RERR在传播过程中,各中间节点删除该失效路径上相应的路由信息。
七:路由信息新旧判断
AODV依赖网络中每个节点维护自身的序列号,源节点在广播路由请求帧RREQ之前要更新自己的序列号,即将序列号加1,目的节点在产生RREP应答帧之前也要将自身的序列号加1,每个节点在对各自的序列号加1的时候,是将其视为无符号数进行的。通过比较来自目的节点路由控制帧中的序列号SN1和本节点维护的目的节点的序列号SN2,就可以确定本链路的新旧程度。如果SN2-SN1<0(有符号数相减),说明路由表中的维护信息已过时,应将路由信息更新至路由控制帧最新的路由信息。
八:拥塞控制
源节点在发送RREQ后,在规定的时间内没有收到来自目的节点的RREP时,他可以选择再次发送RREQ路由请求帧。在尝试了RREQ_RETRIES次之后,如果依旧收不到RREP,则在路由表中标记该目的节点不可达,并通知应用层。每次在重新发送RREQ请求帧时,等待RREP应答帧的时间要在原来时间的基础上乘以2,避免拥塞。
---------------------
转载,原文:https://blog.csdn.net/u013300635/article/details/82842332