网络协议

关注公众号 jb51net

关闭
网络 > 网络协议 >

自组织网络Ad Hoc之AODV协议详解

隐秀_

一、AODV 概念

AODV 是按需路由协议,当一个节点需要给网络中的其他节点传送信息时,如果没有到达目标节点的路由,则必须先以多播的形式发出 RREQ 报文,邻居节点收到 RREQ,首先判断目标节点是否是自己,如果是,则向发起节点发送 RREP,如果不是,首先在路由表中查找是否有到达目标节点的路由,如果有,则向源节点单播 RREP,否则继续转发 RREQ 进行查找。

在网络资源充分的情况下,AODV 协议可以通过定期广播 HELLO 报文来维护路由,一旦发现某一个链路断开,节点就发送 ERROR 报文通知那些因为链路断开而不可到达的节点,删除相应的记录或者对已经存在的路由修复。

AODV 特点如下:

二、AODV 功能

AODV 是在多个移动节点中建立和维护一个动态的、自启动的、多跳路由的专属网络,使得移动节点能够快速获得通向新的目的节点的路由,并且节点仅需要维护通向邻居节点的路由,更远节点的路由信息则不需要维护。

其路由表字段包括:

路由表特征如下:

三、AODV 术语

四、AODV 消息格式

AODV 有三种基本的协议报文类型:RREQ(路由请求)报文、RREP(路由应答)报文和 RRER(路由错误)报文。

4.1 RREQ 路由请求报文

在两个节点之间的路由有效,通信正常的情况下,AODV 路由协议不起任何作用,只有当源节点 S 需要向目的节点 D 发送数据包,但是又没有 D 节点的路由入口时,才会发起路由请求(RREQ)。

当 RREQ 在网络中传播时,中间节点会更新各自到源节点的路由,称为反向路由,RREQ 请求报文中包含源节点以前记录的到目的节点的序列号,但是此序列号可能不是最新的,中间节点如果有到目的节点的路由时,只有该节点记录的目的节点的序列号比 RREQ 中目的节点序列号更大,才认为这条路由是有效的。

在这里插入图片描述

报文格式说明:

在这里插入图片描述

4.2 RREP 路由应答报文

当 RREQ 最终到达目的节点时,目的节点通过向该反向路由(RREQ 传播路线)发送 RREP 应答报文,建立通向目的节点的前向路由。

只有以下的情况节点才会产生 RREP 报文:

  1. 该节点本身就是目的节点。

  2. 该节点为中间节点,但是它有通向目的节点的活跃路径。

当 RREP 传播到源节点时,中间节点根据该 RREP 更新他们各自指向目的节点的路由信息。节点只对第一次收到的 RREQ 发送 RREP 应答报文。

在这里插入图片描述

报文格式说明:

在这里插入图片描述

4.3 RERR 路由错误报文

在这里插入图片描述

报文格式说明:

五、AODV 工作过程

5.1 AODV 工作流程图

在这里插入图片描述

在这里插入图片描述

5.2 路由发现过程

5.3 路由发现算法

源节点:应用层有数据发送请求,并且指向目的节点的路由有效,直接通过该路由发送数据包,如果没有到达目的节点的有效路径,则产生 RREQ 广播帧,RREQ 的序列号、ID 字段加1,将源节点的 IP,序列号、目的节点的 IP、序列号等信息添加到 RREQ 中,广播至网络。

中间节点:如果中间节点路由表中记录的到目的节点的路由有效,并且记录的目的节点的序列号大于或者等于 RREQ 中的目的节点序列号,则该中间节点可以产生路由应答帧。如果该中间节点不产生应答帧,更改RREQ 中的目的节点序列号至当前最大,跳数字段加1,然后转发。

目的节点:目的节点的序列号加1,产生 RREP 应答帧(包括源节点 IP、目的节点 IP 和更新后的序列号),单播发送至源节点。

在这里插入图片描述

5.4 路由维护算法

Hello 消息:Hello 消息帧就是 TTL=1时的 REEP 帧,Hello 消息帧用于检测活跃路径上相邻节点的链接状况。只有当某节点位于某活跃路径之上时,他才能发送 Hello 消息帧。活跃路径节点以 HELLO_INTERVAL 为周期发送 Hello 消息。

5.5 路由信息新旧判断

AODV 依赖网络中每个节点维护自身的序列号,源节点在广播路由请求帧 RREQ 之前要更新自己的序列号,即将序列号加1,目的节点在产生 RREP 应答帧之前也要将自身的序列号加1,每个节点在对各自的序列号加1的时候,是将其视为无符号数进行的。

通过比较来自目的节点路由控制帧中的序列号 SN1 和本节点维护的目的节点的序列号 SN2,就可以确定本链路的新旧程度。如果 SN2-SN1<0(有符号数相减),说明路由表中的维护信息已过时,应将路由信息更新至路由控制帧最新的路由信息。

六、拥塞控制

源节点在发送 RREQ 后,在规定的时间内没有收到来自目的节点的RREP时,他可以选择再次发送 RREQ 路由请求帧。

在尝试了 RREQ_RETRIES 次之后,如果依旧收不到 RREP,则在路由表中标记该目的节点不可达,通知应用层。每次在重新发送 RREQ 请求帧时,等待 RREP 应答帧的时间要在原来时间的基础上乘以2,避免拥塞。

到此这篇关于自组织网络Ad Hoc之AODV协议详解的文章就介绍到这了,更多相关AODV协议内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!