发明内容
本发明的目的:本发明的目的是克服现有方法在实现最长匹配搜索时,由于回溯而造成的存储开销增加,搜索效率降低的缺陷,从而提供一种可用于实现最长前缀匹配搜索的方法和实现装置,以提高搜索的效率。
为了实现上述目的,本发明提供了一种实现无回溯的最长前缀匹配搜索的装置,包括第一选择器10、第二选择器11、第三选择器12、第一加法器14、第二加法器15、第一或门16、第二或门17、第三或门18、多路选择器19、译码器20、掩码生成单元21和比较部件22;还包括输入信息寄存器组1、树结点寄存器组2、树结点读取部件4、叶索引表读取部件5、比较结果寄存器6、叶结点信息寄存器组7、搜索结果寄存器组8和控制信号生成部件9;
其中,所述的输入信息寄存器组1与所述的多路选择器19、第一选择器10、第二加法器15连接;所述的树结点寄存器组2分别与所述的第一选择器10、第一加法器14、第二加法器15、树结点读取部件4和译码器20电连接;所述的第一选择器10还连接到第一加法器14上,所述的第一加法器14则与所述的多路选择器19连接;所述的树结点读取部件4与多路选择器19和外部的存储器3电连接,所述的存储器3还与所述的叶索引表读取部件5电连接,所述的叶索引表读取部件5与所述的第二加法器15、叶结点信息寄存器组7电连接;所述译码器20分别与所述的第一或门16、第二或门17、第三或门18和掩码生成单元21电连接,所述的第三或门18与所述的多路选择器19连接,所述的第一或门16与所述的比较结果寄存器6电连接,所述的掩码生成单元21还与叶结点信息寄存器组7、比较部件22相连,所述的比较部件22分别与所述的输入信息寄存器组1、比较结果寄存器6、第二选择器11和第三选择器12电连接,所述的叶结点信息寄存器组7分别与第二选择器11、第三选择器12电连接,所述的第二选择器11、第三选择器12分别连接到所述的搜索结果寄存器组8上。
上述技术方案中,所述的输入信息寄存器组1由叶索引表始址寄存器、搜索树根结点地址寄存器、输入关键字寄存器组成。
上述技术方案中,所述的树结点寄存器组2由类型寄存器、待测位寄存器、下一中间结点地址寄存器以及叶结点索引寄存器组成。
上述技术方案中,所述的叶结点信息寄存器组7由关键字寄存器、前缀长度寄存器、数据信息大小寄存器和数据信息指针寄存器组成。
上述技术方案中,所述的搜索结果寄存器组8由搜索信息大小寄存器和搜索信息指针寄存器组成。
一种实现无回溯的最长前缀匹配搜索的方法,包括以下步骤:
步骤100、将搜索需要的参数写入到输入信息寄存器组1中,发出启动信号,启动一个查找过程;
步骤200、树结点读写部件4根据输入信息寄存器组1中的搜索树根结点地址寄存器和输入关键字寄存器中的信息读取外接的存储器3,将相应的树结点信息存入到树结点寄存器组2中,并置比较结果寄存器6为0,执行下一步;
步骤300、判断树结点寄存器组2中的类型域的值,如果类型域的值为“00”,则置完成信号为1,并根据比较结果寄存器6的值产生搜索成功与失败信号,执行步骤900;若类型域的值为其他值,则执行下一步;
步骤400、如果树结点寄存器组2中的类型域的值为“01”或者“11”,执行下一步;否则,树结点寄存器组2中的类型域为“10”,执行步骤900;
步骤500、将树结点寄存器组2中的叶结点索引域中的值与输入信息寄存器组1中的叶索引表始址寄存器的值相加,相加后的结果送叶索引表读取部件5,叶索引表读写部件5根据相加的结果对存储器3进行读取,将相应的叶结点信息写入到叶结点信息寄存器组7中后,执行下一步;
步骤600、将叶结点信息寄存器组7中的前缀长度域的值送到掩码生成单元21中,生成的掩码与输入信息寄存器组1的输入关键字寄存器所发出的输入关键字相与,结果送到比较部件,与叶子信息寄存器7中的关键字域中的值作比较;
步骤700、判断比较的结果,若比较成功,结果送比较结果寄存器6,并将叶结点信息寄存器组7中的数据信息大小和数据信息指针域分别送到搜索结果寄存器组8的对应寄存器中;若比较失败,不进行任何操作;
步骤800、对树结点寄存器组2中的类型域的值进行判断,若该值为“11”,执行步骤下一步;否则置完成信号为1,根据比较结果寄存器的值产生搜索成功与失败信号,转步骤1000;
步骤900、根据树结点寄存器组2的下一待测位域取出输入信息寄存器组1中的输入关键字域对应位,若该位为1,则将树结点寄存器组2的下一中间结点地址域的值加1,得到下一个中间结点地址;否则将树结点寄存器组2的下一中间结点地址域的值作为下一中间结点地址,把该地址输入到树结点读写部件4;树结点读写部件4读取存储器3,将相应的树结点存入到树结点寄存器组2中,重新执行步骤300;
步骤1000、外部设备检测到完成信号,检查搜索输出结果,若为1,则查找成功,读取输出的数据信息大小和数据信息指针寄存器,获得搜索结果;否则,搜索失败。
上述技术方案中,采用路径压缩的二进制树来存储搜索结构和叶索引表来存放叶结点信息。
在所述的二进制树中,有包含两个树结点结构的中间结点,所述的两个树结点存放在连续的存储空间中;所述树结点结构由类型、待测位、下一中间结点地址和叶结点索引四个域组成。
所述的叶索引表是一个线性表,它的每个元素是一个叶结点结构;所述叶结点结构存放所述二进制树的叶结点信息,所述叶结点结构由关键字、前缀长度、数据信息指针和数据信息大小四个域组成。
本发明的优点在于:
1、本发明采用了一种新的无回溯的路径压缩的二进制树的结构及搜索方法,可提高搜索效率并降低存储空间消耗。
2、本发明采用的叶子索引的机制,可减少实现查找的存储空间开销。
具体实施方式
下面结合附图和具体实施方式对本发明的实现无回溯的最长前缀匹配搜索的方法和装置作进一步说明。
在对本发明的实现无回溯的最长前缀匹配搜索的方法进行说明前,首先对本发明中所涉及到的数据结构进行说明。
在本发明中所采用的二进制搜索树中包含以下数据结构:中间结点(IN)、树结点(TN)、叶结点索引表(LIT)和叶结点(LN)。
中间结点(IN)是实现搜索树内部结点的结构,如表1所示,它包含了两个树结点结构,结点1(TN1)和结点2(TN2),它们存放在连续的存储空间中,分别用于表示该结点的左右两棵子树。
表1
树结点(TN)是中间结点(IN)的基本组成部分。如表2所示,一个树结点包含了类型(Type)、待测位(TB)、下一中间结点地址(NIA)和叶结点索引(LI)几个域。其中,类型(Type)域表明了该树结点的类型。在本方法中,树结点分为四类:空树结点、连接叶结点的树结点、连接中间结点的树结点和连接叶及中间结点的树结点。类型域的长度为两位,表3给出了各个结点类型的定义和成立条件;待测位(TB)域表明关键字中待测试的位的位置;下一中间结点地址保存了连接在该树结点上的中间结点的地址;而叶结点索引则存储了连接在该树结点上的叶子结点在叶结点索引表中的索引值。
表2
类型 |
编码(二进制) |
成立条件 |
各个域的值 |
TB |
NIA |
LI |
空 |
00 |
该项为空项 |
空 |
空 |
空 |
连接叶结点 |
01 |
该项上连接了一个叶结点 |
空 |
空 |
LI |
连接中间结点 |
10 |
该项连接了一个中间结点 |
TB |
NIA |
空 |
连接叶结点及中间结点 |
11 |
该项连接了一个中间结点和叶结点 |
TB |
NIA |
LI |
表3
叶结点是实现查找树的叶子结点的结构,如表4所示,它包含关键字(Key)、前缀长度(PL)、数据信息指针(DP)和数据信息大小(DS)四个域。其中,关键字和前缀长度域存储了该叶子中关键字,用于在查找时与输入的关键字比较;数据信息指针域和数据信息大小域分别保存了与该叶子结点对应的数据信息在存储器中的地址及其大小,这两个域将作为搜索结果返回,控制处理器可以根据它们从存储器中读出对应的数据信息。
表4
叶结点索引表(LIT)是一个线性表,它的每个元素是一个叶结点结构。如表5所示,该表是一个保存8个32位的IPv4路由表项的叶结点索引表的示例,其中,0至7号前缀分别与0至7号数据一一对应。例如,在编号为0的叶结点索引表项中,一个32位的IP地址,它的前缀长度为16位,因此,该IP地址中关键字为32位IP地址的前16位,即“1.1.x.x”中的“1.1”为关键字。
编号 |
关键字(Key) |
前缀长度(PL) |
数据指针(DP) |
数据大小(DS) |
0 |
1.1.x.x |
16 |
数据0的地址 |
数据0的大小 |
1 |
2.x.x.x |
8 |
数据1的地址 |
数据1的大小 |
2 |
3.0.0.x |
24 |
数据2的地址 |
数据2的大小 |
3 |
1.2.5.x |
24 |
数据3的地址 |
数据3的大小 |
4 |
1.1.2.x |
24 |
数据4的地址 |
数据4的大小 |
5 |
3.1.x.x |
16 |
数据5的地址 |
数据5的大小 |
6 |
1.0.x.x |
16 |
数据6的地址 |
数据6的大小 |
7 |
1.x.x.x |
8 |
数据7的地址 |
数据7的大小 |
表5
如图4所示,为一个搜索二叉树的示意图。在该示意图中,树结点的类型(Type)域是用二进制表示的,待测位(TB)和叶子索引是用十进制表示的。以其中的根结点为例,根结点本身是一个树结点数据结构,由该结点的类型值10可以看出,根结点只与一个中间结点相连,待测位的值为6表示进行搜索时,需根据输入关键字的第6位决定下一步访问根节点的左子树还是右子树,若关键字的第6位为1在根节点的右子树中查找,否则在根节点的左子树中查找。没有叶结点与根结点连接,因此叶结点索引值为空。在与根结点连接的中间结点上有两个树结点,左侧的树结点的类型值为11,表示该结点与一个叶结点和一个中间结点连接。待测位的值14表示进行搜索时,需根据输入关键字的第14位决定下一步访问当前节点的左子树还是右子树,若关键字的第14位为1,在当前节点的右子树中查找,否则在当前节点的左子树中查找,叶结点索引值7表示与结点相连接的叶结点在叶结点索引表中的第7项,假设所述的叶结点索引表就是表5,则与树结点连接的叶结点为1.x.x.x/8。图中其他结点的含义相类似,不再一一说明。
无回溯的最长前缀匹配搜索在网络技术中有广泛的应用,在本实施例中,以网络处理器为例,对本发明的应用于网络处理器的实现无回溯的最长前缀匹配搜索装置进行说明。
如图2所示,一个网络处理器由控制微处理器31、数据总线32、搜索装置33和存储器3组成,其中控制微处理器31通过数据总线32与搜索装置33相连,控制微处理器31和搜索装置33都和存储器3相连。搜索装置33即为本发明的实现无回溯的最长前缀匹配搜索装置,它作为网络处理器中的查找加速电路存在。数据总线32在控制微处理器31和搜索装置33之间传递数据和读写控制信号,控制微处理器31通过该部件向搜索装置33的寄存器写入数据或者从搜索装置33中间查找结果后读出。存储器3存储了查找所需的各种数据结构,它可以被控制微处理器31和搜索装置33访问。
下面对本发明的实现无回溯的最长前缀匹配搜索装置进行详细说明。如图1所示,本发明的实现无回溯的最长前缀匹配搜索装置包括输入信息寄存器组1、树结点寄存器组2、树结点读取部件4、叶索引表读取部件5、比较结果寄存器6、叶结点信息寄存器组7、搜索结果寄存器组8和控制信号生成部件9。其中,输入信息寄存器组1与多路选择器19、第一选择器10、第二加法器15连接;树结点寄存器组2分别与第一选择器10、第一加法器14、第二加法器15、树结点读取部件4和译码器20电连接;第一选择器10还连接到第一加法器14上,第一加法器14则与多路选择器19连接;树结点读取部件4与多路选择器19和外部的存储器3电连接,存储器3还与叶索引表读取部件5电连接,叶索引表读取部件5与第二加法器15、叶结点信息寄存器组7电连接;所述译码器20分别与第一或门16、第二或门17、第三或门18和掩码生成单元21电连接,所述的第三或门18与所述的多路选择器19连接,所述的第一或门16与比较结果寄存器6电连接,所述的掩码生成单元21还与叶结点信息寄存器组7、比较部件22相连,所述的比较部件22分别与输入信息寄存器组1、比较结果寄存器6、第二选择器和第三选择器12电连接,所述的叶结点信息寄存器组7分别与第二选择器11、第三选择器12电连接,所述的第二选择器11、第三选择器12分别连接到搜索结果寄存器组8上。
输入信息寄存器组1由多个寄存器组成,包括叶索引表始址寄存器、搜索树根结点地址寄存器、输入关键字寄存器。输入信息寄存器组1从与本发明装置连接的控制微处理器31输入参数,该参数包括搜索树根结点地址、叶结点索引表起始地址、输入关键字和启动信号。其中,搜索树的根结点在存储器3中的地址存储在搜索树根结点地址寄存器中,叶结点索引表的起始地址存储在叶索引表始址寄存器,输入关键字存储在输入关键字寄存器。
树结点读取部件4从与本发明的装置相连接的存储器3中读取树结点的信息。
树结点寄存器组2保存了树结点读取部件4从存储器3中读入的树结点,搜索电路利用该寄存器组决定进行查找时的各项操作,该寄存器组包含了类型寄存器(Type)、待测位(TB)寄存器、下一中间结点地址寄存器(NIA)以及叶结点索引(LI)寄存器四个寄存器,它们与树结点的几个域一一对应,树结点四个域中的信息保存在对应的四个寄存器中。
叶索引表读取部件5根据输入的输入信息寄存器组1中的叶索引表始址寄存器和树结点寄存器组2的LI寄存器读取叶索引表,将存储器3中的叶结点信息写入到叶结点信息寄存器组7中。
比较结果寄存器6存放了搜索过程中叶子结点中的关键字与输入关键字的比较结果,同时还用于在搜索结束时产生搜索成功与失败信号(OK/KO)。
叶结点信息寄存器组7包含关键字寄存器(Key)、前缀长度(PL)寄存器、数据信息大小寄存器(DS)和数据信息指针寄存器(DP)四个寄存器,分别用于存放叶结点的四个域中的相应信息。
搜索结果寄存器组8包括搜索信息大小寄存器和搜索信息指针寄存器两个寄存器,分别存放作为搜索结果的信息的大小及其在存储器中的存储位置。
控制信号生成部件9用于生成各种内部的控制信号。
本发明装置的输出结果发送到控制微处理器31上,输出结果具体包括搜索成功信号(OK/KO)、搜索完成信号(Finish)、搜索结果(搜索信息指针(DP)和搜索信息大小(DS))等。
上述的输入信息寄存器组1中的输入关键字寄存器和叶子信息寄存器组7中的Key域寄存器可根据需要可设置为不同的值,一般可取128位至256位之间,为简化硬件电路,其余的全部内部寄存器应所处的网络处理器的字长一致,例如,在32位长的机器中,内部搜索装置的寄存器均为32位长。
利用本发明的实现无回溯的最长前缀匹配搜索装置可实现无回溯的最长前缀匹配搜索,其方法如下:
步骤100、控制微处理器31将搜索需要的各种输入参数写入到输入信息寄存器组中,发出启动信号,启动一个查找过程;
步骤20、树结点读写部件4根据输入信息寄存器组1中的搜索树根结点地址寄存器和输入关键字寄存器中的信息读取存储器3,将相应的树结点存入到树结点寄存器组2中,置比较结果寄存器6为0,执行步骤300;
步骤300、判断树结点寄存器组2中的类型域(Type)的值,如果类型域的值为“00”,则置完成(Finish)信号为1,并根据比较结果寄存器6的值产生搜索成功与失败信号(OK/KO),执行步骤900;若类型域的值为其他值,则执行下一步;
步骤400、如果树结点寄存器组2中的类型域(Type)的值为“01”或者“11”,执行下一步;否则,树结点寄存器组2中的类型域(Type)为“10”,执行步骤900;
步骤500、将树结点寄存器组2中的叶结点索引域(LI)中的值与输入信息寄存器组1中的叶索引表始址寄存器的值相加,相加后的结果送叶索引表读取部件5;叶索引表读写部件5对存储器3进行读取,将相应的叶结点信息写入到叶结点信息寄存器组7中后,执行下一步;
步骤600、将叶结点信息寄存器组7中的前缀长度域(PL)的值送到掩码生成单元中,生成的掩码与输入信息寄存器组1的输入关键字寄存器所发出的输入关键字相与,结果送到比较部件,与叶子信息寄存器7中的关键字域(Key)中的值作比较;
步骤700、判断比较的结果,若比较成功,结果送比较结果寄存器6,并将叶结点信息寄存器组中的数据信息大小(DS)和数据信息指针域(DP)分别送到搜索结果寄存器组8的对应寄存器中;若比较失败,不进行任何操作。
步骤800、对树结点寄存器组2中的类型域(Type)的值进行判断,若该值为“11”,执行步骤900;否则置完成(Finish)信号为1,根据比较结果寄存器的值产生搜索成功与失败信号(OK/KO),转步骤1000;
步骤900、根据树结点寄存器组2的下一待测位域(TB)取出输入信息寄存器组1中的输入关键字域对应位,若该位为1,则将树结点寄存器组2的NIA域加1,得到下一个中间结点地址;否则树结点寄存器组2的NIA域作为下一中间结点地址。将该地址输入到树结点读写部件4;树结点读写部件4读取存储器3,将相应的树结点存入到树结点寄存器组2中,重新执行步骤300;
步骤1000、控制微处理器1检测到完成信号,检查搜索输出结果(OK/KO),若为1,则查找成功,读取输出的数据信息大小(DS)和数据信息指针(DP)寄存器,获得搜索结果;否则搜索失败。
下面以一个具体的实例,对无回溯的最长前缀匹配搜索过程进行说明。假设在图4的树中,搜索一个IPv4的地址1.1.0.5,所采用的叶结点索引表如表5所示,
具体实现如下:
步骤a、控制微处理器31将树和叶结点索引表的信息以及关键字(1.1.0.5)写入到搜索装置33的输入寄存器中,启动搜索过程;
步骤b、搜索装置33读入根结点,根结点的类型为“10”,关键字1.1.0.5的第6位(指二进制位)为0,因此读入根节点的左子结点;
步骤c、根结点的左子结点的类型值为“11”,TB域的值为14,叶子索引域为7,根据该索引值(7)和索引表的起始地址从表5中读入该叶子结点,其中的前缀为1.x.x.x(Key)/8(PL),根据前缀长度8得到掩码255.0.0.0。将掩码分别与关键字和前缀相与后作比较,二者相等,比较成功,因此将叶结点寄存器组的DP和DS域(即索引值为7的叶结点的地址和大小)送到结果寄存器组中。由于该节点的类型为“11“,TB域为14,而输入关键字1.1.0.5的第14位为0,因此还需要读入该树结点的左孩子结点。
步骤d、在步骤300中读入的结点的类型域为“10”,TB域为15,输入关键字(1.1.0.5)的第15位为1,故读入其右孩子结点。
步骤e、新读入的右孩子结点的类型域为“11”,TB域为23,其叶子索引域的值为0,根据该索引值(0)和索引表的起始地址从表5中读入该叶子结点,其中的前缀为1.1.x.x(Key)/16(PL),根据前缀长度16得到掩码255.255.0.0。将掩码分别与关键字和前缀相与后再比较,二者相等,即比较成功,所以将叶结点寄存器组的DP和DS域(即索引值为0的叶结点的地址和数据的大小)送到结果寄存器组中。由于该节点的类型为“11”,TB域为23,而输入关键字(1.1.0.5)的第23位为0,故读入该树结点的左孩子结点。
步骤f、本次读入的结点类型为“01”,其叶子索引域的值为4,根据该索引值(4)和索引表的起始地址从表5中读入索引值为4的叶子结点,其中的前缀为1.1.2.x(Key)/24(PL),根据前缀长度24得到掩码255.255.255.0。将掩码分别与关键字和前缀相与后再比较,二者不等,即比较失败,不进行任何操作。由于该结点的类型域为“01”,即搜索结束,此时比较结果寄存器的值为1,故置比较完成标志和比较成功标志为1。此时,搜索完成,搜索结果为搜索成功,得到的数据为索引值为0的叶结点中的数据。