点C),则将节点C加入到拓扑子树信息中,还可以将第一邻居节点到第二邻居节点的最短路径加入到该拓扑子树信息中。一般节点之间的数据传输是相互的,即此时节点C到节点B的最短路径也经过本地节点A (即节点C —节点A —节点B),此时也讲节点B添加到拓扑子树信息中。
[0078]步骤B2、当本地节点沿任一链路到其他节点时,若本地节点的下一跳节点属于拓扑子树信息中的节点,将其他节点和本地节点到其他节点的每条链路添加到拓扑子树信息中,其他节点为拓扑表中除本地节点以外的节点。
[0079]具体的,例如,步骤B2中的其他节点为节点B,该节点B不是本地节点A的邻居节点(若节点B为本地节点A的邻居节点,则根据步骤103可知拓扑子树信息中包括节点B),本地节点A到另外一个节点B的链路有三条:①节点A —节点C —节点B,②节点A —节点D —节点E —节点B,③节点A —节点F —节点E —节点G —节点B ;且节点C、节点D和节点F均属于拓扑子树信息中的节点,此时则将节点B,以及上述的三条链路添加到拓扑子树信息中。
[0080]优选的,本发明实施例提供的主动式路由的方法还包括拓扑维护的步骤201-207:
[0081]步骤201:扫描拓扑表,分别确定节点过期时间和链路过期时间。
[0082]步骤202:判断节点过期时间是否小于当前时间,在节点过期时间小于当前时间时,继续步骤203,否则继续步骤207。
[0083]步骤203:删除拓扑表中相应的节点。
[0084]步骤204:判断链路过期时间是否小于当前时间,当链路过期时间小于当前时间时,继续步骤205,否则继续步骤207。
[0085]步骤205:删除拓扑表中相应的链路。
[0086]步骤206:根据改变的拓扑表重新确定以本地节点为根的新源节点树,并根据新源节点树重新计算本地节点到其余节点的路由,并更新本地路由表。
[0087]步骤207:流程结束。
[0088]优选的,拓扑维护步骤还包括全面更新,即当全部更新时间间隔到期时执行以下步骤:
[0089]判断全部更新时间间隔是否到期;
[0090]当全部更新时间间隔到期时,对每个节点组织全部更新消息;当全部更新时间间隔没有到期时,根据当前的拓扑子树信息与前次报告的拓扑子树信息之间的差别确定添加更新消息或删除更新消息。
[0091]本发明实施例中,通过删除过期的节点和链路条目,并周期性更新路由表,从而保证路由表的时效性,保证邻居节点能得到本地节点的最新的拓扑子树信息,保证整个网络的稳定性。
[0092]下面通过一个实施例详细介绍该拓扑维护的过程。
[0093]实施例一
[0094]在实施例一中,拓扑维护包括差异更新和周期更新两种情况,具体的,参见图3所示,包括步骤301-:
[0095]步骤301:扫描拓扑表,分别确定节点过期时间和链路过期时间。
[0096]步骤302:判断节点过期时间是否小于当前时间,在节点过期时间小于当前时间时,继续步骤303,否则继续步骤310。
[0097]步骤303:删除拓扑表中相应的节点。
[0098]步骤304:判断链路过期时间是否小于当前时间,当链路过期时间小于当前时间时,继续步骤305,否则继续步骤310。
[0099]步骤305:删除拓扑表中相应的链路。
[0100]步骤306:根据改变的拓扑表重新确定以本地节点为根的新源节点树,并根据新源节点树重新计算本地节点到其余节点的路由,并更新本地路由表。
[0101]步骤307:判断全部更新时间间隔是否到期;在全部更新时间间隔到期时,继续步骤308,否则继续步骤309。
[0102]步骤308:对每个节点组织全部更新消息,并继续步骤310。
[0103]步骤309:根据当前的拓扑子树信息与前次报告的拓扑子树信息之间的差别确定添加更新消息或删除更新消息,并继续步骤310。
[0104]步骤310:流程结束。
[0105]以上详细介绍了该主动式路由的方法的流程,该方法也可以通过相应的装置实现,下面详细介绍该装置的结构和功能。
[0106]本发明实施例提供的一种主动式路由的装置,参见图4所示,包括:
[0107]第一广播模块401,用于向邻居节点广播第一问候消息,第一问候消息包括本地节点的地址标识;同时接收邻居节点广播的包括邻居节点的地址标识的第二问候消息;
[0108]记录模块402,用于记录邻居节点的地址标识,并更新本地节点的邻居节点表;
[0109]第二广播模块403,用于向邻居节点广播拓扑子树信息,拓扑子树信息包括本地节点到所有邻居节点的链路和第一邻居节点到第二邻居节点的最短路径,第一邻居节点和第二邻居节点为本地节点的邻居节点中两个互不相同的邻居节点;
[0110]第一更新模块404,用于路由收敛后,更新拓扑表,并确定本地路由表,本地路由表包括以本地节点为根、到网络中任意其他节点的最短路由;
[0111]转发模块405,用于在接收到数据包时,提取目的节点,根据本地路由表确定目的节点最短路径;将数据包转发至下一跳节点,并指示下一跳节点根据目的节点最短路径继续转发数据包,直至数据包到达目的节点。
[0112]优选的,参见图5所示,第一更新模块404包括:
[0113]确定单元4041,用于根据本地节点的拓扑表中存储的拓扑信息确定本地节点的源节点树,源节点树包括本地节点到其余节点的最短路径;
[0114]更新单元4042,用于根据源节点树计算本地节点到其余节点的路由,并更新本地路由表。
[0115]优选的,确定单元4041具体用于:根据路由算法确定本地节点的源节点树,路由算法包括Dijkstra算法、链路状态路由算法、距离向量路由算法中的一项或多项。
[0116]优选的,当第一邻居节点到第二邻居节点的最短路径经过本地节点时,拓扑子树信息还包括第二邻居节点;
[0117]当本地节点沿任一链路到其他节点时,若本地节点的下一跳节点属于拓扑子树信息中的节点,将其他节点和本地节点到其他节点的每条链路添加到拓扑子树信息中,其他节点为拓扑表中除本地节点以外的节点。
[0118]优选的,参见图6所示,该装置还包括:
[0119]扫描模块406,用于扫描拓扑表,分别确定节点过期时间和链路过期时间;
[0120]删除模块407,用于在节点过期时间小于当前时间时,删除拓扑表中相应的节点;在链路过期时间小于当前时间时,删除拓扑表中相应的链路;
[0121]第二更新模块408,用于根据改变的拓扑表重新确定以本地节点为根的新源节点树,并根据新源节点树重新计算本地节点到其余节点的路由,并更新本地路由表。
[0122]优选的,参见图7所示,该装置还包括:
[0123]判断模块409,用于判断全部更新时间间隔是否到期;
[0124]处理模块410,用于当全部更新时间间隔到期时,对每个节点组织全部更新消息;当全部更新时间间隔没有到期时,根据当前的拓扑子树信息与前次报告的拓扑子树信息之间的差别确定添加更新消息或删除更新消息。
[0125]本发明实施例提供的一种主动式路由的方法及装置,提供逐跳的最短路径,在邻居节点发现过程中只发送和接收,不进行转发、回复或洪泛,邻居节点发现操作仅仅限于I个跳数的邻居节点之间,极大减少了网络消息的开销。同时能够及时快速发现节点及网络状态的变化,较好地解决了复