AODV协议详解
- 格式:docx
- 大小:17.26 KB
- 文档页数:4
aodv路由协议工作过程AODV(Ad hoc On-Demand Distance Vector)是一种用于无线自组织网络(ad hoc network)的路由协议。
它是一种基于距离向量的路由算法,可以在网络中动态地选择最佳路径来传输数据包。
本文将详细介绍AODV路由协议的工作过程。
AODV路由协议的工作过程可以分为四个阶段:路由发现阶段、路由维护阶段、路由错误处理阶段和路由释放阶段。
在路由发现阶段,当一个节点需要发送数据包到目标节点时,它首先会向周围节点发送路由请求(Route Request)消息。
这个消息包含了目标节点的地址和源节点的地址。
当一个节点收到路由请求消息时,它会检查自己的路由表,如果没有关于目标节点的路由信息,它会将该消息广播给它的邻居节点。
这样,路由请求消息会不断地传播,直到达到目标节点或者遇到已知路由的节点。
在路由维护阶段,当目标节点或者有关的中间节点收到路由请求消息时,它们会生成路由回复(Route Reply)消息,并将它发送回源节点。
路由回复消息中包含了从目标节点到源节点的最佳路径信息。
当源节点收到路由回复消息后,它将更新自己的路由表,并开始向目标节点发送数据包。
在路由错误处理阶段,如果某个节点无法到达目标节点或者中间节点,它会发送路由错误(Route Error)消息。
这个消息会被广播给所有与这个节点有关的节点。
当一个节点收到路由错误消息后,它会将与错误相关的路由从自己的路由表中删除,并向其他节点发送路由错误消息。
这样,整个网络中的节点都会知道该路径已经不可用。
在路由释放阶段,当一个节点不再需要与目标节点通信时,它可以发送路由释放(Route Release)消息。
这个消息会被广播给与这个节点有关的所有节点,以通知它们可以删除与目标节点相关的路由信息。
AODV路由协议的工作过程充分利用了网络中节点之间的相互通信来动态地选择最佳路径。
它能够在网络拓扑发生变化时及时更新路由信息,保证数据包能够成功传输。
内容目录1导言 (3)2概述 (4)3AODV术语 (5)4适用性综述 (7)5消息格式 (8)6AODV操作 (13)管理序列号 (13)路由表项和先驱列表 (15)生成路由请求 (16)控制路由请求消息的传播 (17)处理和转发路由请求 (18)生成路由回复 (20)接受和转发路由回复 (22)对单向连接的操作 (23)Hello消息 (24)维护本地连接 (25)路由错误,路由超时和路由删除 (26)本地修复 (28)重启后的操作 (30)接口 (31)7AODV和集群网络 (31)8AODV在其他网络中的应用 (32)9扩展 (34)10参数配置 (35)网络组诺基亚研发中心 C. Perkins RFC:3561加州大学圣芭芭拉分校 E. Belding-Royer类别:试验版辛辛那提大学 S. Das2003年7月Ad hoc网络中基于距离数组的按需(AODV)路由协议本备忘状态本备忘定义的只是一个试验性质的网络社区协议而已,它不是任何一种类型的网络标准。
我们非常需要各种讨论和建议用于改进这个协议。
本备忘录的分发不受任何限制。
版权声明复制权属于整个因特网社区,保留所有权利。
摘要本协议用于特定网络中的可移动节点。
它能在动态变化的点对点网络中确定一条到目的地的路由,并且具有接入速度快,计算量小,内存占用低,网络负荷轻等特点。
它采用目的序列号来确保在任何时候都不会出现回环(甚至在路由控制信息出现异常的时候也是如此),避免了传统的距离数组协议中会出现的很多问题(比如无穷计数问题)。
目录1导言AODV算法旨在多个移动节点中建立和维护一个动态的,自启动的,多跳路由的专属网络。
AODV使得移动节点能快速获得通向新的目的节点的路由,并且节点仅需要维护通向它信号所及范围内的节点的路由,更远的节点的路由信息则不需要维护。
网络中连接的断开和异动会使得网络拓扑结构发生变化,AODV使得移动节点能适时对这种变化做出响应。
AdHoc网络中AODV路由协议的实现及数据业务处理中期报告中期报告:AdHoc网络中AODV路由协议的实现及数据业务处理1. 项目背景与意义随着移动终端设备的普及和无线通信技术的发展,AdHoc网络成为了一种越来越重要的通信方式。
AdHoc网络是一种无需基础设施的网络,由移动终端设备自组成。
相比传统有线网络和基础设施无线网络,AdHoc 网络能够更加灵活地应对复杂环境,并能够更加迅速地部署实施。
在AdHoc网络中,路由协议是起着至关重要的作用。
AdHoc网络由于网络拓扑变化频繁,节点移动、丢包等问题更加严重,因此泛洪等传统路由协议在AdHoc网络中显得不太适用。
AODV(Ad-Hoc On Demand Distance Vector Routing Protocol)是一种基于距离向量的路由协议,在AdHoc网络中得到了广泛应用。
AODV路由协议是一种基于需求的路由协议,当源节点需要向目标节点发送数据时,它会向周边节点发出寻找路由的请求,然后根据返回的路由信息建立路由并发送数据。
AODV路由协议具有快速、稳定、低开销等优点,因此被广泛应用于AdHoc网络中。
本项目旨在通过对AODV路由协议的实现,探索AdHoc网络中路由协议的应用。
本项目将实现AODV路由协议,并在此基础上实现AdHoc网络中常见的数据业务处理,包括数据的发送、接收、存储等。
通过本项目的实现,将加深对AdHoc网络的理解,为AdHoc网络的应用和发展做出贡献。
2. 工作进展本项目已完成了部分工作,包括:2.1 AODV路由协议的实现本项目利用C++语言,通过对AODV协议的研究和分析,实现了AODV路由协议。
该实现包括AODV的路由发现、路由维护、路由更新等功能,能够满足AdHoc网络中节点之间通信的路由需求。
在实现中,我们充分考虑了节点移动、丢包等问题,并进行了有效地处理和优化。
2.2 数据业务处理的设计与实现在AODV路由协议的基础上,本项目还开展了数据业务处理的设计和实现。
湘潭大学学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权湘潭大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日摘要无线Mesh网络(Wireless Mesh Network ,WMNs)具有快速部署和自组织等特点,这使得它非常适应于临时的按需网络部署场景。
WMNs对于热点地区的基础设施网、以及能提供低成本回程的传感器网和偏远农村蜂窝网基站,都是一种具有很大吸引力的技术。
WMNs的自组织性、自愈性、有效的移动用户管理和跟踪机制,高容量和高速率的特性,迫切需要高性能的路由算法。
近年来,路由算法成为WMNs发展中的一个研究热点。
WMNs从移动Ad Hoc 网络中借鉴了许多路由选择方法作为路由的解决方案,但是这些方法都不太理想或者没有达到性能的最优化,且没有利用到WMNs自身的特点。
本文提出了一个改进的分层AODV路由协议(IH-ADOV),它表现出了更好的可扩展性和网络性能,当一条路由丢失时,它可使寻找替代路由的路由开销得到降低。
此外,在IH-AODV中,我们还提出了一种新技术,即最新链路发现机制。
它旨在对加入簇的节点进行快速路由发现,能够提高路由发现的速度和效率。
对于路由维护,这种技术也非常有用。
在新算法中,本论文定义静态节点为Way Point(WP)节点,其他节点称为Cluster Member(CM)簇成员节点。
AODV协议详解1 AODV 报文格式AODV 有三种基本的协议报文类型:RREQ 报文、RREP 报文和RRER 报文。
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 报文的“跳计数”值小于表项相对应的值;通过更新或创建,产生一个新的前向路由。
aodv反向路由的建立过程
AODV(Ad hoc On-Demand Distance Vector)是一种反应式路
由协议,它在需要进行数据传输时才会建立路由。
AODV的反向路由建立过程如下:
1. 数据源节点发现自身没有到达目标节点的有效路由。
在数据源节点找不到到达目标节点的路由时,将广播RREQ(Route REQuest)请求消息。
2. 所有接收到RREQ消息的节点会判断自身是否是目标节点。
如果是目标节点,该节点将发起一个RREP(Route REPly)
回复消息,并携带着自己到数据源节点的最短路径信息。
3. 如果接收到RREQ消息的节点不是目标节点,则会检查自
己的路由缓存表(Route Cache)中是否有到达目标节点的有
效路由。
如果有,该节点将返回一个RREP消息给数据源节点,回复的路径信息是从该节点到目标节点的最短路径。
4. 如果接收到RREQ消息的节点既不是目标节点,也没有到
达目标节点的有效路由,则会继续转发RREQ消息。
5. 在转发RREQ消息时,节点会维护一个反向路由表(Reverse Path Table),记录从数据源节点到达自身的下一跳
节点。
6. 如果一个节点接收到重复的RREQ消息,它会舍弃该消息
而不再转发。
7. 当RREP消息到达数据源节点后,数据源节点将会更新自己的路由缓存表,记录到达目标节点的最短路径信息。
8. 如果某个节点接收到RREP消息并发现它不在该路径上,则会更新自己的反向路由表。
通过上述反向路由建立过程,AODV协议可以在无线自组织网络中快速建立起有效的节点间路径,实现数据的传输。
AODV协议详解AODV(Ad-hoc On-Demand Distance Vector)是一种用于自组织无线网络的路由协议。
它是基于距离矢量路由算法的一种改进,并在无线传感器网络(WSN)和移动自组网(MANET)中广泛应用。
AODV的主要目标是在网络中实现有效的路由,同时减少网络资源的消耗。
AODV协议通过以下方式工作。
当一个节点需要向目标节点发送数据时,它首先广播一个路由请求(RREQ)消息以查询目标节点的路由信息。
接收到这个消息的节点会更新路由表,并向源节点发送一个路由回复(RREP)消息,该消息包含到目标节点的路径信息。
在此过程中,源节点可以选择最佳的路径,并将其添加到路由表中。
当源节点收到RREP消息后,它就可以开始向目标节点发送数据了。
在途中,如果网络拓扑发生变化(例如节点移动或节点失效),AODV协议会更新路由表以反映这些变化。
在节点间的通信过程中,AODV协议使用一种称为序列号的技术来区分新的路由信息和旧的路由信息,并避免出现循环路径。
每次路由更新时,序列号都会递增,并在路由表中进行记录。
另外,AODV协议还支持源路由。
源路由是指由源节点指定的完整路由路径,数据包将按照此路径传输。
这意味着源节点可以控制数据包的传输路径,可以避免路径和路由发现的开销,并减少网络资源的消耗。
但是,源路由在网络中可能会面临节点失效、链路中断和网络拓扑变化等问题,因此需要进行有效的处理。
在AODV协议中,节点还可以进行路由维护。
路由维护是指节点在路由表中更新、维护和删除路由信息以反映网络状态的变化。
AODV协议使用一些机制来处理链路中断、节点失效和网络分割等问题。
当节点发现路由不可用时,它会向源节点发送一个路由错误(RERR)消息来通知源节点,并更新自身的路由表。
总结起来,AODV协议是一种用于自组织无线网络的强大路由协议。
它具有快速路由发现、低资源消耗和多路径支持等特点,可以在无线传感器网络和移动自组网等环境中提供高效的数据传输。
AODV相关路由协议详情学习AODV相关路由协议学习1:AODV路由协议⼯作原理AODV路由协议是⼀种经典的按需路由协议,它只在两个节点需要进⾏通信且源节点没有到达⽬的节点的路由时,才会进⾏路由发现过程。
AODV采⽤的是⼴播式路由发现机制,当源节点想与另⼀节点进⾏通信时,源节点会⾸先查询⾃⼰的路由表中是否存在有到达⽬的节点的路由有效信息。
如果包含有⽬的节点的有效信息,则源节点就会将数据包传送到⽬的节点的下⼀跳节点;如果缺失⽬的节点的有效的信息,则源节点会启动路径请求程序,同时⼴播RREQ控制包。
⽽下⼀跳节点在接收到RREQ报⽂时,如果该节点是⽬的节点,⼜或者该节点路由表中存放有到达⽬的节点的可⾏路径信息,则会向源节点回复路由响应报⽂CRREP。
否则就记录相关信息,⽤于建⽴⼀个反向路径,让⽬的节点的RREP遵循此路径返回源节点,同时将RREQ报⽂中的跳数字段值加1,并向该节点的邻居节点转发RREQ报⽂。
这样经过若⼲中间节点转发最后到达⽬的节点,确认路由建⽴。
路由表项建⽴以后,路由中的每个节点都要执⾏路由维持和管理路由表的任务。
如果由于中间节点的移动⽽导致路由失效,则检测到路由断链的节点就会向上游节点发送路由出错报⽂RRER,⽽收到出错报⽂RRER的节点则会直接发出RREQ来进⾏路径请求,如果能在规定好的时间找到⽬的节点的路径,则表⽰路由成功1.2存在的问题传统的AODV采⽤基本的路由发现算法来建⽴从源节点到⽬的节点的路由时,路由选择是选择最短路径路由,即选择最⼩跳数的路由,这样就忽略了每两点之间的传输能⼒,从⽽导致产⽣整条链路吞吐量低、路由不稳定、线路拥塞、延迟甚⾄数据丢失等严重问题。
2最⼤路由速率的AODV协议的提出【基于最⼤路由速率的AODV协议优化研究与实现---罗泽、吴谨绎、吴舒辞】2.1基本思想针对传统AODV路由协存在的问题,提出了⼀种基于最⼤传输速率(路由速率=路由速率之和/路由跳数)的改进⽅案,其基本思想是:⽤户确定⼀个期望速率,源节点在进⾏路由发现时⽐较收到的各条路由的实测速率,选择⼀条速率最⼤的路由作为路由,在源节点使⽤当前路由发送数据的过程中,源节点每隔⼀段时间发出RREQ报⽂,以便查找到可能存在的更好的路由,如果发现⼀条速率更⾼的路由且该路由速率⼤于期望速率,则执⾏路由切换,改⽤新路由。
AODV协议详解
1 AODV 报文格式
AODV 有三种基本的协议报文类型:RREQ 报文、RREP 报文和RRER 报文。
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 报文。
2 协议从接收到一个分组开始的基本流程
AODV 路由协议主要包括以下几个组件:
1、协议实体
2、路由表
3、定时器
(1)广播定时器
(2)周期Hello 报文广播定时器
(3)用于邻居管理的定时器
(4)用于路由缓存的定时器
(5)用于本地修复的定时器
(6)缓存广播ID 的定时器
4、日志记录器
5、路由缓存队列
当协议接收到一个分组,即recv(Packet*, Handler*)函数被调用,函数根据分组类型调用不同的处理函数进行处理。
1、如果是协议分组,则将分组的ttl 值减1,并调用recvAODV(Packet*)函数进行处理。
recvAODV 函数再根据分组的不同类型来调用不同的函数进行处理。
(1)如果接收到的是路由请求分组,则调用recvRequest(Packet*)函数进行处理。
如果该分组由节点自身产生或已经接收过的,会被节点丢弃,并结束处理。
否则,节点将缓存该分组的序列号,并将该分组发送来的路径添加到反向路由中,转发相应分组。
然后,节点根据该分组的目的地址进行判断并调用不同函数进行处理。
如果节点自身即为目的节点,则调用sendReply(nsaddr_t,
u_int32_t,nsaddr_t, u_int32_t, u_int32_t, double)函数进行响应。
如果节点不是目的节点,但知道通往目的节点的路由,则调用sendReply 函数进行响应,并在源和目的前驱列表中分别插入到源和目的的下一跳节点。
否则,不能直接响应该请求,
将跳数加1,并调用forward(aodv_rt_entry*, Packet*, double)函数转发该分组。
在sendReply 函数中,节点首先查找到达目的节点(即发送路由请求分组
的节点)的路由,创建并填充分组,然后调用
Scheduler::instance().schedule()函数来发送该分组。
(2)如果接收到的是路由响应分组,则调用recvReply(Packet*)函数进行处理。
节点首先查询前往分组目的节点的路由,如果不存在则新增一条路由项。
然后,节点更新到该目的节点的路由项,并发送所有相关分组。
如果节点为目的节点则更新路由发现延迟并发送所有相关的分组。
如果节点不是目的节点,但知道通往目的节点的路由,则将跳数加1,调用forward 函数转发该分组,并修改响应的前驱列表。
如果节点不是目的节点,也不知道通往目的节点的路由,则丢弃该分组。
(3)如果接收到的是路由错误分组,则调用recvError(Packet*)函数进行处理。
节点首先清除所有受到影响的路由项,丢弃所有受影响的分组。
然后,如果前驱节点中存在会受该路由错误影响的分组,则调用sendError(Packet*, bool)函数转发该分组。
sendError 函数创建并填充分组,然后调用
Scheduler::instance().schedule()函数来发送该分组。
(4)如果接收到的是Hello 消息分组,则调用recvHello(Packet*)函数进行处理。
节点会将该邻居的信息添加到邻居列表中(或更新该邻居的信息)。
2、如果是数据分组,则节点丢弃已经发送过或者ttl 为0 的分组,并结束处理。
如果分组是由上层协议产生的,则节点添加IP 报头。
随后,节点根据目的路由进行不同处理。
(1)如果目的节点路由未知,则调用rt_resolve(Packet*)函数进行路由解析和转发。
如果目的节点路由在路由表中存在,则直接调用forward 函数进行转发。
如果分组是由节点自身产生的,则将分组保存到缓冲队列中,并调用sendRequest(nsaddr_t)函数查询目的路由。
如果目的路由已知,但正在进行本地修复,则将分组保存到缓冲队列中。
否则,丢弃该分组,并调用sendError 函数报错。
(2)如果目的节点路由已知,则调用forward 进行转发。
节点丢弃ttl 为0 的分组,并根据分组类型决定下一步操作。
如果接收到的是数据分组,且自身为目的节点,则通过调用PortClassifier 对象的recv(Packet*, Handle*)函数将分组交递给高层协议,并结束处理。
否则,节点设置分组属性,并调用Scheduler::instance().schedule (Handler*, Event*, double)函数来发送分组。
其中,Handler 为基类中的属性target_(会根据脚本中的设置指向相应的协议实体), Event 为要发送的分组即可。
以上就是在节点收到分组后的一个处理过程。
以下是各个定时器所做的工作。
1、广播定时器BroadcastTimer 在到时后调用id_purge()函数删除广播项中已超时的项目,并通过调用Scheduler:: instance().schedule()函数来设置下次被调用的时间(Handler 为this 指针,Event 为类属性intr)。
2、周期Hello 报文广播定时器HelloTimer 在到时后调用sendHello()函数向邻居创建并发送Hello 消息,并调用schedule()函数来设置下次被调用的时间。
3、邻居管理定时器NeighborTimer 在到时后调用nb_purge()函数来清除邻居列表中已超时的邻居项,并调用schedule()来设置下次被调用的时间。
nb_purge 会调用nt_delete(nsaddr_t) 函数来清除超时的邻居项,其又会调用
handle_link_failure(nsaddr_t)函数来处理由于邻居节点被删除而引起的路由
变化。
4、路由缓存定时器RouteCacheTimer 在到时后调用rt_purge()函数来清除路由表中已超时的路由项,并丢弃相关的分组,再调用schedule()来设置下次被调用的时间。
5、本地修复定时器LocalRepairTimer 在调用后根据传递的分组的目的地址关闭相应的路由项。
6、缓存广播ID 定时器BroadcastID 用来保存广播分组的ID。