CN113824814B - 一种转发表的地址匹配方法、装置、网络设备及介质 - Google Patents
一种转发表的地址匹配方法、装置、网络设备及介质 Download PDFInfo
- Publication number
- CN113824814B CN113824814B CN202111116187.8A CN202111116187A CN113824814B CN 113824814 B CN113824814 B CN 113824814B CN 202111116187 A CN202111116187 A CN 202111116187A CN 113824814 B CN113824814 B CN 113824814B
- Authority
- CN
- China
- Prior art keywords
- address
- prefix
- target
- node
- abstract
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2101/00—Indexing scheme associated with group H04L61/00
- H04L2101/60—Types of network addresses
- H04L2101/618—Details of network addresses
- H04L2101/622—Layer-2 addresses, e.g. medium access control [MAC] addresses
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例提供了一种转发表的地址匹配方法、装置、网络设备及介质,涉及通信技术领域,可以提高命中地址前缀的速度。本发明实施例的技术方案包括:获取待转发报文的目的地址,然后基于目的地址确定目标查找地址,并生成目标查找地址的第一摘要。将第一摘要输入设置的地址过滤器,以使地址过滤器基于转发表中的各个地址前缀的第二摘要对第一摘要进行摘要过滤,得到过滤结果。若过滤结果为存在与第一摘要匹配的目标第二摘要,则将目标第二摘要对应的目标地址前缀与目标查找地址进行地址匹配。若过滤结果为不存在与第一摘要匹配的第二摘要,则更新目标查找地址,返回生成目标查找地址的第一摘要的步骤。
Description
技术领域
本发明涉及通信技术领域,特别是涉及一种转发表的地址匹配方法、装置、网络设备及介质。
背景技术
网络中用于转发报文的网络设备(例如,网络交换机或路由器)一般基于接收到的报文中的目的地址,从转发表(Forwarding Information Base,FIB)中查找转发该报文的出接口。
转发表的每个表项称为一个条目(Entry),每个Entry包括地址前缀和对应的出接口。在查找转发报文的出接口时,需要获取FIB中与报文的目的地址匹配且最长的地址前缀,该地址前缀称为命中的地址前缀,并确定命中的地址前缀对应的出接口,作为转发报文的出接口。
由于需要获取与目的地址匹配且最长的地址前缀,因此在查找时,需要从转发表中最长的地址前缀开始,依次将转发表中包括的每个地址前缀与目的地址逐一进行查找匹配,以查找到匹配的地址前缀。这种方法需要对转发表进行多次查找,而且转发表通常数据量较大,因此导致命中地址前缀的速度不够快。
发明内容
本发明实施例的目的在于提供一种转发表的地址匹配方法、装置、网络设备及介质,以提高命中地址前缀的速度。具体技术方案如下:
第一方面,本发明实施例提供了一种转发表的地址匹配方法,应用于网络设备,所述方法包括:
获取待转发报文的目的地址;
基于所述目的地址,确定目标查找地址;
生成所述目标查找地址的第一摘要;
将所述第一摘要输入设置的地址过滤器,以使所述地址过滤器基于转发表中的各个地址前缀的第二摘要对所述第一摘要进行摘要过滤,得到过滤结果;
若过滤结果为存在与所述第一摘要匹配的目标第二摘要,则将所述目标第二摘要对应的目标地址前缀与所述目标查找地址进行地址匹配;
若过滤结果为不存在与所述第一摘要匹配的第二摘要,则更新所述目标查找地址,返回所述生成所述目标查找地址的第一摘要的步骤。
可选的,所述地址过滤器采用如下步骤设置:
检测所述转发表中包含的多个地址前缀的当前地址数据总量;
若所述当前地址数据总量小于等于预设数据量,则将布隆过滤器设置为所述地址过滤器;
若所述当前地址数据总量大于所述预设数据量,则将布谷过滤器设置为所述地址过滤器。
可选的,所述目标查找地址为所述目的地址的一部分;所述方法还包括:
若地址匹配成功,则将所述目标地址前缀作为待定地址前缀保存,增加目标查找地址的长度,作为更新后目标查找地址;返回所述生成所述目标查找地址的第一摘要的步骤;
若地址匹配不成功且未保存待定地址前缀,则减少目标查找地址的长度,作为更新后目标查找地址,返回所述生成所述目标查找地址的第一摘要的步骤;
若地址匹配不成功且已保存待定地址前缀,则基于所述转发表中包含多个地址前缀与出接口的对应关系,将最后保存的待定地址前缀对应的出接口确定为查找到的目的出接口。
可选的,所述方法还包括:基于预设周期时长中每个地址前缀的命中概率,创建决策二叉树;其中,所述决策二叉树的每个节点用于表示转发表中的一个地址前缀的前缀长度;所述决策二叉树的每个节点的左子树包含的节点表示的前缀长度小于该节点表示的前缀长度,且每个节点的右子树包含的节点表示的前缀长度大于该节点表示的前缀长度;
所述基于所述目的地址,确定目标查找地址的步骤,包括:
选择所述决策二叉树的根节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述更新所述目标查找地址的步骤,包括:
选择目标节点的左子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述增加目标查找地址的长度,作为更新后目标查找地址的步骤,包括:
选择目标节点的右子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述减少目标查找地址的长度,作为更新后目标查找地址的步骤,包括:
选择目标节点的左子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址。
可选的,所述基于预设周期时长中每个地址前缀的命中概率,创建决策二叉树的步骤,包括:
对于所述转发表包括的各地址前缀,从各地址前缀中选择一个地址前缀作为当前决策点,使得比当前决策点的前缀长度短的各地址前缀的期望步骤消耗和所述比当前决策点的前缀长度长的各地址前缀的期望步骤消耗最小;其中,各地址前缀的期望步骤消耗基于各地址前缀的命中概率确定;
将比当前决策点的前缀长度短的各地址前缀作为当前决策点的左子树,并将比当前决策点的前缀长度长的各地址前缀作为当前决策点的右子树;
针对当前决策点的左子树,返回所述从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至左子树包括的地址前缀数量为1;
针对当前决策点的右子树,返回所述从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至右子树包括的地址前缀数量为1;
根据所述转发表包括的各地址前缀之间的关联关系,构建所述决策二叉树。
可选的,所述从各地址前缀中选择一个地址前缀作为当前决策点,使得比当前决策点的前缀长度短的各地址前缀的期望步骤消耗和所述比当前决策点的前缀长度长的各地址前缀的期望步骤消耗最小,包括:
通过以下公式确定当前决策点:
Cost(m,n)=min(1+(Pm-1+Pm+…Pj-1)/(Pm-1+Pm+…Pn)*Cost(m,j-1)+
(Pj+…Pn)/(Pm-1+Pm+…Pn)*Cost(j+1,n))
其中,从地址前缀m到地址前缀n的前缀长度依次增大,Cost(m,n)为从地址前缀m到地址前缀n的期望步骤消耗,Pm-1为地址前缀m-1的命中概率,Pm为地址前缀m的命中概率,以此类推,Pn为地址前缀n的命中概率,Cost(m,j-1)为从地址前缀m到地址前缀j-1的期望步骤消耗,Cost(j+1,n)为从地址前缀j+1到地址前缀n的期望步骤消耗,Cost(i,i)=1,i=m,m+1,…,n,地址前缀j为当前决策点。
可选的,所述转发表中包含:真实转发表项和虚拟转发表项;
所述虚拟转发表项为:基于真实转发表项补充的表项,使得转发表中首位相同的各个地址前缀的前缀长度连续;
所述基于所述目的地址,确定目标查找地址的步骤,包括:
采用二分法对所述目的地址进行处理,确定目标查找地址;
所述更新所述目标查找地址的步骤,包括:
基于所述二分法及当前的目标查找地址,确定更新后的目标查找地址。
第二方面,本发明实施例提供了一种转发表的地址匹配装置,应用于网络设备,所述装置包括:
获取模块,用于获取待转发报文的目的地址;
确定模块,用于基于所述目的地址,确定目标查找地址;
生成模块,用于生成所述目标查找地址的第一摘要;
过滤模块,用于将所述第一摘要输入设置的地址过滤器,以使所述地址过滤器基于转发表中的各个地址前缀的第二摘要对所述第一摘要进行摘要过滤,得到过滤结果;
匹配模块,用于若过滤结果为存在与所述第一摘要匹配的目标第二摘要,则将所述目标第二摘要对应的目标地址前缀与所述目标查找地址进行地址匹配;
第一更新模块,用于若过滤结果为不存在与所述第一摘要匹配的第二摘要,则更新所述目标查找地址,调用所述生成模块执行所述生成所述目标查找地址的第一摘要的步骤。
可选的,所述装置还包括设置模块,所述设置模块用于:
检测所述转发表中包含的多个地址前缀的当前地址数据总量;
若所述当前地址数据总量小于等于预设数据量,则将布隆过滤器设置为所述地址过滤器;
若所述当前地址数据总量大于所述预设数据量,则将布谷过滤器设置为所述地址过滤器。
可选的,所述目标查找地址为所述目的地址的一部分;所述装置还包括第二更新模块和第三更新模块;
所述第二更新模块,用于若地址匹配成功,则将所述目标地址前缀作为待定地址前缀保存,增加目标查找地址的长度,作为更新后目标查找地址;调用所述生成模块执行所述生成所述目标查找地址的第一摘要的步骤;
所述第三更新模块,用于若地址匹配不成功且未保存待定地址前缀,则减少目标查找地址的长度,作为更新后目标查找地址,调用所述生成模块执行所述生成所述目标查找地址的第一摘要的步骤;
所述确定模块,还用于若地址匹配不成功且已保存待定地址前缀,则基于所述转发表中包含多个地址前缀与出接口的对应关系,将最后保存的待定地址前缀对应的出接口确定为查找到的目的出接口。
可选的,所述装置还包括:创建模块;
所述创建模块,用于基于预设周期时长中每个地址前缀的命中概率,创建决策二叉树;其中,所述决策二叉树的每个节点用于表示转发表中的一个地址前缀的前缀长度;所述决策二叉树的每个节点的左子树包含的节点表示的前缀长度小于该节点表示的前缀长度,且每个节点的右子树包含的节点表示的前缀长度大于该节点表示的前缀长度;
所述确定模块,具体用于:
选择所述决策二叉树的根节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述第一更新模块,具体用于:
选择目标节点的左子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述第二更新模块,具体用于:
选择目标节点的右子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述第三更新模块,具体用于:
选择目标节点的左子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址。
可选的,所述创建模块,具体用于:
对于所述转发表包括的各地址前缀,从各地址前缀中选择一个地址前缀作为当前决策点,使得比当前决策点的前缀长度短的各地址前缀的期望步骤消耗和所述比当前决策点的前缀长度长的各地址前缀的期望步骤消耗最小;其中,各地址前缀的期望步骤消耗基于各地址前缀的命中概率确定;
将比当前决策点的前缀长度短的各地址前缀作为当前决策点的左子树,并将比当前决策点的前缀长度长的各地址前缀作为当前决策点的右子树;
针对当前决策点的左子树,返回所述从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至左子树包括的地址前缀数量为1;
针对当前决策点的右子树,返回所述从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至右子树包括的地址前缀数量为1;
根据所述转发表包括的各地址前缀之间的关联关系,构建所述决策二叉树。
可选的,所述创建模块,具体用于:
通过以下公式确定当前决策点:
Cost(m,n)=min(1+(Pm-1+Pm+…Pj-1)/(Pm-1+Pm+…Pn)*Cost(m,j-1)+(Pj+…Pn)/(Pm-1+Pm+…Pn)*Cost(j+1,n))
其中,从地址前缀m到地址前缀n的前缀长度依次增大,Cost(m,n)为从地址前缀m到地址前缀n的期望步骤消耗,Pm-1为地址前缀m-1的命中概率,Pm为地址前缀m的命中概率,以此类推,Pn为地址前缀n的命中概率,Cost(m,j-1)为从地址前缀m到地址前缀j-1的期望步骤消耗,Cost(j+1,n)为从地址前缀j+1到地址前缀n的期望步骤消耗,Cost(i,i)=1,i=m,m+1,…,n,地址前缀j为当前决策点。
可选的,所述转发表中包含:真实转发表项和虚拟转发表项;
所述虚拟转发表项为:基于真实转发表项补充的表项,使得转发表中首位相同的各个地址前缀的前缀长度连续;
所述确定模块,具体用于:
采用二分法对所述目的地址进行处理,确定目标查找地址;
所述第一更新模块,具体用于:
基于所述二分法及当前的目标查找地址,确定更新后的目标查找地址。
第三方面,本发明实施例提供了一种网络设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述任一转发表的地址匹配方法的步骤。
第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一转发表的地址匹配方法的步骤。
第五方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一转发表的地址匹配方法。
本发明实施例提供的转发表的地址匹配方法、装置、网络设备及介质,网络设备可以在基于待转发报文的目的地址确定目标查找地址时,先将目标查找地址的第一摘要输入地址过滤器,并在过滤结果表示过滤器中存在与第一摘要匹配的目标第二摘要时,将目标第二摘要对应的目标地址前缀与目标查找地址进行地址匹配;若过滤结果为不存在与第一摘要匹配的第二摘要,则更新目标查找地址,返回生成目标查找地址的第一摘要的步骤。由于本发明实施例确定目标查找地址后,先基于摘要用过滤器进行过滤,在如果过滤器中不存在与第一摘要匹配的第二摘要的情况下,不需要再将目标查找地址与FIB中的地址前缀进行匹配。可见,本发明实施例减少了从FIB中查找地址前缀的次数,因此本发明实施例提高了命中地址前缀的速度。
当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
图1为相关技术中的Trie结构的示例性示意图;
图2为本发明实施例提供的一种转发表的地址匹配方法的一种流程图;
图3为本发明实施例提供的一种转发表的地址匹配方法的另一种流程图;
图4为本发明实施例提供的一种转发表的地址匹配方法的又一种流程图;
图5为图4所示实施例中一种生成决策二叉树的方法流程图;
图6为图4所示实施例中一种决策二叉树的示例性示意图;
图7为图4所示实施例中另一种决策二叉树的示例性示意图;
图8为图4所示实施例中另一种决策二叉树的示例性示意图;
图9为图4所示实施例中另一种决策二叉树的示例性示意图;
图10为图4所示实施例中另一种决策二叉树的示例性示意图;
图11为本发明实施例提供的一种转发表的地址匹配方法的再一种流程图;
图12为本发明实施例提供的一种转发表的地址匹配过程的示例性示意图;
图13为本发明实施例提供的一种转发表的地址匹配装置的结构示意图;
图14为本发明实施例提供的一种网络设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本发明保护的范围。
首先对本申请所涉及的相关技术进行介绍:
网络中用于转发报文的网络设备(例如网络交换机或路由器)使用转发表(Forwarding Information Base,FIB)作为网络报文的转发指导。例如,网络报文可以是网际协议版本4(Internet Protocol version 4,IPv4)、网际协议版本6(Internet ProtocolVersion 6,IPv6)或者命名数据网络(Named Data Networking,NDN)报文。
转发表的每个表项称为一个条目(Entry),每个Entry包括地址前缀和对应的出接口。地址前缀的结构包括:前缀/前缀长度,其中前缀长度表示前缀的有效部分。
在查找转发报文的出接口时,需要获取FIB中与报文的目的地址匹配且最长的地址前缀,该地址前缀称为命中的地址前缀,并将命中的地址前缀对应的出接口,作为转发报文的出接口。
以用于转发IPv4报文的FIB为例,假设该FIB包括Entry1和Entry2:
Entry1:地址前缀:10.0.0.0/8; 出接口:接口2。
Entry2:地址前缀:10.20.0.0/16; 出接口:接口3。
假设接收到的IPv4的报文的目的地址是10.0.0.1,该地址前16位与Entry2的地址前缀不匹配,且该地址前8位与Entry1的地址前缀匹配,因此将出接口2作为转发该报文的出接口。
假设网络设备接收到的IPv4的报文的目的地址是10.20.0.1,该地址前16位与Entry2的地址前缀匹配,且该地址前8位与Entry1的地址前缀匹配,且Entry2的前缀长度(16)比Entry1的前缀长度(8)更长,因此将出接口3作为转发该报文的出接口。
以用于转发NDN报文的FIB为例,假设该FIB包括Entry3、Entry4和Entry5:
Entry3:地址前缀:/Book/Fiction/Science; 出接口:接口1。
Entry4:地址前缀:/Book; 出接口:接口2。
Entry5:地址前缀:/Shoe; 出接口:接口3。
其中,NDN地址前缀中的“/”用于分层。
假设网络设备接收到的NDN报文的目的地址是/Book/Fiction/Science/BladeRunner,该地址能够与Entry3和Entry4的地址前缀匹配,且Entry3的前缀长度(3)比Entry4的前缀长度(1)更长,因此将Entry3包括的出接口1作为转发该报文的出接口。
假设网络设备接收到的NDN报文的目的地址是/Book/Fiction/Ancient,该地址仅能够与Entry4的地址前缀匹配,因此将Entry4包括的出接口3作为转发该报文的出接口。
IP网络(包括IPv4网络和IPv6网络)与NDN网络类似,可以将IP网络看作特殊的NDN网络。NDN网络的地址支持任意字符、且任意前缀长度的地址前缀。IP网络的地址支持0或1、且指定最大前缀长度的地址前缀。其中,IPv6网络的指定最大前缀长度为128比特(bit),IPv4网络的指定最大前缀长度为32bit。
相关技术中,查找与目的地址匹配且最长的地址前缀的方法包括两种,分别为基于字典树(Trie)的匹配方法,以及基于哈希(HASH)的匹配方法。以下分别介绍这两种方法:
基于Trie的匹配方法:
Trie的每个节点表示FIB中各Entry包括的出接口,从根节点到其他任一节点组成的路径表示一个地址前缀。
例如,Trie如图1所示,路径“根节点->接口1->接口2”表示二进制地址前缀10。其中,1是“根节点->接口1”的边(Edge),0是“接口1->接口2”的Edge。
路径“根节点->接口1->接口3->接口4”表示二进制地址前缀111。
对于接收到的每个IP报文的目的地址,从Trie的根节点开始,选择进入每个节点左子树或者右子树。如果需要选择右子树但当前节点不存在右子树,或者如果需要选择左子树但当前节点不存在左子树,那么当前节点与根节点之间的路径为与目的地址匹配且最长的地址前缀。并将当前节点代表的接口作为转发该报文的出接口。
例如,对于报文的目的地址010,该地址的第一个Bit为0,从根节点进入代表接口0的节点。此时代表接口0的节点没有子节点,停止匹配。因此为该报文选择接口0作为出接口。
又例如,对于报文的目的地址1101,该地址的第一个Bit为1,从根节点进入右子树,即代表接口1的节点。该报文的第二个Bit为1,进入代表接口1的节点的右子树,即代表接口3的节点。该报文的第三个Bit为0,应当进入代表接口3节点的左子树,但该左子树不存在,停止匹配。因此为该报文选择接口3作为出接口。
可以看出,基于Trie的匹配方法中,每一次确定目的地址进入的分支,都要从内存中查找该分支上是否存在节点,使得确定最长匹配前缀的速度慢。而且Trie结构还需要额外存储节点之间的父子关系信息,需要占用大量的内存空间。
基于HASH的匹配方法:
预先将FIB中的地址前缀和对应的出接口存放到哈希表(HASH TABLE)中。网络设备针对每个报文的目的地址,从完整的目的地址开始,确定是否存在与当前目的地址匹配的地址前缀,如果没有,则删除当前目的地址的最低位再次确定,直到找到匹配的地址前缀。
假设FIB包括如下Entry(其中“*”表示任意值,即0或1):
Entry 6:前缀1*; 出接口:接口a。
Entry 7:前缀10*; 出接口:接口b。
Entry 8:前缀110*; 出接口:接口c。
Entry 9:前缀1101; 出接口:接口d。
Entry 10:前缀*; 出接口:接口e。
对于报文的目的地址1110,第一步检查是否存在前缀为1110的FIB Entry,结果为未找到。第二步检查是否存在前缀为111*(即前缀长度为3,前缀为111)的FIB Entry,结果为未找到。第三步检查是否存在前缀为11*(即前缀长度为2,前缀为11)的FIB Entry,结果为未找到。第四步检查是否存在前缀为1*(即前缀长度为1,前缀为1)的FIB Entry,结果为找到FIB Entry6,该报文应该送往接口a发送。
可以看出,基于HASH的匹配方法中,需要从目的地址的最长长度开始依次递减目的地址长度,并查找是否存在匹配的前缀,查找最长匹配前缀的次数多,使得确定最长匹配前缀的速度慢。
对于IPv6地址,其长度为128bit,查找最长匹配前缀时,如果采用基于Trie的匹配方法,在最长匹配前缀为128bit时,需要访问128层Trie,即查找128次FIB。同样的,如果采用基于HASH的匹配方法,在最长匹配前缀为1bit时,需要访问128次哈希表,即查找128次FIB。
可见,基于Trie的匹配方法和基于HASH的匹配方法都需要多次查找FIB,由于FIB通常数据量较大,因此导致命中地址前缀的速度不够快。
以下对本发明实施例进行详细说明:
为了提高命中地址前缀的速度,本发明实施例提供了一种转发表的地址匹配方法,该方法应用于网络设备,其中,网络设备可以是交换机或者路由器。如图2所示,该方法包括如下步骤:
S201,获取待转发报文的目的地址。
S202,基于目的地址,确定目标查找地址。
其中,目标查找地址为目的地址或者目的地址的一部分。
一种实施方式中,可以先确定目标查找长度,然后从目的地址的最高位开始,截取目的地址中目标查找长度的地址,作为目标查找地址。
S203,生成目标查找地址的第一摘要。
一种实施方式中,可采用摘要算法计算目标查找地址的第一摘要。例如,摘要算法可以是乘法哈希或者位移运算哈希等。
S204,将第一摘要输入设置的地址过滤器,以使地址过滤器基于转发表中的各个地址前缀的第二摘要对第一摘要进行摘要过滤,得到过滤结果。
其中,地址过滤器中存储了对转发表中各地址前缀采用摘要算法计算的第二摘要。其中,计算第一摘要所采用的摘要算法和计算第二摘要所采用的摘要算法相同。
S205,若过滤结果为存在与第一摘要匹配的目标第二摘要,则将目标第二摘要对应的目标地址前缀与目标查找地址进行地址匹配。
本实施例中,在对转发表中各地址前缀采用摘要算法计算得到第二摘要后,可以保存每个地址前缀与其计算得到的第二摘要的对应关系。在过滤结果为存在与第一摘要匹配的目标第二摘要的情况下,可以基于该对应关系,快速找到对应的目标地址前缀,用目标地址前缀与目标查找地址进行地址匹配。
S206,若过滤结果为不存在与第一摘要匹配的第二摘要,则更新目标查找地址,返回S203。
在本发明实施例中,地址过滤器可以是布谷过滤器(Cuckoo Filter)或者布隆过滤器(Bloom Filter)。由于Cuckoo Filter和Bloom Filter均为假阳性(false positive)的过滤器,false positive的过滤器可能存在过滤结果表示存在与第一摘要匹配的目标第二摘要,但实际上不存在与目标查找地址匹配的地址前缀的情况,但不存在过滤结果表示不存在与第一摘要匹配的第二摘要,但存在与目标查找地址匹配的地址前缀的情况。因此本发明实施例可以在过滤结果为不存在与第一摘要匹配的第二摘要时,可以放弃从转发表中查找与目标查找地址匹配的地址前缀,直接更新目标查找地址。
本发明实施例提供的转发表的地址匹配方法,网络设备可以在基于待转发报文的目的地址确定目标查找地址时,先将目标查找地址的第一摘要输入地址过滤器,并在过滤结果表示过滤器中存在与第一摘要匹配的目标第二摘要时,将目标第二摘要对应的目标地址前缀与目标查找地址进行地址匹配;若过滤结果为不存在与第一摘要匹配的第二摘要,则更新目标查找地址,返回生成目标查找地址的第一摘要的步骤。由于本发明实施例确定目标查找地址后,先基于摘要用过滤器进行过滤,在如果过滤器中不存在与第一摘要匹配的第二摘要的情况下,不需要再将目标查找地址与FIB中的地址前缀进行匹配。可见,本发明实施例减少了从FIB中查找地址前缀的次数,因此本发明实施例提高了命中地址前缀的速度。
在本发明实施例中,图2中的地址过滤器可以采用如下步骤设置:检测转发表中包含的多个地址前缀的当前地址数据总量。若当前地址数据总量小于等于预设数据量,则将布隆过滤器设置为地址过滤器;若当前地址数据总量大于预设数据量,则将布谷过滤器设置为地址过滤器。
一种实施方式中,可以在增加或删除转发表中的转发表项后,检测转发表中包含的多个地址前缀的当前地址数据总量。并在当前地址数据总量从小于等于预设数据量切换为大于预设数据量时,将地址过滤器由布隆过滤器切换为布谷过滤器。在当前地址数据总量从大于预设数据量切换为小于等于预设数据量时,将地址过滤器由布谷过滤器切换为布隆过滤器。
由于布隆过滤器比布谷过滤器的过滤准确率更高,但占用内存空间更大;相应的,布谷过滤器比布隆过滤器的过滤准确率更低,但占用内存空间更小。因此为了减少地址过滤所占内存,以将地址过滤器设置在网络设备的处理器中,可以在转发表包含的地址前缀的数据总量小于等于预设数据量时,在处理器中设置布隆过滤器,以提高过滤准确性。在转发表包含的地址前缀的数据总量大于预设数据量时,在处理器中设置布谷过滤器,以减少占用的内存空间。
例如,可以在网络设备的中央处理器(central processing unit,CPU)的三级缓存(L3 Cache)中部署地址过滤器。相比于从内存中查询Trie或者哈希表,直接从CPU的L3Cache中查询过滤器的速度更快,因此提高了命中地址前缀的速度。
由于在命中地址前缀之前,在利用目的地址的部分地址查找转发表时,经常存在未查找到的情况,而且转发表中存储的地址前缀需要占用的存储空间大,但有效部分所占比例小。因此本发明实施例设置地址过滤器不但可以减少查找转发表的次数,而且地址过滤器与转发表相比数据量小,占用存储空间小,因此加速了查找最长匹配地址前缀的速度。
如前所述,目标查找地址可以为目的地址,也可以是目的地址的一部分。
如果目标查找地址为目的地址,则在步骤S205,将目标第二摘要对应的目标地址前缀与目标查找地址进行地址匹配之后,若地址匹配成功,则基于转发表中包含多个地址前缀与出接口的对应关系,将该目标地址前缀对应的出接口,确定为查找到的目的出接口。若地址匹配不成功,则根据之前的匹配情况,进行以下S2072和S2073两种不同的处理。
如果目标查找地址是目的地址的一部分,则在本发明实施例中,在上述S205之后,如图3所示,可以根据匹配结果进行以下三种不同的处理:
S2071、若地址匹配成功,则将目标地址前缀作为待定地址前缀保存,增加目标查找地址的长度,作为更新后目标查找地址,并返回S203。
可以理解的,如果地址匹配成功,即转发表中存在与目标查找地址匹配的地址前缀,但当前查找到的地址前缀不一定是与目的地址匹配且最长的地址前缀,因此需要增加目标查找地址的长度,再次查找。
S2072、若地址匹配不成功且未保存待定地址前缀,则减少目标查找地址的长度,作为更新后目标查找地址,并返回S203。
可以理解的,如果地址匹配不成功,即转发表中不存在与目标查找地址匹配的地址前缀,且之前未查找到能够与目的地址匹配的地址前缀,因此需要减少目标查找地址的长度,再次查找。
S2073、若地址匹配不成功且已保存待定地址前缀,则基于转发表中包含多个地址前缀与出接口的对应关系,将最后保存的待定地址前缀对应的出接口确定为查找到的目的出接口。
可以理解的,如果地址匹配不成功,即转发表中不存在与目标查找地址匹配的地址前缀。同时已保存待定地址前缀,即之前查找到与目的地址匹配的地址前缀,因此可以将上一次查找到的待定地址前缀作为与目的地址匹配的最长地址前缀,即命中的地址前缀。并将上一次查找到的待定地址前缀对应的出接口确定为目的出接口,作为转发待转发报文的出接口。
以上是HASH FIB查找增强过程,即通过地址过滤器减少查找FIB的次数,从而提高命中地址前缀的速度。
在其他实施例中,本发明实施例还可以实现查找路径增强,即通过缩短命中地址前缀的路径,从而提高命中地址前缀的速度。以下对本发明实施例中查找路径增强的方式进行说明:
本申请发明人发现报文命中规则的概率是不一样的,即不同长度的目的地址,命中FIB中地址前缀的概率不同。具体的,由于IP组网的划分,各地址前缀的命中概率不一样。例如,在IPv6组网中,将特定长度的地址前缀划分给网络内的路由器作为IP地址。例如特定长度可以是64bit或者48bit。
由于网络中各地址前缀的命中概率不一样,绝大多数报文的目的地址会命中特定长度的地址前缀,因此,使用二分查找法的效率低。例如,对于一个长度为128的目的地址,假设需要命中前缀长度为64的地址前缀,则利用二分查找法,先查找是否存在与目的地址中前64位地址匹配的地址前缀,结果为存在,继续查找是否存在与目的地址中前96位地址匹配的地址前缀,结果为不存在。以此类推,继续查找是否存在与目的地址中前72、68、66、65位地址匹配的地址前缀,结果为不存在,最后将与目的地址中前64位地址匹配的地址前缀,作为命中的地址前缀。
可见,该方式需要查找的次数较多,即命中地址前缀的路径较长。基于此,在其他实施例中,可以通过周期性的对流量命中FIB的情况进行采样,动态的决定每个报文的查找路径,即针对目的地址与FIB中不同长度的地址前缀进行匹配的前后顺序。相比固定的二分查找,有着更好的性能表现。
在本发明实施例中,可以基于预设周期时长中每个地址前缀的命中概率,创建决策二叉树。
其中,决策二叉树的每个节点用于表示转发表中的一个地址前缀的前缀长度。决策二叉树的每个节点的左子树包含的节点表示的前缀长度小于该节点表示的前缀长度,且每个节点的右子树包含的节点表示的前缀长度大于该节点表示的前缀长度。
而且,决策二叉树的各节点与转发表包括的各地址前缀一一对应。预设周期时长可以根据实际需要设置,即本发明实施例每隔一段时间统计一次该时间段内各地址前缀的命中概率,并基于此更新决策二叉树。
本发明实施例可以根据各地址前缀的命中概率,确定决策二叉树,即确定每次查找所基于的目标查找地址的长度,以优先查找命中概率高的前缀地址。
例如,在前缀长度为48bit的地址前缀的命中概率最高的情况下,网络设备可以针对每个报文的目的地址,先查找是否存在与目的地址的前48bit匹配的地址前缀,如果不存在,继续在48bit附近查找。例如,再查找是否存在与目的地址的前49bit匹配的地址前缀。而如果针对48bit的地址匹配成功,针对49bit的地址匹配不成功,则可以将针对48bit查找到的匹配的地址前缀作为命中的地址前缀,从而减少了查找次数。
在此基础上,参见图4,上述S202基于目的地址确定目标查找地址的方式,可以实现为:S202a、将目的地址中决策二叉树的根节点表示的前缀长度的地址确定为目标查找地址。
例如,决策二叉树的根节点表示的前缀长度为X,从目的地址的最高位开始,从目的地址中截取长度为X的地址作为目标查找地址。
基于此,参见图4,上述S206中在过滤结果为不存在与第一摘要匹配的第二摘要的情况下,更新目标查找地址的方式可以实现为:S206a、若过滤结果为不存在与第一摘要匹配的第二摘要,则选择目标节点的左子树上的子节点作为目标节点,并将目的地址中目标节点表示的前缀长度的地址确定为目标查找地址。后续返回S203。
同时,参见图4,上述S2071中,在地址匹配成功的情况下,增加目标查找地址的长度作为更新后目标查找地址的方式可以实现为:S2071a、若地址匹配成功,则将目标地址前缀作为待定地址前缀保存,选择目标节点的右子树上的子节点作为目标节点,并将目的地址中目标节点表示的前缀长度的地址确定为目标查找地址。
需要说明的是,如果目标节点不存在右子树,则将当前匹配成功的地址前缀作为命中的地址前缀。
参见图4,上述S2072中,在地址匹配不成功且未保存待定地址前缀的情况下,减少目标查找地址的长度作为更新后目标查找地址的方式可以实现为:S2072a、若地址匹配不成功且未保存待定地址前缀,则选择目标节点的左子树上的子节点作为目标节点,并将目的地址中目标节点表示的前缀长度的地址确定为目标查找地址。
在本发明实施例中,参见图5,上述基于预设周期时长中每个地址前缀的命中概率,创建决策二叉树的方式包括以下步骤:
S501,对于转发表包括的各地址前缀,从各地址前缀中选择一个地址前缀作为当前决策点,使得比当前决策点的前缀长度短的各地址前缀的期望步骤消耗和比当前决策点的前缀长度长的各地址前缀的期望步骤消耗最小。其中,各地址前缀的期望步骤消耗基于各地址前缀的命中概率确定。
一种实施方式中,可以通过以下公式(1)确定当前决策点:
Cost(m,n)=min(1+(Pm-1+Pm+…Pj-1)/(Pm-1+Pm+…Pn)*Cost(m,j-1)+(Pj+…Pn)/(Pm-1+Pm+…Pn)*Cost(j+1,n)) (1)
其中,从地址前缀m到地址前缀n的前缀长度依次增大,Cost(m,n)为从地址前缀m到地址前缀n的期望步骤消耗,Pm-1为地址前缀m-1的命中概率,Pm为地址前缀m的命中概率,以此类推,Pn为地址前缀n的命中概率,Cost(m,j-1)为从地址前缀m到地址前缀j-1的期望步骤消耗,Cost(j+1,n)为从地址前缀j+1到地址前缀n的期望步骤消耗,Cost(i,i)=1,i=m,m+1,…,n,地址前缀j为当前决策点。
例如,Cost(1,128)=min(1+(P1+P2+…+Pj-1)*Cost(1,j-1)+(Pj+Pj+1+…+P128)*Cost(j+1,128)),其中,1<=j<=128。
由于针对IP网络的转发表中,各地址前缀的前缀长度不同,因此地址前缀的命中概率=地址前缀长度的命中概率。
S502,将比当前决策点的前缀长度短的各地址前缀作为当前决策点的左子树,并将比当前决策点的前缀长度长的各地址前缀作为当前决策点的右子树。
S503,针对当前决策点的左子树,返回从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至左子树包括的地址前缀数量为1。
S503中,当前决策点的左子树,从各地址前缀中选择一个地址前缀作为当前决策点,使得比当前决策点的前缀长度短的各地址前缀的期望步骤消耗和比当前决策点的前缀长度长的各地址前缀的期望步骤消耗最小。然后将比当前决策点的前缀长度短的各地址前缀作为当前决策点的左子树,并将比当前决策点的前缀长度长的各地址前缀作为当前决策点的右子树。依次循环,直至当前决策点的左子树包括的地址前缀数量为1时,不再分割当前决策点的左子树。
S504,针对当前决策点的右子树,返回从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至右子树包括的地址前缀数量为1。
S504中,当前决策点的右子树,从各地址前缀中选择一个地址前缀作为当前决策点,使得比当前决策点的前缀长度短的各地址前缀的期望步骤消耗和比当前决策点的前缀长度长的各地址前缀的期望步骤消耗最小。然后将比当前决策点的前缀长度短的各地址前缀作为当前决策点的左子树,并将比当前决策点的前缀长度长的各地址前缀作为当前决策点的右子树。依次循环,直至当前决策点的右子树包括的地址前缀数量为1时,不再分割当前决策点的右子树。
S505,根据转发表包括的各地址前缀之间的关联关系,构建决策二叉树。
一种实施方式中,根据S501-S504确定的各地址前缀之间的父子关系,将各地址前缀的前缀长度对应一个节点,构建为决策二叉树。
本发明实施例可以根据各地址前缀的前缀长度的命中概率,确定目的地址的查找路径,相比于二分查找,减少了确定目标查找地址的次数,提高了查找效率。
示例性的,针对IPv6网络的转发表,假设前缀长度为128的地址前缀命中率最高,则生成的决策二叉树如图6所示,其中,NULL表示空,Others表示除前缀长度为128的地址前缀以外的地址前缀。此时,对于前缀长度为128的目的地址,只需要查找一次,就可以决定转发报文的出接口。
类似的,假设前缀长度为127的地址前缀命中率最高,则生成的决策二叉树如图7所示。此时,对于前缀长度为127的目的地址,只需要先查找127对应的节点,结果为存在与目的地址的前127bit匹配的地址前缀,因此继续查找128对应的节点,结果为不存在与目的地址的前128bit匹配的地址前缀。查找两次后即可决定转发报文的出接口为:与目的地址的前127bit匹配的地址前缀对应的出接口。
又例如,转发表包括Prefix1、Prefix2、Prefix3、Prefix4和Prefix5这五个地址前缀。并假设Prefix 1的命中概率为20%,Prefix2的命中概率为5%,Prefix3的命中概率为10%,Prefix4的命中概率为10%,Prefix5的命中概率为55%。
首先初始化矩阵,如表一所示,计算矩阵对角线的Cost和Split,其中Invalid表示无效。
表一
接着计算Cost(1,2)、Cost(2,3)、Cost(3,4)和Cost(4,5)。
计算Cost(1,2)时,可以选择Prefix1或者Prefix2为分裂(Split)点,即当前决策点。
选择Prefix1作为Split点时,Cost(1,2)=1+(20%+5%)/(20%+5%)*Cost(2,2)=2;
选择Prefix2作为Split点时,Cost(1,2)=1+20%/(20%+5%)*Cost(1,1)=1.8;
因此Cost(1,2)应该选择Prefix2作为Split点,且Cost(1,2)=1.8。
计算Cost(2,3)时,可以选择Prefix2或者Prefix3作为Split点。
选择Prefix2作为Split点时,Cost(2,3)=1+(5%+10%)/(20%+5%+10%)*Cost(3,3)=1.42;
选择Prefix3作为Split点时,Cost(2,3)=1+(20%+5%)/(20%+5%+10%)*Cost(2,2)=1.71;
因此Cost(2,3)应该选择Prefix2作为split点,且Cost(2,3)=1.42。
计算Cost(3,4)时,可以选择Prefix3或者Prefix4作为Split点。
选择Prefix3作为Split点时,Cost(3,4)=1+(10%+10%)/(5%+10%+10%)*Cost(4,4)=1.8;
选择Prefix4作为Split点时,Cost(3,4)=1+(5%+10%)/(5%+10%+10%)*Cost(3,3)=1.6;
因此Cost(3,4)应该选择Prefix4为Split点,且Cost(3,4)=1.6。
计算Cost(4,5)时,可以选择Prefix4或者Prefix5作为Split点。
选择Prefix4作为Split点时,Cost(4,5)=1+(10%+55%)/(10%+10%+55%)*Cost(4,4)=1.86;
选择Prefix5作为Split点时,Cost(4,5)=1+(10%+10%)/(10%+10%+55%)*Cost(5,5)=1.26;
因此Cost(4,5)应选择Prefix5作为Split点,且Cost(4,5)=1.26。
此时根据以上计算结果更新表一,得到表二。
表二
接下来计算Cost(1,3)、Cost(2,4)和Cost(3,5)。
对于Cost(1,3),可以选择Prefix1、Prefix2或者Prefix3作为Split点。
选择Prefix1作为Split点时,Cost(1,3)=1+(20%+5%+10%)/(20%+5%+10%)*Cost(2,3)=2.42;
选择Prefix2作为Split点时,Cost(1,3)=1+20%/(20%+5%+10%)*Cost(1,1)+(5%+10%)/(20%+5%+10%)*Cost(3,3)=2;
选择Prefix3作为Split点时,Cost(1,3)=1+(20%+5%)/(20%+5%+10%)*Cost(1,2)=2.28;
因此Cost(1,3)应该选择Prefix2作为Split点,且Cost(1,3)=2。
对于Cost(2,4),可以选择Prefix2、Prefix3或者Prefix4作为Split点。
选择Prefix2作为Split点时,Cost(2,4)=1+(5%+10%+10%)/(20%+5%+10%+10%)*Cost(3,4)=2.15;
选择Prefix3作为Split点时,Cost(2,4)=1+(20%+5%)/(20%+5%+10%+10%)*Cost(2,2)+(10%+10%)/(20%+5%+10%+10%)*C(4,4)=2;
选择Prefix4作为Split点时,Cost(2,4)=1+(20%+5%+10%)/(20%+5%+10%+10%)*Cost(2,3)=2.10;
因此Cost(2,4)应该选择Prefix3作为Split点,Cost(2,4)=2。
对于Cost(3,5)可以选择Prefix3、Prefix4或者Prefix5作为Split点。
选择Prefix3作为Split点时,Cost(3,5)=1+(10%+10%+55%)/(5%+10%+10%+55%)*Cost(4,5)=2.18;
选择Prefix4作为Split点时,Cost(3,5)=1+(5%+10%)/(5%+10%+10%+55%)*Cost(3,3)+(10%+55%)/(5%+10%+10%+55%)*Cost(5,5)=2;
选择Prefix5作为Split点时,Cost(3,5)=1+(5%+10%+10%)/(5%+10%+10%+55%)*Cost(3,4)=1.5;
故Cost(3,5)应该选择Prefix5作为Split点,且Cost(3,5)=1.5。
此时根据以上计算结果更新表二,得到表三。
表三
接着计算Cost(1,4)和Cost(2,5)。
对于Cost(1,4)可以选择Prefix1、Prefix2、Prefix3或者Prefix4作为Split点。
选择Prefix1作为Split点时,Cost(1,4)=1+(20%+5%+10%+10%)/(20%+5%+10%+10%)*Cost(2,4)=3;
选择Prefix2作为Split点时,Cost(1,4)=1+(20%)/(20%+5%+10%+10%)*Cost(1,1)+(5%+10%+10%)/(20%+5%+10%+10%)*Cost(3,4)=2.33;
选择Prefix3作为Split点时,Cost(1,4)=1+(20%+5%)/(20%+5%+10%+10%)*Cost(1,2)+(10%+10%)/(20%+5%+10%+10%)*Cost(4,4)=2.44;
选择Prefix4作为Split点时,Cost(1,4)=1+(20%+5%+10%)/(20%+5%+10%+10%)*Cost(1,3)=2.55;
所以Cost(1,4)应该选择Prefix2作为Split点,且Cost(1,4)=2.33。
对于Cost(2,5)可选择Prefix2、Prefix3、Prefix4或者Prefix5作为Split点。
选择Prefix2作为Split点时,Cost(2,5)=1+(5%+10%+10%+55%)/100%*Cost(3,5)=2.20;
选择Prefix3作为Split点时,Cost(2,5)=1+(20%+5%)/100%*Cost(2,2)+(10%+10%+55%)/100%*Cost(4,5)=2.195;
选择Prefix4作为Split点时,Cost(2,5)=1+(20%+5%+10%)/100%*Cost(2,3)+(10%+55%)/100%*Cost(5,5)=2.147;
选择Prefix5作为Split点时,Cost(2,5)=1+(20%+5%+10%+10%)/100%*Cost(2,4)=1.9;
因此Cost(2,5)应该选择Prefix5作为Split点,且Cost(2,5)=1.9。
此时根据以上计算结果更新表三,得到表四。
表四
最后,计算Cost(1,5)时,可选择Prefix1、Prefix2、Prefix3、Prefix4,Prefix5作为Split点。
选择Prefix1时,Cost(1,5)=1+(20%+5%+10%+10%+55%)/100%*Cost(2,4)=3;
选择Prefix2时,Cost(1,5)=1+20%/100%*Cost(1,1)+80%/100%*Cost(3,5)=2.4;
选择Prefix3时,Cost(1,5)=1+25%/100%*Cost(1,2)+75%/100%*Cost(4,5)=2.395;
选择Prefix4时,Cost(1,5)=1+35%/100%*Cost(1,3)+65%/100%*Cost(5,5)=2.35;
选择Prefix5时,Cost(1,5)=1+45%/100%*Cost(1,4)=2.04;
因此Cost(1,5)应该选择Prefix5作为Split点,且Cost(1,5)=2.04。
此时根据以上计算结果更新表四,得到表五。
表五
接着从(1,5)开始,即从Prefix1到Prefix5,逐层遍历Split生成决策二叉树,(1,5)的Split是5,因此决策二叉树如图8所示。
接着对于(1,4),其Split为2,此时决策二叉树如图9所示。
然后对于(3,4),其Split为4,此时决策二叉树如图10所示,图10为最终生成的决策二叉树。
示例性的,基于图10所示的决策二叉树,对于一个报文的目的地址,先基于根节点(即节点5)将目的地址的前5位作为目标查找地址,将目标查找地址的第一摘要输入地址过滤器。假设过滤结果为不存在与第一摘要匹配的目标第二摘要,则基于节点5的左子树上的子节点(即节点2),将目的地址的前2为作为目标查找地址,并将目标查找地址的第一摘要输入地址过滤器。假设过滤结果为存在与第一摘要匹配的目标第二摘要,则从转发表中查找与目标查找地址匹配的地址前缀。假设匹配成功,则基于节点2的右子树上的子节点(即节点4),将目的地址的前4为作为目标查找地址,并将目标查找地址的第一摘要输入地址过滤器。假设过滤结果为不存在与第一摘要匹配的目标第二摘要,则确定命中节点2,即命中从转发表中查找与目标查找地址匹配的地址前缀。将命中的地址前缀对应的出接口作为转发该报文的出接口。
在其他实施例中,还可以对HASH FIB进行改造,以实现用二分法进行查找。
相关技术中,基于HASH的匹配方法中无法使用二分查找法。
例如,假设一个转发表包括的FIB信息如下:
Entry 11:前缀/a/b/c/d/e; 出接口:接口1。
Entry 12:前缀/a; 出接口:接口2。
Entry 13:前缀/a/b/c/d; 出接口:接口3。
Entry 14:前缀/f/g; 出接口:接口4。
如果报文的目的地址为/a/b/c/d/f,那么该报文应该匹配Entry13,即该报文的最长匹配前缀为/a/b/c/d,且出接口为接口3。
但是如果采用二分查找法,首先应当查找是否存在与/a/b/c匹配的地址前缀,查找结果为不存在。因此错误地认为没有包括/a/b/c更长的匹配的地址前缀,因此缩短查找的地址,即查找是否存在与/a/b匹配的地址前缀,查找结果为不存在。最后查找是否存在与/a匹配的地址前缀,查找结果为存在,因此将接口2作为转发报文的出接口,从而导致报文的错误转发。
为解决上述问题,本发明实施例对HASH FIB进行改造,即在转发表中增加虚拟转发表项。使得转发表中包含:真实转发表项和虚拟转发表项。其中,虚拟转发表项为:基于真实转发表项补充的表项,使得转发表中首位相同的各个地址前缀的前缀长度连续。
在此技术上,参见图11,上述S202基于目的地址确定目标查找地址的方式,可以实现为:S202b、采用二分法对目的地址进行处理,确定目标查找地址。
相应的,参见图11,上述S206在过滤结果为不存在与第一摘要匹配的第二摘要的情况下,更新目标查找地址的方式,可以实现为:S206b、若过滤结果为不存在与第一摘要匹配的第二摘要,则基于二分法及当前的目标查找地址,确定更新后的目标查找地址。后续返回S203。
示例性的,针对上述包括Entry11~Entry14的转发表,Entry11~Entry14为真实转发表项,在该转发表中增加虚拟转发表项。
针对Entry11增加的虚拟Entry包括:/a、/a/b、/a/b/c和/a/b/c/d,其中/a和/a/b/c/d已经存在,因此不用增加,在转发表中增加虚拟Entry:/a/b,/a/b/c,并分别设置对应的出接口为接口2(即/a的出接口)。
Entry12的前缀长度为1,因此不增加虚拟Entry。
针对Entry13增加的虚拟Entry包括:/a,/a/b,/a/b/c,其中/a已经存在,在转发表中增加虚拟Entry:/a/b/c和/a/b,并分别设置对应的出接口为接口2(即/a的出接口)。
上述将/a/b和/a/b/c对应的出接口设置为接口2,是由于若一个地址命中/a/b或者/a/b/c,那么比/a/b或者/a/b/c前缀长度更长的地址前缀不能匹配该地址,且比/a/b或者/a/b/c前缀长度更短的地址前缀能够匹配该地址,即该地址必然能够与/a匹配,因此将/a对应的出接口作为/a/b和/a/b/c对应的出接口。
针对Entry4增加的虚拟Entry包括:/f,并设置对应的出接口为默认出接口。
将/f对应的出接口设置为默认出接口,是由于若一个地址命中/f,那么该地址与转发表中任一地址前缀均不匹配,不能利用转发表对该地址的报文进行转发,因此利用网络设备的默认出接口进行转发。
补充虚拟转发表项后的转发表包括:
Entry 11:前缀/a/b/c/d/e; 出接口:接口1。
Entry 12:前缀/a; 出接口:接口2。
Entry 13:前缀/a/b/c/d; 出接口:接口3。
Entry 14:前缀/f/g; 出接口:接口4。
Entry 15:前缀/a/b; 出接口:接口2,Virtual。
Entry 16:前缀/a/b/c; 出接口:接口2,Virtual。
Entry 17:前缀/f; 出接口:默认出接口,Virtual。
其中,Virtual用于标记虚拟转发表项。
此时针对报文的目的地址为/a/b/c/d/f,采用二分查找法,首先查找是否存在与/a/b/c匹配的地址前缀,查找结果为存在,匹配Entry 16。因此增加查找长度,继续查找是否存在与/a/b/c/d匹配的地址前缀,查找结果为存在,匹配Entry13。因此增加查找长度,继续查找是否存在与/a/b/c/d/f匹配的地址前缀,查找结果为不存在。此时命中Entry 13,确定出接口3为转发该报文的出接口,从而正确地转发报文。
又例如,假设报文的目的地址为/a/b/w/x/y/z,采用二分查找法,首先查找是否存在与/a/b/w匹配的地址前缀,查找结果为不存在。因此减少查找长度,继续查找是否存在与/a/b/匹配的地址前缀,查找结果为存在,匹配Entry15,同时Entry 15为虚拟转发表项,继续减少查找长度,继续查找是否存在与/a匹配的地址前缀,查找结果为存在,匹配Entry12。此时命中Entry 12,确定出接口2为转发该报文的出接口。
可以看出,本发明实施例在转发表中增加虚拟转发表项后,能够使用二分查找法进行递归查找,从而加速了命中地址前缀的速度,搜索次数从N提升为Log2(N)。其中,N为报文的目的地址的长度。例如IPv6报文的目的地址长度为128。
在本发明实施例中,通过对HASH FIB进行改造,在图2中的地址过滤器中,设置真实转发表项包括的地址前缀的第二摘要以及虚拟转发表项包括的地址前缀的第二摘要,从而使用二分法结合地址过滤器,加快命中地址前缀的速度。
在实际应用中,可以同时结合上述HASH FIB改造、查找路径增加和HASH FIB查找增强这三种增强方式,以提高命中地址前缀的效率。以下结合这三种增强方式,通过图12对本发明实施例的整体流程进行说明:
如图12所示,网络设备通过控制线程在内存(Memory)的转发表中增加虚拟转发表项。
通过控制线程周期性地确定转发表中各地址前缀的命中概率,并基于此生成决策二叉树,将决策二叉树设置在CPU Cache中。
通过控制线程,根据转发表中包括的地址前缀的当前地址数据总量,决定CPUCache中设置的地址过滤器的种类。具体的,若当前地址数据总量小于等于预设数据量,则将布隆过滤器设置为地址过滤器;若当前地址数据总量大于预设数据量,则将布谷过滤器设置为地址过滤器。
网络设备在接收到待转发报文时,通过转发线程基于CPU Cache中的决策二叉树的根节点作为目标节点,基于目标节点确定目标查找地址。并将目标查找地址的第一摘要输入CPU Cache中的地址过滤器。
若过滤结果为存在与第一摘要匹配的目标第二摘要,则通过转发线程进一步从Memory中的转发表中查找与目标查找地址匹配的地址前缀。若查找到匹配的地址前缀,则选择决策二叉树中目标节点右子树上的子节点作为目标节点,并基于目标节点确定目标查找地址。返回将目标查找地址的第一摘要输入CPU Cache中的地址过滤器的步骤。或者,若决策二叉树中目标节点不存在右子树,则将当前查找到的地址前缀作为命中的地址前缀。
若过滤结果为不存在与第一摘要匹配的第二摘要,同时目前已有从转发表中查找到匹配的地址前缀,则选择上一次查找到的地址前缀,作为命中的地址前缀。
若过滤结果为不存在与第一摘要匹配的第二摘要,同时目前没有从转发表中查找到匹配的地址前缀,则选择决策二叉树中目标节点左子树上的子节点作为目标节点,并基于目标节点确定目标查找地址。返回将目标查找地址的第一摘要输入CPU Cache中的地址过滤器的步骤。
将命中的地址前缀对应的出接口作为转发待转发报文的出接口。
基于相同的发明构思,对应于上述方法实施例,本发明实施例提供了一种转发表的地址匹配装置,应用于网络设备,如图13所示,该装置包括:获取模块1301、确定模块1302、生成模块1303、过滤模块1304、匹配模块1305和第一更新模块1306;
获取模块1301,用于获取待转发报文的目的地址;
确定模块1302,用于基于目的地址,确定目标查找地址;
生成模块1303,用于生成目标查找地址的第一摘要;
过滤模块1304,用于将第一摘要输入设置的地址过滤器,以使地址过滤器基于转发表中的各个地址前缀的第二摘要对第一摘要进行摘要过滤,得到过滤结果;
匹配模块1305,用于若过滤结果为存在与第一摘要匹配的目标第二摘要,则将目标第二摘要对应的目标地址前缀与目标查找地址进行地址匹配;
第一更新模块1306,用于若过滤结果为不存在与第一摘要匹配的第二摘要,则更新目标查找地址,调用生成模块1303执行生成目标查找地址的第一摘要的步骤。
可选的,该装置还可以包括设置模块,设置模块用于:
检测转发表中包含的多个地址前缀的当前地址数据总量;
若当前地址数据总量小于等于预设数据量,则将布隆过滤器设置为地址过滤器;
若当前地址数据总量大于预设数据量,则将布谷过滤器设置为地址过滤器。
可选的,目标查找地址为目的地址的一部分;该装置还可以包括第二更新模块和第三更新模块;
第二更新模块,用于若地址匹配成功,则将目标地址前缀作为待定地址前缀保存,增加目标查找地址的长度,作为更新后目标查找地址;调用生成模块1303执行生成目标查找地址的第一摘要的步骤;
第三更新模块,用于若地址匹配不成功且未保存待定地址前缀,则减少目标查找地址的长度,作为更新后目标查找地址,调用生成模块1303执行生成目标查找地址的第一摘要的步骤;
确定模块1302,还用于若地址匹配不成功且已保存待定地址前缀,则基于转发表中包含多个地址前缀与出接口的对应关系,将最后保存的待定地址前缀对应的出接口确定为查找到的目的出接口。
可选的,该装置还可以包括:创建模块;
创建模块,用于基于预设周期时长中每个地址前缀的命中概率,创建决策二叉树;其中,决策二叉树的每个节点用于表示转发表中的一个地址前缀的前缀长度;决策二叉树的每个节点的左子树包含的节点表示的前缀长度小于该节点表示的前缀长度,且每个节点的右子树包含的节点表示的前缀长度大于该节点表示的前缀长度;
确定模块1302,具体用于:
选择决策二叉树的根节点作为目标节点,并将目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
第一更新模块1306,具体用于:
选择目标节点的左子树上的子节点作为目标节点,并将目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
第二更新模块,具体用于:
选择目标节点的右子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
第三更新模块,具体用于:
选择目标节点的左子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址。
可选的,创建模块,具体用于:
对于转发表包括的各地址前缀,从各地址前缀中选择一个地址前缀作为当前决策点,使得比当前决策点的前缀长度短的各地址前缀的期望步骤消耗和比当前决策点的前缀长度长的各地址前缀的期望步骤消耗最小;其中,各地址前缀的期望步骤消耗基于各地址前缀的命中概率确定;
将比当前决策点的前缀长度短的各地址前缀作为当前决策点的左子树,并将比当前决策点的前缀长度长的各地址前缀作为当前决策点的右子树;
针对当前决策点的左子树,返回从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至左子树包括的地址前缀数量为1;
针对当前决策点的右子树,返回从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至右子树包括的地址前缀数量为1;
根据转发表包括的各地址前缀之间的关联关系,构建决策二叉树。
可选的,创建模块,具体用于:
通过以下公式确定当前决策点:
Cost(m,n)=min(1+(Pm-1+Pm+…Pj-1)/(Pm-1+Pm+…Pn)*Cost(m,j-1)+
(Pj+…Pn)/(Pm-1+Pm+…Pn)*Cost(j+1,n))
其中,从地址前缀m到地址前缀n的前缀长度依次增大,Cost(m,n)为从地址前缀m到地址前缀n的期望步骤消耗,Pm-1为地址前缀m-1的命中概率,Pm为地址前缀m的命中概率,以此类推,Pn为地址前缀n的命中概率,Cost(m,j-1)为从地址前缀m到地址前缀j-1的期望步骤消耗,Cost(j+1,n)为从地址前缀j+1到地址前缀n的期望步骤消耗,Cost(i,i)=1,i=m,m+1,…,n,地址前缀j为当前决策点。
可选的,转发表中包含:真实转发表项和虚拟转发表项;
虚拟转发表项为:基于真实转发表项补充的表项,使得转发表中首位相同的各个地址前缀的前缀长度连续;
确定模块1302,具体用于:
采用二分法对目的地址进行处理,确定目标查找地址;
第一更新模块1306,具体用于:
基于二分法及当前的目标查找地址,确定更新后的目标查找地址。
本发明实施例还提供了一种网络设备,如图14所示,包括处理器1401、通信接口1402、存储器1403和通信总线1404,其中,处理器1401,通信接口1402,存储器1403通过通信总线1404完成相互间的通信,
存储器1403,用于存放计算机程序;
处理器1401,用于执行存储器1403上所存放的程序时,实现上述方法实施例中的方法步骤。
上述网络设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述网络设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一转发表的地址匹配方法的步骤。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一转发表的地址匹配方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (14)
1.一种转发表的地址匹配方法,其特征在于,应用于网络设备,所述方法包括:
获取待转发报文的目的地址;
基于所述目的地址,确定目标查找地址,其中,所述目标查找地址为所述目的地址的一部分;
生成所述目标查找地址的第一摘要;
将所述第一摘要输入设置的地址过滤器,以使所述地址过滤器基于转发表中的各个地址前缀的第二摘要对所述第一摘要进行摘要过滤,得到过滤结果,其中,所述转发表中存储有每个地址前缀与其计算得到的第二摘要的对应关系;
若过滤结果为存在与所述第一摘要匹配的目标第二摘要,则将所述目标第二摘要对应的目标地址前缀与所述目标查找地址进行地址匹配;
若过滤结果为不存在与所述第一摘要匹配的第二摘要,则更新所述目标查找地址,返回所述生成所述目标查找地址的第一摘要的步骤;
若地址匹配成功,则将所述目标地址前缀作为待定地址前缀保存,增加目标查找地址的长度,作为更新后目标查找地址;返回所述生成所述目标查找地址的第一摘要的步骤;
若地址匹配不成功且未保存待定地址前缀,则减少目标查找地址的长度,作为更新后目标查找地址,返回所述生成所述目标查找地址的第一摘要的步骤;
若地址匹配不成功且已保存待定地址前缀,则基于所述转发表中包含多个地址前缀与出接口的对应关系,将最后保存的待定地址前缀对应的出接口确定为查找到的目的出接口。
2.根据权利要求1所述的方法,其特征在于,所述地址过滤器采用如下步骤设置:
检测所述转发表中包含的多个地址前缀的当前地址数据总量;
若所述当前地址数据总量小于等于预设数据量,则将布隆过滤器设置为所述地址过滤器;
若所述当前地址数据总量大于所述预设数据量,则将布谷过滤器设置为所述地址过滤器。
3.根据权利要求1所述的方法,其特征在于,
所述方法还包括:基于预设周期时长中每个地址前缀的命中概率,创建决策二叉树;其中,所述决策二叉树的每个节点用于表示转发表中的一个地址前缀的前缀长度;所述决策二叉树的每个节点的左子树包含的节点表示的前缀长度小于该节点表示的前缀长度,且每个节点的右子树包含的节点表示的前缀长度大于该节点表示的前缀长度;
所述基于所述目的地址,确定目标查找地址的步骤,包括:
选择所述决策二叉树的根节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述更新所述目标查找地址的步骤,包括:
选择目标节点的左子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述增加目标查找地址的长度,作为更新后目标查找地址的步骤,包括:
选择目标节点的右子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述减少目标查找地址的长度,作为更新后目标查找地址的步骤,包括:
选择目标节点的左子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址。
4.根据权利要求3所述的方法,其特征在于,所述基于预设周期时长中每个地址前缀的命中概率,创建决策二叉树的步骤,包括:
对于所述转发表包括的各地址前缀,从各地址前缀中选择一个地址前缀作为当前决策点,使得比当前决策点的前缀长度短的各地址前缀的期望步骤消耗和所述比当前决策点的前缀长度长的各地址前缀的期望步骤消耗最小;其中,各地址前缀的期望步骤消耗基于各地址前缀的命中概率确定;
将比当前决策点的前缀长度短的各地址前缀作为当前决策点的左子树,并将比当前决策点的前缀长度长的各地址前缀作为当前决策点的右子树;
针对当前决策点的左子树,返回所述从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至左子树包括的地址前缀数量为1;
针对当前决策点的右子树,返回所述从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至右子树包括的地址前缀数量为1;
根据所述转发表包括的各地址前缀之间的关联关系,构建所述决策二叉树。
5.根据权利要求4所述的方法,其特征在于,所述从各地址前缀中选择一个地址前缀作为当前决策点,使得比当前决策点的前缀长度短的各地址前缀的期望步骤消耗和所述比当前决策点的前缀长度长的各地址前缀的期望步骤消耗最小,包括:
通过以下公式确定当前决策点:
Cost(m,n)=min(1+(Pm-1+Pm+…Pj-1)/(Pm-1+Pm+…Pn)*Cost(m,j-1)+
(Pj+…Pn)/(Pm-1+Pm+…Pn)*Cost(j+1,n))
其中,从地址前缀m到地址前缀n的前缀长度依次增大,Cost(m,n)为从地址前缀m到地址前缀n的期望步骤消耗,Pm-1为地址前缀m-1的命中概率,Pm为地址前缀m的命中概率,以此类推,Pn为地址前缀n的命中概率,Cost(m,j-1)为从地址前缀m到地址前缀j-1的期望步骤消耗,Cost(j+1,n)为从地址前缀j+1到地址前缀n的期望步骤消耗,Cost(i,i)=1,i=m,m+1,…,n,地址前缀j为当前决策点。
6.根据权利要求1所述的方法,其特征在于,
所述转发表中包含:真实转发表项和虚拟转发表项;
所述虚拟转发表项为:基于真实转发表项补充的表项,使得转发表中首位相同的各个地址前缀的前缀长度连续;
所述基于所述目的地址,确定目标查找地址的步骤,包括:
采用二分法对所述目的地址进行处理,确定目标查找地址;
所述更新所述目标查找地址的步骤,包括:
基于所述二分法及当前的目标查找地址,确定更新后的目标查找地址。
7.一种转发表的地址匹配装置,其特征在于,应用于网络设备,所述装置包括:
获取模块,用于获取待转发报文的目的地址;
确定模块,用于基于所述目的地址,确定目标查找地址,其中,所述目标查找地址为所述目的地址的一部分;
生成模块,用于生成所述目标查找地址的第一摘要;
过滤模块,用于将所述第一摘要输入设置的地址过滤器,以使所述地址过滤器基于转发表中的各个地址前缀的第二摘要对所述第一摘要进行摘要过滤,得到过滤结果,其中,所述转发表中存储有每个地址前缀与其计算得到的第二摘要的对应关系;
匹配模块,用于若过滤结果为存在与所述第一摘要匹配的目标第二摘要,则将所述目标第二摘要对应的目标地址前缀与所述目标查找地址进行地址匹配;
第一更新模块,用于若过滤结果为不存在与所述第一摘要匹配的第二摘要,则更新所述目标查找地址,调用所述生成模块执行所述生成所述目标查找地址的第一摘要的步骤;
第二更新模块,用于若地址匹配成功,则将所述目标地址前缀作为待定地址前缀保存,增加目标查找地址的长度,作为更新后目标查找地址;调用所述生成模块执行所述生成所述目标查找地址的第一摘要的步骤;
第三更新模块,用于若地址匹配不成功且未保存待定地址前缀,则减少目标查找地址的长度,作为更新后目标查找地址,调用所述生成模块执行所述生成所述目标查找地址的第一摘要的步骤;
所述确定模块,还用于若地址匹配不成功且已保存待定地址前缀,则基于所述转发表中包含多个地址前缀与出接口的对应关系,将最后保存的待定地址前缀对应的出接口确定为查找到的目的出接口。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括设置模块,所述设置模块用于:
检测所述转发表中包含的多个地址前缀的当前地址数据总量;
若所述当前地址数据总量小于等于预设数据量,则将布隆过滤器设置为所述地址过滤器;
若所述当前地址数据总量大于所述预设数据量,则将布谷过滤器设置为所述地址过滤器。
9.根据权利要求7所述的装置,其特征在于,所述装置还包括:创建模块;
所述创建模块,用于基于预设周期时长中每个地址前缀的命中概率,创建决策二叉树;其中,所述决策二叉树的每个节点用于表示转发表中的一个地址前缀的前缀长度;所述决策二叉树的每个节点的左子树包含的节点表示的前缀长度小于该节点表示的前缀长度,且每个节点的右子树包含的节点表示的前缀长度大于该节点表示的前缀长度;
所述确定模块,具体用于:
选择所述决策二叉树的根节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述第一更新模块,具体用于:
选择目标节点的左子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述第二更新模块,具体用于:
选择目标节点的右子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址;
所述第三更新模块,具体用于:
选择目标节点的左子树上的子节点作为目标节点,并将所述目的地址中目标节点表示的前缀长度的地址确定为目标查找地址。
10.根据权利要求9所述的装置,其特征在于,所述创建模块,具体用于:
对于所述转发表包括的各地址前缀,从各地址前缀中选择一个地址前缀作为当前决策点,使得比当前决策点的前缀长度短的各地址前缀的期望步骤消耗和所述比当前决策点的前缀长度长的各地址前缀的期望步骤消耗最小;其中,各地址前缀的期望步骤消耗基于各地址前缀的命中概率确定;
将比当前决策点的前缀长度短的各地址前缀作为当前决策点的左子树,并将比当前决策点的前缀长度长的各地址前缀作为当前决策点的右子树;
针对当前决策点的左子树,返回所述从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至左子树包括的地址前缀数量为1;
针对当前决策点的右子树,返回所述从各地址前缀中选择一个地址前缀作为当前决策点的步骤,直至右子树包括的地址前缀数量为1;
根据所述转发表包括的各地址前缀之间的关联关系,构建所述决策二叉树。
11.根据权利要求10所述的装置,其特征在于,所述创建模块,具体用于:
通过以下公式确定当前决策点:
Cost(m,n)=min(1+(Pm-1+Pm+…Pj-1)/(Pm-1+Pm+…Pn)*Cost(m,j-1)+
(Pj+…Pn)/(Pm-1+Pm+…Pn)*Cost(j+1,n))
其中,从地址前缀m到地址前缀n的前缀长度依次增大,Cost(m,n)为从地址前缀m到地址前缀n的期望步骤消耗,Pm-1为地址前缀m-1的命中概率,Pm为地址前缀m的命中概率,以此类推,Pn为地址前缀n的命中概率,Cost(m,j-1)为从地址前缀m到地址前缀j-1的期望步骤消耗,Cost(j+1,n)为从地址前缀j+1到地址前缀n的期望步骤消耗,Cost(i,i)=1,i=m,m+1,…,n,地址前缀j为当前决策点。
12.根据权利要求7所述的装置,其特征在于,
所述转发表中包含:真实转发表项和虚拟转发表项;
所述虚拟转发表项为:基于真实转发表项补充的表项,使得转发表中首位相同的各个地址前缀的前缀长度连续;
所述确定模块,具体用于:
采用二分法对所述目的地址进行处理,确定目标查找地址;
所述第一更新模块,具体用于:
基于所述二分法及当前的目标查找地址,确定更新后的目标查找地址。
13.一种网络设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-6任一所述的方法步骤。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-6任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111116187.8A CN113824814B (zh) | 2021-09-23 | 2021-09-23 | 一种转发表的地址匹配方法、装置、网络设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111116187.8A CN113824814B (zh) | 2021-09-23 | 2021-09-23 | 一种转发表的地址匹配方法、装置、网络设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113824814A CN113824814A (zh) | 2021-12-21 |
CN113824814B true CN113824814B (zh) | 2023-04-25 |
Family
ID=78915307
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111116187.8A Active CN113824814B (zh) | 2021-09-23 | 2021-09-23 | 一种转发表的地址匹配方法、装置、网络设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113824814B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114866370B (zh) * | 2022-03-22 | 2024-04-16 | 深圳市立创电子商务有限公司 | 基于非对称二叉树链路的通信方法、装置、设备及介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109951393A (zh) * | 2019-03-29 | 2019-06-28 | 新华三信息安全技术有限公司 | 网段查找方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7089240B2 (en) * | 2000-04-06 | 2006-08-08 | International Business Machines Corporation | Longest prefix match lookup using hash function |
CN102271087B (zh) * | 2011-07-27 | 2017-09-29 | 中兴通讯股份有限公司 | 一种路由查找方法和装置 |
CN109905413B (zh) * | 2019-04-30 | 2021-10-22 | 新华三信息安全技术有限公司 | 一种ip地址的匹配方法及装置 |
CN110290117B (zh) * | 2019-06-06 | 2021-11-05 | 新华三信息安全技术有限公司 | 一种匹配ip地址的方法及装置 |
CN113315705B (zh) * | 2021-04-26 | 2022-07-15 | 中国科学院计算机网络信息中心 | 基于单次哈希布隆过滤器的Flexible IP寻址方法及装置 |
-
2021
- 2021-09-23 CN CN202111116187.8A patent/CN113824814B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109951393A (zh) * | 2019-03-29 | 2019-06-28 | 新华三信息安全技术有限公司 | 网段查找方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113824814A (zh) | 2021-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7443841B2 (en) | Longest prefix matching (LPM) using a fixed comparison hash table | |
KR101028470B1 (ko) | Ip주소 검색을 위한 장치 및 방법 | |
US6061712A (en) | Method for IP routing table look-up | |
KR100962653B1 (ko) | 블룸 필터 및 복수 해싱 구조를 사용한 ip 주소 검색방법 및 장치 | |
US20030174717A1 (en) | System and method for longest prefix match for internet protocol lookup | |
KR100586461B1 (ko) | 파이프라인 이진 트리를 이용한 ip 어드레스 검색 방법,하드웨어 구조 및 기록매체 | |
US20070121632A1 (en) | Method and system for routing an IP packet | |
Le et al. | Scalable tree-based architectures for IPv4/v6 lookup using prefix partitioning | |
CN107431660B (zh) | 检索装置、检索方法及记录介质 | |
WO2010065418A1 (en) | Graph-based data search | |
GB2452760A (en) | Storing and searching data in a database tree structure for use in data packet routing applications. | |
KR101434065B1 (ko) | 최장 프리픽스 매치의 확장성을 개선하기 위한 방법 및 장치 | |
US7493412B2 (en) | Method for processing a data packet | |
CN113824814B (zh) | 一种转发表的地址匹配方法、装置、网络设备及介质 | |
EP4175233B1 (en) | Packet matching method and apparatus, network device, and medium | |
CN115086221B (zh) | 一种报文处理方法、装置、转发设备和存储介质 | |
Lim et al. | Binary searches on multiple small trees for IP address lookup | |
Tan et al. | Efficient name lookup scheme based on hash and character trie in named data networking | |
KR101587756B1 (ko) | 블룸 필터 선-검색을 이용한 스트링 정보 검색 장치 및 방법 | |
EP3319279B1 (en) | Ip routing lookup | |
US12003418B2 (en) | Method and apparatus for packet matching, network device, and medium | |
KR100493099B1 (ko) | 고속 인터넷프로토콜 라우터의 라우팅/포워딩 룩업 및라우팅 테이블 관리 | |
US9444731B2 (en) | Methods and systems for data packet routing | |
US20090210382A1 (en) | Method for priority search using a tcam | |
CN113328947B (zh) | 基于应用可控前缀扩展布隆过滤器的可变长路由查找方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |