CN109286570B - 一种邻接表项的查找方法及装置 - Google Patents
一种邻接表项的查找方法及装置 Download PDFInfo
- Publication number
- CN109286570B CN109286570B CN201811357959.5A CN201811357959A CN109286570B CN 109286570 B CN109286570 B CN 109286570B CN 201811357959 A CN201811357959 A CN 201811357959A CN 109286570 B CN109286570 B CN 109286570B
- Authority
- CN
- China
- Prior art keywords
- index table
- entry
- secondary index
- adjacent
- table entry
- 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
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/10—Mapping addresses of different types
- H04L61/103—Mapping addresses of different types across network layers, e.g. resolution of network layer into physical layer addresses or address resolution protocol [ARP]
Abstract
本申请实施例提供一种邻接表项的查找方法及装置,包括:当确定与待转发报文匹配的转发表项时,检测该转发表项是否记录有与该转发表项关联的邻接表项的索引和标识;若是,则读取所述邻接表项的索引所指示的邻接表项以及该邻接表项标识;若读取到的邻接表项标识与所述转发表项中记录的邻接表项的标识一致,则将读取的邻接表项确定为与该转发表项关联的邻接表项。使用本申请实施例提供的方法,可以提高在报文转发时查找邻接表项的速率。
Description
技术领域
本申请涉及存储领域,尤其涉及一种邻接表项的查找方法及装置。
背景技术
在通信领域中,转发设备上通常配置有转发表和邻接表,比如邻接表可以是地址解析协议(Address Resolution Protocol,ARP)表等等,转发设备可以通过转发表和邻接表转发业务流量。
具体地,以邻接表为ARP表为例。当转发设备接收到业务流量时,可以依据业务流量的目的网络协议(Internet Protocol,网络协议)地址查找与该目的IP对应的转发表项,然后在查找与该转发表项关联的ARP表项,通过该转发表项和ARP表项转发业务流量。
然而,在查找与该转发表项关联的ARP表项时,转发设备需要获取该转发表项记录的下一跳和出接口作为关键字。转发设备需要查找与该关键字匹配的ARP表项,在匹配过程中,转发设备需要遍历ARP表项,检查遍历的ARP表项是否与该关键字匹配,若匹配,则确定该ARP表项为与该转发表项关联的ARP表项。
上述方式,需要用关键字与大量的ARP表项进行匹配,才能找到与该关键匹配的ARP表项。尤其是,当接收到大量具有相同报文特征(如报文目的IP、源IP等等)的报文时,对于每条报文都需要重复上述查ARP表项的过程,大大降低了报文转发的速率。
发明内容
有鉴于此,本申请提供一种邻接表项的查找方法及装置,用以在报文转发时提高邻接表项的查找速率。
具体地,本申请是通过如下技术方案实现的:
根据本申请的第一方面,提供一种邻接表项的查找方法,所述方法应用于转发设备,包括:
当确定与待转发报文匹配的转发表项时,检测该转发表项是否记录有与该转发表项关联的邻接表项的索引和标识;
若是,则读取所述邻接表项的索引所指示的邻接表项以及该邻接表项标识;
若读取到的邻接表项标识与所述转发表项中记录的邻接表项的标识一致,则将读取的邻接表项确定为与该转发表项关联的邻接表项。
可选的,所述方法还包括:
若所述转发表项中未记录与该转发表项关联的邻接表项的索引和标识,则以所述转发表项的固定字段作为关键字;
在已记录的所有邻接表项中,确定与该关键字匹配的邻接表项,并将确定出的邻接表项作为与该转发表项关联的邻接表项;
将确定出的邻接表项的索引和标识添加至所述转发表项;
或者,
若读取到的邻接表项标识与所述转发表项中记录的邻接表项的标识不一致,则以所述转发表项的固定字段作为关键字;
在已记录的所有邻接表项中,确定与该关键字匹配的邻接表项,并将确定出的邻接表项作为与该转发表项关联的邻接表项;
利用确定出的邻接表项的索引和标识更新所述转发表项中记录的索引和标识。
可选的,所述转发设备上配置有一级索引表和二级索引表;所述一级索引表包括至少一个一级索引表项;所述二级索引表包括至少一个二级索引表项;每个一级索引表项对应一个二级索引表;
所述一级索引表项包括:与该一级索引表项对应的二级索引表的地址;
所述二级索引表项包括:邻接表项;
所述邻接表项的索引包括:一级索引和二级索引;
所述一级索引用于标识一级索引表项在所述一级索引表中位置;所述二级索引用于标识二级索引表项在所述二级索引表中位置;
所述读取所述邻接表项的索引所指示的邻接表项,包括:
在所述一级索引表中,读取所述一级索引所指示的目标一级索引表项,并依据目标一级索引表项里记录的二级索引表地址,读取该二级索引表地址所指示的二级索引表;
在读取到的二级索引表中,读取所述二级索引所指示的目标二级索引表项;
读取该目标二级索引表项里记录的邻接表项。
可选的,所述转发设备还配置有可用链表;所述可用链表的链表节点用于记录可用二级索引表所对应的一级索引表项;所述可用二级索引表具有空闲二级索引表项;
所述一级索引表项里还记录了位图文件bitmap;所述bitmap用于表征该一级索引表项对应的二级索引表中各二级索引表项的使用状态;
所述方法还包括:
获取待学习的邻接表项;
检测所述可用链表上是否存在链表节点;
若存在,则将所述可用链表上的任一链表节点里记录的一级索引表项作为所述目标一级索引表项;
依据该目标一级索引表项中的bitmap,将与所述目标一级索引表项对应的二级索引表中的空闲二级索引表项作为所述目标二级索引表项;
将所述邻接表项写入至所述目标二级索引表项,并在该目标一级索引表项中的bitmap中将该二级索引表项设置为已使用状态;
依据该目标一级索引表项的bitmap,确定所述目标一级索引表项对应的二级索引表中所有二级索引表项是否均为已使用状态;
若是,则从所述可用链表上删除该目标一级索引表项;
若否,则保留所述可用链表上的目标一级索引表项。
可选的,所述方法还包括:
若不存在,则在所述一级索引表中选择任一空闲一级索引表项作为所述目标一级索引表项;
为该目标一级索引表项创建新二级索引表,将所述新二级索引表中任一二级索引表项作为所述目标二级索引表项;
将所述邻接表项写入至所述目标二级索引表项,并在该目标一级索引表项中的bitmap中将该二级索引表项设置为已使用状态;
将所述空闲一级索引表项添加在所述可用链表上。
可选的,在所述将所述邻接表项写入至所述目标二级索引表项后,包括:
依据所述目标二级索引表项的二级索引、以及所述目标一级索引表项的一级索引生成所述邻接表项的索引;
为所述邻接表项分配不同于除所述邻接表项之外的其他邻接表项的标识。
可选的,所述方法还包括:
接收针对所述邻接表项的删除指令;所述删除指令携带了所述邻接表项的索引;
依据所述邻接表项的索引,确定所述邻接表项的索引所指示的目标一级索引表项和目标二级索引表项;
在所述目标一级索引表项的bitmap中将所述目标二级索引表项设置为空闲状态,并设置所述邻接表项的标识无效。
可选的,所述方法还包括:
当检测到已使用的二级索引表项个数与已创建的二级索引表的个数的比值小于预设阈值时,在已记录的所有二级索引表中,选择满足合并条件的多个二级索引表;所述合并条件为:多个二级索引表中的所有已使用二级索引表项总数小于一个二级索引表最大可承载的二级索引表项数;
以所述多个二级索引表中的任一二级索引表作为主二级索引表,以所述多个二级索引表中的其他二级索引表作为从二级索引表;
针对每一个从二级索引表,将该从二级索引表中已使用的二级索引表项所记录的邻接表项迁移至所述主二级索引表中空闲的二级索引表项;
依据该主二级索引表中空闲的二级索引表项的二级索引、该主二级索引表对应的一级索引表项的一级索引生成该被迁移邻接表项的新索引,并为该邻接表项分配新标识;
在该主二级索引表对应的一级索引表项的bitmap中设置该主二级索引表中空闲的二级索引表项为已使用状态。
可选的,所述方法还包括:
在本地记录的所有二级索引表中,若确定任一二级索引表中的各二级索引表项均被设置为空闲状态,则检查所述可用链表上是否存在链表节点;
若存在,则释放所述任一二级索引表;
若不存在,则不释放所述任一二级索引表,并将该任一二级索引表对应的一级索引表项作为链表节点挂在所述可用链表上。
根据本申请的第二方面,提供一种邻接表项的查找装置,所述装置应用于转发设备,包括:
检测单元,用于当确定与待转发报文匹配的转发表项时,检测该转发表项是否记录有与该转发表项关联的邻接表项的索引和标识;
读取单元,用于若是,则读取所述邻接表项的索引所指示的邻接表项以及该邻接表项标识;
确定单元,用于若读取到的邻接表项标识与所述转发表项中记录的邻接表项的标识一致,则将读取的邻接表项确定为与该转发表项关联的邻接表项。
可选的,所述装置还包括:
添加单元,用于若所述转发表项中未记录与该转发表项关联的邻接表项的索引和标识,则以所述转发表项的固定字段作为关键字;
在已记录的所有邻接表项中,确定与该关键字匹配的邻接表项,并将确定出的邻接表项作为与该转发表项关联的邻接表项;
将确定出的邻接表项的索引和标识添加至所述转发表项;
更新单元,用于若读取到的邻接表项标识与所述转发表项中记录的邻接表项的标识不一致,则以所述转发表项的固定字段作为关键字;
在已记录的所有邻接表项中,确定与该关键字匹配的邻接表项,并将确定出的邻接表项作为与该转发表项关联的邻接表项;
利用确定出的邻接表项的索引和标识更新所述转发表项中记录的索引和标识。
可选的,所述转发设备上配置有一级索引表和二级索引表;所述一级索引表包括至少一个一级索引表项;所述二级索引表包括至少一个二级索引表项;每个一级索引表项对应一个二级索引表;
所述一级索引表项包括:与该一级索引表项对应的二级索引表的地址;
所述二级索引表项包括:邻接表项;
所述邻接表项的索引包括:一级索引和二级索引;
所述一级索引用于标识一级索引表项在所述一级索引表中位置;所述二级索引用于标识二级索引表项在所述二级索引表中位置;
所述读取单元,在读取所述邻接表项的索引所指示的邻接表项时,具体用于在所述一级索引表中,读取所述一级索引所指示的目标一级索引表项,并依据目标一级索引表项里记录的二级索引表地址,读取该二级索引表地址所指示的二级索引表;
在读取到的二级索引表中,读取所述二级索引所指示的目标二级索引表项;
读取该目标二级索引表项里记录的邻接表项。
可选的,所述转发设备还配置有可用链表;所述可用链表的链表节点用于记录可用二级索引表所对应的一级索引表项;所述可用二级索引表具有空闲二级索引表项;
所述一级索引表项里还记录了位图文件bitmap;所述bitmap用于表征该一级索引表项对应的二级索引表中各二级索引表项的使用状态;
所述装置还包括:
写入单元,用于获取待学习的邻接表项,检测所述可用链表上是否存在链表节点;
若存在,则将所述可用链表上的任一链表节点里记录的一级索引表项作为所述目标一级索引表项;
依据该目标一级索引表项中的bitmap,将与所述目标一级索引表项对应的二级索引表中的空闲二级索引表项作为所述目标二级索引表项;
将所述邻接表项写入至所述目标二级索引表项,并在该目标一级索引表项中的bitmap中将该二级索引表项设置为已使用状态;
依据该目标一级索引表项的bitmap,确定所述目标一级索引表项对应的二级索引表中所有二级索引表项是否均为已使用状态;
若是,则从所述可用链表上删除该目标一级索引表项;
若否,则保留所述可用链表上的目标一级索引表项。
可选的,所述写入单元,还用于若不存在,则在所述一级索引表中选择任一空闲一级索引表项作为所述目标一级索引表项;
为该目标一级索引表项创建新二级索引表,将所述新二级索引表中任一二级索引表项作为所述目标二级索引表项;
将所述邻接表项写入至所述目标二级索引表项,并在该目标一级索引表项中的bitmap中将该二级索引表项设置为已使用状态;
将所述空闲一级索引表项添加在所述可用链表上。
可选的,所述写入单元,在所述将所述邻接表项写入至所述目标二级索引表项后,还具体用于依据所述目标二级索引表项的二级索引、以及所述目标一级索引表项的一级索引生成所述邻接表项的索引;
为所述邻接表项分配不同于除所述邻接表项之外的其他邻接表项的标识。
可选的,所述装置还包括:
删除单元,用于接收针对所述邻接表项的删除指令;
所述删除指令携带了所述邻接表项的索引;
依据所述邻接表项的索引,确定所述邻接表项的索引所指示的目标一级索引表项和目标二级索引表项;
在所述目标一级索引表项的bitmap中将所述目标二级索引表项设置为空闲状态,并设置所述邻接表项的标识无效。
可选的,所述装置还包括:
合并单元,用于当检测到已使用的二级索引表项个数与已创建的二级索引表的个数的比值小于预设阈值时,在已记录的所有二级索引表中,选择满足合并条件的多个二级索引表;所述合并条件为:多个二级索引表中的所有已使用二级索引表项总数小于一个二级索引表最大可承载的二级索引表项数;
以所述多个二级索引表中的任一二级索引表作为主二级索引表,以所述多个二级索引表中的其他二级索引表作为从二级索引表;
针对每一个从二级索引表,将该从二级索引表中已使用的二级索引表项所记录的邻接表项迁移至所述主二级索引表中空闲的二级索引表项;
依据该主二级索引表中空闲的二级索引表项的二级索引、该主二级索引表对应的一级索引表项的一级索引生成该被迁移邻接表项的新索引,并为该邻接表项分配新标识;
在该主二级索引表对应的一级索引表项的bitmap中设置该主二级索引表中空闲的二级索引表项为已使用状态。
可选的,所述装置还包括:
释放单元,用于在本地记录的所有二级索引表中,若确定任一二级索引表中的各二级索引表项均被设置为空闲状态,则检查所述可用链表上是否存在链表节点;
若存在,则释放所述任一二级索引表;
若不存在,则不释放所述任一二级索引表,并将该任一二级索引表对应的一级索引表项作为链表节点挂在所述可用链表上。
由上述描述可知,一方面,由于转发设备不需要遍历所有的邻接表项来查找与该转发表项的固定字段匹配的邻接表项,而是只需要依据邻接表项的索引直接获取邻接表项,所以本申请采用依据转发表项中记录的索引获取邻接表项的方式,查表速率更高。
另一方面,本申请转发设备在查找到邻接表项后,还要依据邻接表项的唯一标识来判断该查找到的邻接表项是否是与该转发表项关联的邻接表项,以此来防止邻接表项的误查找。
附图说明
图1是本申请一示例性实施例示出的一种二级索引结构示意图;
图2是本申请一示例性实施例示出的一种bitmap图的示意图;
图3是本申请一示例性实施例示出的一种邻接表项管理方法的流程图;
图4是本申请一示例性实施例示出的一种邻接表项查找装置的框图;
图5是本申请一示例性实施例示出的一种转发设备的硬件结构图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请实施例的一些方面相一致的装置和方法的例子。
在本申请实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请实施例。在本申请实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在介绍本申请实施例提供的方法之前,先对本申请实施例所涉及的概念进行详细地介绍。
1、一级索引表
在本申请实施例中,转发设备配置了一级索引表,该一级索引表包括多个一级索引表项。每个一级索引表项具有一个一级索引,一级索引用于表征一级索引表项的位置。
比如,一级索引表是数组结构的索引表,则一级索引表项的一级索引是该一级索引表项的数组下标。
如图1所示,图1所示的竖直的索引表是一级索引表,一级索引表中的每个方格是一级索引表项。一级索引表项的数组下标是该一级索引表项的一级索引。
比如,从上向下,第一个一级索引表项的数组下标是0000,则第一个一级索引表的一级索引是0000。
一级索引表用于管理二级索引表。在本申请实施例中,转发设备配置了多个二级索引表,每个二级索引表与一级索引表的各一级索引表项对应。每个二级索引表包括多个二级索引表项,每个二级索引表项包括邻接表项,对于二级索引表的相关内容在下文进行了详细地叙述。
具体地,一级索引表项记录的内容包括以下几项但不限于以下几项:
1)与该一级索引表项对应的二级索引表的地址。
2)位图文件(bitmap),该bitmap用于记录该二级索引表中各二级索引表项使用状态(即已使用状态和空闲状态)。
该bitmap中各比特(bit)位与该二级索引表中的各二级索引表项一一对应,bit位上的标识可以表征二级索引表项的使用状态。比如,bit位上的标识为1表明与该bit位对应的二级索引表项为已使用状态,bit位上的标识为0表明与该bit位对应的二级索引表项为空闲状态。
参见图2,图2是本申请实施例一示例性实施例示出的一种bitmap的示意图。
如图2所示,假设二级索引表3包括10个二级索引表项,分别为二级索引表项1至二级索引表项10。二级索引表3与一级索引表项3对应。
如图2所示,一级索引表项3的bitmap包括了10个小格,每一个小格代表一个bit位,这10个bit位分别为bit位1至bit位10。
其中,bit位1与二级索引表项1对应,bit位2与二级索引表项2对应,……,bit位10与二级索引表项10对应。
假设bit位标识为1时,表明与该bit位对应的二级索引表项为已使用状态,bit位标识为0时,表明与该bit位对应的二级索引表项为空闲状态。
假设,二级索引表项3、4、5和10为空闲状态,其他二级索引表项为已使用状态,则将bit位3、4、5和10标志为0,其他bit位标志为1。
3)二级索引表中处于空闲状态的二级索引表项个数
4)二级索引表中处于已使用状态的二级索引表项个数
5)可用链表的链表节点(如stNode节点)
当然,该一级索引表中还可包括用于一级索引表项访问、管理的其他的内容,比如防止并发访问一级索引表项的锁等等,这里只是对一级索引表项所记录的内容进行示例性地说明,不对该一级索引表项记录的内容进行具体地限定。
2、二级索引表
本申请实施例配置了多个二级索引表,每个二级索引表与一级索引表的各一级索引表项对应。每个二级索引表包括多个二级索引表项,每个二级索引表项包括邻接表项。
每个二级索引表中的每个二级索引表项都具有一个二级索引,二级索引用于表征二级索引表项在二级索引表中的位置。
比如,二级索引表是数组结构的索引表,则二级索引表项的二级索引是该二级索引表项的数组下标。
如图1所示,图1所示的横向的索引表是二级索引表,二级索引表中的每一小格表示一个二级索引表项,每个二级索引表项记录一个邻接表项。
以图1中二级索引表1为例,二级索引表1中的二级索引表项1的数组下标为0000,则二级索引表项1的二级索引为0000。
二级索引表可承载的最大二级索引表项数量可由用户预先设置,比如用户设置一个二级索引表可承载的最大二级索引表项数量为M个。当新创建一个二级索引表时,就有M个空闲二级索引表项,可以用来储存M个新学习到的邻接表项。
二级索引表的创建是通过邻接表项的写入来触发的,比如当转发设备确定本地不存在空闲的二级索引表项来写入邻接表项时,转发设备可创建新的二级索引表,新创建的二级索引表包括M个二级索引表项。转发设备可将邻接表项写入到任一二级索引表项。转发设备可在该二级索引表中写入M个邻接表项后,再创建新的二级索引表来写入新的邻接表项。
3、邻接表项的索引
本申请实施例以邻接表项所在的二级索引表项的二级索引、以及二级索引表项所在二级索引表所对应的一级索引表项的一级索引进行拼接,组成该邻接表项的索引。
例如,如图1所示,图1中二级索引表项里记录的ADJ就是邻接表项,假设一级索引表项3的一级索引为0002,一级索引表项3记录了二级索引表3的地址,二级索引表3中的二级索引表项4的二级索引为0003,则二级索引表项中记录的邻接表项的索引为0x00020003。
4、邻接表项的标识
本申请实施例为每个邻接表项分配了一个邻接表项的标识,该邻接表项的标识唯一标识一个邻接表项,换句话来说,每个邻接表项的标识均不相同。
在邻接表项写入,删除或者发生迁移时,本申请实施例会为该邻接表项生成新的不同于其他邻接表项的标识。
5、可用链表
为了便于二级索引表项的管理,本申请实施例还涉及了可用链表,该可用链表的链表节点用于记录可用二级索引表所对应的一级索引表项。可用二级索引表具有空闲二级索引表项。
例如,如图1所示,图1中的二级索引表1、二级索引表2具有空闲二级索引表项,则二级索引表1、二级索引表2为可用二级索引表。
二级索引表1与一级索引表项1对应,二级索引表2与一级索引表项2对应,则可用链表上可包括两个链表节点,这两个链表节点依次记录一级索引表项0和一级索引表项2。
下面从邻接表项的查询、邻接表项的写入、邻接表项的删除、二级索引表的合并、二级索引表的释放等方面对本申请实施例提供的邻接表项查找方法进行详细地说明。
1)邻接表项的查询
参见图3,图3是本申请实施例一示例性实施例示出的一种邻接表项查找方法的流程图,该方法可应用在转发设备上,可包括如下所示步骤。
步骤301:当确定与待转发报文匹配的转发表项时,检测该转发表项中是否记录有与该转发表项关联的邻接表项的索引和标识。
步骤302:若该转发表项中记录有与该转发表项关联的邻接表项的索引和标识,则读取所述邻接表项的索引所指示的邻接表项以及该邻接表项标识。
本申请实施例在转发表项未记录邻接表项的索引和标识时,以转发表项的固定字段(比如转发表项中的出接口和下一跳等)作为关键字,在本地储存的所有邻接表项中匹配与该关键字对应的邻接表项,并将邻接表项的索引和标识写入至该转发表项中,以使得转发设备再转发与该转发表项匹配的报文时,可以直接依据该转发表项中记录的邻接表项的索引查找到邻接表项。
由于转发设备不需要遍历所有的邻接表项来查找与该转发表项的固定字段匹配的邻接表项,而是只需要依据邻接表项的索引直接获取邻接表项,所以本申请实施例采用依据转发表项中记录的索引获取邻接表项的方式,查表速率更高。
在实现时,当转发设备确定与待转发报文匹配的转发表项时,检测该转发表项中是否记录有与该转发表项关联的邻接表项的索引和标识。
若该转发表项中记录有与该转发表项关联的邻接表项的索引和标识,转发设备可读取所述邻接表项的索引所指示的邻接表项
具体地,在依据该关联的邻接表项的索引读取该索引所指示的邻接表项时,转发设备可以依据该邻接表项索引中的一级索引,在本地一级索引表中,读取一级索引所指示的一级索引表项(这里为了方便叙述,将该读取到的一级索引表项称之为“目标一级索引表项”)。
转发设备可依据目标一级索引表项中记录的二级索引表地址,读取该二级索引表地址所指示的二级索引表。
然后,转发设备可在读取到的二级索引表中,读取该邻接表项索引中的二级索引所指示的二级索引表项(这里为了方便叙述,将该读取到的二级索引表项称之为“目标二级索引表项”)。转发设备读取该目标二级索引表项所记录的邻接表项。
在本申请实施例中,若所述转发表项中未记录与该转发表项关联的邻接表项的索引和标识,转发设备则以所述转发表项的固定字段作为关键字,在已记录的所有邻接表项中,确定与该关键字匹配的邻接表项,并将该确定出的邻接表项作为与该转发表项关联的邻接表项,并将确定出的邻接表项的索引和标识添加在该转发表项中。
其中,当所述邻接表项为ARP表项时,所述固定字段为下一跳和出接口。当然,该固定字段也可以是预先指定的其他字段,这里只是对固定字段进行示例性地说明,不对其进行具体地限定。
下面通过具体的例子对步骤301至步骤302进行详细地说明。
例1:以邻接表项为ARP表项为例。
假设,假设待转发的报1的目的地址为10.10.0.1,假设与报文1匹配的转发表项为转发表项1,如表1所示。
目的地址 | 下一跳 | 出接口 |
10.10.0.0/16 | 192.168.1.0/16 | eth1 |
表1
在实现时,转发设备在确定待转发的报文1匹配转发表项1后,检查转发表项1中是否记录了与该转发表项1关联的邻接表项的索引和标识。
由表1可以看出,表1中未记录该关联的邻接表项的索引和标识。转发设备可以以该转发表项的下一跳(即192.168.1.0/16)和出接口(即eth1)为关键字,在本地储存的所有邻接表项中查找与该关键字对应的邻接表项。该查找到的邻接表项就是与该转发表项1关联的邻接表项,假设查找到的邻接表项为邻接表项1,邻接表项1的索引为0x00020003,标识为23。转发设备可将邻接表项1的索引和标识添加在表1中,添加了邻接表项1的索引和标识的转发表项1如表2所示。
目的地址 | 下一跳 | 出接口 | 索引 | 标识 |
10.10.0.0/16 | 192.168.1.0/16 | eth1 | 0x00020003 | 23 |
表2
在依据转发表项1和邻接表项转发了该待转发报文1后,假设转发设备需要转发待转发的报文2,并且待转发的报文2也匹配转发表项1(即表2)。
转发设备可以检查转发表项1中是否记录了与该转发表项1关联的邻接表项1的索引和标识,由表2所示,转发表项1中记录了邻接表项的索引为0x00020003、标识为23。
转发设备可以读取邻接表项1的索引所指示的邻接表项1。
具体地,转发设备获取该转发表项1记录的索引(即0x00020003)中的一级索引和二级索引。其中,获取到的一级索引为0002,二级索引为0003。
假设,本设备的一级索引表和二级索引表如图1所示,转发设备可在如图1所示的一级索引表中,读取一级索引0002所指示的一级索引表项(即图1中的一级索引表项3)。
然后,转发设备可以读取一级索引表项3记录的二级索引表地址(即记录了二级索引表3的地址),并查找与该二级索引表3地址所指示的二级索引表3。
接着,转发设备可以在二级索引表3中,读取二级索引0003所指示的二级索引表项(即二级索引表项4)。转发设备可从二级索引表项4中读取邻接表项。
步骤303:若读取的邻接表项的标识与所述转发表项中记录的邻接表项的标识一致,则将查找到的邻接表项作为与该转发表项关联的邻接表项。
随着转发设备中邻接表项的不断更新,转发表项中记录的邻接表项的索引所指示的二级索引表项也会被释放、重建等等,所以依据索引查找到的二级索引表项所记录的邻接表项可能不再是该转发表项关联的邻接表项,造成邻接表项的误查找。
比如,假设转发表项1关联邻接表项1,邻接表项1储存在二级索引表项1中,邻接表项1的索引为索引1。转发表项1里记录了索引1。
假设,邻接表项1被迁移其他二级索引表项中,二级索引表项1被空闲,转发设备又新学习到与转发表项2关联的邻接表项2。转发设备将邻接表项2写入二级索引表项1中,此时邻接表项2对应的索引为索引1。
当转发设备依据转发表项1中记录的索引1查找到的是邻接表项2,而邻接表项2与转发表项1并不关联,所以造成邻接表项的误查找。
为了防止发生邻接表项的误查找,本申请实施例转发设备在查找到邻接表项后,还要依据邻接表项的唯一标识来判断该查找到的邻接表项是否是与该转发表项关联的邻接表项,以此来防止邻接表项的误查找。
具体地,转发设备在依据邻接表项的索引读取到邻接表项后,转发设备可检测读取到的邻接表项的标识与该转发表项中记录的邻接表项的标识是否一致。
若确定读取到的邻接表项的标识与该转发表项中记录的邻接表项的标识一致,则确定该读取到的邻接表项为与该转发表项关联的邻接表项。
若确定读取到的邻接表项的标识与该转发表项中记录的邻接表项的标识不一致,则以该转发表项的固定字段作为关键字,在本地记录的所有邻接表项中查找与该关键字对应的邻接表项,将该查找到的邻接表项作为与该转发表项关联的邻接表项,并将查找到的邻接表项的索引和标识添加在转发表项1中。
仍以例1所示的例子进行举例。
若转发设备从二级索引表项4中读取的邻接表项的标识为23,转发设备可确定读取的邻接表项的标识与转发表项1中记录的标识(即23,如表2所示)一致,转发设备可将读取到的邻接表项作为与该转发表项1关联的邻接表项1。
若转发设备从二级索引表项4中读取的邻接表项的标识为53,转发设备可确定读取到的邻接表项的标识(即53)与转发表项1中记录的标识(即23,如表2所示)不一致。此时,转发设备可以以转发表项1中的出接口(即eth1)和下一跳(即192.168.1.0/16)为关键字,在本地记录的所有邻接表项中,匹配与该关键字匹配的邻接表项1。
假设,匹配出的邻接表项1的索引为0x00050002,标识为46。转发设备可利用该邻接表项1此时的索引(即0x00050002)和标识(即46)更新转发表项1中记录的索引和标识,更新后的转发表项1记录的索引为0x00050002,记录的标识为46。需要说明的是,在本申请实施例中,若依据转发表项中记录的索引查找到的邻接表项的标识与该转发表项中记录的标识一致,则表明依据索引读取到的邻接表项是该转发表项所关联的邻接表项;若依据转发表项中记录的索引查找到的邻接表项的标识与该转发表项中记录的标识不一致,则表明依据索引读取到的邻接表项不是该转发表项所关联的邻接表项。
由于本申请实施例在依据索引读取到邻接表项后,可以通过对唯一标识邻接表项的标识进行判断,来确定读取到的邻接表项是否是该转发表项关联的邻接表项,从而可以有效地防止邻接表项误查找的发生。
2)邻接表项的写入
仍以上文所述的领接表项写入到上述目标二级索引表项为例,进行说明。其他邻接表项的写入过程与之相同,这里不再赘述。
转发设备可获取待学习的邻接表项,比如转发设备可通过接收到的路由或者报文等方式获取到待学习的邻接表项,这里只是对获取待学习的邻接表项进行示例性地说明,不进行具体地限定。
当转发设备获取到待学习的邻接表项时,转发设备可检测上述可用链表是否存在链表节点。
1)可用链表上存在链表节点
若该可用链表上存在链表节点,转发设备可将该可用链表上的任一链表节点里记录一级索引表项作为上述目标一级索引表项。
转发设备可依据该目标一级索引表项中记录的bitmap,确定与该目标一级索引表项对应的二级索引表中的空闲二级索引表项,并将该空闲二级索引表项中的任一空闲二级索引表项确定为目标二级索引表项。
转发设备可将该学习到的邻接表项写入至该目标二级索引表项中,并将该目标一级索引表项的bitmap中该目标二级索引表项设置为已使用状态。
转发设备可依据该目标一级索引表项的bitmap,确定所述目标一级索引表项对应的二级索引表中所有二级索引表项是否均为已使用状态,若该目标一级索引表项对应的二级索引表中所有二级索引表项均为已使用状态,则从所述可用链表上删除该目标一级索引表项;若该目标一级索引表项对应的二级索引表中任一二级索引表项为空闲状态,则保留所述可用链表上的目标一级索引表项。
此外,转发设备可基于该目标一级索引表项的一级索引,目标二级索引表项的二级索引,生成该邻接表项的索引。转发设备还可为该邻接表项分配不同于其他邻接表项的标识。
例如,假设可用链表上包括两个链表节点,分别为链表节点1和链表节点2。假设链表节点1中记录了一级索引表项3,链表节点2中记录了一级索引表项2。
转发设备在获取到待学习的邻接表项1,转发设备在检测到可用链表中存在链表节点后,转发设备可选择任一链表节点里记录的一级索引表项作为目标一级索引表项,比如转发设备可将该一级索引表项3作为目标一级索引表项。
假设,一级索引表项3中记录的bitmap如图2所示,其中0标识该bit位对应的二级索引表中有空闲二级索引表项,1标识该bit位对应的二级索引表中的所有二级索引表项均为已使用状态。
由该图2所示的bitmap,转发设备确定二级索引表项3、4、5和10为空闲二级索引表项。假设转发设备可选择任一空闲二级索引表项作为目标二级索引表项,比如转发设备确定二级索引表项4为目标二级索引表项。转发设备可将该邻接表项1写入至二级索引表项4中,转发设备还需要在一级索引表项3的bitmap中,将二级索引表项4对应的bit位设置为1。
转发设备可依据该一级索引表项3的bitmap,确定一级索引表项3对应的二级索引表中所有的二级索引表项是否均为已使用状态。
若一级索引表项3对应的二级索引表中所有的二级索引表项均为已使用状态,则从可用链表中删除链表节点1。
在本例中,一级索引表项3对应二级索引表中的二级索引表项3、5和10仍为空闲二级索引表项,所以转发设备保留可用链表上的链表节点1。
此外,转发设备依据该目标一级索引表项(即一级索引表项3)的一级索引(即0002)和目标二级索引表项(即二级索引表项4)的二级索引(即0003),生成邻接表项1的索引(即0x00020003)。转发设备还可为该邻接表项生成不同于其他邻接表项(除该邻接表项之外的其他邻接表项)的标识(如23)。
2)可用链表上不存在链表节点
若可用链表上不存在链表节点,则表明本地所有的二级索引表项均为已使用状态,此时需要分配新的二级索引表项来存储邻接表项。
具体地,转发设备可在一级索引表中选择任一空闲一级索引表项作为目标一级索引表项,并为该目标一级索引表项创建新二级索引表。其中,空闲一级索引表项是指未记录任何二级索引表项地址的一级索引表项。
转发设备可将新二级索引表中的任一二级索引表项作为目标二级索引表项,并将该邻接表项写入至该目标二级索引表项中。
转发设备可在该目标一级索引表项的bitmap中将该目标二级索引表项设置为已使用状态,并将该空闲以及索引表项添加在所述可用链表上。
此外,转发设备可基于该目标一级索引表项的一级索引和目标二级索引表项的二级索引,生成该邻接表项的索引。转发设备可为所述邻接表项分配不同于其他邻接表项的标识。
以上述邻接表项1的写入为例
当可用链表上不存在链表节点,转发设备在一级索引表中选择任一空闲一级索引表项,假设选择出的空闲一级索引表项为一级索引表项3,一级索引为0002。
转发设备可为该一级索引表项3创建与之对应的二级索引表3,并将该二级索引表3中的任一二级索引表项确定为目标二级索引表项。假设目标二级索引表项为二级索引表项4,二级索引为0003。
转发设备可将学习到的邻接表项1写入至该二级索引表项4中,在一级索引表项3中记录的bitmap中,将与该二级索引表项4对应的bit位的标识设置为1,并将一级索引表项3挂在所述可用链表上。
此外,转发设备可依据该目标一级索引表项(即一级索引表项3)的一级索引(即0002),目标二级索引表项(即二级索引表项4)的二级索引(即0003),生成该邻接表项1的索引(即0x00020003)。转发设备还可为该邻接表项生成不同于其他邻接表项的标识(如23)。3)邻接表项的删除
本申请实施例在删除邻接表项时,并不是直接将邻接表项删除,而是将邻接表项所在的二级索引表项设置为空闲状态,以使新学习到的邻接表项可储存在该二级索引表项中,覆盖需要删除的邻接表项。
在实现时,当接收到针对所述邻接表项的删除指令时,转发设备可确定该邻接表项所在的目标二级索引表项,以及记录该目标二级索引表项所属二级索引表地址的目标一级索引表项。
具体地,该删除指令里携带了该邻接表项的索引,转发设备可依据邻接表项索引中的一级索引确定该目标一级索引表项,以及依据该邻接表项索引中的二级索引确定该目标二级索引表项。
在确定出目标一级索引表项和目标二级索引表项后,转发设备可在目标一级索引表项的bitmap中,将该目标二级索引表项设置为空闲状态,并设置所述邻接表项的标识无效。
例如,仍以邻接表项1为例。
当转发设备接收到针对邻接表项1的删除指令时,该删除指令中携带了邻接表项1的索引(即0x00020003),转发设备可确定邻接表项1的索引中的一级索引(即0002)所指示的一级索引表项3,作为目标一级索引表项。转发设备可确定邻接表项1的索引中的二级索引(即0003)所指示的二级索引表项4,作为目标二级索引表项。
转发设备可在一级索引表项3记录的bitmap中,将与该二级索引表项4对应的bit位标识设置为0。此外,转发设备还可将邻接表项1的标识(即23)设置为0,标识为0表示该标识无效。4)二级索引表的合并
随着邻接表项的不断写入,删除等,转发设备上会出现创建了多个二级索引表,但每个二级索引表中都存在少量的已使用二级索引表项的现象,这种现象就会造成对内存资源的浪费。
为了解决该内存资源的浪费,转发设备可将二级索引表进行合并,将被合并的二级索引表释放掉,以此来缓解对内存资源的浪费。
具体地,当转发设备检测到已使用的二级索引表项个数与已创建的二级索引表的个数的比值小于预设阈值时,转发设备可选择满足合并条件的多个二级索引表。该合并条件为:多个二级索引表中的所有已使用二级索引表项总数小于一个二级索引表项可承载的最大二级索引表项数;
然后,转发设备可以以多个二级索引表中的任一二级索引表作为主二级索引表,以该多个二级索引表中的其他二级索引表作为从二级索引表。
针对每一个从二级索引表,转发设备可将该从二级索引表中已使用的二级索引表项所记录的邻接表项迁移至所述主二级索引表中空闲的二级索引表项;
转发设备可依据该主二级索引表中空闲的二级索引表项的二级索引、该主二级索引表对应的一级索引表项的一级索引生成该被迁移邻接表项的新索引,以及为该邻接表项分配新标识,并在该主二级索引表对应的一级索引表项的bitmap中设置该主二级索引表中空闲的二级索引表项为已使用状态。
例如,假设每个二级索引表中可承载的二级索引表项的个数为20个,预设阈值为5。
假设转发设备上的二级索引表有3个,分别为二级索引表1、二级索引表2和二级索引表3。假设,已使用的二级索引表项为10个,其中,二级索引表1中包括3个已使用的二级索引表项,二级索引表2中包括3个已使用的二级索引表项,二级索引表3中包括4个已使用的二级索引表项。
转发设备确定已使用的二级索引表项的个数(即10)与二级索引表个数(即3)的比值(即3.3333)小于预设阈值(即5),转发设备可选择满足合并条件的多个二级索引表。
在本例,二级索引表1、二级索引表2和二级索引表3中已使用的二级索引表项之和(即10)小于二级索引表最大可承载的二级索引表项数(即20),转发设备可将二级索引表1、二级索引表2和二级索引表3确定为满足合并条件的二级索引表。
假设,转发设备以二级索引表1为主二级索引表,以二级索引表2和二级索引表3为从二级索引表。
针对二级索引表2,转发设备可将二级索引表2中的3个已使用二级索引表项中记录的3个邻接表项迁移至二级索引表1中的3个空闲二级索引表项中,并分别依据这3个空闲二级索引表项的二级索引、以及该二级索引表1对应的一级索引表项的一级索引分别生成这3个邻接表项的新索引,以及为这3个邻接表项分别分配新的标识。转发设备可在二级索引表1对应的一级索引表项中记录的bitmap中,将记录了这3个邻接表项的二级索引表项对应的bit位设置为1。
针对二级索引表3,转发设备可将二级索引表3中的4个已使用二级索引表项中记录的4个邻接表项迁移至二级索引表1中的4个空闲二级索引表项中,并分别依据这4个空闲二级索引表项的二级索引、以及该二级索引表1对应的一级索引表项的一级索引分别这3个邻接表项的新索引,以及为这3个邻接表项分别分配新的标识。转发设备可在二级索引表1对应的一级索引表项中记录的bitmap中,将记录了这4个邻接表项的二级索引表项对应的bit位设置为1。
5)二级索引表的释放
在本申请实施例中,当二级索引表中的所有二级索引表项均为空闲状态时,则需要释放该二级索引表。为了防止该二级索引表的频繁创建和释放而占用设备资源,在释放二级索引表时,需要检查可用链表是否存在链表节点。若该可用链表存在链表节点,则释放该二级索引表,若该可用链表不存在链表节点,则不释放该二级索引表,并将该二级索引表对应的一级索引表项作为链表节点挂在可用链表上,以此来保证可用链表上至少具有一个链表节点。
具体地,在本地记录的所有二级索引表中,若确定任一二级索引表中的各二级索引表项均被设置为空闲状态,转发设备则可检查所述可用链表上是否存在链表节点;
若可用链表上存在链表节点,转发设备释放所述任一二级索引表;
若可用链表上不存在链表节点,转发设备不释放所述任一二级索引表,并将该任一二级索引表对应的一级索引表项作为链表节点挂载所述可用链表。
需要说明的是,转发设备可在执行完上述3)邻接表项删除中的“转发设备可在目标一级索引表项的bitmap中,将该目标二级索引表项设置为空闲状态,并设置所述邻接表项的标识无效”之后,执行该二级索引表的释放。
当然,转发设备还可在执行完上述4)二级索引表项合并中的“在该主二级索引表对应的一级索引表项的bitmap中设置该主二级索引表中空闲的二级索引表项为已使用状态”之后,执行该二级索引表的释放。
当然,转发设备还可周期性地进行二级索引表释放的操作,这里只是对二级索引表释放操作的触发机制进行示例性地说明,并不对该二级索引表的释放操作的触发机制进行具体地限定。
由上述描述可知,一方面,由于转发设备不需要遍历所有的邻接表项来查找与该转发表项的固定字段匹配的邻接表项,而是只需要依据邻接表项的索引直接获取邻接表项,所以本申请实施例采用依据转发表项中记录的索引获取邻接表项的方式,查表速率更高。
另一方面,本申请实施例转发设备在查找到邻接表项后,还要依据邻接表项的唯一标识来判断该查找到的邻接表项是否是与该转发表项关联的邻接表项,以此来防止邻接表项的误查找。
再一方面,如果采用一级索引的方式来建立邻接表项的索引,则需要建立一个很大的索引表来储存大量的邻接表项,而索引表过大就会造成索引表占用的连续内存过长,在转发过程中,占用过长的连续内存会出现报文的缓存丢失(cache miss),影响转发设备的转发性能。
有鉴于此,本申请实施例设计了两级索引表来建立邻接表项的索引,使得每一个索引表(不论一级索引表还是二级索引表)都不会很长,所以可以避免过长的连续内存的占用情况,因此不会影响转发设备的转发性能。
第四方面,本申请实施例还设计了基于两级索引表来写入邻接表项、删除邻接表项、以及二级索引表的合并和释放等逻辑。
以上是对邻接表项查找方法的描述。
本申请实施例还提供了与上述邻接表项查找方法对应的邻接表项查找装置。
参见图4,图4是本申请实施例一示例性实施例示出的一种邻接表项查找装置的框图。该装置可应用于转发设备,可包括如下所示单元。
检测单元401,用于执行上述邻接表项查找方法中的步骤301,即当确定与待转发报文匹配的转发表项时,检测该转发表项是否记录有与该转发表项关联的邻接表项的索引和标识;
读取单元402,用于执行上述邻接表项查找方法中的步骤302,即若是,则读取所述邻接表项的索引所指示的邻接表项以及该邻接表项标识;
确定单元403,用于执行上述邻接表项查找方法中的步骤303,即若读取到的邻接表项标识与所述转发表项中记录的邻接表项的标识一致,则将读取的邻接表项确定为与该转发表项关联的邻接表项。
可选的,所述装置还包括:
添加单元404(图4未示出),用于执行上述1)“邻接表项的查找”所记载的步骤,即若所述转发表项中未记录与该转发表项关联的邻接表项的索引和标识,则以所述转发表项的固定字段作为关键字;
在已记录的所有邻接表项中,确定与该关键字匹配的邻接表项,并将确定出的邻接表项作为与该转发表项关联的邻接表项;
将确定出的邻接表项的索引和标识添加至所述转发表项;
更新单元405(图4未示出),用于执行上述1)“邻接表项的查找”所记载的步骤,即若读取到的邻接表项标识与所述转发表项中记录的邻接表项的标识不一致,则以所述转发表项的固定字段作为关键字;
在已记录的所有邻接表项中,确定与该关键字匹配的邻接表项,并将确定出的邻接表项作为与该转发表项关联的邻接表项;
利用确定出的邻接表项的索引和标识更新所述转发表项中记录的索引和标识。
可选的,所述转发设备上配置有一级索引表和二级索引表;所述一级索引表包括至少一个一级索引表项;所述二级索引表包括至少一个二级索引表项;每个一级索引表项对应一个二级索引表;
所述一级索引表项包括:与该一级索引表项对应的二级索引表的地址;
所述二级索引表项包括:邻接表项;
所述邻接表项的索引包括:一级索引和二级索引;
所述一级索引用于标识一级索引表项在所述一级索引表中位置;所述二级索引用于标识二级索引表项在所述二级索引表中位置;
所述读取单元402,用于执行上述邻接表项查找方法中的“读取读取所述邻接表项的索引所指示的邻接表项和邻接表项标识”,即在读取所述邻接表项的索引所指示的邻接表项和邻接表项标识时,具体用于在所述一级索引表中,读取所述一级索引所指示的目标一级索引表项,并依据目标一级索引表项里记录的二级索引表地址,读取该二级索引表地址所指示的二级索引表;
在读取到的二级索引表中,读取所述二级索引所指示的目标二级索引表项;读取该目标二级索引表项里记录的邻接表项。
可选的,所述转发设备还配置有可用链表;所述可用链表的链表节点用于记录可用二级索引表所对应的一级索引表项;所述可用二级索引表具有空闲二级索引表项;
所述一级索引表项里还记录了位图文件bitmap;所述bitmap用于表征该一级索引表项对应的二级索引表中各二级索引表项的使用状态;
所述装置还包括:
写入单元406(图4未示出),用于执行上述“2)邻接表项的写入”所记载的步骤,即获取待学习的邻接表项,检测所述可用链表上是否存在链表节点;
若存在,则将所述可用链表上的任一链表节点里记录的一级索引表项作为所述目标一级索引表项;依据该目标一级索引表项中的bitmap,将与所述目标一级索引表项对应的二级索引表中的空闲二级索引表项作为所述目标二级索引表项;
将所述邻接表项写入至所述目标二级索引表项,并在该目标一级索引表项中的bitmap中将该二级索引表项设置为已使用状态;
依据该目标一级索引表项的bitmap,确定所述目标一级索引表项对应的二级索引表中所有二级索引表项是否均为已使用状态;
若是,则从所述可用链表上删除该目标一级索引表项;若否,则保留所述可用链表上的目标一级索引表项。
可选的,所述写入单元406,还用于“2)邻接表项的写入”所记载的步骤,即若不存在,则在所述一级索引表中选择任一空闲一级索引表项作为所述目标一级索引表项;
为该目标一级索引表项创建新二级索引表,将所述新二级索引表中任一二级索引表项作为所述目标二级索引表项;
将所述邻接表项写入至所述目标二级索引表项,并在该目标一级索引表项中的bitmap中将该二级索引表项设置为已使用状态;
将所述空闲一级索引表项添加在所述可用链表上。
可选的,所述写入单元406,用于执行“2)邻接表项的写入”所记载的步骤,即在所述将所述邻接表项写入至所述目标二级索引表项后,还具体用于依据所述目标二级索引表项的二级索引、以及所述目标一级索引表项的一级索引生成所述邻接表项的索引;
为所述邻接表项分配不同于除所述邻接表项之外的其他邻接表项的标识。
可选的,所述装置还包括:
删除单元407(图4未示出),用于执行上述“3)邻接表项的删除”中记载的步骤,即接收针对所述邻接表项的删除指令;
所述删除指令携带了所述邻接表项的索引;
依据所述邻接表项的索引,确定所述邻接表项的索引所指示的目标一级索引表项和目标二级索引表项;
在所述目标一级索引表项的bitmap中将所述目标二级索引表项设置为空闲状态,并设置所述邻接表项的标识无效。
可选的,所述装置还包括:
合并单元408(图4未示出),用于执行上述“4)二级索引表的合并”中记载的步骤,即当检测到已使用的二级索引表项个数与已创建的二级索引表的个数的比值小于预设阈值时,在已记录的所有二级索引表中,选择满足合并条件的多个二级索引表;
所述合并条件为:多个二级索引表中的所有已使用二级索引表项总数小于一个二级索引表最大可承载的二级索引表项数;
以所述多个二级索引表中的任一二级索引表作为主二级索引表,以所述多个二级索引表中的其他二级索引表作为从二级索引表;
针对每一个从二级索引表,将该从二级索引表中已使用的二级索引表项所记录的邻接表项迁移至所述主二级索引表中空闲的二级索引表项;
依据该主二级索引表中空闲的二级索引表项的二级索引、该主二级索引表对应的一级索引表项的一级索引生成该被迁移邻接表项的新索引,并为该邻接表项分配新标识;
在该主二级索引表对应的一级索引表项的bitmap中设置该主二级索引表中空闲的二级索引表项为已使用状态。
可选的,所述装置还包括:
释放单元409(图4未示出),用于执行上述“5)二级索引表的释放”中记载的步骤,即在本地记录的所有二级索引表中,若确定任一二级索引表中的各二级索引表项均被设置为空闲状态,则检查所述可用链表上是否存在链表节点;
若存在,则释放所述任一二级索引表;
若不存在,则不释放所述任一二级索引表,并将该任一二级索引表对应的一级索引表项作为链表节点挂在所述可用链表上。
由上述描述可知,一方面,由于转发设备的读取单元不需要遍历所有的邻接表项来查找与该转发表项的固定字段匹配的邻接表项,而是只需要依据邻接表项的索引直接获取邻接表项,所以本申请实施例采用依据转发表项中记录的索引获取邻接表项的方式,查表速率更高。
另一方面,本申请实施例转发设备在查找到邻接表项后,转发设备的确定单元还要依据邻接表项的唯一标识来判断该查找到的邻接表项是否是与该转发表项关联的邻接表项,以此来防止邻接表项的误查找。
相应地,本申请实施例还提供了对应图4所示装置的硬件结构图。
参见图5,图5是本申请实施例一示例性实施例示出的一种转发设备的硬件结构图。
该转发设备包括:通信接口501、处理器502、机器可读存储介质503和总线504;其中,通信接口501、处理器502和机器可读存储介质503通过总线504完成相互间的通信。处理器502通过读取并执行机器可读存储介质503中与报文转发控制逻辑对应的机器可执行指令,可执行上述“邻接表项的查找(即步骤301至步骤303)”、“邻接表项的写入”、“邻接表项的删除”、“二级索引表的合并”、“二级索引表的释放”所描述的方法。
本文中提到的机器可读存储介质503可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:易失存储器、非易失性存储器或者类似的存储介质。具体地,机器可读存储介质503可以是RAM(Radom Access Memory,随机存取存储器)、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、DVD等),或者类似的存储介质,或者它们的组合。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请实施例的较佳实施例而已,并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请实施例保护的范围之内。
Claims (12)
1.一种邻接表项的查找方法,其特征在于,所述方法应用于转发设备,包括:
当确定与待转发报文匹配的转发表项时,检测该转发表项是否记录有与该转发表项关联的邻接表项的索引和标识;
若是,则读取所述邻接表项的索引所指示的邻接表项以及该邻接表项标识;
若读取到的邻接表项标识与所述转发表项中记录的邻接表项的标识一致,则将读取的邻接表项确定为与该转发表项关联的邻接表项;
所述转发设备上配置有一级索引表和二级索引表;所述一级索引表包括至少一个一级索引表项;所述二级索引表包括至少一个二级索引表项;每个一级索引表项对应一个二级索引表;
所述一级索引表项包括:与该一级索引表项对应的二级索引表的地址;
所述二级索引表项包括:邻接表项;
所述邻接表项的索引包括:一级索引和二级索引;
所述一级索引用于标识一级索引表项在所述一级索引表中位置;所述二级索引用于标识二级索引表项在所述二级索引表中位置;
所述转发设备还配置有可用链表;所述可用链表的链表节点用于记录可用二级索引表所对应的一级索引表项;所述可用二级索引表具有空闲二级索引表项;
所述一级索引表项里还记录了位图文件bitmap;所述bitmap用于表征该一级索引表项对应的二级索引表中各二级索引表项的使用状态;
所述方法还包括:
获取待学习的邻接表项;
检测所述可用链表上是否存在链表节点;
若存在,则将所述可用链表上的任一链表节点里记录的一级索引表项作为目标一级索引表项;
依据该目标一级索引表项中的bitmap,将与所述目标一级索引表项对应的二级索引表中的空闲二级索引表项作为目标二级索引表项;
将所述邻接表项写入至所述目标二级索引表项,并在该目标一级索引表项中的bitmap中将该二级索引表项设置为已使用状态;
依据该目标一级索引表项的bitmap,确定所述目标一级索引表项对应的二级索引表中所有二级索引表项是否均为已使用状态;
若是,则从所述可用链表上删除该目标一级索引表项;
若否,则保留所述可用链表上的目标一级索引表项。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述转发表项中未记录与该转发表项关联的邻接表项的索引和标识,则以所述转发表项的固定字段作为关键字;
在已记录的所有邻接表项中,确定与该关键字匹配的邻接表项,并将确定出的邻接表项作为与该转发表项关联的邻接表项;
将确定出的邻接表项的索引和标识添加至所述转发表项;
或者,
若读取到的邻接表项标识与所述转发表项中记录的邻接表项的标识不一致,则以所述转发表项的固定字段作为关键字;
在已记录的所有邻接表项中,确定与该关键字匹配的邻接表项,并将确定出的邻接表项作为与该转发表项关联的邻接表项;
利用确定出的邻接表项的索引和标识更新所述转发表项中记录的索引和标识。
3.根据权利要求1所述的方法,其特征在于,所述读取所述邻接表项的索引所指示的邻接表项,包括:
在所述一级索引表中,读取所述一级索引所指示的目标一级索引表项,并依据目标一级索引表项里记录的二级索引表地址,读取该二级索引表地址所指示的二级索引表;
在读取到的二级索引表中,读取所述二级索引所指示的目标二级索引表项;
读取该目标二级索引表项里记录的邻接表项。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若不存在,则在所述一级索引表中选择任一空闲一级索引表项作为所述目标一级索引表项;
为该目标一级索引表项创建新二级索引表,将所述新二级索引表中任一二级索引表项作为所述目标二级索引表项;
将所述邻接表项写入至所述目标二级索引表项,并在该目标一级索引表项中的bitmap中将该二级索引表项设置为已使用状态;
将所述空闲一级索引表项添加在所述可用链表上。
5.根据权利要求1或4所述的方法,其特征在于,在所述将所述邻接表项写入至所述目标二级索引表项后,包括:
依据所述目标二级索引表项的二级索引、以及所述目标一级索引表项的一级索引生成所述邻接表项的索引;
为所述邻接表项分配不同于除所述邻接表项之外的其他邻接表项的标识。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收针对所述邻接表项的删除指令;所述删除指令携带了所述邻接表项的索引;
依据所述邻接表项的索引,确定所述邻接表项的索引所指示的目标一级索引表项和目标二级索引表项;
在所述目标一级索引表项的bitmap中将所述目标二级索引表项设置为空闲状态,并设置所述邻接表项的标识无效。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当检测到已使用的二级索引表项个数与已创建的二级索引表的个数的比值小于预设阈值时,在已记录的所有二级索引表中,选择满足合并条件的多个二级索引表;所述合并条件为:多个二级索引表中的所有已使用二级索引表项总数小于一个二级索引表最大可承载的二级索引表项数;
以所述多个二级索引表中的任一二级索引表作为主二级索引表,以所述多个二级索引表中的其他二级索引表作为从二级索引表;
针对每一个从二级索引表,将该从二级索引表中已使用的二级索引表项所记录的邻接表项迁移至所述主二级索引表中空闲的二级索引表项;
依据该主二级索引表中空闲的二级索引表项的二级索引、该主二级索引表对应的一级索引表项的一级索引生成该被迁移邻接表项的新索引,并为该邻接表项分配新标识;
在该主二级索引表对应的一级索引表项的bitmap中设置该主二级索引表中空闲的二级索引表项为已使用状态。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在本地记录的所有二级索引表中,若确定任一二级索引表中的各二级索引表项均被设置为空闲状态,则检查所述可用链表上是否存在链表节点;
若存在,则释放所述任一二级索引表;
若不存在,则不释放所述任一二级索引表,并将该任一二级索引表对应的一级索引表项作为链表节点挂在所述可用链表上。
9.一种邻接表项的查找装置,其特征在于,所述装置应用于转发设备,包括:
检测单元,用于当确定与待转发报文匹配的转发表项时,检测该转发表项是否记录有与该转发表项关联的邻接表项的索引和标识;
读取单元,用于若是,则读取所述邻接表项的索引所指示的邻接表项以及该邻接表项标识;
确定单元,用于若读取到的邻接表项标识与所述转发表项中记录的邻接表项的标识一致,则将读取的邻接表项确定为与该转发表项关联的邻接表项;
所述转发设备上配置有一级索引表和二级索引表;所述一级索引表包括至少一个一级索引表项;所述二级索引表包括至少一个二级索引表项;每个一级索引表项对应一个二级索引表;
所述一级索引表项包括:与该一级索引表项对应的二级索引表的地址;
所述二级索引表项包括:邻接表项;
所述邻接表项的索引包括:一级索引和二级索引;
所述一级索引用于标识一级索引表项在所述一级索引表中位置;所述二级索引用于标识二级索引表项在所述二级索引表中位置;
所述转发设备还配置有可用链表;所述可用链表的链表节点用于记录可用二级索引表所对应的一级索引表项;所述可用二级索引表具有空闲二级索引表项;
所述一级索引表项里还记录了位图文件bitmap;所述bitmap用于表征该一级索引表项对应的二级索引表中各二级索引表项的使用状态;
所述装置还包括:
写入单元,用于获取待学习的邻接表项,检测所述可用链表上是否存在链表节点;
若存在,则将所述可用链表上的任一链表节点里记录的一级索引表项作为目标一级索引表项;
依据该目标一级索引表项中的bitmap,将与所述目标一级索引表项对应的二级索引表中的空闲二级索引表项作为目标二级索引表项;
将所述邻接表项写入至所述目标二级索引表项,并在该目标一级索引表项中的bitmap中将该二级索引表项设置为已使用状态;
依据该目标一级索引表项的bitmap,确定所述目标一级索引表项对应的二级索引表中所有二级索引表项是否均为已使用状态;
若是,则从所述可用链表上删除该目标一级索引表项;
若否,则保留所述可用链表上的目标一级索引表项。
10.根据权利要求9所述的装置,其特征在于,所述读取单元,在读取所述邻接表项的索引所指示的邻接表项时,具体用于在所述一级索引表中,读取所述一级索引所指示的目标一级索引表项,并依据目标一级索引表项里记录的二级索引表地址,读取该二级索引表地址所指示的二级索引表;
在读取到的二级索引表中,读取所述二级索引所指示的目标二级索引表项;
读取该目标二级索引表项里记录的邻接表项。
11.根据权利要求9所述的装置,其特征在于,所述装置还包括:
删除单元,用于接收针对所述邻接表项的删除指令;
所述删除指令携带了所述邻接表项的索引;
依据所述邻接表项的索引,确定所述邻接表项的索引所指示的目标一级索引表项和目标二级索引表项;
在所述目标一级索引表项的bitmap中将所述目标二级索引表项设置为空闲状态,并设置所述邻接表项的标识无效。
12.根据权利要求9所述的装置,其特征在于,所述装置还包括:
合并单元,用于当检测到已使用的二级索引表项个数与已创建的二级索引表的个数的比值小于预设阈值时,在已记录的所有二级索引表中,选择满足合并条件的多个二级索引表;所述合并条件为:多个二级索引表中的所有已使用二级索引表项总数小于一个二级索引表最大可承载的二级索引表项数;
以所述多个二级索引表中的任一二级索引表作为主二级索引表,以所述多个二级索引表中的其他二级索引表作为从二级索引表;
针对每一个从二级索引表,将该从二级索引表中已使用的二级索引表项所记录的邻接表项迁移至所述主二级索引表中空闲的二级索引表项;
依据该主二级索引表中空闲的二级索引表项的二级索引、该主二级索引表对应的一级索引表项的一级索引生成该被迁移邻接表项的新索引,并为该邻接表项分配新标识;
在该主二级索引表对应的一级索引表项的bitmap中设置该主二级索引表中空闲的二级索引表项为已使用状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811357959.5A CN109286570B (zh) | 2018-11-15 | 2018-11-15 | 一种邻接表项的查找方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811357959.5A CN109286570B (zh) | 2018-11-15 | 2018-11-15 | 一种邻接表项的查找方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109286570A CN109286570A (zh) | 2019-01-29 |
CN109286570B true CN109286570B (zh) | 2020-02-11 |
Family
ID=65175580
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811357959.5A Active CN109286570B (zh) | 2018-11-15 | 2018-11-15 | 一种邻接表项的查找方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109286570B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113949658B (zh) * | 2021-10-25 | 2023-05-23 | 迈普通信技术股份有限公司 | 表项处理方法、系统、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1794695A (zh) * | 2005-12-28 | 2006-06-28 | 杭州华为三康技术有限公司 | 一种刷新硬件表项的方法 |
CN1897562A (zh) * | 2005-07-12 | 2007-01-17 | 华为技术有限公司 | 路由转发及路由转发的下一跳表存储方法 |
CN101110770A (zh) * | 2007-08-02 | 2008-01-23 | 杭州华三通信技术有限公司 | 基于安全业务的包转发方法及系统 |
CN106330715A (zh) * | 2015-06-30 | 2017-01-11 | 杭州华三通信技术有限公司 | 报文处理方法及装置 |
US20180109454A1 (en) * | 2016-10-18 | 2018-04-19 | Cisco Technology, Inc. | Forwarding information base architecture for a hybrid ip and content centric network router |
-
2018
- 2018-11-15 CN CN201811357959.5A patent/CN109286570B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1897562A (zh) * | 2005-07-12 | 2007-01-17 | 华为技术有限公司 | 路由转发及路由转发的下一跳表存储方法 |
CN1794695A (zh) * | 2005-12-28 | 2006-06-28 | 杭州华为三康技术有限公司 | 一种刷新硬件表项的方法 |
CN101110770A (zh) * | 2007-08-02 | 2008-01-23 | 杭州华三通信技术有限公司 | 基于安全业务的包转发方法及系统 |
CN106330715A (zh) * | 2015-06-30 | 2017-01-11 | 杭州华三通信技术有限公司 | 报文处理方法及装置 |
US20180109454A1 (en) * | 2016-10-18 | 2018-04-19 | Cisco Technology, Inc. | Forwarding information base architecture for a hybrid ip and content centric network router |
Also Published As
Publication number | Publication date |
---|---|
CN109286570A (zh) | 2019-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8208408B2 (en) | Tree-based node insertion method and memory device | |
CN1316390C (zh) | 用树状分段改善树搜索性能和存储器带宽的方法和系统 | |
US8806175B2 (en) | Hybrid hash tables | |
CN104156380B (zh) | 一种分布式存储器哈希索引方法及系统 | |
CN108337172A (zh) | 大规模OpenFlow流表分级存储架构与加速查找方法 | |
CN107153707B (zh) | 一种针对非易失内存的哈希表构建方法及系统 | |
US20080192754A1 (en) | Routing system and method for managing rule entries of ternary content addressable memory in the same | |
CN107832013B (zh) | 一种管理固态硬盘映射表的方法 | |
US20030182291A1 (en) | Method and data structure for a low memory overhead database | |
US9361238B2 (en) | Memory addressing mechanism using a buffer of a hierarchy of collision free hash tables | |
US9049157B1 (en) | Method and device for improving scalability of longest prefix match | |
WO2015032216A1 (zh) | 路由查找方法及装置、B-Tree树结构的构建方法 | |
CN111352931A (zh) | 一种哈希冲突的处理方法、装置及计算机可读存储介质 | |
US11570105B2 (en) | Dynamic route profile storage in a hardware trie routing table | |
RU2525752C2 (ru) | Способ и устройство хранения, чтения и записи составного документа | |
CN109286570B (zh) | 一种邻接表项的查找方法及装置 | |
CN104077078B (zh) | 读存储区、更新存储区的方法及装置 | |
CN109039939B (zh) | 一种负载分担方法及装置 | |
CN108307001B (zh) | Mac地址老化方法、装置及电子设备 | |
US20160330122A1 (en) | Method and device for forwarding data base on index allocation | |
CN110049149B (zh) | Mac地址学习方法、装置及分布式设备 | |
CN109325023B (zh) | 一种数据处理方法及装置 | |
CN114281242B (zh) | 存储器负载均衡的方法、装置和设备 | |
CN111209304A (zh) | 数据处理方法、装置及系统 | |
CN110262755A (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 | ||
CB02 | Change of applicant information |
Address after: Room 101, 1st floor, No. 1 Building, No. 8 Courtyard, Yongjiabei Road, Haidian District, Beijing 100094 Applicant after: Beijing Huasan Communication Technology Co., Ltd. Address before: Room 119, 1st floor, Building 2, Pioneer Road, Haidian District, Beijing 100085 Applicant before: Beijing Huasan Communication Technology Co., Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |