当前位置:首页 > [最新版]基于aodv的无线传感器路由协议的研究毕业论文
当节点本身是目的节点时,如果它自身的序列号增1后与RREQ中的序列号相等,则将自身序列号增1,否则,在产生RREP之前不改变自身的序列号。然后目的节点把自己的序列号复制到RREP中,并把跳数设为0,把MY_ROUTE_TIMEOUT复制到RREP的生存期域中。每个节点都可以重新设置它们的MY_ROUTE_TIMEOUT值。 4.5.5.2 中间节点产生的RREP
当节点是中间节点时,它复制它所知道目的节点序列号到RREP中,并把它收到的RREQ中指示的上一跳节点添加到指向目的节点的路由项的前驱表中,而把去往目的节点的下一跳节点添加到指向源节点的反向路由项的前驱表中。
最后,中间节点把目的节点的跳数复制到RREQ分组当中,而生存范围设置成路由项的到期时间减去当前时间。 4.5.5.3 产生非必要RREP
如果节点收到的RREQ设置了G标志位,它必须单播一个被必要RREP给目的节点。非必要RREP包含了以下表中,如图4.5所示:
跳数 目的节点IP地址 目的节点序列号 源节点IP地址 生存期 图4.5 RREP内容注解
到源节点的跳数 发送RREQ的源节点的IP地址 RREQ中的源节点序列号 RREQ中目的节点IP地址 到达RREQ的源节点的的路径的生存期 RREP非必要,然后被发送到目的节点的下一跳,如果目标节点发送一个RREQ分组到源节点,而RREP分组对RREQ分组相同。而发往源节点的RREP不管RREQ有无设置G标志位都一样。 4.5.6 接收和转发路由应答
当一个节点收到RREP,它首先在路由表中搜寻到上一跳的路由项,如有需要,会创建一条新的表项,但不包含有效的序列号。然后节点把RREP中的跳数增1,并称这个值为“新跳数”。如果去往目的节点的路径尚不存在则创建一条新的,否则把RREP中的目的节点序列号和已有的相比较。经过比较后,只有在以下几种情况中会更新已有的路由项:
(1) 原路由项中的序列号被标志为无效; (2) RREP中的序列号大于原有的序列号;
(3) 两个序列号相等,不过这条路径被标志为不活动的;
(4) 序列号相等,但是新的跳数比原有的要小。
如果去往的目的节点的路由项被创建或更新,会执行以下的操作:如图4.6所示。(1) 路径被标志为活跃的
(2) 目的节点序列号被标志为有效的 (3) 下一跳设为传来RREP的那个节点 (4) 跳数设为“新跳数”
(5) 过期时间设为现在的时间加上RREP中的生存时间 (6) 目的节点序列号设置成为RREP中的序列号
如果当前节点不是RREP中的源节点,它会查询路由表以决定RREP的下一跳。如果节点发送的RREP的链路有错误或是单向的,节点会设置其中的A标志位,以使RREP的接收方会回复一个RREP-ACK。
任何转发RREP的节点,都会把发送RREP的下一跳加入到去往目的节点的路由项前驱表中,在同一时间,修改源节点路径的生存期为现有的生存与(当前时间+ ACTIVE_ROUTE_TIMEOUT)的较大值。
开始建立或更新无有效序列号的到上一级的路由RREP跳数值加1Y路由对应的目的节点的序号大于等于RREQ序列号N建立转发路由若 路由表序列号无效RREP中目的序列号大于节点中目的序列号序列号相同 路由非有效或新跳数小于路由表路由表项跳数路径被标志为活跃的路由表项下一跳设置为刚才发出RREP的节点过期时间为当前时间加上RREP消息中的生存期目的地序列号为RREP消息中的序列号目的节点序列号被标志为有效的结束
图4.6 节点收到RREP的处理过程
4.5.7 单向链路上的操作
当链路为单向的时候,RREP的传送有可能会失败,如果源节点收不到RREP,在计时结束后,会重新尝试发起路由发现的过程。然而,这种情形可能一直重复而得不到任何改善,即使重复尝试仍然不能得到任何路径。在AODV中有对应纠正的操作,即节点只对第一个具有相同RREQ ID的RREQ做出回应,其他后续的RREQ都将被忽略。
然而这又将产生新的问题,即第一个RREQ可能经过的路径中包含单向链路,但后续的RREQ可能经过双向链路到达,而它们将会被忽略。
为了避免这种情况,当一个节点检测到一个RREP传输失败,它建立一个黑名单将刚刚传送的RREP的下一跳记录到其中。每个节点将忽略节点中黑名单所罗列的RREQ分组。黑名单中的节点在经过BLACKLIST_TIMEOUT后会从名单中移除。
RREP- ACK数据包不包含有关的信息的RREP。这个信息只是为了告诉发送方链路当前是双向的。 4.5.8 Hello消息
一个节点由当地广播Hello报文节点提供连接信息。每隔HELLO_INTERVAL毫秒,该节点将检查其是否在此期间发送了一个广播数据包,如果不是,它会广播TTL= 1的RREP,并称为Hello分组,它的格式如下设置,如下图4.7所示:
Destination IP Address Destination Sequence Number Hop Count Lifetime 图4.7 hello分组的格式
节点本身的IP地址 节点最新序列号 0 ALLOWED_HELLO_LOSS*HELLO_INTERVAL 一个节点通过监听来自邻居的分组来决定连通性。如果在过去DELETE_PERIOD时间之内,节点已经收到了邻居的数据包,然后ALLOWED_HELLO_LOSS* HELLO_INTERVAL毫秒从未收到任何来自这个邻居的数据包,它就会认为到该邻居的链路当前已经中断,接着就执行5.4.11中描述的操作。
当一个节点收到邻居的一个Hello分组时,它会认为它有一条到达邻居活跃路径。如果这条路径已经存在,它会延长相应节点的生存期,如有必要,可至少设为ALLOWED_HELLO_LOSS*HELLO_INTERVAL,并复制Hello分组中最新的目的节点序列号到相应路由项中。 4.5.9 维护本地连接性
节点应该持续监测活跃下一跳和在(ALLOWED_HELLO_LOSS*HELLO_INTERVAL)时间内接收到过Hello分组的邻居连通性。一个节点使用以下的链路或网络层机制来维护上述相关节点的连通性的准确信息。
(1) 任何合适的链路层通知,例如每次给活跃下一跳发送数据包时IEEE 802.11提供的一些通知,可以用来判定链路连通性。还有例如链路层ACK的缺失,或发送RTS后收不到CTS,甚至于达到重传次数的最大值时,都提示了链路层的中断。
(2) 如果没有可用的上述通知信息,使用被动通知的方法。即当预期下一跳会转发分组时,监听尝试传送的信道,如果再NEXT_HOP_WAIT毫秒内监听不到传送或下一
共分享92篇相关文档