一种路由迭代方法

文档序号:7999977阅读:263来源:国知局
专利名称:一种路由迭代方法
技术领域
本发明涉及网络领域,具体涉及一种路由迭代方法。
背景技术
随着通信技术的发展,网络规模不断扩大,路由表的数量不断的扩大,如果三层网络设备依然使用原来那些低效路由表处理方式,设备的安全性、稳定性将会受到很大的威胁。因此必须想方设法改进那些低效路由表处理方式。目前采用的一种技术就是对迭代路由的高效处理方式。在添加静态路由的时候,next_hop 一般是和本地路由器直连的邻居路由的接口 IP地址,这个时候不需要迭代;当然也完全可以写成到达目的地的路径上的任一路由器的接口 IP地址,这个时候路由就成为一条迭代路由,需要进行迭代。假设A-B-C-D-E-F六台路由器串联,在路由器A上正常情况下这样添加路由ip route F f-mask B,当然也可以这样添加ip route F f-mask E,要到达F的下一跳是Ε。 但是在本地路由表中还得有到达E的路由条目ip route E e-mask D,到达E的下一跳是 D ;在本地路由表中还得有到达D的路由条目ip route D d-mask C,到达D的下一跳是C; 在本地路由表中还得有到达C的路由条目ip rotue C c-mask B,到达C的下一跳是B ;在本地路由表中有到达B的直连路由。以上就是一个标准的迭代路由。本技术提出之前的实现方式是这样,迭代路由和非迭代路由,共同存储在AVL树节点中,每次进行路由迭代的时候,都要在全局路由表中进行迭代;所述全局路由表存储各个协议路由信息的路由表,数据结构是采用AVL树来实现的,索引是目的地址和掩码。如果以这种方式实现,对于迭代路由,会多次进入全局路由表对应的AVL树中进行查找(进入次数与迭代层数一致),查找效率太低。

发明内容
本发明要解决的技术问题是如何提高迭代路由的迭代效率。为了解决上述问题,本发明提供了一种路由迭代方法,包括
当第一数据记录中不存在和待迭代的路由条目具有相同下一跳的路由条目时,在全局路由表中查找待迭代的路由条目所在设备和下一跳间的非迭代的路由条目,或在所述第一数据记录中查找目的地址与所述待迭代的路由条目中下一跳相同的路由条目;将查找到的路由条目作为待迭代的路由条目的路由信息,和待迭代的路由条目一起添加进所述第一数据记录中,所述待迭代的路由条目完成迭代;所述第一数据记录用于保存所在设备上已完成迭代的路由条目。进一步地,当所述待迭代的路由条目的迭代层数为0时,在全局路由表中查找待迭代的路由条目所在设备和其下一跳间的非迭代路由条目;不为0时,在所述第一数据记录中查找目的地址与所述待迭代的路由条目中下一跳相同的路由条目。进一步地,所述的路由迭代方法还包括
当第一数据记录中存在下一跳和待迭代的路由条目相同的路由条目时,将第一数据记录中该路由条目的路由信息作为待迭代的路由条目的路由信息,待迭代的路由条目完成迭代;如果第一数据记录中不存在该待迭代的路由条目,则将该待迭代的路由条目及其路由信息添加进所述第一数据记录。进一步地,所述第一数据记录为第一双层链表,第一层链表节点存储路由条目中的下一跳,一个第一层链表节点对应的第二层链表节点中的数据包括具有该第一层链表节点中下一跳的一个路由条目,以及指向该路由条目的路由信息的指针;同一个第一层链表节点对应一个或多个第二层链表节点。进一步地,在所述第一数据记录中,查找目的地址与所述待迭代的路由条目中下一跳相同的路由条目的步骤包括
遍历各第一层链表节点下的第二层链表,如果待处理的路由条目的下一跳和掩码与一个第二层链表节点中路由条目的目的地址和掩码匹配,则将该第二层链表节点中保存的路由条目作为查找到的路由条目;如果第二层链表所有节点中路由条目的目的地址及掩码都不同于待处理的路由条目,则查找路由条目失败。进一步地,所述的路由迭代方法还包括
如果在全局路由表或第一双层链表中查找路由条目失败,则在第二数据记录中添加待迭代的路由条目;所述第二数据记录用于保存所在设备上待迭代的路由条目。进一步地,所述第二数据记录为第二双层链表,第一层链表节点存储路由条目中的下一跳,一个第一层链表节点对应的第二层链表节点中存储的数据包括具有该第一层链表节点中下一跳的一个路由条目;同一个第一层链表节点对应一个或多个第二层链表节点O进一步地,所述的路由迭代方法还包括
每隔一定时间,将第二双层链表中的各路由条目分别作为待迭代的路由条目,如果完成迭代,则向第一双层链表中添加该路由条目,从第二双层链表中删除该路由条目;如果第二双层链表中的一个第一层链表节点没有任何对应的第二层链表节点,则删除该第一层链表节点。进一步地,所述的路由迭代方法还包括
每隔一定时间,将第一双层链表中的各路由条目依次从第一双层链表中删除,然后作为待迭代的路由条目;如果迭代失败,则将该待迭代的路由条目添加到第二双层链表中,删除第一双层链表中该路由条目的路由信息;如果第一双层链表中的一个第一层链表节点下没有任何对应的第二层链表节点,则删除该第一层链表节点。本发明的技术方案把已经迭代成功(即完成迭代)的路由信息表存储起来,可以在之后迭代路由时加以利用;本发明的优化方案采用二层链表存储迭代成功的路由信息,而不是跟非迭代路由一样存储在AVL树中,使得路由的处理分开来,显得更加清晰;本发明的又一优化方案使用两个双层链表并周期性更新,如果在“迭代成功路由链表”中查找到了具有相同下一跳的路由条目,就可直接完成迭代;即使没找到,也可以加入“等待迭代路由链表”中,等周期时间到,系统就会将“等待迭代路由链表”中的节点进行迭代,迭代成功后会将节点加入“迭代成功路由链表”,处理效率更高。


图1是本发明的数据结构的示意图; 图2是实施例一中例子的流程示意图。
具体实施例方式下面将结合附图及实施例对本发明的技术方案进行更详细的说明。需要说明的是,如果不冲突,本发明实施例及实施例中的各个特征可以相互结合, 均在本发明的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但某些情况下,可以按不同于此处的顺序执行所示出或描述的步骤。首先对本文中出现的一些术语说明如下
双层链表在普通链表的节点中嵌入另一链表,如图1所示,横向的链表为第一层链表节点NodeJK Node_l……、Node_n,其中以下一跳为索引值;纵向为Node_l对应的第二层链表节点node_0、node_l……、node_n,各第二层节点中包含pstRt (指向路由结构体的指针)。路由条目,为该路由条目所在设备到目的地址的路由项,其中包括下一跳、目的地址,还可以包括掩码;比如在路由器A上的路由条目ip route F f-mask E,其中节点E为下一跳,节点F为目的地址。一个路由条目的路由信息至少用于指示在该路由条目中如何到达下一跳,可以用另一路由条目作为一个路由条目的路由信息。迭代层数是指两个设备之间的跳数减1,比如A-B-C三台路由器串联,则直接连接的设备A、B之间、节点B、C之间等,迭代层数均为0 ;而设备A、C之间的迭代层数为1 ;以此类推。实施例一,一种路由迭代方法,包括
当第一数据记录中不存在和待迭代的路由条目具有相同下一跳的路由条目时,在全局路由表中查找待迭代的路由条目所在设备和下一跳间的非迭代的路由条目,或在所述第一数据记录中查找目的地址与所述待迭代的路由条目中下一跳相同的路由条目;将查找到的路由条目作为待迭代的路由条目的路由信息,和待迭代的路由条目一起添加进所述第一数据记录中,所述待迭代的路由条目完成迭代;所述第一数据记录用于保存所在设备上已完成迭代的路由条目。本实施例中,当所述待迭代的路由条目的迭代层数为0时,在全局路由表中查找待迭代的路由条目所在设备和其中下一跳间的非迭代路由条目;不为0时,在所述第一数据记录中查找目的地址与所述待迭代的路由条目中下一跳相同的路由条目。本实施例中,所述方法还可以包括
当第一数据记录中存在下一跳和待迭代的路由条目相同的路由条目时,将第一数据记录中该路由条目的路由信息作为待迭代的路由条目的路由信息,待迭代的路由条目完成迭代;如果第一数据记录中不存在该待迭代的路由条目,则将该待迭代的路由条目及其路由信息添加进所述第一数据记录;比如第一数据记录中下一跳为C的路由条目是ip route F f-mask C,而待迭代的路由条目是ip route E f-mask C,虽然两者的下一跳相同,但仍要将待迭代的路由条目添加进第一数据记录。本实施例中,所述方法还可以包括
如果在全局路由表或迭代成功路由链表中查找路由条目失败,表示迭代失败,则在第二数据记录中添加待迭代的路由条目;所述第二数据记录用于保存所在设备上待迭代的路由条目。本实施例中,所述第一数据记录可以但不限于为第一双层链表,比如可称为“迭代成功路由链表”,第一层链表节点存储路由条目中的下一跳,一个第一层链表节点对应的第二层链表节点中的数据包括具有该第一层链表节点中下一跳的一个路由条目,以及指向该路由条目的路由信息的指针;就是说,以下一跳作为链表索引;路由信息可以用特定的数据结构来保存。本实施例中,第一双层链表中同一个第一层链表节点有可能对应一个或多个第二层链表节点,比如A-B-C-D-E-F六台路由器串联,比如第一层链表中下一跳为路由器D的节点对应的第二层链表节点中,可以包括存储从路由器A到F的路由条目的第二层链表节点、 从路由器B到E的路由条目的第二层链表节点,从路由器C到F的路由条目的第二层链表节点等,但这些路由条目中的下一跳均为路由器D,上述第二层链表中还包括指向所保存的路由条目的路由信息的指针。本实施例中,当所述第一数据记录为第一双层链表时,在所述第一数据记录中,查找目的地址与所述待迭代的路由条目中下一跳相同的路由条目的步骤具体可以包括
遍历各第一层链表节点下的第二层链表,如果待处理的路由条目的下一跳和掩码与一个第二层链表节点中路由条目的目的地址和掩码匹配,则将该第二层链表节点中保存的路由条目作为查找到的路由条目。如果第二层链表所有节点中路由条目的目的地址及掩码都不同于待处理的路由条目,,则查找路由条目失败。本实施例中,当所述第一数据记录为第一双层链表时,将所述待迭代的路由条目添加到第一数据记录中时,先判断该第一双层链表的第一层链表中是否存在和该待迭代的路由条目的下一跳相同的节点;如果有则添加对应于该节点的第二层链表节点,用以保存该待迭代的路由条目;如果没有,则先在第一双层链表的第一层链表中添加用于保存该待迭代的路由条目下一跳的节点,然后添加该节点对应的第二层链表节点,用以保存该待迭代的路由条目。本实施例中,所述第二数据记录可以为第二双层链表,比如可称为“等待迭代路由链表”;第一层链表节点存储路由条目中的下一跳,一个第一层链表节点对应的第二层链表节点中存储的数据包括具有该第一层链表节点中下一跳的一个路由条目;也就是和第一双层链表一样,以下一跳作为链表索引,同一个第一层链表节点有可能对应一个或多个第二层链表节点。本实施例中,在第二数据记录中添加待迭代的路由条目时,先在第二双层链表的第一层链表中查找是否有和所述待迭代的路由条目的下一跳相同的节点,如果有,则直接添加所查找到的节点对应的第二层链表节点,用以保存该待迭代的路由条目;如果没有,则先在该第二双层链表的第一层链表添加用于保存所述待迭代的路由条目下一跳的节点,然后添加该节点对应的第二层链表节点,用以保存该待迭代的路由条目。本实施例的所述路由迭代方法具体可如图2所示,包括如下步骤
Si、在第一数据记录中查找下一跳和待迭代的路由条目相同的路由条目;所述第一数据记录用于保存所在设备上已完成迭代的路由条目、及该路由条目的路由信息;如果能查找到,则将查找到的路由条目的路由信息作为待迭代的路由条目的路由信息,待迭代的路由条目完成迭代,如果该待迭代的路由条目不存在于所述第一数据记录中,则添加进去;查找不到则进行步骤S2 ;
52、判断所述待迭代的路由条目的迭代层数是否为0;如果不为0则进行步骤S3 ;如果为0,则在全局路由表中查找待迭代的路由条目所在设备和其下一跳间的非迭代的路由条目;如果能查找到则将查找到的路由条目作为所述待迭代的路由条目的路由信息,和所述待迭代的路由条目一起添加进所述第一数据记录;待迭代的路由条目完成迭代;
53、在所述第一数据记录中,查找目的地址与所述待迭代的路由条目中下一跳相同的路由条目,如果能查找到则将查找到的路由条目作为待迭代的路由条目的路由信息,和所述待迭代的路由条目一起添加进所述第一数据记录;待迭代的路由条目完成迭代。下面用一个具体例子进行说明,比如A-B-C-D四台路由器串联,待迭代的路由条目为路由器A上的路由ip route D f-mask C ;假设第一数据记录中只存在路由条目ip route C f-mask B及其对应的路由信息数据结构
步骤Sl中,在第一数据记录中无法查找到下一跳和待迭代的路由条目相同的路由条目,进入步骤S2 ;
步骤S2中,由于待迭代的路由条目所在设备A和下一跳C之间的迭代层数不为0,因此进入步骤S3 ;(假如待迭代的路由条目中下一跳是路由器B,则是在全局路由表中查找路由器A和路由器B之间的非迭代的路由条目)
步骤S3中,由于在第一数据记录中,查找到了目的地址为路由器C的路由条目ip route C f-mask B,因此可将路由条目ip route D f-mask C添加进第一数据记录中,并且将路由条目ip route C f-mask B的路由信息一起添加,作为该路由条目ip route D f-mask C的路由信息;
此时就完成了路由条目ip route D f-mask C的迭代。从该例子可以看出,由于保存了迭代成功的路由条目及其路由信息,这样再进行更多层数的相关迭代时,就可以充分利用已有的路由信息,而无需再一层层去全局路由表中查找。本实施例中,所述方法还可以包括
每隔一定时间,将第二双层链表中的各路由条目分别作为待迭代的路由条目,进行步骤Sl到S3 ;—路由条目完成迭代后,向第一双层链表中添加该路由条目,从第二双层链表中删除该路由条目;如果第二双层链表中的一个第一层链表节点没有任何对应的第二层链表节点,则也删除该第一层链表节点。具体隔多长时间,可根据需要设置。本实施例中,所述方法还可以包括
每隔一定时间,将第一双层链表中的各路由条目依次作为待迭代的路由条目,从第一双层链表中删除该待迭代的路由条目后进行步骤Sl到S3,从而查看完成迭代的路由是否发生变化,可能是迭代到新的路由,此时将会改变路由条目的路由信息,待迭代的路由条目完成迭代被添加回第一双层链表时,其路由信息已经和之前保存的不同;可能是迭代失败, 此时可将该待迭代的路由条目添加到第二双层链表中,删除第一双层链表中该路由条目的路由信息;如果第一双层链表中的一个第一层链表节点下没有任何对应的第二层链表节点,则也删除该第一层链表节点。
具体隔多长时间,可根据需要设置。当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。
权利要求
1.一种路由迭代方法,包括当第一数据记录中不存在和待迭代的路由条目具有相同下一跳的路由条目时,在全局路由表中查找待迭代的路由条目所在设备和下一跳间的非迭代的路由条目,或在所述第一数据记录中查找目的地址与所述待迭代的路由条目中下一跳相同的路由条目;将查找到的路由条目作为待迭代的路由条目的路由信息,和待迭代的路由条目一起添加进所述第一数据记录中,所述待迭代的路由条目完成迭代;所述第一数据记录用于保存所在设备上已完成迭代的路由条目。
2.如权利要求1所述的路由迭代方法,其特征在于当所述待迭代的路由条目的迭代层数为0时,在全局路由表中查找待迭代的路由条目所在设备和其下一跳间的非迭代路由条目;不为0时,在所述第一数据记录中查找目的地址与所述待迭代的路由条目中下一跳相同的路由条目。
3.如权利要求1所述的路由迭代方法,其特征在于,还包括当第一数据记录中存在下一跳和待迭代的路由条目相同的路由条目时,将第一数据记录中该路由条目的路由信息作为待迭代的路由条目的路由信息,待迭代的路由条目完成迭代;如果第一数据记录中不存在该待迭代的路由条目,则将该待迭代的路由条目及其路由信息添加进所述第一数据记录。
4.如权利要求1所述的路由迭代方法,其特征在于所述第一数据记录为第一双层链表,第一层链表节点存储路由条目中的下一跳,一个第一层链表节点对应的第二层链表节点中的数据包括具有该第一层链表节点中下一跳的一个路由条目,以及指向该路由条目的路由信息的指针;同一个第一层链表节点对应一个或多个第二层链表节点。
5.如权利要求4所述的路由迭代方法,其特征在于,在所述第一数据记录中,查找目的地址与所述待迭代的路由条目中下一跳相同的路由条目的步骤包括遍历各第一层链表节点下的第二层链表,如果待处理的路由条目的下一跳和掩码与一个第二层链表节点中路由条目的目的地址和掩码匹配,则将该第二层链表节点中保存的路由条目作为查找到的路由条目;如果第二层链表所有节点中路由条目的目的地址及掩码都不同于待处理的路由条目,则查找路由条目失败。
6.如权利要求4所述的路由迭代方法,其特征在于,还包括如果在全局路由表或第一双层链表中查找路由条目失败,则在第二数据记录中添加待迭代的路由条目;所述第二数据记录用于保存所在设备上待迭代的路由条目。
7.如权利要求6所述的路由迭代方法,其特征在于所述第二数据记录为第二双层链表,第一层链表节点存储路由条目中的下一跳,一个第一层链表节点对应的第二层链表节点中存储的数据包括具有该第一层链表节点中下一跳的一个路由条目;同一个第一层链表节点对应一个或多个第二层链表节点。
8.如权利要求7所述的路由迭代方法,其特征在于,还包括每隔一定时间,将第二双层链表中的各路由条目分别作为待迭代的路由条目,如果完成迭代,则向第一双层链表中添加该路由条目,从第二双层链表中删除该路由条目;如果第二双层链表中的一个第一层链表节点没有任何对应的第二层链表节点,则删除该第一层链表节点。
9.如权利要求7所述的路由迭代方法,其特征在于,还包括每隔一定时间,将第一双层链表中的各路由条目依次从第一双层链表中删除,然后作为待迭代的路由条目;如果迭代失败,则将该待迭代的路由条目添加到第二双层链表中,删除第一双层链表中该路由条目的路由信息;如果第一双层链表中的一个第一层链表节点下没有任何对应的第二层链表节点,则删除该第一层链表节点。
全文摘要
本发明公开了一种路由迭代方法,包括当第一数据记录中不存在和待迭代的路由条目具有相同下一跳的路由条目时,在全局路由表中查找待迭代的路由条目所在设备和下一跳间的非迭代的路由条目,或在所述第一数据记录中查找目的地址与所述待迭代的路由条目中下一跳相同的路由条目;将查找到的路由条目作为待迭代的路由条目的路由信息,和待迭代的路由条目一起添加进所述第一数据记录中,所述待迭代的路由条目完成迭代;所述第一数据记录用于保存所在设备上已完成迭代的路由条目。本发明能提高迭代路由的迭代效率。
文档编号H04L12/56GK102420761SQ201110398020
公开日2012年4月18日 申请日期2011年12月5日 优先权日2011年12月5日
发明者吴霞 申请人:瑞斯康达科技发展股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1