AODV路由协议的路由缓存队列详解
来源:互联网 发布:java 处理大批量数据 编辑:程序博客网 时间:2024/06/15 07:34
来源网址:http://blog.chinaunix.net/u3/115276/showart_2283049.html
节点首先清除所有受到影响的路由项,丢弃所有受影响的分组。然后,如果前驱节点中存在会受该路由错误影响的分组,则调用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为要发送的分组即可。
以上就是AODV路由协议在节点收到分组后的一个处理过程。接下来看看各个定时器所做的工作。
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。
此外,AODV路由协议的路由表、日志记录和队列三个类就相对比较简单了,都只实现了一些非常基本的功能,在此就不做介绍了
- AODV路由协议的路由缓存队列详解
- aodv路由协议分析
- aodv路由协议分析
- aodv路由协议分析
- 基于NS2的网络路由协议仿真(AODV、COPE+AODV)
- 三种路由协议的吞吐量对比:aodv,dsdv,dsr
- AODV路由选择
- 基于NS2的Ad Hoc网络AODV路由协议性能评估的仿真
- 【路由】不同的路由协议
- OTcl与C++交互—AODV路由协议
- AODV路由协议主要包括以下几个组件
- VRRP路由协议详解
- Aodv路由协议——将aodv-uu-0.9.3移植到ARM-LINUX中
- 交叉编译aodv路由算法
- 基于NS2的Ad Hoc网络AODV路由协议仿真[ubuntu10.04+NS2.35含代码文件] [转载]
- 路由协议的认证
- 可以路由的协议
- 路由协议的笔记
- 联合(union)和结构(struct)的区别
- opengl中的GLUT环境配置
- Facebook CEO:社会化比移动更具颠覆性
- X.509证书解析和使用
- 写文档的一点感想
- AODV路由协议的路由缓存队列详解
- 汨罗的教育收费
- for_each_shadow_entry宏分析
- JQuery ----Reset()方法
- Delphi图像处理 -- 设置伽玛
- Spring in action笔记
- format not a string literal and no format arguments
- iPad用户体验指导原则
- 我的Mac生活