aodv路由协议的路由缓存队列详解.pdf

aodv路由协议的路由缓存队列详解.pdf

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AODV路由协议的路由缓存队列详解 来源:刷钻 AODV路由协议的使用往往在一些复杂的程序当中。那么我们如何理 解这些协议的使用和一些代码函数的含义呢?下面我们就来阐述一 下这方面的问题。首先了解一下在NS2.27中,AODV路由协议主要包 括以下几个组件: 1?协议实体 2?路由表 3?定时器 1 广播定时器 2 周期Hello报文广播定时器 3 用于邻居管理的定时器 4 用于路由缓存的定时器 5 用于本地修复的定时器 6 缓存广播ID的定时器 4?日志记录器 5?路由缓存队列 首先来看AODV路由协议从接收到一个分组开始的基本流程? 当协议接收到一个分组,即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 如果接收到的是路由错误分组,AODV 路由协议则调用 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 Pa

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档