对路由表进行空间管理的方法、装置、交换机及路由器的制作方法

文档序号:7695758阅读:135来源:国知局

专利名称::对路由表进行空间管理的方法、装置、交换机及路由器的制作方法
技术领域
:本发明涉及数据通信技术,尤其涉及一种能够提高路由表查找速度的对路由表进行空间管理的方法及装置。
背景技术
:目前,因特网中的某一主机访问另一主机时,路由器或三层交换机根据目的因特网协议(InternetProtocol,IP)地址查找路由表,路由到目的主机。路由表是路由器或者其他互联网网络设备(三层交换机)上存储的表,换句话说,路由表是一整块存放路由信息的连续空间,其中,每一条路由信息被称作一条路由表项。该表中存有到达特定网络终端的路径。现有技术中,当路由表需要写入一条表项的时候,给其分配哪一块的空间,写入到路由表的哪一个位置,是由这个路由表的空间管理单元来决定的。各种路由器、三层交换机上有各种不同的路由空间管理方法。比如最早由Srinvasan提出的leafpushing的技术,使用二分支trie树,通过一个复杂的算法来完成路由空间的管理以及查找。很多基于这种方法改进的空间管理方法都具有一个特点就是,使用了树形的扩展。所有的这些路由表的存放方法的目的均是在保证路由空间可以存放一定条目数的路由表项的情况下,加快添加、删除路由表项以及最长前缀匹配的速度。通过上述方法获得的最简单的路由表模型如图1所示。其中,表项1、表项2.....表项N的掩码长度与表项的顺序排列无关。查找路由表时,路由器或三层交换机通过最长前缀匹配(Longestprefixmatch)算法选择路由入口,即,逐表项与目的IP地址进行匹配,从匹配的表项中选择掩码长度最长的表项作为路由入口。掩码长度是指子网掩码(前缀)中,左边连续的二进制数字1的个数。比如子网掩码255.0.0.0二进制为11111111000000000000000000000000,则掩码长度为8;子网掩码255.255.0.0二进制为11111111111111111111111100000000,则掩码长度为24。如图2所示,假设计算机23要访问IP地址为10.0.2.2的计算机21,路由器/三层交换机24最终要将其匹配到路由表中的第二条表项,通过网络B来访问计算机21。这是由于要访问的IP地址10.0.2.2与子网掩码255.255.255.0相与后,和目的网络地址10.0.2.0相等,且掩码长度最长(24位)。同理访问IP地址为10.0.3.2的计算机22,必须要匹配到路由表的第三条表项,从而通过网络C来访问计算机22。由于路由表中的各表项掩码长度与路由表中表项顺序无关,因此,路由器或三层交换机查找匹配的表项时,要么通过对所有路由表中所有的表项进行匹配,最后确定掩码长度最长且匹配的表项,导致路由表查找效率受到限制,无法进一步提高;要么路由表中的表项以树形方式管理,虽然树形管理方式使得路由器或三层交换机仅匹配其中一个分支便可获得查找结果,但是,使用树形管理方式的路由表往往出现重复存放同一表项的问题,导致路由表得不到充分合理的利用。
发明内容本发明的目的在于提出一种对路由表进行空间管理的方法、装置、交换机及路由器,以在提高路由表空间利用率的同时,进一步提高表项查找速度。为实现上述目的,本发明提供了一种对路由表进行空间管理的方法,包括计算待插入表项的掩码长度;遍历空间管理链表中的空间管理单元;所述空间管理链表中,各空间管理单元与掩码长度——对应,管理与对应的掩码长度相同的表项;所述各空间管理单元按照对应的掩码长度从长到短的顺序排列,均设置有表项存储的开始地址start、表项存储的结束地址end、前一个空间管理单元存储对应的掩码长度prev、后一个空间管理单元对应的掩码长度next、本空间管理单元存储的表项个数vent及本空间管理单元中的空闲空间fent;获取与所述待插入表项的掩码长度对应的空间管理单元,确定所述待插入表项在路由表中的存放位置,插入所述待插入表项。为实现上述目的,本发明还提供了一种对路由表进行空间管理的装置,包括计算单元,用于计算待插入表项的掩码长度;空间管理链表,用于存储空间管理单元,所述空间管理链表中,各空间管理单元之间与掩码长度——对应,存储的表项与对应的掩码长度相同;所述各空间管理单元按照掩码长度从长到短的顺序排列,均设置有表项存储的开始地址start、表项存储的结束地址end、前一个空间管理单元存储对应的掩码长度prev、后一个空间管理单元对应的掩码长度next、本空间管理单元存储的表项个数vent及本空间管理单元中的空闲空间fent.,遍历单元,用于遍历所述空间管理链表中的空间管理单元;获取单元,用于获取与所述待插入表项的掩码长度对应的空间管理单元;插入单元,用于根据所述获取单元获取的空间管理单元,确定所述待插入表项在路由表中的存放位置,插入所述待插入表项。为实现上述目的,本发明还提供了一种包括上述对路由表进行空间管理的装置的三层交换机及路由器。上述技术方案中,三层交换机或路由器通过空间管理链表中的空间管理单元对路由表空间进行分配管理,使得插入路由表中的表项依照掩码(前缀)长度由长至短的顺序进行排列,保证了最长前缀匹配一开始便可匹配到最长的掩码长度路由表项,避免了同一表项在路由表中的重复存放,以及对路由表中的所有表项进行匹配后才能获得最长的掩码长度路由表项,大大提高了路由表查找速度;同时路由表中的表项按照一定顺序排列也有利于表项的快速插入和删除,大大提高了路由表的空间利用率。下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。图1为现有技术中的路由表模型即表项存放结构示意图;图2为因特网结构示意图;图3为本发明对路由表进行空间管理的方法实施例中1pm—state—list的结构示意图;图4为本发明对路由表进行空间管理的方法实施例一的流程图;图5为本发明对路由表进行空间管理的方法实施例二的流程图;图6为本发明对路由表进行空间管理的方法实施例中空间调整的流程图;图7为本发明对路由表进行空间管理的方法实施例中删除表项的流程图;图8为本发明对路由表进行空间管理的装置实施例的结构示意图。具体实施方式为了管理这一块路由表,可以通过一个空间管理单元(lpm—state)数组即空间管理链表来记录每个掩码(前缀)长度对路由表的使用情况,即按掩码长度将表项存放在路由表中。这个数组的长度可为34,即每一个IPV4掩码(前缀)长度占用一个为1pm—state,即,每一个lpm—state都对应一个掩码(前缀)长度,而IPV4掩码(前缀)长度从0~32,对应lpm-state[O]~lpm_state[32],共占33个lpm—state,再加上一个用于管理的lpm_state[33],总共占34个lpm—stat6。每一个lpm-state可记录如下的信息start当前lpm—state对应的掩码(前缀)长度记录的路由表项在3各由表中的开始地址;end当前lpm-state对应的掩码(前缀)长度记录的路由表项在路由表中的结束地址;prev前一个lpm-state对应的掩码长度;next后一个lpm—state对应的掩码长度;vent3各由表中此lpm-state对应的掩码长度的路由表项的个数;fent此lpm-state名下的空闲空间,即此lpm—state管理的空间还可以写入表项的个数。整个的空间管理单元的数组(lpm-state-array)逻辑上可以看作是一条双向链表(lpm—state—list)。整个lpm—state—list的结构如图3所示,最后一个空间单元lpm—state[33]为头节点。而lpm_state-list的每一个节点的下一个节点在lpm-state-array中的索引被记录在Next中,前一个节点在lpm_state—array中的索引净皮i己录在prev中。而力口果Next'或者prev的l直为-1,那么就it明没有下一个或者前一个节点。这个lpm-state-list记录了空间管理单元的数组中的有效部分,而且1pm_state_1ist中的空间管理单元都必须按照掩码长度来排序。系统初始化时,对所有对应于掩码长度的1pm-state中的凄t据进4亍如下赋值Start=-l;End=_1;Prev=-1;Next=-lVent=0;Fent=0。对用于管理的空间管理单元lpm-state[33]的数据进行如下赋值Start=-1;End=_1;Prev=-1;Next=-1;Vent=0;Fent=4096(路由表的最大容量)。系统初始化后,这条lpm—state—list只有一个节点lpm-state[33]。由于lpm_state[33]初始化的值的Fent为4096,所以在逻辑上所有的^各由表的空间可以被看作都被这一个lpm-state占有。本发明对路由表进行空间管理的方法实施例包括计算待插入表项的掩码长度;遍历空间管理链表中的空间管理单元;所述空间管理链表中,各空间管理单元之间与掩码长度——对应,存储的表项与对应的掩码长度相同;所述各空间管理单元按照掩码长度从长到短的顺序排列,均设置有表项存储的开始地址start、表项存储的结束地址end、前一个空间管理单元存储对应的掩码长度prev、后一个空间管理单元对应的掩码长度next、本空间管理单元存储的表项个数vent及本空间管理单元中的空闲空间fent;获取与所述待插入表项的掩码长度对应的空间管理单元,并确定所述待插入表项在获取的空间管理单元中的存放位置,插入所述待插入表项。本实施例中,路由表通过空间管理链表中的空间管理单元对空间进行分配管理,使得插入路由表中的表项依照掩码(前缀)长度由长至短的顺序进行排列,并且,使用本实施例方法,所有根据这个空间管理链表的插入和删除表项操作都不能破坏路由表的有序性,保证了最长前缀匹配一开始便可匹配到最长的掩码长度路由表项,避免了对路由表中的所有表项进行匹配后才能获得最长的掩码长度路由表项,大大提高了路由表查找速度;同时路由表中的表项按照一定顺序排列也有利于表项的快速插入和删除,大大提高了路由表的空间利用率。图4为本发明对路由表进行空间管理的方法实施例一的流程图,包括步骤41、计算并获取待插入表项的掩码长度LENGTH;步骤42、在1pm—state—list中查找对应掩码(前缀)长度为LENGTH的lpm-state,即lpm—state[LENGTH],判断lpm_state_list是否存在管理长度为LENGTH表项的lpm_state[LENGTH];如果在lpm_state-list中存在lpm—state[LENGTH],表明已给这个lpm_state[LENGTH]分配空间,而且已经插入至少一个表项。因此这个空间管理单元的vent值不为0。只要判断lpm-state[LENGTH]的vent值是否为0,便可知lpm_state[LENGTH]是否被分配路由表上的空间。如果不为0,说明已经给其分配路由表上的空间,空间内存放有掩码(前缀)长度为LENGTH的表项,只要将待插入表项即新的表项放在后面即可,具体可执行步骤44。如果为0,说明还没有把这个lpm—state[LENGTH]加入lpm_state—list,同时也没有给其分配路由表上的空间,路由表中没有掩码(前缀)长度为LENGTH的表项,需要先把lpm—state[LENGTH]加入lpm—state_list,再分配空间,然后把这个表项放在lpm_state[LENGTH]管理的空间的第一个位置,具体可执行步骤43。步骤43、将lpm—state[LENGTH]加入lpm—state—list,并且分配空间;遍历lpm—state-list,找到相邻的两个lpm_state,且其中一个lpm-state对应的掩码长度大于LENGTH,另一个lpm_state对应的掩码长度小于LENGTH,将lpm—state[LENGTH]插入这两个lpm—state之间,并修改前一个节点的next值、后一个节点的prev值,设置lpm一state[LENGTH]的next和prev值。然后给这个1pm_state分配路由表的空间。分配空间的准则可使用二分法,即乂人前一个lpm-state处获取其一半的fent空间到自己的名下,这样可以使得路由空间快速的分配到各个掩码长度上。具体的计算过程如下新节点fent=前一个节点的fent/2;新节点start=前一个节点的fent/2+前一个节点的end+1;新节点end=刚刚计算出来的新节点start;前一个节点的fent=原先的fent-新节点的fent;新节点的prev=前一个节点的掩码长度;杀斤节点的next=前一个节点的next;前一个节点的next=新节点的掩码长度;后一个节点的prev=新节点的掩码长度;其余的值均不变。步骤44、确定新表项的插入位置。当lpm-state[LENGTH]中的vent为0时,表明lpm_state[LENGTH]为lpm_state—list中新设置的空间管理单元,则将1pm—state[LENGTH]管理的start空间确定为待插入表项的存力文地址空间;当lpm-state[LENGTH]中的vent非0时,表明lpm_state[LENGTH]是lpm—state—list已有的空间管理单元。由于每一个lpm_state的end值表示当前掩码(前缀)长度记录的路由信息在路由信息空间中的结束索引值,也就是最后一个表项写入的位置,那么如果还有剩余的空间,即FENT大于O,那么将end+l就是给新表项应该在路由表中的位置,即将lpm-state[LENGTH]管理的end+l空间确定为待插入表项的存放地址空间。步骤45、将新表项插入确定的位置,同时对于新设置的lpm-state[LENGTH],其end-start,fent值减l,vent值力口1;对于已有的lpm-state[LENGTH],其end值加l,fent4直减l,vent寸直加l。此时,完成新表项的存方欠。当已有的lpm-state[LENGTH]中的fent值为0时,表明lpm-state[LENGTH]管理的空间已存满表项,此时,还可进一步扭j亍步骤46:调整lpm—state-list中lpm—state管理的空间。图5为本发明对路由表进行空间管理的方法实施例二的流程图,本实施例中,假设系统初始化后,需要在空的路由表中插入一表项。此时,lpm画state—1ist中仅有1pm—state[33]:掩码(前缀)长度33start-lend-lnext-1prev-lvent0fent4096此时若插入一条表项〈目的地址10.0.0.0掩码(前缀)255.0.0.0下一跳A〉;具体包括步骤51、计算获得其掩码(前缀)长度为8;步骤52、将掩码长度为8对应的空间管理单元lpm—state[8]插入lpm_state_list,并且分配空间;依照上述实施例一中分配空间的计算原则,得到掩码长度为8的节点lpm-state[8]的各个值fent=4096(前一个节点的fent值)/2=2048;start=4096(前一个节点的fent值)/2+(-1)(前一个节点的end值)+1=2048;end=start=2048;next=-l(前一个节点的next值);prev=33(前一个节点的掩码长度);依照上述的计算原则,得到掩码长度为33的节点lpm-state[33]的各个值fent=4096(原先的fent)—2048(新节点的fent值)=2048;next=8(新节点的掩码长度);经过以上计算,lpm-state-list中的空间管理单元包括掩码(前缀)长度338start-l2048end_12048next4_1prsv-133vsnt00fent20482048步骤53、确定表项〈目的地址10.0.0.0掩码(前缀)255.0.0.0下一跳A〉在lpm-state[8]管理空间中的插入位置。由于此节点lpm—state[8]的fent不为0,所以可以确定表项〈目的地址10.0.0.0掩码(前缀)255.0.0.0下一跳A〉的写入位置是end,也即start,路由表中的2048位置;步骤54、将表项〈目的地址10.0.0.0掩码(前缀)255.0.0.0下一跳A〉插入路由表中的2048位置,并设置lpm_state[8]中的:vent=vent+1=0+1=1.,fent=fent-1=2048-1=2047。最后,lpm_state-list的结果如下掩码(前缀)长度338start-12048end-12048next4—1prev-133vent01fent20482047路由表的结果如下索引目的地址掩码(前缀)下一跳204810.0.0.0255.0.0.0A假设再向路由表中写入表项〈目的地址10.0.0.0掩码(前缀)255.255.0.0下一跳B〉。由于该表项的掩码长度是16,根据跟上述实施例一中的算法,成功写入该表项后的lpm-state-list的结果3口下掩码(前缀)长度33168start_110242048end_110242048nsxt84_1prsv_1338vent011fent102410232047写入该表项后的路由表的结果如下索引目的地址掩码(前缀)下一跳102410.0.0.0255.255.0.0B204810.0.0.0255.0,0.0A假设再向路由表写入表项〈目的地址20.0.0.0掩码(前缀)255.0.0.0下一跳C〉。由于该表项掩码长度为8,且lpm—state-list中已经有对应掩码长度为8的空间管理单元,因而,不需要插入新节点,只需要确定该表项的写入位置。根据跟上述实施例一中的算法,插入该表项后,lpm_state_list的结果如下<table>tableseeoriginaldocumentpage20</column></row><table>插入该表项后,路由表的结果如下索引目的地址掩码(前缀)下一跳102410.0.0.0255.255.0.0B204810.0.0.0255.0.0.0A204920.0.0.0255.0.0.0C假设最后写入一个表项〈目的地址0.0.0.0掩码(前缀)0.0.0.0下一跳D〉。由于该表项掩码长度为0,依照上述实施例一中的算法,插入该表项后lpm-state—list的结果如下掩码(前缀)长度331680start-1102420483073end-1102420493073next840-1prev-13380vent0121fent1024102310231022插入该表项后路由表的结果如下索引目的地址掩码(前缀)下一跳102410.0.0.0255.255.0.0B204810.0.0.0255.0.0.0A204920.0.0,0255.0.0.0C30730.0.0.00.0.0.0Dlpm—state-list是以掩码长度排序的链表,其中以LPM—STATE[33]为头节点,确定表项的插入位置时,根据待插入表项的掩码长度遍历lpm—state—list,能够维护lpm_state_list以及路由表中表项的有序性,从而保证了三层交换机或路由器能够快速的查找到路由信息。图6为本发明对路由表进行空间管理的方法实施例中空间调整的流程图。当使用上述方法实施例中的方法向路由表频繁添加表项时,常常会发生某一掩码长度对应的lpm_state管理的空间都存放有表项这种情况,但是其他掩码长度对应的lpm_state管理的空间还有空闲位置。此时需要对空间管理单元及其管理的空间做出调整,以最大的利用路由表空间。假设当前情况是〔前缀)长度331680start_1102420483073end-l204730723073next840-1pr6v_13380vent0102410251fent1024001022当前掩码长度为16的lpm-state和掩码长度为8的lpm_state的fent为0,表明lpm-state名下没有空闲空间可用。但是,掩码长度为33的lpm-state,依旧还有1024个空闲空间。如果此时还有掩码长度为16或8的表项等待插入时,就会发现空间不足,此时要进行表项的调整,来保证路由表空间的利用率。调整lpm-state及其管理的空间主要包括先向前或向后寻找剩余的空间,寻找fent不为0的lpm-state;将此lpm-state的空闲空间,一步一步移动至需要空闲空间的lpm_state下。假设需要插入表项〈目的地址110.0.0.0掩码(前缀)255.0.0.0下一跳C>,该表项的掩码长度为8,而lpm-state-list中掩码长度为8的lpm_state的fent值为0,对lpm_state—list及路由表中的表项进4亍调整的过程为步骤61、先向前,即向掩码长度大于8的方向,查找空闲的空间,发现lpm—state[33]具有1024个空闲的空间。步骤62、进行表项调整。先将1pm—state—list中lpm_state[33]的fent减去1,再将lpm—state[16]的start减去1,此时1pm—state[16]实际拥有1025个空间,占用了1024个,还空闲了一个。该空闲空间是/人lpm-state[33]移动过来的,在路由表中的索引是1023。然后将路由表中的第1024至2047中的表项整体前移一个位置,此时lpm-state[16]的start中的表项被复制到第1023个表项的位置,lpm-state[16]的end值中的表项被复制到第2046个表项的位置,这样位于路由表的索引2047的位置的空间空闲,同时把lpm—state[16]的end值减1。得到lpm—state—list:掩码(前缀)长度331680start一l102320483073end-l204630723073nsxt840_1prsv_13380vsnt0102410251fent1023101022由于需要插入的表项的掩码长度为8,所以还需要继续做移动调整。同理,将lpm—state[16]的fent减去1,1pm—state[8]的start也减去1,此时lpm_state[16]实际拥有1024个空间,占用了1024个,没有空闲空间。而lpm—state[8]实际拥有1026个空间,其中,占用了1025个,另外一个空间是从lpm—state[16]移动过来的,在路由表中的索引是2047。然后将路由表中的第2048至3072中的表项整体前移一个位置,此时lpm—state[8]的start中的表项^皮复制到第2047个表项的位置,lpnustate[8]的end值中的表项被复制到第3071个表项的位置,这样位于路由表的索引3072的位置的空间空闲,同时把lpm_state[16]的end值减1。得到lpm—state—list:<table>tableseeoriginaldocumentpage23</column></row><table>此时,新的表项就可以顺利插入lpm-state[8]获得的空闲空间,即路由表中3072这个位置。得到如下最终结果8020473073307330730-1801026101022掩码(前缀)长度3316start_11023end_12047next84prcv-l33V6nt01024fent10230如果向前查找没有空闲空间,那么可向后查找,即向掩码长度小于8的方向查找。找到空闲空间后的操:作过程与上述过程类似。空间的移动调整也可以先向后查找,如果没有找到空闲间,再向前查找,方法与上述过程类似。路由表插入表项后,有时也可能需要删除其中的表项。图7为本发明对路由表进行空间管理的方法实施例中删除表项的流程图。步骤71、删除一个表项时,首先要获取这个表项的索引值及掩码长度。步骤72、根据索引值可获知该表项在路由表中的位置,删除该表项。步骤73、维护该表项掩码长度对应的lpm—state,并将其fent值加l,vent减去1,判断减1后vent是否为0;如果VENT不为0,执行步骤74;如果vent为0,执行步骤75。步骤74、把该表项掩码长度对应的lpm—state管理的第end位置中存放的表项复制到已删除表项的位置,然后将end值减去l,完成删除操作。步骤75、回收分配给该表项掩码长度对应的1pm-state的所有空间,并将回收的全部空间都分配给前一个lpm-state,/人lpm_state—1ist里面删除该表项掩码长度对应的lpm_state,完成删除操:作。邗l/没当lpm-state-list的情况i口下掩码(前缀)长度331680start_1102420483073end_1102420493073next840_1prsv_13380vent0121fent1024102310231022前路由表的情况如下:<table>tableseeoriginaldocumentpage25</column></row><table>此时,删除表项〈目的地址10.0.0.0掩码(前缀)255.0.0.0下一跳A〉。首先获取该表项的索引值为2048,掩码长度为8。然后删除路由表中第2048位置存放的表项,lpm—state[8]的fent值加1,vent减去l后为0,所以把第2049位置中存放的表项复制到第2048个表项的位置,然后将end值减去l,得到的lpm_state_list情况如下<table>tableseeoriginaldocumentpage25</column></row><table>掩码(前缀)下一跳255.255.0.0B255.0.0.0C0.0.0.0D如果继续删除表项〈目的地址20.0.0.0掩码(前缀)255.0.0.0下一跳<table>tableseeoriginaldocumentpage25</column></row><table>得到的路由表情况如下索引目的地址102410.0.0.0204820.0.0.030730.0.0.0该表项的索引值为2048,掩码长度为8。删除该表项之后,lpm_state[8]的fent值加1,vent减去1后为0,回收分配给lpm-state[8]的所有的空间。在回收之前的情况如下掩码(前缀)长度331680start_1102420483073end_1102420473073nsxt840_1PI"6V-l33800101fent1024102310251022索引目的地址掩码(前缀)下一跳102410.0.0.0255.255.0.0B30730.0.0.00.0.0.0D回收时,把lpm-state[8]的所有空闲空间,都分配给前一个lpm_state即lpm_state[16],并且把lpm一state[8]从1pm—state—list里面删除。并且前一节点的fent=前一节点的fent+净皮回收节点的fent,本实施例中,lpm_state[16]的fent=lpm一state[16]的fent+lpm一state[8]的fent。回收后的结果如下掩码(前缀)长度33160start_110243073end-l10243073ti6xt80-lprcv-1330vsnt011fent102420481022通过以上方法实施例删除路由表中的路由表项后,空间管理单元记录的信息和路由表实际的信息依然相对应,从而保证了下一次插入操作能够查找到正确的插入位置。图8为本发明对路由表进行空间管理的装置实施例的结构示意图,对路由表进行空间管理的装置包括计算单元81、空间管理链表82、遍历单元83、获取单元84及插入单元85。计算单元81用于计算待插入表项的掩码长度;空间管理链表82用于存储空间管理单元,所述空间管理链表82中,各空间管理单元之间与掩码长度——对应,存储的表项与对应的掩码长度相同;所述各空间管理单元按照掩码长度从长到短的顺序排列,均设置有表项存储的开始地址start、表项存储的结束地址end、前一个空间管理单元存储对应的掩码长度prev、后一个空间管理单元对应的掩码长度next、本空间管理单元存储的表项个数vent及本空间管理单元中的空闲空间fent;遍历单元83用于遍历所述空间管理链表82中的空间管理单元;获取单元84用于获取与所述待插入表项的掩码长度对应的空间管理单元;插入单元85用于根据所述获取单元84获取的空间管理单元,确定所述待插入表项在路由表中的存放位置,插入所述待插入表项。插入单元85可包括存放子单元及计算子单元。存放子单元用于将所述待插入表项存放在加1后的end空间内;计算子单元用于将所述获取的空间管理单元中的end值加1;并将所述获取的空间管理单元中的vent值加1。对路由表进行空间管理的装置还可包括设置单元,用于在所述空间管理链表中不存在与所述待插入表项的掩码长度对应的空间管理单元的情况下,在所述空间管理链表中设置所述待插入表项的掩码长度对应的空间管理单元,分配路由表空间;所述插入单元85还可用于根据所述设置单元设置的空间管理单元确定所述待插入表项的存放位置,插入所述待插入表项。设置单元可包括查找子单元、分配子单元及维护子单元。查找子单元用于找到对应的掩码长度大于所述待插入表项的空间管理单元,并从中获取对应的掩码长度最短的空间管理单元;分配子单元用于将所述对应的掩码长度最短的空间管理单元管理的部分空闲空间分配给待设置的空间管理单元;维护子单元,用于将所述待设置的空间管理单元的start设置为所述对应的掩码长度最短的空间管理单元的end+剩余的空闲空间+1;将所述待设置的空间管理单元的end设置为与本空间管理单元的start相同的值;将所述待设置的空间管理单元的prev设置为所述对应的掩码长度最短的空间管理单元对应的掩码长度;将所述待设置的空间管理单元的next设置为所述对应的掩码长度最短的空间管理单元中next的值;将所述待设置的空间管理单元的fent设置为所述部分空闲空间。所述维护子单元还可用于将所述对应的掩码长度最短的空间管理单元中的next设置为所述插入表项的掩码长度;所述查找子单元还可用于获取所述空间管理链表中对应的掩码长度小于所述待插入表项的空间管理单元,并从中获取对应的掩码长度最长的空间管理单元;所述维护子单元还可用于将所述对应的掩码长度最长的空间管理单元中的prev设置为所述待插入表项的掩码长度。当待插入表项掩码长度对应的空间管理单元新加入空间管理链表时,所述插入单元还可用于将所述待插入表项存放在所述待设置的空间管理单元的start空间内;所述维护单元还可用于将所述待设置的空间管理单元的fent值减1。当所述待插入表项的掩码长度对应的空间管理单元中无空闲空间可插入时,对路由表进行空间管理的装置还可包括空间查找单元及调整单元。空间查找单元用于在之前或之后的空间管理单元所管理的空间中查找空闲空间;调整单元用于通过整体移动,将具有空闲空间的空间管理单元管理的部分空闲空间,分配给所述待插入表项的掩码长度对应的空间管理单元。此时,所述插入单元还可用于将所述待插入表项插入分配的空闲空间内,并将所述待插入表项的掩码长度对应的空间管理单元的end值加1。所述调整单元可包括移动子单元及维护子单元。移动子单元用于将所述待插入表项的掩码长度对应的空间管理单元所管理的表项,及与所述具有空闲空间的空间管理单元之间的空间管理单元所管理的表项整体向前移动一个空间;或者用于将所述待插入表项的掩码长度对应的空间管理单元与所述具有空闲空间的空间管理单元之间的空间管理单元所管理的表项、及所述具有空闲空间的空间管理单元所管理的表项整体向后移动一个空间;维护子单元用于将所述具有空闲空间的空间管理单元的fent值减1。当删除路由表中的表项时,所述获取单元84还可用于获取待删除表项存放的索引值;此时,对路由表进行空间管理的装置还可进一步包括删除单元及维护单元。删除单元用于删除所述待删除表项;维护单元用于将所述待删除表项所属的空间管理单元中的fent值加1,vent值减1,end空间内的表项存放到所述待删除表项的地址空间内,将end值减1。所述删除单元还可用于在所述待删除表项所属的空间管理单元中的vent值减1后为0时,从所述空间管理链表中删除所述待删除表项所属的空间管理单元;所述调整单元还可用于将所述待删除表项所属的空间管理单元管理的所有空间分配给前一个空间管理单元进行管理;所述维护单元还可用于将所述前一个空间管理单元的fent值加上所述所有空间。三层交换机或路由器可包括上述装置实施例中提供的任意一种对路由表进行空间管理的装置,以提高三层交换机或路由器的路由表查找速度。三层交换机或路由器通过上述方法及装置实施例,使得路由表中的路由表项呈现出一种有序的排列状态,路由表中的表项依照掩码长度由长至短进行排序存放,即,掩码(前缀)长度越长的表项在越前面,掩码(前缀)长度越短的表项在越后面,所以只要从上往下一个个遍历,跳过空的表项,第一个匹配到肯定是最长前缀匹配的表项,大大提高了最长前缀匹配的匹配速度,且较适合用于三层交换机的路由模块。并且,路由表的这种管理方式也使得路由表的维护和查找也相当的快速,同时大大提高了路由表的空间利用率。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。权利要求1、一种对路由表进行空间管理的方法,其特征在于,包括计算待插入表项的掩码长度;遍历空间管理链表中的空间管理单元;所述空间管理链表中,各空间管理单元与掩码长度一一对应,管理与对应的掩码长度相同的表项;所述各空间管理单元按照对应的掩码长度从长到短的顺序排列,均设置有表项存储的开始地址start、表项存储的结束地址end、前一个空间管理单元存储对应的掩码长度prev、后一个空间管理单元对应的掩码长度next、本空间管理单元存储的表项个数vent及本空间管理单元中的空闲空间fent;获取与所述待插入表项的掩码长度对应的空间管理单元,确定所述待插入表项在路由表中的存放位置,插入所述待插入表项。2、根据权利要求1所述的对路由表进行空间管理的方法,其特征在于,确定所述待插入表项在路由表中的存放位置,插入所述待插入表项包括将所述获取的空间管理单元中的end值加1;将所述待插入表项存放在加1后的end空间内,并将所述获取的空间管理单元中的vent<直力口1。3、根据权利要求1所述的对路由表进行空间管理的方法,其特征在于,所述空间管理链表中不存在与所述待插入表项的掩码长度对应的空间管理单元的情况下,在所述空间管理链表中设置所述待插入表项的掩码长度对应的空间管理单元,分配路由表空间,并确定所述待插入表项的存放位置,插入所述待插入表项。4、根据权利要求3所述的对路由表进行空间管理的方法,其特征在于,在所述空间管理链表中设置所述待插入表项的掩码长度对应的空间管理单元,分配路由表空间包括找到对应的掩码长度大于所述待插入表项的空间管理单元,并从中获取对应的掩码长度最短的空间管理单元;将所述对应的掩码长度最短的空间管理单元管理的部分空闲空间分配给待设置的空间管理单元;将所述待设置的空间管理单元的start设置为所述对应的掩码长度最短的空间管理单元的end+剩余的空闲空间+1;将所述待设置的空间管理单元的end设置为与本空间管理单元的start相同的值;将所述待设置的空间管理单元的prev设置为所述对应的掩码长度最短的空间管理单元对应的掩码长度;将所述待设置的空间管理单元的next设置为所述对应的掩码长度最短的空间管理单元中next的值;将所述待设置的空间管理单元的fent设置为所述部分空闲空间;将所述对应的掩码长度最短的空间管理单元中的next设置为所述插入表项的掩码长度;获取所述空间管理链表中对应的掩码长度小于所述待插入表项的空间管理单元,并从中获取对应的掩码长度最长的空间管理单元;将所述对应的掩码长度最长的空间管理单元中的prev设置为所述待插入表项的掩码长度;确定所述待插入表项的存放位置,插入所述待插入表项包括将所述待插入表项存放在所述待设置的空间管理单元的start空间内;将所述待设置的空间管理单元的fent值减1。5、根据权利要求1-4中任一项所述的对路由表进行空间管理的方法,其特征在于,确定所述待插入表项在路由表中的存放位置,插入所述待插入表项包括在所述待插入表项的掩码长度对应的空间管理单元之前或之后的空间管理单元所管理的空间中查找空闲空间;通过整体移动,将具有空闲空间的空间管理单元管理的部分空闲空间,分配给所述待插入表项的掩码长度对应的空间管理单元;将所述待插入表项插入分配的空闲空间内,并将所述待插入表项的掩码长度对应的空间管理单元的end值加1。6、根据权利要求5所述的对路由表进行空间管理的方法,其特征在于,通过整体移动,将具有空闲空间的空间管理单元管理的部分空闲空间,分配给所述待插入表项的掩码长度对应的空间管理单元包括将所述待插入表项的掩码长度对应的空间管理单元所管理的表项,及与所述具有空闲空间的空间管理单元之间的空间管理单元所管理的表项整体向前移动一个空间;将所述具有空闲空间的空间管理单元的fent值减1;或者包括将所述待插入表项的掩码长度对应的空间管理单元与所述具有空闲空间的空间管理单元之间的空间管理单元所管理的表项、及所述具有空闲空间的空间管理单元所管理的表项整体向后移动一个空间;将所述具有空闲空间的空间管理单元的fent值减1。7、根据权利要求1-4中任一项所述的对路由表进行空间管理的方法,其特征在于,还包括获取待删除表项存放的索引值;删除所述待删除表项;将所述待删除表项所属的空间管理单元中的fent值加l,vent值减1,end空间内的表项存放到所述待删除表项的地址空间内,将end值减1。8、根据权利要求7所述的对路由表进行空间管理的方法,其特征在于,所述待删除表项所属的空间管理单元中的vent值减1后为0时,从所述空间管理链表中删除所述待删除表项所属的空间管理单元;将所述待删除表项所属的空间管理单元管理的所有空间分配给前一个空间管理单元进行管理;将所述前一个空间管理单元的fent值加上所述所有空间。9、一种对路由表进行空间管理的装置,其特征在于,包括计算单元,用于计算待插入表项的掩码长度;空间管理链表,用于存储空间管理单元,所述空间管理链表中,各空间管理单元之间与掩码长度——对应,存储的表项与对应的掩码长度相同;所述各空间管理单元按照掩码长度从长到短的顺序排列,均设置有表项存储的开始地址start、表项存储的结束地址end、前一个空间管理单元存储对应的掩码长度prev、后一个空间管理单元对应的掩码长度next、本空间管理单元存储的表项个数vent及本空间管理单元中的空闲空间fent;遍历单元,用于遍历所述空间管理链表中的空间管理单元;获取单元,用于获取与所述待插入表项的掩码长度对应的空间管理单元;插入单元,用于根据所述获取单元获取的空间管理单元,确定所述待插入表项在路由表中的存放位置,插入所述待插入表项。10、根据权利要求9所述的对路由表进行空间管理的装置,其特征在于,所述插入单元包括存放子单元,用于将所述待插入表项存放在加1后的end空间内;计算子单元,用于将所述获取的空间管理单元中的end值加1;并将所述获取的空间管理单元中的vent值加1。11、根据权利要求9所述的对路由表进行空间管理的装置,其特征在于,还包括设置单元,用于在所述空间管理链表中不存在与所述待插入表项的掩码长度对应的空间管理单元的情况下,在所述空间管理链表中设置所述待插入表项的掩码长度对应的空间管理单元,分配路由表空间;所述插入单元还用于根据所述设置单元设置的空间管理单元确定所述待插入表项的存放位置,插入所述待插入表项。12、根据权利要求11所述的对路由表进行空间管理的装置,其特征在于,所述设置单元包括查找子单元,用于找到对应的掩码长度大于所述待插入表项的空间管理单元,并从中获取对应的掩码长度最短的空间管理单元;分配子单元,用于将所述对应的掩码长度最短的空间管理单元管理的部分空闲空间分配给待设置的空间管理单元;获取所述空间管理链表中对应的掩码长度小于所述待插入表项的空间管理单元,并从中获取对应的掩码长度最长的空间管理单元;维护子单元,用于将所述待设置的空间管理单元的start设置为所述对应的掩码长度最短的空间管理单元的end+剩余的空闲空间+1;将所述待设置的空间管理单元的end设置为与本空间管理单元的start相同的l直;将所述待设置的空间管理单元的prev设置为所述对应的掩码长度最短的空间管理单元对应的掩码长度;将所述待设置的空间管理单元的next设置为所述对应的掩码长度最短的空间管理单元中next的值;将所述待设置的空间管理单元的fent设置为所述部分空闲空间;将所述对应的掩码长度最短的空间管理单元中的next设置为所述插入表项的掩码长度;将所述对应的掩码长度最长的空间管理单元中的prev设置为所述待插入表项的掩码长度;所述插入单元还用于将所述待插入表项存放在所述待设置的空间管理单元的start空间内;所述维护单元还用于将所述待设置的空间管理单元的fent值减1。13、根据权利要求9-12中任一项所述的对路由表进行空间管理的装置,其特征在于,还包括空间查找单元,用于在所述待插入表项的掩码长度对应的空间管理单元之前或之后的空间管理单元所管理的空间中查找空闲空间;调整单元,用于通过整体移动,将具有空闲空间的空间管理单元管理的部分空闲空间,分配给所述待插入表项的掩码长度对应的空间管理单元;所述插入单元还用于将所述待插入表项插入分配的空闲空间内,并将所述待插入表项的掩码长度对应的空间管理单元的end值加1。14、根据权利要求13所述的对路由表进行空间管理的装置,其特征在于,所述调整单元包括移动子单元,用于将所述待插入表项的掩码长度对应的空间管理单元所管理的表项,及与所述具有空闲空间的空间管理单元之间的空间管理单元所管理的表项整体向前移动一个空间;或者用于将所述待插入表项的掩码长度对应的空间管理单元与所述具有空闲空间的空间管理单元之间的空间管理单元所管理的表项、及所述具有空闲空间的空间管理单元所管理的表项整体向后移动一个空间;维护子单元,用于将所述具有空闲空间的空间管理单元的fent值减1。15、根据权利要求9-12中任一项所述的对路由表进行空间管理的装置,其特征在于,所述获取单元还用于获取待删除表项存放的索引值;所述装置还包括删除单元,用于删除所述待删除表项;维护单元,用于将所述待删除表项所属的空间管理单元中的fent值加1,vent值减1,end空间内的表项存放到所述待删除表项的地址空间内,将end值减1。16、根据权利要求15所述的对路由表进行空间管理的装置,其特征在于,所述删除单元还用于在所述待删除表项所属的空间管理单元中的vent值减l后为0时,从所述空间管理链表中删除所述待删除表项所属的空间管理单元;所述调整单元还用于将所述待删除表项所属的空间管理单元管理的所有空间分配给前一个空间管理单元进行管理;所述维护单元还用于将所述前一个空间管理单元的fent值加上所述所有空间。17、一种三层交换机,其特征在于,包括上述权利要求9-16中任一项所述的对路由表进行空间管理的装置。18、一种路由器,其特征在于,包括上述权利要求9-16中任一项所述的对路由表进行空间管理的装置。全文摘要本发明涉及一种对路由表进行空间管理的方法、装置、交换机及路由器,通过空间管理链表中的空间管理单元对路由表空间进行分配管理,使得三层交换机或路由器插入路由表中的表项依照掩码(前缀)长度由长至短的顺序进行排列,保证了最长前缀匹配一开始便可匹配到最长的掩码长度路由表项,避免了同一表项在路由表中的重复存放,以及对路由表中的所有表项进行匹配后才能获得最长的掩码长度路由表项,大大提高了路由表查找速度;同时路由表中的表项按照一定顺序排列也有利于表项的快速插入和删除,大大提高了路由表的空间利用率。文档编号H04L12/56GK101335706SQ20081011692公开日2008年12月31日申请日期2008年7月21日优先权日2008年7月21日发明者旭王申请人:北京星网锐捷网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1