- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- LEGO乐高积木拼砌说明书42126,Ford®F-150Raptor皮卡,LEGO®Technic(年份2021)安装指南_第2份共2份.pdf
- 继电保护和安全自动装置技术规程.pdf VIP
- 2023版反假考试复习题库-上(单选题部分).pdf VIP
- (完整)2018年严重精神障碍知识技能竞赛题库.pdf VIP
- 诗词大会网络答题竞赛题库200题(含答案).pdf
- 弗洛姆的人本主义精神分析理论.ppt VIP
- 整本书阅读 会飞的教室(课件)四年级上册语文部编版.pptx
- 2024年江西司法警官职业学院单招数学考试题库及答案解析.docx
- HAIER 海尔 海尔Haier冷柜 BC BD-519HCZ 说明书.pdf
- 消防安全标志设置要求.docx VIP
文档评论(0)