当前位置:首页 > 毕业论文--ZigBee网络路由算法设计
处理路由错误分组RERR对其中的每个不可达目的节点,是否有相应的受影响的正向路由项Y将相应的正向路由项置为无效,并且更新路由项的目的节点序列号优先队列中是否有发往不可达目的节点的数据分组NY丢弃优先队列中发往不可达目的节点的数据分组N正向路由项的前驱列表是否为空NY将无效的正向路由项的目的节点加入新的路由错误分组的不可达目的节点列表清空正向路由项的前驱列表回收新产生的路由错误分组N新的路由错误分组是否存在不可达目的节点Y广播本节点新产生的路由错误分组回收本节点原来收到的路由错误分组 图3.13 RERR分组处理
- 32 -
处理Hello分组发送Hello分组的节点是否在本节点的邻居列表中YN更新该邻居节点的有效期将该节点加入本节点的邻居列表中回收Hello分组
图3.14 HELLO分组处理
3、查询路由表
当AODVsendcode()发起路由发现过程的时候,首先要进行路由表查询,以此来判断是否有可用的路由,如果有,则直接使用该路由来发送数据,如果没有,则再发送RREQs分组请求建立路由。查询路由表的函数是findEntry()。其执行流程图如图3.15所示:
- 33 -
清空路径变量获取路由表长度Li=1i>LN表中的目的节点为要找目的节点Ni=i+1Y读取路径结束
图3.15 findEntry流程图
4、获取路径
调用findEntry()函数查询路由表,如果有可用路由,则需要获取路由路径,对应该功能的函数是getRoute()。其函数执行流程图如图3.16所示。
- 34 -
找到路径N查路由表是否存在路径NY获取下一跳Y下一跳为目的节点YN令源节点为下一跳结束
图3.16 getRoute流程图
5、判断RREQ报文收到的次数
AODV路由协议中间节点只对第一次收到的RREQs分组进行转发处理,对于后面收到的分组直接丢弃。这个功能的实现是findInCache()函数。每一个RREQ在不同的节点会有不同的标识RREQID,该函数就是借助于查询RREQID来判断是否是第一次收到。其程序流程图如图3.17所示:
- 35 -
共分享92篇相关文档