用于产生和使用改进的树形位图数据结构的方法和装置制造方法及图纸

技术编号:2874802 阅读:172 留言:0更新日期:2012-04-11 18:40
公开了用来在例如路由器、包交换系统中,在确定最长前缀匹配时,产生和使用一种改进的树形位图数据结构的方法和装置。一个实现组织树形位图,以最小化在一个查找操作过程中必须被访问的内部节点的数量。在TRIE或搜索节点的每一个中都包含有一个指向叶或结果数组中迄今最佳匹配条目的指针,这允许对这个结果的直接访问而不用必须分析相应的内部节点。而且,一个实现将特定级别的内部节点存储为在它的子数组中的第一个单元。此外,一个实现使用能够同时遍历多个树形位图或其他数据结构的通用搜索引擎,并且执行完全搜索、部分搜索和例如在接收到要搜索的额外数据后重新开始部分搜索。(*该技术在2023年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术特别涉及通信和计算机系统;并且本专利技术尤其涉及、但不限于,例如在路由器、包交换系统或者其他通信或计算机系统中,当确定最长前缀匹配时产生和使用改进的树形位图数据结构。
技术介绍
通信产业正迅速改变以适应新兴技术和不断增长的用户需求。用户对新应用和已有应用的改进性能的需求正促使通讯网络和系统供应商采用具有更高速度和容量(例如,更宽的带宽)的网络和系统。在实现这些目标的努力中,一种很多通信供应者采用的普遍方法是采用包交换技术。越来越多地利用各种包技术,如IP(Internet Protocol,网际协议),建立和扩充公共和私有的通讯网络。例如交换机或者路由器的网络设备一般基于一个或多个标准接收、处理和前向转发或丢弃包,这些标准包括包使用的协议的类型、包的地址(例如,源、目的地、群组)和被请求服务的类型或质量。此外,在每个包上一般执行一个或多个安全操作。但在这些操作可被执行前,在该包上一般必须执行包分类的操作。IP转发需要以网速进行最长匹配前缀计算。现在的IP版本IPv4,使用32位目的地地址,并且一个核心因特网路由器能够容纳超过200,000个前缀。前缀一般用跟着一个’*’的位串(例如,01*)表示,以指示这些后面位的值不重要。对于目的地路由,在路由表中的每一个前缀条目一般包括一个前缀和下一个跳转值。例如,假设数据库只包括两个前缀条目(01*-->L1;0100*-->L2)。如果路由器收到一个目的地地址从01000开始的包,那么该地址和第一个前缀(01*)和第二个前缀(0100*)都匹配。因为第二个前缀是最长匹配,包应该被送到下一个跳转L2。另一方面,一个目的地地址从01010开始的包,应该被送到下一个跳转L1。下一个跳转信息将一般指定在路由器上的一个输出端口,并且可能指定一个数据链路地址。图1A举例图示了示为表10A中的节点1A-9A和二进位TRIE 10B中的节点1B-9B的一组前缀P1-9。二进位TRIE 10B中也示出了占位符/空节点11B-18B,其代表不匹配节点(也就是说,不可能作为最长匹配前缀结果的节点)。例如,串1110000匹配前缀P1(1B)、P2(2B)和P5(5B),其中最长的匹配前缀是P5(5B)。在Eatherton等人于1999年8月10号申请、现正在审理中的美国专利申请09/371,907,”使用树形位图的数据结构和对一个数据库中的数据快速分类的方法(Data Structure Using a Tree Bitmap and Method forRapid Classification of Data in a Database)”中描述了一种一般被称为”树形位图”的已知方法,所述专利申请引用于此以供参考。树形位图是一种多位TRIE算法,它通过将节点分组成步组(sets of strides)来实现对二进制搜索TRIE的表达(representation)。步一般被定义为被分组在一起的二进位TRIE的树级别的数目,或者定义为在单个的读操作中访问的一个树中的级别的数目,代表一个树或TRIE中的多个级别。图1B用示了一个这样将节点P1-P9(1B-9B)和空节点11B-18B(图1A)分成步20-25的例子。在这个例子中,步的大小是三。在一个已知的树形位图算法的实现中,一个特定的TRIE节点的所有子节点被连续存储,这允许对所有子(children)只使用一个指针(指针指向子节点块的开始),因为每一个子节点能够作为相对于该单个指针的偏移量被计算。这能减少所需指针的数目并减小TRIE节点的尺寸。另外,每个TRIE节点有两个位图,一个用于所有在内部被存储的前缀,一个用于外部指针。内部位图具有一个为被存储在这个节点中的每一个前缀设置的1位。这样,对一个r位TRIE节点,长度小于r的可能前缀有(2r)-1个,因此,使用(2r)-1位图。外部位图包含一个位,该位用于所有可能的2r个子指针。一个TRIE节点具有固定的大小,并且只包含一个外部指针位图、一个内部下一个跳转信息位图和一个指向子节点块的独立指针。与内部前缀相关的下一个跳转被以与每一个TRIE节点相关联的独立数组形式存储在该TRIE节点里。为了存储器分配目的,结果数组通常是普通节点大小的偶数倍(例如,对于16位下一个跳转指针,和8字节节点,一个结果节点被最多4个下一个跳转指针需要,两个结果节点被最多8个需要等等)。将下一个跳转指针放到一个独立的结果数组中,每个TRIE节点可能需要两个存储器访问(一个给TRIE节点,一个为存储的前缀提取(fetch)结果节点)。一般使用一种不访问结果节点直到搜索结束的简单延迟策略。然后访问结果节点,该结果节点对应于包含一个有效前缀的路径中碰到的最后的TRIE节点。这只是在除了每个TRIE节点所需的那个存储器查询(memory reference)之外,在末端加了一个单独的存储器查询。图1C图示了图1A-B所示的前缀例子的一个树形位图实现的表达。如所示的,根节点30代表第一级别TRIE。子指针31将根节点30连接到包含第二级别步的子数组40。在级别3,有两个子数组50和60,它们从子数组40分别通过子指针41和42被连接。最长前缀匹配是通过从根节点开始被找到的。目的地地址的开始位(first bits)(对应于根节点的步,在这个例子中是3)被用于索引到在比如位置P上的根节点的外部位图。如果一个1被定位在这个位置,那么有一个有效子指针。这个1左边、不包括这个1的1的数目(假设为I)被确定。因为指向子块起始位置的指针(比如为C)和每一个TRIE节点的大小(比如为S)是已知的,所以指向子节点的指针能够被计算为C+(I*S)。在转移到下一个子之前,检查内部位图以查看是否有一个对应于位置P的存储的前缀。为了这样做,设想从右边开始逐位地移去P的位,并索引到内部位图的相应位置,以寻找遇到的第一个1。例如,假设P是101,并且在根节点位图中使用3位步。最右边的位被首先移去,导致前缀10*。因为10*对应于内部位图中的第六位位置,作检查以确定在那个位置是否有个1。如果没有,最右边的两个位被移去(导致前缀1*)。因为1*对应于内部位图的第三个位置,作检查以确定在那是否有个1。如果在那找到一个1,那么搜索结束。如果在那没有找到一个1,那么前三位被移去,并且执行对一个条目的搜索,该条目对应于内部位图的第一个条目中的*。一旦已经确定一个匹配的被存储的前缀存在于一个TRIE节点中,来自于与TRIE节点相关的结果节点、对应于下一个跳转的信息不会被立即提取。而是,计数前缀位置之前的位的数量以指示该信息在结果数组中的位置。访问结果数组对每个TRIE节点都将使用一个额外的存储器查找。否则,在记忆被存储的前缀位置和相应的父TRIE节点的同时,检查子节点。此目的是记忆在搜索路经中包含被存储的前缀的最后的TRIE节点T和相应的前缀位置。当搜索结束时(也就是说,遇到了一个在外部位图的相应位置上设有一个0的TRIE节点),对应于在已经计算出的位置上的T的结果数组被访问以读完下一个跳转信息。图1D图示了一个全部树形位图搜索的实现的伪码。假设一个函数treeFunction,如果有最长匹配前缀的话,该函数能在一个特定的节点中通本文档来自技高网...

【技术保护点】
一种计算机可读介质,在其上存储有数据结构,数据结构包括:第一搜索节点;第一子数组,包括第一内部节点和第二搜索节点;和第一叶数组,包括多个第一叶数组条目;其中,第一搜索节点,包括一个指向第一子数组的指针;其中,第一内部节点 ,包括一个指向第一叶数组的指针;并且其中,第二搜索节点,包括一个指向多个第一叶数组条目中的一个的指针。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:维贾伊兰加拉詹达利特沙吉威廉N伊瑟顿
申请(专利权)人:思科技术公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利