CN101540723A - 一种流表查找方法和装置 - Google Patents
一种流表查找方法和装置 Download PDFInfo
- Publication number
- CN101540723A CN101540723A CN200910082268A CN200910082268A CN101540723A CN 101540723 A CN101540723 A CN 101540723A CN 200910082268 A CN200910082268 A CN 200910082268A CN 200910082268 A CN200910082268 A CN 200910082268A CN 101540723 A CN101540723 A CN 101540723A
- Authority
- CN
- China
- Prior art keywords
- index
- hash
- list item
- table list
- look
- 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.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种流表查找方法和装置,所述方法在芯片内部缓存中设置预查找表,采用该预查找表记录关键字及其Index的对应关系,记录时只记录关键字的部分字段称为Flow值。关键字的Flow值在预查找表的记录位置与关键字对应的流表表项在Hash桶中的记录位置相应。在为报文查找所需流表表项时,可以根据对报文关键字进行Hash运算得到的Index以及与报文关键字匹配的Flow值在预查找表表项中位置,确定所需流表表项在外部缓存中的记录位置,然后只需要访问外部缓存一次,即可得到所需的流表表项,从而达到快速查找的目的。
Description
技术领域
本发明涉及数据通信技术,具体涉及一种提高流表查找性能的方法和装置。
背景技术
在数据通信领域中,会涉及到一些二、三层数据转发的控制。该数据转发是通过查找流表得到数据的出接口或者其它一些属性值。流表的查找效率影响着数据在网络上的高效传输,如何快速实现高效的查找是实现高速报文转发的一个研究重点。
图1为现有技术中流表查找和匹配过程的流程图。如图1所示,当报文到达后,从报文中提取用于散列(Hash)运算的关键字(key),该关键字为报文特征信息,具体可以根据实际网络、功能等需求预先确定,例如可以为介质访问控制(MAC)地址、IP地址、虚拟局域网标识(VLAN ID)等等。然后采用一种Hash函数对提取的关键字进行Hash运算,得到的运算结果称为Hash索引,简称Index。Index指示出对当前被处理报文进行转发控制的流表表项在外部缓存中的地址。然后,以Index为读取地址,在存储于外部缓存的流表中读取流表表项。流表表项中包含所述关键字,还包括出接口等一系列用于转发控制的属性值。在读取流表表项后,需要判断从报文中提取的关键字是否与所读取流表表项中的关键字相匹配,如果匹配,则确定命中流表,采用读取的流表表项对报文进行转发控制;否则确定未命中流表,对报文进行未命中流表的处理,例如丢弃或广播该报文。
Hash函数所建立的关键字到Index的映射是多对一的映射关系,也就是说,多个不同的关键字经同一Hash函数处理后,得到相同的Index,那么这个Index作为地址的位置上需要保存对应的所有关键字,而一个存储地址无法保存多个数据,这种现象称为Hash冲突。
目前可以采用Hash桶的形式解决这种冲突,图2为外部缓存中采用Hash桶存储流表表项的示意图。如图2所示,假设key1、key2和key3经同一函数Hash(x)的运算后均得到Index1,那么以Index1为基址的Hash桶需要依次存储key1、key2和key3所属的流表表项。同理,key4和key5经Hash(x)运算后均得到Index2,以Index2为基址的Hash桶需要依次存储key4和key5所属的流表表项;key6经Hash(x)运算后得到Index3,以Index3为基址的Hash桶只需存储key6所属的流表表项。在流表查找时,根据从报文提取的关键字得到Index,从Index指示的Hash桶中依次读取各流表表项并确定读取的表项判断是否为匹配表项,从而判定是否命中流表,并根据判断结果进行后续处理。图2中的“......”表示表项中除key值以外的其它内容。可见,采用这种Hash桶的方式解决了多个关键字对应相同Index带来的冲突问题。
但是,如果匹配表项不在Hash桶的顶层,例如key3对应的表项在Hash桶的第三层,那么需要在以Index1为基址的Hash桶中读取和匹配3次,才能够命中到匹配表项。由于流表设置在通信设备处理芯片的外部缓存,访问速度不够快,因此在Hash桶较深的情况下虽然可以在一定程度上解决Hash冲突问题,但是由于查找速度低,会严重影响报文转发性能。
而且,由于各个Hash桶的深度相同、但同一Index对应的关键字数量却有所不同,因此有些Hash桶的利用率较高,例如图2中Index1地址处的Hash桶,而有些Hash桶的利用率却很低,例如图2中Index3地址处的Hash桶。
发明内容
有鉴于此,本发明提供了一种流表查找方法,能够提高流表查找速度。
该方法包括:
A、以报文特征信息为关键字,采用预设散列Hash函数建立关键字与Hash索引之间的对应关系;在设置于内部缓存的预查找表中,针对每个Hash索引顺序记录该Hash索引对应的各关键字的部分比特,所述部分比特称为流量特征Flow值;针对对应同一关键字的Flow值和Hash索引,根据Flow值在预查找表表项中的排序位置和Hash索引值,确定该关键字所属流表表项在外部缓存Hash桶中的记录位置,在所确定的记录位置上记录该关键字所属流表表项;
B、查找流表时,采用所述预设Hash函数计算待处理报文中关键字key-x的Hash索引,记为Index-x;在所述预查找表中查找与Index-x对应的、且与key-x匹配的Flow值;根据该匹配的Flow值在预查找表表项中的排序位置和所述Index-x确定所述key-x所属流表表项的读取地址,从外部缓存中读取流表表项。
较佳地,所述确定该关键字所属流表表项在外部缓存Hash桶中的记录位置为:以Hash索引值为基址Index,以Flow值在预查找表表项中的排序位置为偏移地址offset,将Index+offset作为所述流表表项在外部缓存中的记录位置;
所述根据该匹配的Flow值在预查找表表项中的排序位置和所述Index-x确定所述key-x所属流表表项的读取地址,从外部缓存中读取流表表项为:根据该匹配的Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offset-x;以Index-x与offset-x之和为读取地址,从外部缓存中读取流表表项。
较佳地,所述步骤A进一步包括:当采用相同Hash函数将多个关键字映射到同一Hash索引、且所述多个关键字的数量大于Hash桶的桶深时,将所述多个关键字分为至少两个部分,不同部分采用不同级别的预设Hash函数建立关键字与Hash索引之间的对应关系;
所述预查找表进一步记录建立Hash索引与关键字之间的对应关系所采用的预设Hash函数的标识。
较佳地,用于建立所述对应关系的预设Hash函数为两级预设Hash函数,分别记为Hash0(x)和Hash1(x);
所述步骤A包括:
采用Hash0(x)计算各关键字的Hash索引,记为Indexh0,采用预查找表顺序记录各Indexh0对应的Flow值,且将这些Flow值标记为采用Hash0(x)计算得到;并在各Hash索引为基址的Hash桶中保存相应流表表项;
对于采用Hash0(x)计算Hash索引出现冲突的关键字,采用Hash1(x)计算Hash索引,记为Indexh1,在Indexh1指向的预查找表表项中顺序增加与Indexh1对应的Flow值,且将这些Flow值标记为采用Hash1(x)计算得到;并在各Indexh1为基址的Hash桶中增加相应流表表项。
所述步骤B包括:
采用第一预设Hash函数计算key-x的Hash索引,记为Indexh0-x;在所述预查找表中查找与第一预设Hash函数和Indexh0-x对应的、且与key-x匹配的Flow值;
如果查找到,则根据该匹配的Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offseth0-x;以Indexh0-x与offseth0-x之和为读取地址,从外部缓存中读取流表表项;
如果未查找到,则采用下一级预设Hash函数计算key-x的Hash索引,记为Indexhn-x;在所述预查找表中查找与所述下一级预设Hash函数和Indexhn-x对应的、且与key-x匹配的Flow值,如果查找到,根据匹配的Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offsethn-x;以Indexhn-x与offsethn-x之和为读取地址,从外部缓存中读取流表表项,如果未查找到,则采用再下一级的预设Hash函数执行所述计算key-x的Hash索引的操作,直到达到最后一级预设Hash函数。
较佳地,该方法进一步包括:对于采用所述预设Hash函数计算Hash索引出现冲突的关键字,采用备用Hash函数进行处理,得到的Hash索引记为Indexh’;采用备用Hash表记录关键字的Indexh’与关键字所属流表表项之间的对应关系;
所述步骤B进一步包括:采用所述备用Hash函数,对key-x进行Hash运算,得到的Hash索引记为Indexh’-x,从所述备用Hash表中读取与Indexh’-x对应的流表表项;如果key-x命中读取的流表表项,则终止查找预查找表的流程。
较佳地,采用预查找表记录每个Hash索引对应的各Flow值为:以Hash索引为记录基址,在内部缓存的预查找表中依次记录该Hash索引对应的各Flow值。
本发明还提供了一种流表查找装置,能够提高流表查找速度。
该装置包括:内部缓存单元、外部缓存单元、关系建立单元和流表查找单元;
所述外部缓存单元,用于以Hash桶形式存储流表表项;
所述内部缓存单元,用于存储预查找表;
所述关系建立单元,用于以报文特征信息为关键字,采用预设Hash函数建立关键字与Hash索引之间的对应关系;在预查找表中,针对每个Hash索引顺序记录该Hash索引对应的各关键字的部分比特,所述部分比特称为流量特征Flow值;针对对应同一关键字的Flow值和Hash索引,根据Flow值在预查找表表项中的排序位置和Hash索引值,确定该关键字所属流表表项在外部缓存Hash桶中的记录位置,在所确定的记录位置上记录该关键字所属流表表;
所述流表查找单元,用于采用所述预设Hash函数计算待处理报文中关键字key-x的Hash索引,记为Index-x;在所述预查找表中查找与Index-x对应的、且与key-x匹配的Flow值;根据该匹配的Flow值在预查找表表项中的排序位置和所述Index-x确定所述key-x所属流表表项的读取地址,从所述外部缓存单元中读取流表表项。
所述关系建立单元进一步用于,以Hash索引值为基址Index,以Flow值在预查找表表项中的排序位置为偏移地址offset,将Index+offset作为所述流表表项在外部缓存中的记录位置;
所述流表查找单元进一步用于,根据该匹配的Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offset-x;以Index-x与offset-x之和为读取地址,从外部缓存中读取流表表项。
其中,所述关系建立单元进一步用于,当采用相同Hash函数将多个关键字映射到同一Hash索引、且所述多个关键字的数量大于Hash桶的桶深时,将所述多个关键字分为至少两个部分,不同部分采用不同级别的预设Hash函数建立关键字与Hash索引之间的对应关系;
该关系建立单元还进一步在预查找表中记录建立Hash索引与关键字之间的对应关系所采用的预设Hash函数的标识。
其中,所述流表查找单元包括第一级查找单元和冲突解决单元;
第一级查找单元,用于采用第一预设Hash函数计算待处理报文中关键字key-x的Hash索引,记为Indexh0-x;在所述预查找表中查找与第一预设Hash函数和Indexh0对应的、且与key-x匹配的Flow值;如果查找到,则根据该匹配的Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offseth0-x;以Indexh0-x与offseth0-x之和为读取地址,从所述外部缓存单元读取流表表项;如果未查找到,则通知所述冲突解决单元;
所述冲突解决单元,在接收到所述通知后,采用下一级预设Hash函数计算key-x的Hash索引,记为Indexhn-x;在所述预查找表中查找与所述下一级预设Hash函数和Indexhn-x对应的、且与key-x匹配的Flow值,如果查找到,根据匹配的Flow值在表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offsethn-x;以Indexhn-x与offsethn-x之和为读取地址,从所述外部缓存单元中读取流表表项,如果未查找到,则采用再下一级的预设Hash函数执行所述计算key-x的Hash索引的操作,直到达到最后一级预设Hash函数。
较佳地,所述内部缓存单元进一步存储备用Hash表;
所述关系建立单元,进一步用于对采用所述预设Hash函数均出现冲突的关键字,采用备用Hash函数进行处理,得到对应的Hash索引,记为Index’;采用备用Hash表记录关键字的Indexh’与关键字的所属流表表项之间的对应关系;
所述流表查找单元进一步包括备用查找模块,用于采用所述备用Hash函数,对key-x进行Hash运算,得到Hash索引记为Indexh’-x;从所述备用Hash表中读取与Indexh’-x对应的流表表项;如果key-x命中读取的流表表项,则终止流表查找单元查找预查找表的处理。
较佳地,所述关系建立单元在针对每个Hash索引顺序记录该Hash索引对应的各Flow值时,以Hash索引为记录基址,在所述内部缓存单元中依次记录该Hash索引对应的各Flow值。
根据以上技术方案可见,本发明在存储于内部缓存的预查找表中记录各个Index与关键字的对应关系,记录时只记录关键字的部分字段,称为Flow值,以适应内部缓存极为有限的存储空间。同时,关键字的Flow值在预查找表的记录位置与关键字对应的流表表项在Hash桶中的记录位置相应,这样,在流表查找时,可以根据对报文的关键字进行Hash运算得到的Index,以及与报文关键字匹配的Flow值在预查找表表项中位置,确定所需流表表项在外部缓存中的具体位置,然后只需要访问外部缓存一次,即可得到所需的流表表项,无需像现有技术一样在Hash桶中逐一查找和匹配,从而达到快速查找的目的。而且由于预查找表设置在芯片内部缓存,查找速度快,进一步提高查找速度。
其次,本发明提供的多级Hash查找方案,可以减少Hash冲突,且充分利用Hash桶资源。
此外,本发明进一步在内部缓存中设置备用Hash表,可以进一步减少Hash冲突,且由于备用Hash表直接设置在内部缓存,因此查找速度快,不影响预查找表的查找过程。
附图说明
图1为现有技术中流表查找和匹配过程的流程图。
图2为现有技术中流表的存储方式示意图。
图3为本发明实施例中预查找表的一种实现示意图。
图4为本发明实施例中预查找表的另一种实现示意图。
图5为本发明实施例一中流表查找的实例示意图。
图6为本发明实施例二中流表查找的实例示意图。
图7为本发明实施例二中采用图6中的预查找表实现流表查找的流程图。
图8为本发明实施例三中备用Hash表的示意图。
图9为本发明实施例中流表查找装置的结构示意图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明实施例一提供了一种流表查找方法,其基本思想为:在芯片内部缓存中设置预查找表,在该预查找表中,针对每个Index,顺序记录该Index对应的各关键字的部分比特,本发明将该部分比特称为流量特征值,简称为Flow值;针对对应同一关键字的Flow值和Hash索引,根据Flow值在预查找表表项中的排序位置和Hash索引值,确定该关键字所属流表表项在外部缓存Hash桶中的记录位置,在所确定的记录位置上记录该关键字所属流表表项。
查找流表时,采用预设Hash函数计算待转发报文中关键字key-x的Hash索引,记为Index-x;在预查找表中查找与Index-x对应的、且与key-x匹配的Flow值;根据该匹配的Flow值在表项中的排序位置和Index-x确定key-x所属流表表项的读取地址,从外部缓存中读取流表表项。
然后,对读取的流表表项判断是否为命中表项,如果是,则采用读取的流表表项执行转发控制操作,如果不是,则对报文进行未命中流表的处理,例如丢弃或广播该报文。
其中,由于芯片内部缓存容量极为有限,Flow值可以采用关键字中的2~4bit,例如前2~4bit,或后2~4bit。当然,在缓存容量允许的情况下,Flow值的长度可以设置较长,长度越长,则匹配的准确性越高。关键字可以取报文中的MAC地址、IP地址或VLAN ID值等报文特征信息。
采用预查找表记录Index对应的Flow值时,可以如图3所示,在预查找表中对应记录Index值以及各Flow值。为了进一步节省存储空间,较佳地实施方式为如图4所示,以Index为记录基址,在内部缓存的预查找表中记录该Index对应的各Flow值。
其中,根据Flow值在预查找表表项中的排序位置和Index确定相关流表表项在Hash桶中的存储位置时,可以以Index为基址,以Flow值在预查找表表项中的排序位置为偏移地址offset,将Index+offset作为相关流表表项在外部缓存中的记录位置。那么在查找流表时,在按照上述实施例一的流程确定Index-x和Flow值之后,确定key-x所属流表表项在相应Hash桶中的偏移位置offset-x,以Index-x与offset-x之和为读取地址,从外部缓存中读取流表表项。这种实施方式比较简单,采用加法作为变换关系。在实际中还可以采用其他的变换关系确定相关流表表项的存储地址。
为了便于理解,针对实施例一举一个实例。图5示出了本实施例一中采用图4的预查找表进行流表查找的一实例示意图。如图5所示,对报文中可能出现的各key值进行Hash运算。假设Hash函数为Hash(x),Hash(key1)=Hash(key2)=Index1,Hash(key4)=Hash(key5)=Index2,Hash(key6)=Index3,Hash(key7)=Index4,则以Index1为基址,在内部缓存中顺序记录FLOW0和FLOW1,FLOW0为key1的前2bit,FLOW1为key2的前2bit,同时按照相同顺序,在以Index1为基址的外部缓存Hash桶中记录key1和key2的流表表项。以此类推,从而建立其如图5中示出的预查找表和Hash桶。图5所示FlOW0和FlOW1仅代表Flow值的位置,不表示具体数值,如果查找到FlOW0,表示偏移量为0,查找到FlOW1,表示偏移量为1。Hash桶的深度为2。
流表查找时,参见图5,假设从当前报文中提取关键字key2,对key2进行Hash(x)运算得到Index1,以Index1为起始地址在内部缓存的预查找表中查找与Index1对应的各Flow值,并依次读取并与key2进行匹配,结果匹配到第一行的FlOW1,此时确定偏移量为1。然后以(Index1+1)为地址,在外部缓存中直接读取key2所在流表表项。然后,判断从报文中提取的关键字key2是否与流表表项中的key2相同;如果相同,则确定命中流表,采用读取的流表表项对当前报文进行转发控制;如果确定未命中流表,出现冲突,对冲突报文进行常规处理,例如丢弃或广播。
可见,采用本实施例的流表查找方法可以利用预查找表快速确定所需流表表项在外部缓存中的位置,然后只需要访问外部缓存一次,即可得到所需的流表表项,无需像现有技术一样在Hash桶中逐一查找和匹配,从而达到快速查找的目的。
实施例二
采用实施例一的方案可能产生Hash冲突。假设存在Hash(key3)=Index1,且Index1对应的Hash桶已满,无法再容纳key3的流表表项,则key3为冲突关键字。一种解决方式是通过调整Hash桶的桶高来容纳更多的表项,但是调整桶高时需要对所有Hash桶实施相同调整,这样会降低Hash桶的利用率。
为此,本发明的实施例二提出一种多级Hash的流表查找方法,不仅解决了上述可能产生的Hash冲突,还有效地利用Hash桶的剩余空间。该实施例中,针对采用相同Hash函数将较多关键字映射到同一Index值、且较多关键字的数量大于Hash桶深的情况,将该较多关键字分为至少两个部分,不同部分采用不同级别的预设Hash函数进行处理,从而得到不同的Index值,这样使得该较多关键字可以保存到不同的Hash桶中。同时,还需要对前述预查找表进行改进:在预查找表中记录每个Index对应的多个关键字部分比特(Flow值)时,还需要进一步记录:建立Index与关键字之间对应关系所采用的Hash函数的标识。
需要注意的是,每一部分的关键字数量应该不超过相应Hash桶的剩余空间。为此,在实际建立预查找表时,可以先采用第一Hash函数对所有key值进行处理并将相应流表表项保存到Hash桶,当遇到Hash桶溢出时,将冲突的key值搁置;当所有key值被循环一次后,采用第二Hash函数对搁置的key值进行二次处理并将相应流表表项保存到Hash桶中。通过实验可以发现,通常将Hash桶深设置为8到16,并采用两级Hash已经能够较好地解决Hash冲突。如果第二Hash函数处理key值时仍出现Hash桶溢出情况,则再次将冲突的key值搁置,采用第三Hash函数进行处理,直到所有key值对应的流表表项均成功保存到Hash桶中。如果多级Hash处理后仍出现冲突,那么可以将这些key值认为是冲突值,不保存相应流表表项,当携带这些key值的报文来到时,对其进行丢弃或广播操作。或者,也可以采用后述实施例三的方案解决。
在实际中可以采用两级、三级或更多级的Hash查找,级数增多意味着冲突进一步减少,但同时会带来存储量增加,计算量增加的缺陷。
下面结合图6示出了一个实例,对本发明实施例二的实现方式进一步详细描述。假设两级Hash函数分别为Hash0(x)和Hash1(x)。Hash桶桶深为2。
在该两级Hash方案中,首先建立并填充预查找表和Hash桶。具体来说,
先采用Hash0(x)计算各个key值的Index值,如图6所示,采用预查找表顺序记录各Index值对应的Flow值,记录方式为在Index为基址的内部缓存位置上记录该Index对应的Flow值;同时,将这些Flow值标记为采用Hash0(x)计算得到,例如图6中在每个Flow值之前标注HASH0;并且在各Index对应的外部缓存Hash桶中保存相应流表表项。
在Hash0(x)的计算过程中,对于发生Hash冲突的关键字先暂时搁置,当采用Hash0(x)的计算过程完成后,继续采用Hash1(x)对冲突部分的key值进行运算,得到Indexh1,在预查找表中与Indexh1的值相同的Index表项中顺序增加Indexh1对应的Flow值,且将这些Flow值标记为采用Hash1(x)计算得到,例如图6中在每个Flow值之前标注HASH1,并且各Indexh1对应的在外部缓存Hash桶中增加相应流表表项。
参见图6,假设Hash0(key1)=Hash0(key2)=Hash0(key3)=Index1,Hash0(key4)=Hash0(key5)=Index2,Hash0(key6)=Index3,Hash0(key7)=Hash1(key3)=Index4。那么,在采用Hash0(x)处理时,由于Hash0(key3)=Index1,但Index1对应的Hash桶已满,此时搁置key3;当Hash0(x)的计算过程完成后,采用Hash1(x)对key3进行处理,由于Hash1(key3)=Index4,因此将key3的流表表项保存到Index4对应的Hash桶中。
图7为本发明实施例二中采用图6中的预查找表实现流表查找的流程图。如图7所示,该流程包括以下步骤:
步骤701:从待转发报文中提取关键字key-x。
步骤702:采用Hash0(x)计算key-x的Hash索引,记为Indexh0。
步骤703:在内部缓存的预查找表中查找与Hash0(x)和Indexh0对应的、且与key-x匹配的Flow值。图6中的预查找表以Index为地址记录信息,因此本步骤具体为,以Indexh0为查找的起始地址,在预查找表中查找与key-x匹配的、且标记为采用Hash0(x)计算得到的Flow值。
本实施例中在预查找表中设置结束字段N-VAILD,当读取到N-VAILD字段时,表示当前查找的Indexh0对应的表项已经查找完毕,没有查找到匹配的Flow值,需要进入后续步骤。本实施例采用N-VAILD作为结束字段,在实际中也可以采用其它字段,或者当读取完预设bit数目后,仍没有找到匹配值,则确定当前Indexh0对应的表项已经查找完毕。
步骤704:判断是否查找到匹配值,如果是,则执行步骤705;否则,执行步骤706。
步骤705:根据匹配的Flow值在预查找表表项中的排序位置,确定key-x的流表表项在相应Hash桶中的偏移位置offseth0。如前所述,FlOW0表示偏移量为0,FlOW1表示偏移量为1。然后,以Indexh0+offseth0为地址,从外部缓存中的Hash桶中读取流表表项,执行步骤710。
步骤706:采用Hash1(x)计算key-x的Hash索引,记为Indexh1。
步骤707:在内部缓存的预查找表中查找与Hash1(x)和Indexh1对应的、且与key-x匹配的Flow值。图6中的预查找表以Index为地址记录信息,因此本步骤中,以Indexh1为查找的起始地址,在预查找表中查找与key-x匹配的、且标记为采用Hash1(x)计算得到的Flow值。
步骤708:判断是否查找到匹配值,如果是,则执行步骤709;否则,执行步骤712。
步骤709:根据匹配的Flow值在预查找表表项中的排序位置,确定key-x的流表表项在相应Hash桶中的偏移位置offseth1。然后,以Indexh1+offseth1为地址,从外部缓存中的Hash桶中读取流表表项,执行步骤710。
步骤710:判断key-x是否命中读取的流表表项,如果命中,则执行步骤711;否则,执行步骤712。
步骤711:确定命中流表,采用读取的流表表项对待转发报文进行转发控制。结束本流程。
步骤712:确定未命中流表,对待转发报文进行未命中流表常规处理。结束本流程。
至此,本流程结束。
以图6所示数值为例,假设采用图7的流程对关键字为key3的报文进行查流表处理。首先计算Hash0(key3)=Index1,以Index1为起始地址,在内部缓存的预查找表中查找与key3匹配且标记为HASH0的FLOW值。当读取到N-VAILD字段时,获知Index1对应的表项已经查找完毕,仍没有查找到匹配的Flow值。此后,再计算Hash1(key3)=Index4,以Index4为起始地址,在内部缓存的预查找表中查找与key3匹配且标记为HASH1的FLOW值,查找到匹配值FLOW1,并确定偏移位置为1,此时采用Index4+1为地址,在外部缓冲中读取流表表项,从该流表表项中获取key3,判断该key3与报文中提取的key3相同,确定命中流表,进行后续转发控制操作。
图7的流程是以两级Hash为例,如果采用三级、四级或等多级的Hash,则在步骤708判定第二级Hash也未查找到匹配Flow值时,进一步采用再下一级的预设Hash函数(例如Hash2(x)、Hash3(x)等等)执行所述计算key-x的Hash索引以及后续操作,直到达到最后一级预设Hash函数。如果采用最后一级Hash函数仍未查找到匹配Flow值,则再进入步骤712或者采用下述实施例三的处理方案解决。
可见,采用本实施例二的多级Hash查找方法同样只需要访问外部缓存一次,即可得到所需的流表表项,达到快速查找的目的,而且可以减少冲突,充分利用了Hash桶资源。
实施例三
考虑到上述实施例二中多级Hash之后仍然会有很小概率的冲突事件发生,例如Hash0(key8)=Index2,且Hash1(key8)=Index1,由于Index1和Index2对应的Hash桶已满,从而产生了冲突。虽然当Hash深度设为8~16时,产生冲突的概率非常小,但是为了进一步杜绝冲突,本发明在本实施例三中,在芯片内部缓存中进一步设置一个小的备用Hash表来解决这种冲突。
图8为本实施例三中备用Hash表的示意图。对于多级Hash后仍冲突的key值,采用不同于Hash0(x)和Hash1(x)的备用Hash函数(记为Hash’(x))对这些key值进行Hash运算,得到的Hash索引记为Indexh’;采用备用Hash表记录key值的Indexh’与key值所属流表表项的对应关系。记录时可以直接记录Indexh’以及对应的流表,也可以以Indexh’为记录地址,在备用Hash表中记录该Indexh’对应的流表表项。
在流表查找时,采用Hash’(x)对key-x进行Hash运算,得到Hash索引,记为Indexh’-x;该查找操作可以在步骤701以后的任意时刻执行,例如步骤708判定未查找到匹配值时,或与步骤702的找表操作并发进行。以Indexh’-x为地址,从备用Hash表中读取流表表项,采用读取的流表表项进行后续判断是否命中和转发控制操作。如果命中,则可以终止查找预查找表的流程。如果未命中或不存在Indexh’-x对应的表项,则以预查找表的查找结果作为流表查找结果。在实际中,也可以当在预查找表中未查找到匹配Flow值时,再从备用Hash表中读取与Indexh’-x对应的流表表项。
该备用Hash表的优点是直接放在内部缓存,用Hash’(x)得到的值可以直接查到相应的流表表项,完全不影响硬件查表速度。
为了实现上述流表查找方法,本发明实施例还提供了相应的流表查找装置。图9为本发明实施例中流表查找装置的结构示意图。如图9所示,该装置包括内部缓存单元91、外部缓存单元92、关系建立单元93和流表查找单元94。
其中,外部缓存单元92采用芯片外部缓存实现,用于以Hash桶形式存储流表表项。
内部缓存单元91采用芯片内部缓存实现,用于存储预查找表。
关系建立单元93,用于采用预设Hash函数建立报文中的关键字与Hash索引之间的对应关系。在预查找表中,针对每个Hash索引,顺序记录该Hash索引对应的各关键字的部分比特,即Flow值;针对对应同一关键字的Flow值和Hash索引,根据Flow值在预查找表表项中的排序位置和Hash索引值,确定该关键字所属流表表项在外部缓存Hash桶中的记录位置,在所确定的记录位置上记录该关键字所属流表表。
其中,在预查找表中记录Hash索引与对应的Flow值时,较佳实施方式为,以Hash索引为记录基址,在内部缓存单元91中记录该Hash索引对应的各Flow值。
关系建立单元93在确定根据Flow值在预查找表表项中的排序位置和Hash索引值确定相关流表表项的记录位置时,以Hash索引值为基址Index,以Flow值在预查找表表项中的排序位置为偏移地址offset,将Index+offset作为所述流表表项在外部缓存中的记录位置。
为了实现前述多级缓存,关系建立单元93进一步用于,当采用相同Hash函数将多个关键字映射到同一Hash索引、且这多个关键字的数量大于Hash桶的桶深,从而出现Hash冲突时,将这多个关键字分为至少两个部分,不同部分采用不同级别的预设Hash函数建立关键字与Hash索引之间的对应关系。
在这种情况下,该关系建立单元93还进一步在内部缓存单元91内的预查找表中记录建立Hash索引与关键字之间的对应关系所采用的预设Hash函数的标识。
当多级Hash为二级Hash时,且两级预设Hash函数分别为Hash0(x)和Hash1(x),则关系建立单元93首先采用Hash0(x)计算各关键字的Hash索引,记为Indexh0,采用预查找表顺序记录各Indexh0对应的Flow值,且将这些Flow值标记为采用Hash0(x)计算得到;并在各Hash索引为基址的Hash桶中保存相应流表表项;
对于采用Hash0(x)计算Hash索引出现冲突的关键字,采用Hash1(x)计算Hash索引,记为Indexh1,在Indexh1指向的预查找表表项中顺序增加Indexh1对应的Flow值,且将这些Flow值标记为采用Hash1(x)计算得到;并在各Indexh1为基址的Hash桶中增加相应流表表项。
流表查找单元94,用于采用预设Hash函数计算待转发报文中关键字key-x的Hash索引,记为Index-x;在内部缓存单元91存储的预查找表中查找与Index-x对应的、且与key-x匹配的Flow值;根据该匹配的Flow值在预查找表表项中的排序位置和所述Index-x确定所述key-x所属流表表项的读取地址,从外部缓存单元92存储的Hash桶中读取流表表项。
当关系建立单元93以Index+offset为记录地址时,流表查找单元94根据Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offset-x;以Index-x与offset-x之和为读取地址,从外部缓存单元92中读取流表表项。
当采用多级Hash方案时,流表查找单元94具体包括第一级查找模块941和冲突解决模块942。其中,
第一级查找模块941,用于采用第一预设Hash函数计算待转发报文中关键字key-x的Hash索引,记为Indexh0-x;在预查找表中查找与第一预设Hash函数和Indexh0-x对应的、且与key-x匹配的Flow值;如果查找到,则根据该匹配的Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offseth0-x;以Indexh0-x与offseth0-x之和为读取地址,从外部缓存单元92存储的Hash桶中读取流表表项;如果未查找到,则通知冲突解决模块942。
冲突解决模块942,在接收到所述通知后,采用下一级预设Hash函数计算key-x的Hash索引,记为Indexhn-x;在内部缓存单元91存储的预查找表中查找与下一级预设Hash函数和Indexhn-x对应的、且与key-x匹配的Flow值,如果查找到,根据匹配的Flow值在表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offsethn-x;以Indexhn-x与offsethn-x之和为读取地址,从外部缓存单元92中读取流表表项,如果未查找到,则采用再下一级的预设Hash函数执行所述计算key-x的Hash索引的操作,直到达到最后一级预设Hash函数。
较佳地,关系建立单元93,进一步用于对采用预设Hash函数均出现冲突的关键字,采用备用Hash函数进行处理,得到对应的Hash索引,记为Index’;采用备用Hash表记录关键字的Indexh’与关键字所属流表表项之间的对应关系,例如以Indexh’为记录地址,在备用Hash表中记录Indexh’对应的流表表项。备用Hash表设置在内部缓存单元91中。
在这种情况下,流表查找单元94进一步包括备用查找模块943,用于采用备用Hash函数,对key-x进行Hash运算,得到Hash索引记为Indexh’-x;从备用Hash表中读取与Indexh’-x对应的流表表项;如果key-x命中读取的流表表项,则终止流表查找单元94查找预查找表的处理,具体可以为通知第一级查找模块941和冲突解决模块942停止其操作。如果key-x未命中或不存在Indexh’-x对应的表项,则以流表查找单元94的查找结果作为最终流表查找结果。
该流表查找装置只是完成了流表的查找操作,得到流表表项,后续还需将查找到的流表表项输入相关功能模块,由相关功能模块完成判断是否命中流表,以及命中流表后的转发控制操作和未命中流表后的处理操作。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (13)
1、一种流表查找方法,其特征在于,该方法包括:
A、以报文特征信息为关键字,采用预设散列Hash函数建立关键字与Hash索引之间的对应关系;在设置于内部缓存的预查找表中,针对每个Hash索引顺序记录该Hash索引对应的各关键字的部分比特,所述部分比特称为流量特征Flow值;针对对应同一关键字的Flow值和Hash索引,根据Flow值在预查找表表项中的排序位置和Hash索引值,确定该关键字所属流表表项在外部缓存Hash桶中的记录位置,在所确定的记录位置上记录该关键字所属流表表项;
B、查找流表时,采用所述预设Hash函数计算待处理报文中关键字key-x的Hash索引,记为Index-x;在所述预查找表中查找与Index-x对应的、且与key-x匹配的Flow值;根据该匹配的Flow值在预查找表表项中的排序位置和所述Index-x确定所述key-x所属流表表项的读取地址,从外部缓存中读取流表表项。
2、如权利要求1所述的方法,其特征在于,所述确定该关键字所属流表表项在外部缓存Hash桶中的记录位置为:以Hash索引值为基址Index,以Flow值在预查找表表项中的排序位置为偏移地址offset,将Index+offset作为所述流表表项在外部缓存中的记录位置;
所述根据该匹配的Flow值在预查找表表项中的排序位置和所述Index-x确定所述key-x所属流表表项的读取地址,从外部缓存中读取流表表项为:根据该匹配的Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offset-x;以Index-x与offset-x之和为读取地址,从外部缓存中读取流表表项。
3、如权利要求2所述的方法,其特征在于,所述步骤A进一步包括:当采用相同Hash函数将多个关键字映射到同一Hash索引、且所述多个关键字的数量大于Hash桶的桶深时,将所述多个关键字分为至少两个部分,不同部分采用不同级别的预设Hash函数建立关键字与Hash索引之间的对应关系;
所述预查找表进一步记录建立Hash索引与关键字之间的对应关系所采用的预设Hash函数的标识。
4、如权利要求3所述的方法,其特征在于,用于建立所述对应关系的预设Hash函数为两级预设Hash函数,分别记为Hash0(x)和Hash1(x);
所述步骤A包括:
采用Hash0(x)计算各关键字的Hash索引,记为Indexh0,采用预查找表顺序记录各Indexh0对应的Flow值,且将这些Flow值标记为采用Hash0(x)计算得到;并在各Hash索引为基址的Hash桶中保存相应流表表项;
对于采用Hash0(x)计算Hash索引出现冲突的关键字,采用Hash1(x)计算Hash索引,记为Indexh1,在Indexh1指向的预查找表表项中顺序增加与Indexh1对应的Flow值,且将这些Flow值标记为采用Hash1(x)计算得到;并在各Indexh1为基址的Hash桶中增加相应流表表项。
5、如权利要求3所述的方法,其特征在于,所述步骤B包括:
采用第一预设Hash函数计算key-x的Hash索引,记为Indexh0-x;在所述预查找表中查找与第一预设Hash函数和Indexh0-x对应的、且与key-x匹配的Flow值;
如果查找到,则根据该匹配的Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offseth0-x;以Indexh0-x与offseth0-x之和为读取地址,从外部缓存中读取流表表项;
如果未查找到,则采用下一级预设Hash函数计算key-x的Hash索引,记为Indexhn-x;在所述预查找表中查找与所述下一级预设Hash函数和Indexhn-x对应的、且与key-x匹配的Flow值,如果查找到,根据匹配的Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offsethn-x;以Indexhn-x与offsethn-x之和为读取地址,从外部缓存中读取流表表项,如果未查找到,则采用再下一级的预设Hash函数执行所述计算key-x的Hash索引的操作,直到达到最后一级预设Hash函数。
6、如权利要求1至5任意一项所述的方法,其特征在于,该方法进一步包括:对于采用所述预设Hash函数计算Hash索引出现冲突的关键字,采用备用Hash函数进行处理,得到的Hash索引记为Indexh’;采用备用Hash表记录关键字的Indexh’与关键字所属流表表项之间的对应关系;
所述步骤B进一步包括:采用所述备用Hash函数,对key-x进行Hash运算,得到的Hash索引记为Indexh’-x,从所述备用Hash表中读取与Indexh’-x对应的流表表项;如果key-x命中读取的流表表项,则终止查找预查找表的流程。
7、如权利要求1至5任意一项所述的方法,其特征在于,采用预查找表记录每个Hash索引对应的各Flow值为:以Hash索引为记录基址,在内部缓存的预查找表中依次记录该Hash索引对应的各Flow值。
8、一种流表查找装置,其特征在于,该装置包括:内部缓存单元、外部缓存单元、关系建立单元和流表查找单元;
所述外部缓存单元,用于以Hash桶形式存储流表表项;
所述内部缓存单元,用于存储预查找表;
所述关系建立单元,用于以报文特征信息为关键字,采用预设Hash函数建立关键字与Hash索引之间的对应关系;在预查找表中,针对每个Hash索引顺序记录该Hash索引对应的各关键字的部分比特,所述部分比特称为流量特征Flow值;针对对应同一关键字的Flow值和Hash索引,根据Flow值在预查找表表项中的排序位置和Hash索引值,确定该关键字所属流表表项在外部缓存Hash桶中的记录位置,在所确定的记录位置上记录该关键字所属流表表;
所述流表查找单元,用于采用所述预设Hash函数计算待处理报文中关键字key-x的Hash索引,记为Index-x;在所述预查找表中查找与Index-x对应的、且与key-x匹配的Flow值;根据该匹配的Flow值在预查找表表项中的排序位置和所述Index-x确定所述key-x所属流表表项的读取地址,从所述外部缓存单元中读取流表表项。
9、如权利要求8所述的装置,其特征在于,所述关系建立单元进一步用于,以Hash索引值为基址Index,以Flow值在预查找表表项中的排序位置为偏移地址offset,将Index+offset作为所述流表表项在外部缓存中的记录位置;
所述流表查找单元进一步用于,根据Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offset-x;以Index-x与offset-x之和为读取地址,从外部缓存单元中读取流表表项。
10、如权利要求9所述的装置,其特征在于,所述关系建立单元进一步用于,当采用相同Hash函数将多个关键字映射到同一Hash索引、且所述多个关键字的数量大于Hash桶的桶深时,将所述多个关键字分为至少两个部分,不同部分采用不同级别的预设Hash函数建立关键字与Hash索引之间的对应关系;
该关系建立单元还进一步在预查找表中记录建立Hash索引与关键字之间的对应关系所采用的预设Hash函数的标识。
11、如权利要求10所述的装置,其特征在于,所述流表查找单元包括第一级查找单元和冲突解决单元;
第一级查找单元,用于采用第一预设Hash函数计算待处理报文中关键字key-x的Hash索引,记为Indexh0-x;在所述预查找表中查找与第一预设Hash函数和Indexh0对应的、且与key-x匹配的Flow值;如果查找到,则根据该匹配的Flow值在预查找表表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offseth0-x;以Indexh0-x与offseth0-x之和为读取地址,从所述外部缓存单元读取流表表项;如果未查找到,则通知所述冲突解决单元;
所述冲突解决单元,在接收到所述通知后,采用下一级预设Hash函数计算key-x的Hash索引,记为Indexhn-x;在所述预查找表中查找与所述下一级预设Hash函数和Indexhn-x对应的、且与key-x匹配的Flow值,如果查找到,根据匹配的Flow值在表项中的排序位置,确定key-x所属流表表项在相应Hash桶中的偏移位置offsethn-x;以Indexhn-x与offsethn-x之和为读取地址,从所述外部缓存单元中读取流表表项,如果未查找到,则采用再下一级的预设Hash函数执行所述计算key-x的Hash索引的操作,直到达到最后一级预设Hash函数。
12、如权利要求8至11任意一项所述的装置,其特征在于,所述内部缓存单元进一步存储备用Hash表;
所述关系建立单元,进一步用于对采用所述预设Hash函数计算Hash索引出现冲突的关键字,采用备用Hash函数进行处理,得到对应的Hash索引,记为Indexh’;采用备用Hash表记录关键字的Indexh’与关键字的所属流表表项之间的对应关系;
所述流表查找单元进一步包括备用查找模块,用于采用所述备用Hash函数,对key-x进行Hash运算,得到Hash索引记为Indexh’-x;从所述备用Hash表中读取与Indexh’-x对应的流表表项;如果key-x命中读取的流表表项,则终止流表查找单元查找预查找表的处理。
13、如权利要求8至11任意一项所述的装置,其特征在于,所述关系建立单元在针对每个Hash索引顺序记录该Hash索引对应的各Flow值时,以Hash索引为记录基址,在所述内部缓存单元中依次记录该Hash索引对应的各Flow值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100822683A CN101540723B (zh) | 2009-04-20 | 2009-04-20 | 一种流表查找方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100822683A CN101540723B (zh) | 2009-04-20 | 2009-04-20 | 一种流表查找方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101540723A true CN101540723A (zh) | 2009-09-23 |
CN101540723B CN101540723B (zh) | 2011-07-06 |
Family
ID=41123719
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100822683A Active CN101540723B (zh) | 2009-04-20 | 2009-04-20 | 一种流表查找方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101540723B (zh) |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101977177A (zh) * | 2010-07-30 | 2011-02-16 | 北京星网锐捷网络技术有限公司 | 一种流表表项的创建方法、查询方法及装置 |
CN102073733A (zh) * | 2011-01-19 | 2011-05-25 | 中兴通讯股份有限公司 | 哈希表管理方法及装置 |
CN102316012A (zh) * | 2010-06-30 | 2012-01-11 | 杭州华三通信技术有限公司 | 一种实现ip快转的方法和三层转发设备 |
CN102882810A (zh) * | 2012-10-26 | 2013-01-16 | 杭州迪普科技有限公司 | 一种报文快速转发方法及装置 |
CN103731354A (zh) * | 2013-12-25 | 2014-04-16 | 江苏省未来网络创新研究院 | 一种基于自定义多级流表快速匹配方法 |
WO2014187040A1 (zh) * | 2013-05-21 | 2014-11-27 | 中兴通讯股份有限公司 | 基于hash表的关键字映射处理方法和装置 |
CN104378263A (zh) * | 2014-11-27 | 2015-02-25 | 盛科网络(苏州)有限公司 | 基于tcp会话的网络流量监测方法、装置及报文处理芯片 |
WO2015074182A1 (zh) * | 2013-11-19 | 2015-05-28 | 华为技术有限公司 | 一种基于流表的表项寻址方法、交换机及控制器 |
CN104811429A (zh) * | 2014-01-27 | 2015-07-29 | 中兴通讯股份有限公司 | 一种of协议指令实现方法及控制器 |
CN105573965A (zh) * | 2014-10-13 | 2016-05-11 | 曹建卫 | 一种基于软件的电子表格比较方法 |
CN106100997A (zh) * | 2016-06-03 | 2016-11-09 | 杭州华三通信技术有限公司 | 一种网络流量信息处理方法及装置 |
CN106416151A (zh) * | 2014-05-30 | 2017-02-15 | 高通股份有限公司 | 用于分组处理的基于多表哈希查找 |
CN106789733A (zh) * | 2016-12-01 | 2017-05-31 | 北京锐安科技有限公司 | 一种提高大规模网络流表查找效率的装置及方法 |
CN107547390A (zh) * | 2016-06-29 | 2018-01-05 | 迈普通信技术股份有限公司 | 流表创建以及查询的方法及装置 |
CN104104604B (zh) * | 2013-04-04 | 2018-10-02 | 马维尔以色列(M.I.S.L.)有限公司 | 网络交换机设备中的准确匹配哈希查找数据库的方法及装置 |
WO2018177184A1 (zh) * | 2017-03-31 | 2018-10-04 | 深圳市中兴微电子技术有限公司 | 一种实现查表处理的方法及装置、设备、存储介质 |
CN110399530A (zh) * | 2018-04-20 | 2019-11-01 | 杭州海康威视数字技术股份有限公司 | 数据匹配方法、装置及计算机设备 |
CN111541617A (zh) * | 2020-04-17 | 2020-08-14 | 网络通信与安全紫金山实验室 | 一种用于高速大规模并发数据流的数据流表处理方法及装置 |
JP2022527704A (ja) * | 2019-04-12 | 2022-06-03 | 華為技術有限公司 | トラフィック分類方法及び装置 |
CN116248593A (zh) * | 2022-12-30 | 2023-06-09 | 天翼云科技有限公司 | 一种流表关键字匹配方法、装置、电子设备和存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108200481B (zh) * | 2017-12-07 | 2020-12-15 | 北京佳讯飞鸿电气股份有限公司 | 一种rtp-ps流处理方法、装置、设备及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6434662B1 (en) * | 1999-11-02 | 2002-08-13 | Juniper Networks, Inc. | System and method for searching an associative memory utilizing first and second hash functions |
CN101267381B (zh) * | 2007-03-13 | 2010-12-29 | 大唐移动通信设备有限公司 | 哈希表操作方法及装置 |
-
2009
- 2009-04-20 CN CN2009100822683A patent/CN101540723B/zh active Active
Cited By (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102316012A (zh) * | 2010-06-30 | 2012-01-11 | 杭州华三通信技术有限公司 | 一种实现ip快转的方法和三层转发设备 |
CN101977177A (zh) * | 2010-07-30 | 2011-02-16 | 北京星网锐捷网络技术有限公司 | 一种流表表项的创建方法、查询方法及装置 |
CN101977177B (zh) * | 2010-07-30 | 2013-08-14 | 北京星网锐捷网络技术有限公司 | 一种流表表项的创建方法、查询方法及装置 |
CN102073733B (zh) * | 2011-01-19 | 2014-08-13 | 中兴通讯股份有限公司 | 哈希表管理方法及装置 |
CN102073733A (zh) * | 2011-01-19 | 2011-05-25 | 中兴通讯股份有限公司 | 哈希表管理方法及装置 |
CN102882810A (zh) * | 2012-10-26 | 2013-01-16 | 杭州迪普科技有限公司 | 一种报文快速转发方法及装置 |
CN102882810B (zh) * | 2012-10-26 | 2016-02-10 | 杭州迪普科技有限公司 | 一种报文快速转发方法及装置 |
CN104104604B (zh) * | 2013-04-04 | 2018-10-02 | 马维尔以色列(M.I.S.L.)有限公司 | 网络交换机设备中的准确匹配哈希查找数据库的方法及装置 |
WO2014187040A1 (zh) * | 2013-05-21 | 2014-11-27 | 中兴通讯股份有限公司 | 基于hash表的关键字映射处理方法和装置 |
CN105052087B (zh) * | 2013-11-19 | 2018-10-09 | 华为技术有限公司 | 一种基于流表的表项寻址方法、交换机及控制器 |
WO2015074182A1 (zh) * | 2013-11-19 | 2015-05-28 | 华为技术有限公司 | 一种基于流表的表项寻址方法、交换机及控制器 |
CN105052087A (zh) * | 2013-11-19 | 2015-11-11 | 华为技术有限公司 | 一种基于流表的表项寻址方法、交换机及控制器 |
US10015095B2 (en) | 2013-11-19 | 2018-07-03 | Huawei Technologies Co., Ltd. | Flow table-based table entry addressing method, switch, and controller |
CN103731354A (zh) * | 2013-12-25 | 2014-04-16 | 江苏省未来网络创新研究院 | 一种基于自定义多级流表快速匹配方法 |
CN103731354B (zh) * | 2013-12-25 | 2018-01-26 | 江苏省未来网络创新研究院 | 一种基于自定义多级流表快速匹配方法 |
CN104811429A (zh) * | 2014-01-27 | 2015-07-29 | 中兴通讯股份有限公司 | 一种of协议指令实现方法及控制器 |
CN106416151A (zh) * | 2014-05-30 | 2017-02-15 | 高通股份有限公司 | 用于分组处理的基于多表哈希查找 |
CN105573965A (zh) * | 2014-10-13 | 2016-05-11 | 曹建卫 | 一种基于软件的电子表格比较方法 |
CN104378263A (zh) * | 2014-11-27 | 2015-02-25 | 盛科网络(苏州)有限公司 | 基于tcp会话的网络流量监测方法、装置及报文处理芯片 |
CN106100997A (zh) * | 2016-06-03 | 2016-11-09 | 杭州华三通信技术有限公司 | 一种网络流量信息处理方法及装置 |
CN106100997B (zh) * | 2016-06-03 | 2021-04-30 | 新华三技术有限公司 | 一种网络流量信息处理方法及装置 |
CN107547390A (zh) * | 2016-06-29 | 2018-01-05 | 迈普通信技术股份有限公司 | 流表创建以及查询的方法及装置 |
CN107547390B (zh) * | 2016-06-29 | 2019-11-26 | 迈普通信技术股份有限公司 | 流表创建以及查询的方法及装置 |
CN106789733A (zh) * | 2016-12-01 | 2017-05-31 | 北京锐安科技有限公司 | 一种提高大规模网络流表查找效率的装置及方法 |
CN106789733B (zh) * | 2016-12-01 | 2019-12-20 | 北京锐安科技有限公司 | 一种提高大规模网络流表查找效率的装置及方法 |
CN108664518A (zh) * | 2017-03-31 | 2018-10-16 | 深圳市中兴微电子技术有限公司 | 一种实现查表处理的方法及装置 |
WO2018177184A1 (zh) * | 2017-03-31 | 2018-10-04 | 深圳市中兴微电子技术有限公司 | 一种实现查表处理的方法及装置、设备、存储介质 |
CN108664518B (zh) * | 2017-03-31 | 2021-12-07 | 深圳市中兴微电子技术有限公司 | 一种实现查表处理的方法及装置 |
CN110399530A (zh) * | 2018-04-20 | 2019-11-01 | 杭州海康威视数字技术股份有限公司 | 数据匹配方法、装置及计算机设备 |
JP2022527704A (ja) * | 2019-04-12 | 2022-06-03 | 華為技術有限公司 | トラフィック分類方法及び装置 |
JP7170905B2 (ja) | 2019-04-12 | 2022-11-14 | 華為技術有限公司 | トラフィック分類方法及び装置 |
CN111541617A (zh) * | 2020-04-17 | 2020-08-14 | 网络通信与安全紫金山实验室 | 一种用于高速大规模并发数据流的数据流表处理方法及装置 |
CN111541617B (zh) * | 2020-04-17 | 2021-11-02 | 网络通信与安全紫金山实验室 | 一种用于高速大规模并发数据流的数据流表处理方法及装置 |
CN116248593A (zh) * | 2022-12-30 | 2023-06-09 | 天翼云科技有限公司 | 一种流表关键字匹配方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN101540723B (zh) | 2011-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101540723B (zh) | 一种流表查找方法和装置 | |
CN103238145B (zh) | 用于网络装备中的高性能、可更新和确定的哈希表的方法和设备 | |
CN101692651B (zh) | 一种哈希查找表的方法和装置 | |
EP1486040B1 (en) | Vlan table management system for memory efficient lookups and inserts in hardware-based packet switches | |
CN101655861B (zh) | 基于双计数布鲁姆过滤器的哈希方法和哈希装置 | |
CN100531102C (zh) | 路由表调整方法、路由查询方法和装置及路由表存储装置 | |
US9390134B2 (en) | Regular expression matching method and system, and searching device | |
US6266705B1 (en) | Look up mechanism and associated hash table for a network switch | |
CN101594319B (zh) | 表项查找方法和装置 | |
US20060265370A1 (en) | Method and apparatus for reducing overflow of hash table entries | |
CN102035727B (zh) | 一种路由的处理方法和设备 | |
US20080133494A1 (en) | Method and apparatus for searching forwarding table | |
CN107832343B (zh) | 一种基于位图的mbf数据索引结构对数据快速检索的方法 | |
CN102890675B (zh) | 一种数据存储和查找的方法及装置 | |
CN111382327A (zh) | 一种字符串匹配装置及方法 | |
CN102420771B (zh) | 高速网络环境中提高tcp并发连接速度的方法 | |
CN111984835B (zh) | 一种IPv4掩码五元组规则存储压缩方法及装置 | |
CN101256579A (zh) | 一种数据库范围查询数据组织的方法 | |
CN109460404A (zh) | 一种基于redis的高效Hbase分页查询方法 | |
CN101277252A (zh) | 多分支Trie树的遍历方法 | |
US6009504A (en) | Apparatus and method for storing data associated with multiple addresses in a storage element using a base address and a mask | |
CN116701440B (zh) | 一种布谷鸟过滤器及数据插入、查询、删除方法 | |
CN110191057A (zh) | 路由查找方法及路由设备 | |
CN101840417B (zh) | 一种基于相关关系的物联网uid查询方法 | |
CN103077198A (zh) | 一种操作系统及其文件缓存定位方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No. Patentee after: Xinhua three Technology Co., Ltd. Address before: 310053 Hangzhou hi tech Industrial Development Zone, Zhejiang province science and Technology Industrial Park, No. 310 and No. six road, HUAWEI, Hangzhou production base Patentee before: Huasan Communication Technology Co., Ltd. |
|
CP03 | Change of name, title or address |