路由表快速比对方法
技术领域
该发明涉及一种计算机网络的处理方法,特别是涉及一种路由表快速比对方法。
背景技术
路由表比对用于判别两个路由表的一致性,其基本思想是过滤路由表中内容一致的表项,标识出两个路由表不一致的表项。路由表由多条表项组成,路由表比对过程就是路由表项的逐个比较过程。假设路由表R1和R2,表项个数分别为m1和m2,全遍历情况下完成R1和R2比对至少要进行m1*m2次表项比较。考虑到路由表的容量通常以百万级为单位,假定R1和R2的表项规模为500万条,即m1=m2=5000000,全遍历情况下完成R1和R2比对最多将触发2.5*1013次表项比较。因此,如何提高表项比较效率,实现路由表快速比对,是路由表比对尤其是大规模路由表比对要解决的重要问题。
发明内容
本发明克服了现有技术中,实现路由表快速比的效率有待提高的问题,提供一种路由表快速比对方法。
本发明的技术解决方案是,提供一种具有以下步骤的路由表快速比对方法:其包括:
步骤一、将路由表按照前缀长度拆分成多个路由子集,同一个路由子集中的路由表项具有相同的路由前缀;对每个路由子集,建立对应的Bloom过滤器;
步骤二、整个路由表比对由多次路由比对过程实现,路由比对过程包括路由子集预判过程和路由表项精确比对过程;
步骤三、路由子集预判过程首先根据待比对表项的前缀长度定位其对应的路由子集,通过该路由子集的bloom过滤器进行预判,即判断对应的路由子集中是否存在与该前缀匹配的路由表项,不存在则标识待比对表项为“不一致”,存在则针对该路由子集进一步执行路由表项的精确比对;
步骤四、路由表项精确比对过程首先在路由子集中查找到与待比对表项路由前缀一致的路由表项,然后,按照预先定义好的判定两条具有相同前缀的表项是否一致的判决条件,比较两条表项相关属性内容,如下一跳IP地址、输出端口等,根据判决结果为两条表项打上相应的“一致”或“不一致”标识;
步骤五、整个路由表比对过程完成后,参加比对的两个路由表的表项根据比对结果都打上了“一致”或“不一致”标识。
所述步骤一中将路由表按照前缀长度9~32拆分成24个路由子集,同一个路由子集中的路由表项具有相同的路由前缀;对每个路由子集,建立对应的Bloom过滤器,一共用到24个Bloom过滤器。
所述步骤三中bloom过滤器预判的过程如下:首先用bloom过滤器进行路由子集预判,根据待比对表项的前缀长度定位其对应的路由子集,再通过该路由子集的bloom过滤器进行预判,即判断对应的路由子集中是否存在与该前缀匹配的路由表项;Bloom过滤器在判决某元素是否属于某集合时,判决结果为“属于”时,该元素实际上有可能不属于该集合;判决结果为“不属于”时,该元素实际上必定不属于该集合。
所述步骤四中路由表项精确比对过程中,需要以待比对表项的路由前缀为索引,在路由子集中进行查找,为了加速查找过程,建立路由子集的快速查找索引,如采用hash索引。
与现有技术相比,本发明路由表快速比对方法具有以下优点:本发明结合路由比对的特点,通过划分路由子集、引入Bloom过滤器进行预判,以子集为单位减少路由比对次数,有效提高了路由表项的比较效率,实现路由表快速比对,尤其适用于大规模路由表的快速比对。
附图说明
图1是本发明路由表快速比对方法的示意图;
图2是本发明路由表快速比对方法的详细流程示意图。
具体实施方式
下面结合附图和具体实施方式对本发明路由表快速比对方法作进一步说明:如图所示,本实施例提供一种大规模路由表快速比对方法。所述方法包括:将路由表按照前缀长度拆分成多个路由子集,同一个路由子集中的路由表项具有相同的路由前缀;对每个路由子集,建立对应的Bloom过滤器。
整个路由表比对由多次路由比对过程实现,路由比对过程包括路由子集预判过程和路由表项精确比对过程。
路由子集预判过程首先根据待比对表项的前缀长度定位其对应的路由子集,通过该路由子集的bloom过滤器进行预判,即判断对应的路由子集中是否存在与该前缀匹配的路由表项,不存在则标识待比对表项为“不一致”,存在则针对该路由子集进一步执行路由表项的精确比对。
路由表项精确比对过程首先在路由子集中查找到与待比对表项路由前缀一致的路由表项,然后,按照预先定义好的判定两条具有相同前缀的表项是否一致的判决条件,比较两条表项相关属性内容,如下一跳IP地址、输出端口等,根据判决结果为两条表项打上相应的“一致”或“不一致”标识。
整个路由表比对过程完成后,参加比对的两个路由表的表项根据比对结果都打上了“一致”或“不一致”标识。
由于不存在长度小于8bits路由前缀,将路由表按照前缀长度9~32拆分成24个路由子集,同一个路由子集中的路由表项具有相同的路由前缀;对每个路由子集,建立对应的Bloom过滤器,一共用到24个Bloom过滤器。
首先用bloom过滤器进行路由子集预判,根据待比对表项的前缀长度定位其对应的路由子集,通过该路由子集的bloom过滤器进行预判,即判断对应的路由子集中是否存在与该前缀匹配的路由表项。Bloom过滤器在判决某元素是否属于某集合时,判决结果为“属于”时,该元素实际上有可能不属于该集合;判决结果为“不属于”时,该元素实际上必定不属于该集合。也就是说,Bloom过滤器的判决会出现“假阳性误判”,但不会出现“假阴性漏判”。结合路由比对的需求,“假阳性误判”对路由比对的最终结果不会造成影响,而“假阴性漏判”直接影响路由比对的最终结果,因此,将Bloom过滤器用于路由比对的路由子集判决不会出现漏判,确保了路由比对的完备性和正确性。
接下来进行路由表项精确比对,需要以待比对表项的路由前缀为索引,在路由子集中进行查找,为了加速查找过程,可以建立路由子集的快速查找索引,本例中采用hash索引。
本发明路由表快速比对方法的具体流程如图2所述:
假设路由表R1和R2,表项个数分别为m1和m2,ri∈R1,rj∈R2,1≤i≤m1,1≤j≤m2,ri的路由前缀用prefixi表示,前缀长度用preleni表示。
步骤1:判定R1是否遍历完?是,则跳转到步骤5;不是,执行步骤2。
具体实现时,应当选取表项个数较少的路由表进行遍历,本例中假定m1≤m2,故选择R1进行遍历。
步骤2:读取当前路由表项ri的前缀长度preleni,选择对应的Bloom过滤器,判定prefixi是否属于对应的路由子集?不属于,则标记ri为“不一致”,跳转到步骤1;属于,执行步骤3。
结合路由表中路由前缀的唯一性(即一个路由前缀在一个路由表中只能出现一次),一旦在R2的某个路由子集中不存在该路由前缀,在R2的其他路由子集中也不会存在。因此,当Bloom预判决结果为不属于时,将R1中的ri直接标记为“不一致”。
步骤3:在前缀长度为preleni的路由子集中查找到路由前缀为prefixi的表项rj(本例采用hash索引查找),执行步骤4。
步骤4:按照预先定义好的判定两条具有相同前缀的表项是否一致的判决条件,比较ri和rj相关属性内容是否一致?一致,标记R1的ri、R2的rj为“一致”;不一致,标记R1的ri、R2的rj为“不一致”。跳转到步骤1。
判定两条具有相同前缀的表项是否一致的判决条件,可以是单个判决(如下一跳是否相等)或组合判决(下一跳相等且出接口相等)。这里,假定判决条件为“下一跳路由是否相等”,那么,比较ri和rj的下一跳路由,相等则标记为“一致”,不相等则标记为“不一致”。
步骤5:将R2中所有未标识的路由表项,标识为“不一致”。
同理,结合路由表中路由前缀的唯一性,在R1遍历完成后,R2中还没有进行标识的路由表项,其比对结果应该为“不一致”。进一步,为了加速比对,可以在初始化时直接将R2的所有表项预先标记为“不一致”。