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。

转载于:https://www.cnblogs.com/yue-/archive/2012/04/23/6260090.html

aodv路由协议分析相关推荐

  1. 简单的路由协议分析和配置

    简单的路由协议分析和配置 我们都知道路由器的功能主要是寻址和转发 寻址是通过路由算来实现的 路由算法将收集到的不同信息添到路由表中 而转发则是通过路由表进行 路由器之间相互通信 更新 维护路由表 而路 ...

  2. 大学计算机网络配置实验报告,北京理工大学-计算机网络实践-IP路由配置与路由协议分析实验报告.docx...

    北京理工大学-计算机网络实践-IP路由配置与路由协议分析实验报告.docx (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 LAB2 ...

  3. 无线传感网学习笔记(8)—— DSDV路由协议 和 AODV路由协议

    一.DSDV路由协议 1.概念:一种目的节点序列机理矢量的路由算法.(Destination-Sequenced Distance Vector) 2.组成:该路由为先应式路由,采用分布式Bellan ...

  4. NS3中路由协议分析【AODV代码分析】

    详尽分析aodv-routing-protocol.cc代码 预处理命令 包括宏定义#define 和 引入头文件#include #define NS_LOG_APPEND_CONTEXT \if ...

  5. 树莓派linux系统配置AODV协议,linux上模拟AODV路由协议 下面一些信息求各路大神解释!!...

    满意答案 rrg655nxta 2014.02.28 采纳率:44%    等级:12 已帮助:8227人 我想这应该是AODV建立连接和维护连接的过程.要弄清楚这些语句具体是什么意思,必须要查看实现 ...

  6. linux 移植路由协议,Aodv路由协议——将aodv-uu-0.9.3移植到ARM-LINUX中 (转)

    kernel 2.6.21.1 aodv aodv-uu-0.9.3 1 内核的配置要求 我的内核为linux-2.6.21.1 Networking  ---> Networking opti ...

  7. 经典DSR路由协议分析:路由发现

    (1) 产生路由请求 当源节点需要与某目的节点进行通信时,它首先在本节点维护的路由缓存中查找是否有到达该目的节点的路由.若路由缓存中已包含了到达该目的节点的有效路由,则立即使用此路由发送数据分组,否则 ...

  8. 移动Ad Hoc下按需距离矢量路由协议AODV实验报告

    移动Ad Hoc下按需距离矢量路由协议AODV实验报告 一.实验内容 通过分析AODV路由帧类型及作用,并仿真网络建立.节点间通信.节点加入.节点退出,进一步分析各帧在其中工作流程,通过Python仿 ...

  9. Ad hoc网络路由协议概述4——按需路由协议(2)AODV协议 (Ad-hoc on-demand distance vector algorithm protocol)

    目录 1 一点前言 2 路由发现 2.1 相关概念 2.2 AODV的路由发现过程 2.3 与DSDV协议的对比 3 路由表管理及维护 3.1 更新路由表的策略 4 AODV协议的特点 4.1 优点 ...

最新文章

  1. vs2015下载 简体中文版/企业版 附邀请码
  2. BeagleBone Black快速入门教程
  3. python opencv 透视变换
  4. Linux基础之网络配置
  5. Redis集群在线分片
  6. ReplaceAll()和Replace的实战用法
  7. 音频放大电路_详细分析:电容器的四个典型应用电路图
  8. EfficientDet论文阅读解析【精】公式纯手打
  9. 如何优雅地在 Linux 上运行 QQ、微信?
  10. java中两个数交换的4种方式
  11. 单片机和嵌入式的区别
  12. java根据身份证号判断用户性别
  13. JAVA互联网架构师VIP项目实战(完整)
  14. MTK6577+Android之按键(key)修改
  15. 关于手机-Android版本-基带版本,连续点击六次进入工厂模式。自定义版本点五次动态隐藏显示某应用。
  16. delete 和 delete []的真正区别+析构函数
  17. Android初学者需掌握的几点经验:该如何自学Android开发?(Android自学资料大全)
  18. android开发屏幕投射到电视6,用电视吃鸡!将手机上的内容投射到电视机的屏幕上!...
  19. Elasticsearch:理解 Elasticsearch 中的 Percolator 数据类型及 Percolate 查询
  20. MyBatis-Plus之多租户架构(Multi-tenancy)——SAAS

热门文章

  1. POI增加 数据验证 下拉
  2. SpringBoot + MyBatis(注解版),常用的SQL方法
  3. Weblogic的缓存
  4. iOS端(腾讯Bugly)闪退异常上报扑获日志集成与使用指南
  5. Makefile中怎么使用Shell if判断
  6. MySQL启动很慢的原因
  7. CentOS 7 firewalld使用简介
  8. linux中的守护进程
  9. golang实现常用数据结构
  10. 泛型通用函数的一些特殊问题的解决方法