AODV路由维护(定期发送Hello和链路层反馈)

        路由维护的方式分为邻居发现和链路层反馈两种。邻居发现是节点周期性的广播TTL=I的HELLO广播报文,收到报文的节点知道发送者是其邻居,这样就维护和其邻居的本地互连性,HELLO报文格式和RREP报文格式相同。如果在一定时间内,节点没有收到邻居的HELLO报文,并且路由表中存在以该邻居作为下一跳的路由表项,节点就会广播RERR报文。链路层反馈是当转发数据报文时,如果在链路层收到下一跳节点路由信息里通告目的节点不可达的报文,即下一跳没有通往目的节点的路由,则表明路由中断,根据中断节点离源节点和目的节点跳数的比较来选择进行本地恢复或广播RERR报文。

        在下面三种情况下,节点会发送RERR报文:(1)邻居发现时,当邻居不可达时,遍历路由表找到所有以该邻居作为下一跳的路由表项,构造RERR报文,把这些路由表项中的目的地址、序号依次放入RERR报文的不可达目的节点地址数组、序号数组中,然后广播此报文;(2)转发数据报文时,存在到目的节点的路由,但其标志为DOWN,说明此路由表项过期,构造RERR报文,把这个路由表项中的目的节点地址和序号放入报文不可达目的节点地址数组和不可达目的节点序号数组中,并丢弃数据报文;(3)转发数据报文时,存在到目的节点的路由;其标志为UP,但实际转发时,收到链路层的不可达报文,如果当前节点到目的节点的跳数大于到源节点的跳数,会广播路由错误报文,这是通过链路层反馈得到邻居节点不可达信息,采用和第一种情况相同的方式构造RERR报文。

        收到RERR报文的节点,对报文中每个不可达目的节点,在路由表中查找以不可达目的节点为目的节点并且以RERR报文发送者作为下一‘跳的路由表项,把路由标志置为DOWN状态,并判断路由表项的前向节点地址是否为空,如果不为空,则把这个不可达目的节点信息放入新构造的RERR报文中。

        只有当使用一条状态为UP的路由表项转发报文失败时,并且当前节点到目的节点的跳数小于到源节点的跳数,才进行本地恢复。当前节点把转发失败的数据报文插入报文缓存队列中,并把使用到的那个路由表项置为REPAIR状态,然后广播RREQ报文,同时开启一个本地恢复定时器,如果在定时器到期时,当前节点仍然没有收到RREP报文,则会把使用的路由表项置为DON。如果收到RREP报文,则说明到目的节点的路由恢复。

        当中断节点发送RREQ报文时,原来路径中的上一跳节点和下一跳节点由于具有到中断目的节点的活跃路由,都会发送RREP报文。根据收到RREP报文时更新到目的节点路由的条件(3)得知,为了消除回环,只有当从新路径比原来路径到失败目的节点的跳数小时,才接受RREP报文。



你可能感兴趣的:(UP)