云服务器免费一键优化ppt
云服务器免费,一键优化ppt,对象储存做网站,平面设计师资格证怎么考1 AODV 报文格式 AODV 有三种基本的协议报文类型#xff1a;RREQ 报文、RREP 报文和RRER 报文。 1.1 RREQ 报文 a. 对RREQ 的处理 接收到RREQ 的结点做如下处理#xff1a; #xff08;1#xff09;创建一个表项#xff0c;先不分配有效序列号#xff0c;用于记录反向路径… 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88044.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!