CN115086221A - 一种报文处理方法、装置、转发设备和存储介质 - Google Patents
一种报文处理方法、装置、转发设备和存储介质 Download PDFInfo
- Publication number
- CN115086221A CN115086221A CN202210888989.9A CN202210888989A CN115086221A CN 115086221 A CN115086221 A CN 115086221A CN 202210888989 A CN202210888989 A CN 202210888989A CN 115086221 A CN115086221 A CN 115086221A
- Authority
- CN
- China
- Prior art keywords
- node
- prefix
- added
- type
- routing table
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 17
- 238000000034 method Methods 0.000 claims abstract description 63
- 238000012545 processing Methods 0.000 claims abstract description 24
- 238000004891 communication Methods 0.000 claims description 21
- 238000006243 chemical reaction Methods 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 12
- 238000005457 optimization Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 23
- 230000008569 process Effects 0.000 description 19
- 239000002699 waste material Substances 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 235000008694 Humulus lupulus Nutrition 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
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/54—Organization of routing tables
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例提供了一种报文处理方法、装置、转发设备和存储介质,涉及网络技术领域,方法包括:获取待处理报文中的目的地址;按照目的地址,在预先基于路由表项构建的目标物理树中查询,确定当前待查询的节点的节点类型;若当前待查询的节点为第一类型,则获取转发参考信息;若为第二类型,则确定第一剩余前缀部分,并基于第一剩余前缀部分,获取转发参考信息;若为第三类型,则确定第二剩余前缀部分,并基于第二剩余前缀部分,确定出当前待查询的节点,返回执行按照目的地址,在预先基于路由表项构建的目标物理树中查询,确定当前待查询的节点的节点类型的步骤;基于转发参考信息对待处理报文进行转发。能够降低存储成本。
Description
技术领域
本发明涉及网络技术领域,特别是涉及一种报文处理方法、装置、转发设备和存储介质。
背景技术
相关技术中,可以通过路由设备完成网络中报文的转发工作。路由设备可以为高端路由器、核心路由器、三层交换机等。例如,路由设备可以根据报文的目的IP(InternetProtocol,网际协议)地址,按照最长前缀匹配(Longest Prefix Matching,LPM)方式,查找路由表项,进而,可以根据查找到的路由表项对报文进行转发。
然而,随着互联网的快速发展和网络通讯技术的不断进步,尤其是IPv6(InternetProtocol version 6,网际协议第6版)协议的应用,使得IP地址的长度以及数量大幅度膨胀,也就会增大存储成本。因此,亟需一种方法,以降低存储成本。
发明内容
本发明实施例的目的在于提供一种报文处理方法、装置、转发设备和存储介质,以降低存储成本。具体技术方案如下:
本发明实施例的第一方面,首先提供了一种报文处理方法,所述方法应用于转发设备,所述方法包括:获取待处理报文中携带的目的地址;按照所述目的地址,在预先基于路由表项构建的目标物理树中查询,确定当前待查询的节点的节点类型;其中,所述目标物理树中第一类型的节点记录有该节点的分支前缀对应的转发参考信息;一个节点的分支前缀包含在所述目标物理树中根节点与该节点之间的路径表征的路径前缀;所述目标物理树中第二类型的节点记录有该节点的节点前缀,以及该节点的节点前缀对应的参考转发信息;一个节点的节点前缀表示在该节点处进行查询时使用的前缀;所述目标物理树中第三类型的节点记录有该节点与子节点之间的路径表征的路径前缀;若当前待查询的节点为第一类型,则获取当前待查询的节点中记录的转发参考信息;若当前待查询的节点为第二类型,则确定所述目的地址与当前待查询的节点的分支前缀匹配后的第一剩余前缀部分,并获取当前待查询的节点中记录的与所述第一剩余前缀部分相匹配的节点前缀对应的转发参考信息;若当前待查询的节点为第三类型,则确定所述目的地址与当前待查询的节点的分支前缀匹配后的第二剩余前缀部分,以及确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀,并将确定出的路径前缀对应的子节点作为当前待查询的节点,返回执行所述按照所述目的地址,在预先基于路由表项构建的目标物理树中查询,确定当前待查询的节点的节点类型的步骤;基于获取到的转发参考信息对所述待处理报文进行转发。
在一些实施例中,在所述确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀之前,所述方法还包括:若当前待查询的节点中记录有第一优化前缀,则按照最长前缀匹配方式,判断所述第一优化前缀中是否存在与所述目的地址相匹配的前缀;其中,所述第一优化前缀包含当前待查询的节点对应的子树中指定节点的分支前缀;当前待查询的节点对应的子树表示:所述目标物理树中以当前待查询的节点为根节点的部分;所述确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀,包括:若所述第一优化前缀中不存在与所述目的地址相匹配的前缀,则确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀;所述方法还包括:若所述第一优化前缀中存在与所述目的地址相匹配的前缀,则将所述第一优化前缀中与所述第二剩余前缀部分相匹配的前缀对应的节点作为当前待查询的节点,并返回执行所述按照所述目的地址,在预先基于路由表项构建的目标物理树中查询,确定当前待查询的节点的节点类型的步骤。
在一些实施例中,所述目标物理树中的节点为基于预设结构的平衡多路查找树Btree生成的。
在一些实施例中,所述目标物理树包含业务存储空间中记录的第一物理树;所述方法还包括:若基于当前的第一物理树未查询到所述目的地址对应的转发参考信息,则获取待添加路由表项;其中,所述待添加路由表项中记录有与所述目的地址相匹配的待添加前缀和对应的待添加转发参考信息;基于所述待添加前缀和所述预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置;判断所述节点位置处是否已存在节点;若所述节点位置不存在节点,则在所述节点位置处添加所述待添加路由表项对应的节点,以更新当前的第一物理树;若所述节点位置已存在节点,则基于该节点的节点类型,判断是否能够基于该节点记录所述待添加路由表项;若基于该节点无法记录所述待添加路由表项,则对该节点的节点类型进行转换,并基于该节点记录所述待添加路由表项,以更新当前的第一物理树。
在一些实施例中,所述确定所述待添加路由表项在当前的第一物理树中对应的节点位置,包括:按照最长前缀匹配方式,从当前的第一物理树中确定所述第三类型的节点,作为第一节点;其中,所述第一节点的分支前缀与所述待添加前缀相匹配;确定所述待添加前缀与所述第一节点的分支前缀匹配后的剩余前缀部分,作为第三剩余前缀部分;在所述第一节点对应的各层级的位图Bitmap中,确定与所述第三剩余前缀部分相匹配的位图;基于所述第三剩余前缀部分,在确定出的位图中进行位图寻址,得到第一位图位置;基于所述第三剩余前缀部分在进行位图寻址后的第四剩余前缀部分,在所述第一位图位置对应的扩展空间中进行空间寻址,得到所述待添加路由表项在当前的第一物理树中对应的节点位置。
在一些实施例中,所述对该节点的节点类型进行转换,并基于该节点记录所述待添加路由表项,以更新当前的第一物理树,包括:若该节点为所述第一类型,则基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;若基于所述第二类型的节点能够记录所述待添加路由表项,则将该节点转换为所述第二类型,并在转换后的节点中记录转换前该节点中的转发参考信息,以及所述待添加转发参考信息;若基于所述第二类型的节点无法记录所述待添加路由表项,则将该节点转换为所述第三类型;基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;若基于所述第二类型的节点能够记录所述待添加路由表项,基于所述待添加前缀和所述预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置,并执行所述在所述节点位置处添加所述待添加路由表项对应的节点,以更新当前的第一物理树的步骤;若该节点为所述第二类型,则将该节点转换为所述第三类型;基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;若基于所述第二类型的节点能够记录所述待添加路由表项,基于所述待添加前缀和所述预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置,并执行所述在所述节点位置处添加所述待添加路由表项对应的节点,以更新当前的第一物理树的步骤。
在一些实施例中,所述在所述节点位置处添加所述待添加路由表项对应的节点,包括:若所述节点位置处对应的分支前缀与所述待添加前缀的长度一致,则生成所述第一类型的节点,并在生成的节点中记录所述待添加转发参考信息;若所述节点位置处对应的分支前缀与所述待添加前缀的长度不一致,则生成所述第二类型的节点,并在生成的节点中对应记录第五剩余前缀部分以及所述待添加转发参考信息;其中,所述第五剩余前缀部分为所述待添加前缀与所述节点位置处对应的分支前缀匹配后的剩余前缀部分。
在一些实施例中,所述方法还包括:从更新后的第一物理树中选择指定的第三类型的节点,作为第二节点;在所述第二节点中记录第二优化前缀;其中,所述第二优化前缀包含所述第二节点对应的子树中指定节点的分支前缀;所述第二节点对应的子树表示:当前的第一物理树中以所述第二节点为根节点的部分。
在一些实施例中,所述目标物理树还包含缓存存储空间中记录的第二物理树;所述方法还包括:在对第一物理树进行更新后,根据当前的第一物理树中节点的查询次数,从当前的第一物理树中确定第三节点;将包含所述第三节点的待缓存路径作为第二物理树,记录在所述缓存存储空间;其中,所述待缓存路径为基于所述第三节点对应的目标路径确定的;所述第三节点对应的目标路径表示当前的第一物理树中根节点与所述第三节点之间的路径;获取所述待缓存路径中除所述第三节点外的目标端节点在所述缓存存储空间中的存储地址,作为第一存储地址;将所述业务存储空间中所述目标端节点的父节点中记录的所述目标端节点的存储地址,修改为所述第一存储地址。
本发明实施例的第二方面,提供了一种报文处理装置,所述装置应用于转发设备,所述装置包括数据平面侧中的目的地址获取模块、节点类型确定模块、第一转发参考信息获取模块、第二转发参考信息获取模块、节点更新模块和第一待处理报文转发模块:所述目的地址获取模块,用于获取待处理报文中携带的目的地址;所述节点类型确定模块,用于按照所述目的地址,在预先基于路由表项构建的目标物理树中查询,确定当前待查询的节点的节点类型;其中,所述目标物理树中第一类型的节点记录有该节点的分支前缀对应的转发参考信息;一个节点的分支前缀包含在所述目标物理树中根节点与该节点之间的路径表征的路径前缀;所述目标物理树中第二类型的节点记录有该节点的节点前缀,以及该节点的节点前缀对应的参考转发信息;一个节点的节点前缀表示在该节点处进行查询时使用的前缀;所述目标物理树中第三类型的节点记录有该节点与子节点之间的路径表征的路径前缀;所述第一转发参考信息获取模块,用于若当前待查询的节点为第一类型,则获取当前待查询的节点中记录的转发参考信息;所述第二转发参考信息获取模块,用于若当前待查询的节点为第二类型,则确定所述目的地址与当前待查询的节点的分支前缀匹配后的第一剩余前缀部分,并获取当前待查询的节点中记录的与所述第一剩余前缀部分相匹配的节点前缀对应的转发参考信息;所述节点更新模块,用于若当前待查询的节点为第三类型,则确定所述目的地址与当前待查询的节点的分支前缀匹配后的第二剩余前缀部分,以及确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀,并将确定出的路径前缀对应的子节点作为当前待查询的节点,触发所述节点类型确定模块;所述第一待处理报文转发模块,用于基于获取到的转发参考信息对所述待处理报文进行转发。
在一些实施例中,所述装置还包括:第一判断模块,用于在所述确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀之前,若当前待查询的节点中记录有第一优化前缀,则按照最长前缀匹配方式,判断所述第一优化前缀中是否存在与所述目的地址相匹配的前缀;其中,所述第一优化前缀包含当前待查询的节点对应的子树中指定节点的分支前缀;当前待查询的节点对应的子树表示:所述目标物理树中以当前待查询的节点为根节点的部分;所述节点更新模块,具体用于若所述第一优化前缀中不存在与所述目的地址相匹配的前缀,则确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀;所述装置还包括:第二待处理报文转发模块,用于若所述第一优化前缀中存在与所述目的地址相匹配的前缀,则将所述第一优化前缀中与所述第二剩余前缀部分相匹配的前缀对应的节点作为当前待查询的节点,并触发所述节点类型确定模块。
在一些实施例中,所述目标物理树中的节点为基于预设结构的平衡多路查找树Btree生成的。
在一些实施例中,所述目标物理树包含业务存储空间中记录的第一物理树;所述装置还包括控制平面侧中的待添加路由表项获取模块、节点位置确定模块、第二判断模块、第一添加模块、第三判断模块和第二添加模块;所述目标物理树包含业务存储空间中记录的第一物理树;所述待添加路由表项获取模块,用于若基于当前的第一物理树未查询到所述目的地址对应的转发参考信息,则获取待添加路由表项;其中,所述待添加路由表项中记录有与所述目的地址相匹配的待添加前缀和对应的待添加转发参考信息;所述节点位置确定模块,用于基于所述待添加前缀和预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置;所述第二判断模块,用于判断所述节点位置处是否已存在节点;若所述节点位置不存在节点,触发所述第一添加模块;若所述节点位置已存在节点,触发所述第三判断模块;所述第一添加模块,用于在所述节点位置处添加所述待添加路由表项对应的节点,以更新当前的第一物理树;所述第三判断模块,用于基于该节点的节点类型,判断是否能够基于该节点记录所述待添加路由表项;若基于该节点无法记录所述待添加路由表项,则触发所述第二添加模块;所述第二添加模块,用于对该节点的节点类型进行转换,并基于该节点记录所述待添加路由表项,以更新当前的第一物理树。
在一些实施例中,所述节点位置确定模块,具体用于:按照最长前缀匹配方式,从当前的第一物理树中确定所述第三类型的节点,作为第一节点;其中,所述第一节点的分支前缀与所述待添加前缀相匹配;确定所述待添加前缀与所述第一节点的分支前缀匹配后的剩余前缀部分,作为第三剩余前缀部分;在所述第一节点对应的各层级的位图Bitmap中,确定与所述第三剩余前缀部分相匹配的位图;基于所述第三剩余前缀部分,在确定出的位图中进行位图寻址,得到第一位图位置;基于所述第三剩余前缀部分在进行位图寻址后的第四剩余前缀部分,在所述第一位图位置对应的扩展空间中进行空间寻址,得到所述待添加路由表项在当前的第一物理树中对应的节点位置。
在一些实施例中,所述第二添加模块,具体用于若该节点为所述第一类型,则基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;若基于所述第二类型的节点能够记录所述待添加路由表项,则将该节点转换为所述第二类型,并在转换后的节点中记录转换前该节点中的转发参考信息,以及所述待添加转发参考信息;若基于所述第二类型的节点无法记录所述待添加路由表项,则将该节点转换为所述第三类型;基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;若基于所述第二类型的节点能够记录所述待添加路由表项,基于所述待添加前缀和所述预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置,并触发所述第一添加模块;若该节点为所述第二类型,则将该节点转换为所述第三类型;基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;若基于所述第二类型的节点能够记录所述待添加路由表项,基于所述待添加前缀和所述预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置,并触发所述第一添加模块。
在一些实施例中,所述第一添加模块具体用于:若所述节点位置处对应的分支前缀与所述待添加前缀的长度一致,则生成所述第一类型的节点,并在生成的节点中记录所述待添加转发参考信息;若所述节点位置处对应的分支前缀与所述待添加前缀的长度不一致,则生成所述第二类型的节点,并在生成的节点中对应记录第五剩余前缀部分以及所述待添加转发参考信息;其中,所述第五剩余前缀部分为所述待添加前缀与所述节点位置处对应的分支前缀匹配后的剩余前缀部分。
在一些实施例中,所述装置还包括:第二节点确定模块,用于从更新后的第一物理树中选择指定的第三类型的节点,作为第二节点;第二优化前缀记录模块,用于在所述第二节点中记录第二优化前缀;其中,所述第二优化前缀包含所述第二节点对应的子树中指定节点的分支前缀;所述第二节点对应的子树表示:当前的第一物理树中以所述第二节点为根节点的部分。
在一些实施例中,所述目标物理树还包含缓存存储空间中记录的第二物理树;所述装置还包括:第三节点确定模块,用于在对第一物理树进行更新后,根据当前的第一物理树中节点的查询次数,从当前的第一物理树中确定第三节点;第二物理树记录模块,用于将包含所述第三节点的待缓存路径作为第二物理树,记录在所述缓存存储空间;其中,所述待缓存路径为基于所述第三节点对应的目标路径确定的;所述第三节点对应的目标路径表示当前的第一物理树中根节点与所述第三节点之间的路径;第一存储地址确定模块,用于获取所述待缓存路径中除所述第三节点外的目标端节点在所述缓存存储空间中的存储地址,作为第一存储地址;第一存储地址记录模块,用于将所述业务存储空间中所述目标端节点的父节点中记录的所述目标端节点的存储地址,修改为所述第一存储地址。
本发明实施例的第三方面,提供了一种转发设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现上述任一所述的报文处理方法。
本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的报文处理方法。
本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的报文处理方法。
本发明实施例有益效果:本发明实施例提供了一种报文处理方法,获取待处理报文中携带的目的地址;按照目的地址,在预先基于路由表项构建的目标物理树中查询,确定当前待查询的节点的节点类型;其中,目标物理树中第一类型的节点记录有该节点的分支前缀对应的转发参考信息;一个节点的分支前缀包含在目标物理树中根节点与该节点之间的路径表征的路径前缀;目标物理树中第二类型的节点记录有该节点的节点前缀,以及该节点的节点前缀对应的参考转发信息;一个节点的节点前缀表示在该节点处进行查询时使用的前缀;目标物理树中第三类型的节点记录有该节点与子节点之间的路径表征的路径前缀;若当前待查询的节点为第一类型,则获取当前待查询的节点中记录的转发参考信息;若当前待查询的节点为第二类型,则确定目的地址与当前待查询的节点的分支前缀匹配后的第一剩余前缀部分,并获取当前待查询的节点中记录的与第一剩余前缀部分相匹配的节点前缀对应的转发参考信息;若当前待查询的节点为第三类型,则确定目的地址与当前待查询的节点的分支前缀匹配后的第二剩余前缀部分,以及确定当前待查询的节点中记录的与第二剩余前缀部分相匹配的路径前缀,并将确定出的路径前缀对应的子节点作为当前待查询的节点,返回执行按照目的地址,在预先基于路由表项构建的目标物理树中查询,确定当前待查询的节点的节点类型的步骤;基于获取到的转发参考信息对待处理报文进行转发。
本发明实施例提供的报文处理方法,能够基于树结构记录路由表项中的前缀和转发参考信息。根据树结构的特征,每一节点只需记录部分前缀,且针对目标物理树中同一父节点的多个子节点共有的前缀,无需针对每一子节点分别进行记录,即,可以在目标物理树中只记录一份该共有的前缀,进而,也就能够节省路由表项中的前缀所占的存储空间,降低存储成本。
当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
图1为本发明实施例提供的报文处理方法的一种流程示意图;
图2为本发明实施例提供的一种物理树的结构示意图;
图3为本发明实施例提供的一种Btree的结构示意图;
图4为本发明实施例提供的构建第一物理树的一种流程示意图;
图5为本发明实施例提供的一种多位字典树的结构示意图;
图6为本发明实施例提供的一种基于多位字典树查找表项的示意图;
图7为本发明实施例提供的一种控制平面侧与数据平面侧的结构示意图;
图8为本发明实施例提供的一种控制平面侧的功能框架图;
图9A为本发明实施例提供的一种在物理树中记录编号为1的路由表项的示意图;
图9B为本发明实施例提供的一种在图9A中的物理树的基础上记录编号为2的路由表项流程示意图;
图9C为本发明实施例提供的一种在图9B中的物理树的基础上记录编号为3的路由表项流程示意图;
图9D为本发明实施例提供的一种在图9C中的物理树的基础上记录编号为4的路由表项流程示意图;
图10为本发明实施例提供的基于图9D所示的物理树进行优化的示意图;
图11为本发明实施例提供的一种查找路由表项的流程图;
图12为本发明实施例提供的一种逻辑树的结构图;
图13为本发明实施例提供的一种报文处理装置的结构图;
图14为本发明实施例提供的另一种报文处理装置的结构图;
图15为本发明实施例提供的一种转发设备的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本发明保护的范围。
为了降低路由表项的存储成本,本发明实施例提供了一种报文处理方法、装置、转发设备和存储介质,以下分别进行详细说明。
本发明实施例提供了一种报文处理方法,该方法可以应用于转发设备,该转发设备可以为路由设备。例如,该路由设备可以为物理的路由设备,或者,也可以为虚拟的路由设备。例如,路由器和三层交换机。参见图1,图1为本发明实施例提供的报文处理方法的一种流程示意图。可以包括如下步骤:
S101:获取待处理报文中携带的目的地址。
S102:按照目的地址,在预先基于路由表项构建的目标物理树中查询,确定当前待查询的节点的节点类型。
其中,目标物理树中第一类型的节点记录有该节点的分支前缀对应的转发参考信息;一个节点的分支前缀包含在目标物理树中根节点与该节点之间的路径表征的路径前缀;目标物理树中第二类型的节点记录有该节点的节点前缀,以及该节点的节点前缀对应的参考转发信息;一个节点的节点前缀表示在该节点处进行查询时使用的前缀;目标物理树中第三类型的节点记录有该节点与子节点之间的路径表征的路径前缀。
S103:若当前待查询的节点为第一类型,则获取当前待查询的节点中记录的转发参考信息。
S104:若当前待查询的节点为第二类型,则确定目的地址与当前待查询的节点的分支前缀匹配后的第一剩余前缀部分,并获取当前待查询的节点中记录的与第一剩余前缀部分相匹配的节点前缀对应的转发参考信息。
S105:若当前待查询的节点为第三类型,则确定目的地址与当前待查询的节点的分支前缀匹配后的第二剩余前缀部分,以及确定当前待查询的节点中记录的与第二剩余前缀部分相匹配的路径前缀,并将确定出的路径前缀对应的子节点作为当前待查询的节点,返回执行步骤S102。
S106:基于获取到的转发参考信息对待处理报文进行转发。
本发明实施例提供的报文处理方法,能够基于树结构记录路由表项中的前缀和转发参考信息。根据树结构的特征,每一节点只需记录部分前缀,且针对目标物理树中同一父节点的多个子节点共有的前缀,无需针对每一子节点分别进行记录,即,可以在目标物理树中只记录一份该共有的前缀,进而,也就能够节省路由表项中的前缀所占的存储空间,降低存储成本。
一种实现方式中,转发设备包括控制平面侧与数据平面侧。其中,转发设备的数据平面侧可以实现上述步骤S101-S106。
针对步骤S101,一种实现方式中,转发设备在接收到其他设备发送的待处理报文时,可以获取待处理报文中携带的目的地址,例如,目的IP地址。目的IP地址可以为IPv4(Internet Protocol version 4,网际协议第4版)地址或IPv6(Internet Protocolversion 6,网际协议第6版)地址。
针对步骤S102,一种实现方式中,可以按照路由表项构建物理树(即本发明中的第一物理树),进而,可以将第一物理树中的节点存储在业务存储空间中,该业务存储空间也就是转发设备的内存空间。例如,业务存储空间可以为DDR SDRAM(Double Data RateSynchronous Dynamic Random Access Memory,双倍速率同步动态随机存储器)。在该情况下,目标物理树也就是第一物理树,本发明中提到的目标物理树的根节点也就是第一物理树的根节点。也就是说,在该情况下,转发设备可以按照业务存储空间中记录的第一物理树进行查询,以确定目的地址对应的转发参考信息。可以理解的是,在该情况下,在业务存储空间中,第一物理树中的每一节点存在对应的存储地址,也就是业务存储空间中存储该节点的存储地址。
另一种实现方式中,在生成第一物理树后,还可以从第一物理树中选取一部分,得到第二物理树,并将第二物理树中的节点存储在缓存存储空间中。例如,缓存存储空间可以为SRAM(静态随机存取存储器,Static Random-Access Memory)。在该情况下,目标物理树包括第一物理树和第二物理树。本发明中提到的目标物理树的根节点也就是第一物理树的根节点。也就是说,在该情况下,转发设备可以结合业务存储空间中记录的第一物理树和缓存存储空间中记录的第二物理树进行查询,以确定目的地址对应的转发参考信息。具体生成第二物理树的方式将在后续实施例中详细介绍。可以理解的是,在业务存储空间中,第一物理树中的每一节点存在对应的存储地址,也就是业务存储空间中存储该节点的存储地址。在缓存存储空间中,第二物理树中的每一节点存在对应的存储地址,也就是缓存存储空间中存储该节点的存储地址。
一种实现方式中,在转发设备获取到目标物理树后,可以将目标物理树的根节点确定为当前待查询的节点,并基于上述步骤S102-S106进行处理。可以理解的是,在上述处理过程中,转发设备可以基于步骤S105,按照目标物理树的架构,对当前待查询的节点进行更新,直至转发设备获取到转发参考信息,并对待处理报文进行转发。
其中,转发参考信息可以包括前缀对应的下一跳地址和端口号。也就是说,转发设备可以按照查询到的下一跳地址和端口号对待处理报文进行转发。另外,在本发明实施例中,一个前缀对应的转发参考信息也可以称为该前缀对应的Result(结果)。
在目标物理树中,存在父子关系的两个节点之间的路径对应有前缀,该前缀也就是该路径表征的路径前缀。即,在目标物理树中,可以按照路径前缀进行查询,以查询到相应的节点,进而,根据查询到的节点的类型,进行不同的处理。可以理解的是,在按照路径前缀进行查询的过程中,可以根据路径的先后顺序,依次与目的地址中的不同位进行匹配。
相应的,按照根节点与一个节点之间的路径,从根节点开始查询,当查询到该节点时,已匹配的前缀也就是根节点与该节点之间的路径表征的路径前缀,即,该节点的分支前缀。该分支前缀包含根节点与该节点之间的所有路径表征的路径前缀。也就是说,每一节点的分支前缀为在目标物理树中从根节点查询到该节点时已匹配的前缀。
针对一个目的地址,在基于目标物理树对该目的地址进行匹配时,若查询到记录有节点前缀的节点时,可以在该节点处基于记录的节点前缀对目的地址继续进行匹配。也就是说,一个节点的节点前缀为在该节点处需要进行匹配的前缀。即,可以先基于一个节点的分支前缀匹配至该节点处,进而,可以基于该节点的节点前缀继续进行匹配。
第一类型的节点也可以称为ResultOnlyNode(只存结果节点)。由于第一类型的节点只记录有转发参考信息,因此,若当前待查询的节点为第一类型,则可以获取当前待查询的节点中记录的转发参考信息,以对待处理报文进行转发。
第二类型的节点也可以称为LeafNode(叶子节点)。由于第二类型的节点记录有在该节点处进行查询时使用的前缀,因此,若当前待查询的节点为第二类型,则可以确定目的地址与当前待查询的节点的分支前缀匹配后的第一剩余前缀部分。由于查询到当前待查询的节点时,已匹配的前缀也就是根节点与该节点之间的路径表征的路径前缀,即,该节点的分支前缀,因此,第一剩余前缀部分也就是目的地址中除该节点的分支前缀以外的部分。进而,可以获取当前待查询的节点中记录的与第一剩余前缀部分相匹配的节点前缀对应的转发参考信息,以对待处理报文进行转发。
第三类型的节点也可以称为SplitNode(分裂节点)。第三类型的节点存在至少一个子节点,其子节点可以为第一类型的节点,也可以为第二类型的节点,或者,也可以为第三类型的节点。另外,第三类型的节点中记录有该节点与其子节点之间的路径表征的路径前缀。例如,第三类型的节点中可以记录有子节点与该子节点对应的路径表征的路径前缀的对应关系。也就是说,基于该第三类型的节点记录的信息,可以根据记录的路径前缀,分别指向不同的子节点进行查询。
一种实现方式中,每一第三类型的节点中可以记录其子节点对应的路径表征的路径前缀,与该子节点的存储地址的对应关系。也就是说,当前查询到该第三类型的节点时,可以该第三类型的节点中记录的该对应关系,查询其子节点。
参见图2,图2为本发明实施例提供的一种物理树的结构示意图。图2中,物理树中R1节点和R2节点为上述第一类型的节点,L1节点和L2节点为上述第二类型的节点,S1节点和S2节点为上述第三类型的节点。
图2中的物理树共有三层,第一层包含S1节点,该S1节点为该物理树的根节点,该S1节点存在三个子节点:节点S2、节点R1和节点L1。其中,S1节点与S2节点之间的路径表征的路径前缀为“00”;S1节点与R1节点之间的路径表征的路径前缀为“01”;S1节点与L1节点之间的路径表征的路径前缀为“11”。相应的,该S1节点中记录有路径前缀“00”及该路径前缀对应的下一节点S2、路径前缀“01”及该路径前缀对应的下一节点R1,以及路径前缀“11”及该路径前缀对应的下一节点L1。也就是说,S2节点的分支前缀为“00”、R1节点的分支前缀为“01”、L1节点的分支前缀为“11”。
第二层包含S2节点、R1节点和L1节点,该S2节点存在两个子节点:节点L2和节点R2。其中,S2节点中记录有路径前缀“010”及该路径前缀对应的下一节点L2,以及路径前缀“101”及该路径前缀对应的下一节点R2;L1节点中记录有节点前缀“110”及该节点前缀对应的结果、节点前缀“111”及该节点前缀对应的结果。
第三层包含L2节点和R2节点。L2节点中记录有节点前缀“10”及该节点前缀对应的结果、节点前缀“0”及该节点前缀对应的结果。R2节点中记录有分支前缀“00101”对应的结果。其中,L2节点的分支前缀包含S1节点与S2节点之间的路径表征的路径前缀,以及S2节点与L2节点之间的路径表征的路径前缀,即,L2节点的分支前缀为“00010”;R2节点的分支前缀包含S1节点与S2节点之间的路径表征的路径前缀,以及S2节点与R2节点之间的路径表征的路径前缀,即,R2节点的分支前缀为“00101”。
当需要获取目的地址0001010的结果时,可以从S1节点开始匹配,匹配到前2位:00,路径前缀00对应的子节点为S2节点,即,可以查询到S2节点,在S2节点处匹配到后续的3位:010,路径前缀010对应的子节点为L2节点,即,可以查询到L2节点,在L2节点处匹配到剩下的2位:10,则可以获取节点前缀10对应的结果。在图2中,每一节点和路径对应的“x\y”中,x表示前缀,y表示匹配的位数。
针对步骤S105,转发设备可以获取当前待查询的第三类型的节点中记录的该节点与子节点之间的路径表征的路径前缀,并从其中选择与目的地址相匹配的路径前缀。也就是说,将目的地址与当前待查询的节点的分支前缀匹配后的路径前缀(即,第二剩余前缀部分),与该第三类型的节点中记录的路径前缀进行匹配。若存在与第二剩余前缀部分相匹配的路径前缀,该路径前缀对应的子节点作为当前待查询的节点。该路径前缀对应的子节点也就是该路径前缀对应的路径所指向的子节点。
一种实现方式中,在上述确定当前待查询的节点中记录的与第二剩余前缀部分相匹配的路径前缀之前,可以包括以下步骤:
步骤1:若当前待查询的节点中记录有第一优化前缀,则按照最长前缀匹配方式,判断第一优化前缀中是否存在与目的地址相匹配的前缀。
其中,第一优化前缀包含当前待查询的节点对应的子树中指定节点的分支前缀;当前待查询的节点对应的子树表示:目标物理树中以当前待查询的节点为根节点的部分。
上述确定当前待查询的节点中记录的与第二剩余前缀部分相匹配的路径前缀,包括:
步骤2:若第一优化前缀中不存在与目的地址相匹配的前缀,则确定当前待查询的节点中记录的与第二剩余前缀部分相匹配的路径前缀。
相应的,该方法还包括以下步骤:
步骤3:若第一优化前缀中存在与目的地址相匹配的前缀,则将第一优化前缀中与第二剩余前缀部分相匹配的前缀对应的节点作为当前待查询的节点,并返回执行步骤S102。
一个节点对应的子树表示目标物理树中以该节点为根节点的部分。也就是说,一个节点对应的子树包含目标物理树中以该节点为根节点的树结构。即,该节点对应的子树包括该节点以及该节点下的所有的节点。例如,针对图2,S1节点的对应的子树也就是该物理树;S2节点对应的子树包含:S2节点、L2节点和R2节点。
一种实现方式中,在生成第一物理树后,还可以对第一物理树进行优化,即,针对一个第三类型的节点,可以获取在第一物理树中该第三类型的节点对应的子树中的指定节点的分支前缀,其中,该指定节点可以包括第一类型、第二类型和第三类型中至少一个类型的节点。进而,可以在该第三类型的节点中记录获取到的上述分支前缀,以及上述分支前缀对应的子节点的存储地址。也就是说,可以基于该第三类型的节点中记录的上述信息,确定出与目的地址相匹配的前缀对应的存储地址,进而,可以将该存储地址所指向的节点,作为当前待查询的节点。具体对第一物理树进行优化的方式,将在后续实施例中详细介绍。
按照最长前缀匹配方式,第一优化前缀中与目的地址相匹配的前缀,也可以称为目标前缀。
若存在多个第一优化前缀与目的地址相匹配,则按照最长前缀匹配方式,从多个匹配的第一优化前缀中确定一个作为目标前缀;若存在一个第一优化前缀与目的地址相匹配,则将该第一优化前缀作为目标前缀。
基于上述处理,在第三类型的节点中记录第一优化前缀,使得在查表时,能够直接在该第三类型的节点中获取第一优化前缀,并按照第一优化前缀在对应的节点进行查询,而无需根据目标物理树逐次查找到该第三类型的节点对应的子树中的指定节点。进而,能够降低访问内存的次数,减少访问内存的时间,提高表项的查找效率。
一种实现方式中,目标物理树中的节点为基于预设结构的平衡多路查找树Btree生成的。例如,Btree可以为多层级的平衡多路查找树,每个层级包含一个Bitmap(位图),一个位图中的每一位图位置对应的扩展空间中包含指定数目个空间位置,该扩展空间也可以称为SplitAfter。
一种实现方式中,如图3所示,图3为本发明实施例提供的一种Btree的结构示意图。图3中所示的树为Btree-32类型。该Btree共包含三个层级,A表示Btree Level(平衡多路查找树层级)_1,该层级为第一层级,其Depth(深度)=0b,且Length(长度)=1b,表示第一层级的深度为0位,位图的长度为1位,即,该位图包含一个位图位置;B表示Btree Level_2,该层级为第二层级,其Depth=2b,且Length=4b,表示第二层级的深度为2位,位图的长度为4位,即,该位图包含4个位图位置;C表示Btree Level_3,该层级为第三层级,其Depth=5b且Length=32b,表示第三层级的深度为5位,位图的长度为32位,即,该位图包含32个位图位置。每一层级的深度表示对该层级的位图中各位图位置进行寻址所需的位数。
其中,针对每一层级,当基于路由表项中的前缀寻址到该层级的位图中的一个位图位置时,可以将该位图位置置为1,并在该位图位置申请增加相应的存储空间,即,申请对应的扩展空间。
另外,除图3所示的Btree-32类型之外,Btree还支持一个层级的Btree-4类型,以及两个层级的Btree-8类型、Btree-16类型。
一种实现方式中,目标物理树包含业务存储空间中记录的第一物理树。参见图4,图4为本发明实施例提供的构建第一物理树的一种流程示意图。第一物理树的构建过程可以包括如下步骤:
S401:若基于当前的第一物理树未查询到目的地址对应的转发参考信息,则获取待添加路由表项。
其中,待添加路由表项中记录有与目的地址相匹配的待添加前缀和对应的待添加转发参考信息。
S402:基于待添加前缀和预设结构的Btree的维度,确定待添加路由表项在当前的第一物理树中对应的节点位置。
S403:判断节点位置处是否已存在节点。若节点位置已存在节点,执行S405;若该节点位置不存在节点,执行S404。
S404:在节点位置处添加待添加路由表项对应的节点,以更新当前的第一物理树。
S405:基于该节点的节点类型,判断是否能够基于该节点记录待添加路由表项;若基于该节点无法记录待添加路由表项,则对该节点的节点类型进行转换,并基于转换后的节点记录待添加路由表项,以更新当前的第一物理树。
一种实现方式中,转发设备的控制平面侧可以实现上述步骤S401-S405。
其中,Btree的维度包含该Btree的层级、每一层级的深度、每一层级的位图的长度,以及每一层级中一个位图位置对应的扩展空间的大小。
一种实现方式中,可以在业务存储空间中记录基于路由表项生成的物理树(即第一物理树)。相应的,若基于当前的第一物理树未查询到目的地址对应的转发参考信息,则可以获取待添加路由表项,进而,在第一物理树中记录待添加路由表项,即,基于预设结构的Btree的维度确定待添加前缀所需生成的节点在该第一物理树中与其他节点的位置关系,也就可以确定待添加路由表项在该第一物理树中对应的节点位置,确定出的节点位置的分支前缀与待添加前缀相匹配。
可以理解的是,在上述第一物理树中,确定出的节点位置处可能已存在节点,也可能未存在节点。若确定出的节点位置处已存在节点,也可以将该节点称为待处理节点。
若该第一物理树中确定出的节点位置处不存在节点,则在该节点位置处添加待添加路由表项对应的节点。其中,添加的节点可以为第一类型或第二类型。
若该节点位置存在节点(即待处理节点),则可以基于待处理节点的节点类型,判断是否能够基于待处理节点记录待添加路由表项。若基于该待处理节点无法记录待添加路由表项,表明当前待处理节点的类型无法满足当前的存储要求,则对待处理节点的节点类型进行转换,并基于转换后的待处理节点记录待添加路由表项。
一种实现方式中,第二类型的节点可以支持不同的节点格式。节点格式可以用m×n_LEAF表示,m表示该第二类型的节点中允许记录的节点前缀的最大个数,n表示该第二类型的节点中允许记录的一个节点前缀的最大长度。例如,节点格式可以为4×2_LEAF、3×8_LEAF、2×24_LEAF和1×64_LEAF等格式。若一个第二类型的节点为4×2_LEAF节点格式,则该第二类型的节点最多能够记录4个节点前缀,且每一个节点前缀最大为2位。
相应的,若待处理节点为第二类型,则可以基于该待处理节点的节点格式、该待处理节点当前记录的节点前缀的长度和数目,以及待添加前缀与待处理节点的分支前缀匹配后的剩余部分(即下文中的第三剩余前缀部分)的长度,确定是否能够基于待处理节点记录待添加路由表项。也就是说,判断该待处理节点的节点格式,是否能够支持当前需要记录的前缀。
例如,若基于上述多个节点格式中的其中一种格式,能够记录该待处理节点当前记录的前缀,以及待添加前缀与待处理节点的分支前缀匹配后的剩余部分,则可以确定能够基于待处理节点记录待添加路由表项;否则,确定无法基于待处理节点记录待添加路由表项。
若待处理节点为第一类型,由于第一类型的节点只能存储一个结果,此时,可以判定无法基于待处理节点记录待添加路由表项。
一种实现方式中,步骤S402可以包括如下步骤:
步骤4:按照最长前缀匹配方式,从当前的第一物理树中确定第三类型的节点,作为第一节点。
其中,第一节点的分支前缀与待添加前缀相匹配。
步骤5:获取待添加前缀在与第一节点的分支前缀匹配后的剩余前缀部分,作为第三剩余前缀部分。
步骤6:在第一节点对应的各层级的位图Bitmap中,确定与第三剩余前缀部分相匹配的位图。
步骤7:基于第三剩余前缀部分,在确定出的位图中进行位图寻址,得到第一位图位置。
步骤8:基于第三剩余前缀部分在进行位图寻址后的第四剩余前缀部分,在第一位图位置对应的扩展空间中进行空间寻址,得到待添加路由表项在当前的第一物理树中对应的节点位置。
一种实现方式中,可以基于待添加前缀,在当前的第一物理树中进行查询。例如,基于上述步骤S102-S105的查询方式,在第一物理树中进行查询,可以确定出第一物理树中与待添加前缀相匹配的各第三类型的节点,并选择与待添加前缀的匹配长度最大的第三类型的节点(即第一节点)。
由于第一节点为与待添加前缀的匹配长度最大的第三类型的节点,因此,可以确定添加路由表项在第一物理树中对应的节点位置位于第一节点对应的子树中。
进而,可以获取第一节点的分支前缀,并计算待添加前缀与该分支前缀匹配后的剩余前缀部分(即第三剩余前缀部分)。即,将待添加前缀中与该分支前缀进行匹配,匹配结束后,待添加前缀中存在未匹配的部分,也就是第三剩余前缀部分。
一种实现方式中,可以从第一节点对应的各层级的位图中,确定与第三剩余前缀部分相匹配的位图,即,确定出与第三剩余前缀部分的长度匹配的位图。例如,可以确定第三剩余前缀部分的长度所属的预设长度范围,并将该预设长度范围对应的层级的位图,确定与第三剩余前缀部分相匹配的位图。
也就是说,第一节点对应的各层级的位图可以分别对应不同的预设长度范围,一个层级的位图对应的预设长度范围可以基于该层级的深度,以及该层级的位图位置对应的扩展空间的大小确定。
例如,针对上述图3所示的Btree,第一层级对应的预设长度范围表示为小于5;第二层级对应的预设长度范围表示为大于等于5,且小于8;第三层级对应的预设长度范围表示为大于等于8。
在确定出与第三剩余前缀部分相匹配的位图后,可以基于第三剩余前缀部分,在该位图中进行位图寻址。例如,可以用第一数目个位表示位图中的多个位图位置的序号,第一数目即该层级的深度。相应的,可以按照从高位到低位的顺序,从第三剩余前缀部分中选择第一数目个位(可以称为位图寻址位),用于进行位图寻址。即,确定位图中序号为位图寻址位的位图位置,即,得到第一位图位置。
然后,可以获取第三剩余前缀部分在进行位图寻址后的第四剩余前缀部分,第四剩余前缀部分也就是第三剩余前缀部分中除位图寻址位以外的其他部分。
进而,基于第四剩余前缀部分在第一位图位置对应的扩展空间中进行空间寻址。例如,可以用第二数目个位表示扩展空间的多个空间位置的序号。具体的,第二数目可以基于扩展空间包含的空间位置的数目确定。
例如,可以基于公式(1)确定第二数目。
其中,m表示第二数目,n表示扩展空间包含的空间位置的数目。
相应的,可以按照从高位到低位的顺序,从第四剩余前缀部分中选择第二数目个位(可以称为空间寻址位),用于进行空间寻址。即,确定位图中序号为空间寻址位的空间位置,即,得到节点位置。
在一个实施例中,若第四剩余前缀部分的位数大于第二数目,也就是说,在进行空间寻址后,第四剩余前缀部分中仍存在剩余部分(可以称为第六剩余前缀部分)。此时,可以将基于当前的空间寻址位确定出的位置,作为待添加路由表项在第一物理树中对应的节点位置,并执行上述步骤S403-S405。
一种实现方式中,步骤S405可以包括如下步骤:
步骤9:若该节点为第一类型,则基于待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于第二类型的节点记录待添加路由表项。
步骤10:若基于第二类型的节点能够记录待添加路由表项,则将该节点转换为第二类型,并在转换后的节点中记录转换前该节点中的转发参考信息,以及待添加转发参考信息。
步骤11:若基于第二类型的节点无法记录待添加路由表项,则将该节点转换为第三类型;基于待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于第二类型的节点记录待添加路由表项;若基于第二类型的节点能够记录待添加路由表项,基于待添加前缀和预设结构的Btree的维度,确定待添加路由表项在当前的第一物理树中对应的节点位置,并执行步骤S404。
步骤12:若该节点为第二类型,则将该节点转换为第三类型;基于待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于第二类型的节点记录待添加路由表项;若基于第二类型的节点能够记录待添加路由表项,基于待添加前缀和预设结构的Btree的维度,确定待添加路由表项在当前的第一物理树中对应的节点位置,并执行步骤S404。
一种实现方式中,若待处理节点为第一类型,则可以获取待处理节点的分支前缀,并计算待添加前缀与该分支前缀匹配后的剩余前缀部分(可以称为第七剩余前缀部分)。即,将待添加前缀中与该分支前缀进行匹配,匹配结束后,待添加前缀中存在未匹配的部分,也就是第七剩余前缀部分。
然后,则可以获取该待处理节点与其父节点之间的路径表征的路径前缀,并基于该路径前缀的长度、第七剩余前缀部分的长度,确定是否能够基于第二类型的节点记录待添加路由表项。也就是说,判断该第二类型的节点格式是否能够支持当前需要记录的前缀。
例如,若基于上述第二类型的节点的其中一种节点格式,能够记录该待处理节点与其父节点之间的路径表征的路径前缀,以及第七剩余前缀部分,则可以确定能够基于第二类型的节点记录待添加路由表项;否则,确定无法基于第二类型的节点记录待添加路由表项。
相应的,若能够基于第二类型的节点记录待添加路由表项,则可以将待处理节点转换为第二类型,并在转换后的待处理节点中记录转换前的待处理节点中的转发参考信息,以及待添加转发参考信息。
例如,可以生成第二类型的节点,并在该节点中记录第七剩余前缀部分和对应的转发参考信息(即待添加参考信息)。另外,还可以记录指定前缀,并记录指定前缀对应的转发参考信息为转换前待处理节点中记录的转发参考信息。指定前缀可以包括0和/或1。
若基于第二类型的节点无法记录待添加路由表项,将待处理节点转换为第三类型,且若基于待添加前缀与转换后的待处理节点的分支前缀匹配后的剩余前缀部分(即第六剩余前缀部分),确定能够基于第二类型的节点记录待添加路由表项,则可以基于待添加前缀和预设结构的Btree的维度,确定待添加路由表项在转换后的第一物理树中对应的节点位置,并执行步骤S404。
也就是说,若无法基于第二类型的节点记录待添加路由表项,则可以将待处理节点转换为第三类型,以在待处理节点的基础上进行分支。即,生成待处理节点的子节点,进而,能够在待处理节点对应的子树中确定待添加路由表项对应的节点位置。此处确定节点位置的方式与上述步骤S402类似,可以参考相应的介绍。
一种实现方式中,若待处理节点为第二类型,则将待处理节点转换为第三类型,且若基于待添加前缀与转换后的待处理节点的分支前缀匹配后的剩余前缀部分,确定能够基于第二类型的节点记录待添加路由表项,则可以基于待添加前缀和预设结构的Btree的维度,确定待添加路由表项在当前的第一物理树中对应的节点位置,并执行步骤S404。
也就是说,在将待处理节点转换为第三类型后,可以按照转换前该待处理节点中记录的节点前缀,在转换后的待处理节点对应的位图中进行位图寻址,以及在确定出的位图位置对应的扩展空间中进行空间寻址,进而,能够在待处理节点对应的子树中确定待添加路由表项对应的节点位置。此处确定节点位置的方式与上述步骤S402类似,可以参考相应的介绍。
一种实现方式中,上述在节点位置处添加待添加路由表项对应的节点的步骤,可以包括:若节点位置处对应的分支前缀与待添加前缀的长度一致,则生成第一类型的节点,并在生成的节点中记录待添加转发参考信息;若节点位置处对应的分支前缀与待添加前缀的长度不一致,则生成第二类型的节点,并在生成的节点中对应记录第五剩余前缀部分以及待添加转发参考信息。
其中,第五剩余前缀部分为待添加前缀与节点位置处对应的分支前缀匹配后的剩余前缀部分其中,第三剩余前缀部分为待添加前缀在与节点位置处对应的完整前缀匹配后的剩余前缀部分。
在本发明实施例中,若确定出的节点位置处对应的分支前缀与待添加前缀的长度一致,表明在该节点位置处无需进行前缀匹配,因此,可以生成只存储有转发参考信息的第一类型的节点。
若节点位置处对应的分支前缀与待添加前缀的长度不一致,表明在该节点位置处需要基于第五剩余前缀部分进行前缀匹配,因此,可以生成记录有节点前缀的第二类型的节点。
在一个实施例中,该方法还可以包括以下步骤:
从更新后的第一物理树中选择指定的第三类型的节点,作为第二节点;在第二节点中记录第二优化前缀。
其中,第二优化前缀包含第二节点对应的子树中指定节点的分支前缀;第二节点对应的子树表示:当前的第一物理树中以第二节点为根节点的部分。
一种实现方式中,可以选择第一物理树中与根节点之间的距离小于预设距离的第三类型的节点,作为第二节点。
一种实现方式中,可以从该第二节点对应的子树中选择一个或多个节点,作为该第二节点对应的子树中的指定节点。其中,所选择的节点可以包括第一类型、第二类型和第三类型中至少一个类型的节点。
该第二节点与其子树中指定节点之间的节点,可以称为待优化的节点。针对每一待优化的节点,转发设备可以将该待优化的节点,存储至与该待优化的节点的分支前缀对应的链表中。后续,则可以基于各链表中记录的节点的分支前缀对第一物理树进行优化。
在本发明中,第二节点对应的子树中的每一指定节点对应一个第二优化前缀。
一种实现方式中,可以在第二节点中对应的记录该指定节点的存储地址,与该指定节点对应的第二优化前缀。基于上述处理,使得在查表时,能够根据第二节点中记录的信息,直接查询对应的指定节点,而无需根据第一物理树逐次从第二节点查找到指定节点。进而,能够降低访问内存的次数,减少访问内存的时间,提高表项的查找效率。
在一个实施例中,目标物理树还包含缓存存储空间中记录的第二物理树;该方法还可以包括以下步骤:
步骤一:在对当前的第一物理树进行更新后,根据更新后的第一物理树中节点的查询次数,从更新后的第一物理树中确定第三节点。
步骤二:将包含第三节点的待缓存路径作为第二物理树,记录在缓存存储空间。
其中,待缓存路径为基于第三节点对应的目标路径确定的;第三节点对应的目标路径表示更新后的第一物理树中的根节点与第三节点之间的路径。
步骤三:获取待缓存路径中除第三节点外的目标端节点在缓存存储空间中的存储地址,作为第一存储地址。
步骤四:将业务存储空间中目标端节点的父节点中记录的目标端节点的存储地址,修改为第一存储地址。
其中,一个路径的端节点表示该路径的两个端点对应的节点。例如,针对图2中的路径S1-S2-L2,其两个端节点为节点S1和节点S2。
可以理解的是,待缓存路径的两个端节点为第三节点和目标端节点。
一种实现方式中,若节点的查询次数大于预设阈值,则可以将该节点确定为第三节点。其中,预设阈值可以为技术人员根据经验预先设置的。第三节点对应的目标路径可以为在第一物理树中第三节点与根节点之间的分支路径,或者,也可以为该分支路径的一部分。
一种实现方式中,若第三节点为第三类型,也就是说,在第一物理树中该第三节点存在子节点,即,该第三节点中记录有其子节点的存储地址。相应的,在缓存存储空间中,该第三节点中记录的其子节点的存储地址为其子节点在业务存储空间中的存储地址。
基于上述处理,当在业务存储空间中查询到目标端节点的父节点时,若基于该父节点中记录的存储地址,需要查询目标端节点时,则转发设备按照该父节点中记录的目标端节点的存储地址,寻址到缓存存储空间,即,可以在缓存存储空间中查询目标端节点,相应的,也就能够提高查询的效率。进而,转发设备还可以在缓存存储空间中查询第二物理树中的各节点,能够进一步提高查询的效率。
在本发明实施例中,在基于第一物理树中的转发参考信息对报文进行转发的过程中,针对第一物理树中每一个节点,转发设备可以统计对该节点进行查询的次数。进而,可以从各节点中确定转发的次数大于预设阈值的节点,作为第三节点。也就是说,在对报文进行转发的过程中,第三节点的查询频率较高。相应的,将第三节点的对应第二物理树存储至缓存存储空间。后续,可以基于缓存存储空间中记录的第二物理树进行查找,相对于访问业务存储空间,能够提高表项查找的效率。
另外,相关技术中,还可以基于多位Trie树(多位字典树,Multi-bit Trie)记录路由表项。多位字典树是在二叉树的基础上,按一定的查找步长分割成多个子树后获得的树形结构。其中,查找步长为每次查找过程中需要检测的位的数目,多位字典树中的每一个节点表示一个位,多位字典树的每个子树均由一定查找步长内的多级节点构成。如图5所示,图5为本发明实施例提供的一种多位字典树的结构示意图。图5中,实心的节点表示“1”,空心的节点表示“0”。每一个虚线框表示一个子树,该多位字典树共有4级,查找步长为3位。该多位字典树可以由9个子树构成。
如图6所示,图6为本发明实施例提供的一种基于多位字典树查找表项的示意图。图6中,前缀数据库(Prefix DataBase)中存储有前缀编号和前缀编号对应的前缀,前缀编号P1对应的前缀是0*,前缀编号P2对应的前缀是1*,前缀编号P3对应的前缀是011*,前缀编号P4对应的前缀是100*,前缀编号P5对应的前缀是011000*,前缀编号P6对应的前缀是100101*,前缀编号P7对应的前缀是1001011*。例如,需要查找的IP地址为10001101,与该IP地址匹配的前缀对应的前缀编号有P2和P4,基于最长前缀匹配的方式,P4对应的前缀与该IP地址匹配的位数更多,因此,该IP地址匹配的前缀对应的前缀编号为P4。
现有技术中,上述查找方式是基于前缀编号和前缀编号对应的前缀生成多位字典树,为了减少查找时的访存次数减少,以提高查找的效率,可以在查找过程中每次比较多个位,即,设置较大的步长。然而,若设置较大的步长,基于受控前缀扩展(CPE,ControlledPrefix Expansion)算法,需要对前缀的长度不是查找步长的整数倍的前缀进行扩展,得到多个长度为查找步长整数倍的扩展前缀,并进行前缀扩展冲突检测,删除扩展后与其他更长的前缀冲突的扩展前缀。例如,P2对应的前缀1*可以扩展为100*、101*、110*和111*,由于100*具有更长的前缀匹配,所以P2对应的前缀1*只能扩展为101*、110*和111*。
相应的,若步长为3位,可以得到图6中所示的表0至表3,表0-表3分别为根节点、节点1-节点3中存储的表项。各表中,Bits列表示在对应的节点中需要进行匹配的前缀,Prefix列表示前缀编号,Ptr列表示指向子节点的指针。图6中,每个节点包含有8个表项。由图6可见,可能会出现由原始的一条前缀扩展为多个前缀的情况,即需要存储多个冗余的前缀,造成存储空间的浪费。且查找步长越长,扩展生成的冗余的前缀的数目越多,占用的存储空间也越多。
在上述查找的过程中,可以将各节点中的表项记录在内存中,相应的,查找步长、节点中表项的数目和理论最大访存次数(即查找到转发参考信息需要访问内存的次数)之间存在一定关系,例如,该关系可以参见表(1)。
表(1)
查找步长 | 节点中表项的数目 | 理论最大访存次数 |
3-bit | 8 | 11次 |
8-bit | 256 | 4次 |
16-bit | 65536 | 2次 |
表(1),对于32-bit的IPv4类型的IP地址,采用3-bit的查找步长,每个节点中的表项为8条,理论最大访存次数为11次;采用8-bit的查找步长,每个节点中的表项为256条,理论最大访存次数为4次;采用16-bit的查找步长,每个节点中的表项为65536条,理论最大访存次数为2次。
可见,基于多位树的受控前缀扩展算法需要选择合适的查找步长,选择较大的查找步长,可以在一定程度上减少内存的访问次数,提高查找效率,但是,节点中会存储大量包含空行的表项,以及相同的表项,进而,造成存储空间的大量浪费;反之,选择较小的查找步长,虽然可以在一定程度上减少存储空间的浪费,但会增加查找过程中访问内存的次数,降低查找效率。且对于IPv6类型的IP地址,在查找步长一致的情况下,相对于Ipv4类型的IP地址,访存操作次数会成倍增加,造成查找效率的下降;若增加查找步长的长度,则会导致每级节点表项的增加,会由此导致更大的存储空间浪费。因此,上述查找方式不具备可扩展性和灵活性。
而本发明实施例支持不同的节点类型以及使用多种类型的Btree结构,且基于本发明实施例提供的方法,构建的目标物理树中各节点记录的前缀的长度可以不同,且不同的路径表征的前缀的长度也可以不同,也就无需对前缀进行扩展,避免相关技术中查找步长与节点中记录的表项的数目存在一定的关系,进而,能够提高方法的扩展性和灵活性。
另外,相关技术中,还可以基于TCAM(三态内容可寻址存储器,Ternary ContentAddressable Memory)实现表项查找。虽然基于TCAM的表项查找速度快,但部分TCAM仅能存储25万条路由表项。而针对IPv4地址,转发设备需要存储大于4兆条路由表项,对于IPv6地址,转发设备需要存储大于1兆条路由表项。可见,TCAM的存储空间不能够满足当前针对IPv4地址和Ipv6地址的需求。也就是说,由于TCAM的容量小、造成TCAM的使用数目大,且单个TCAM的价格高,进而,导致使用成本高。因此,不适应于大规格表项以及对产品有成本控制、功耗控制的需求场景。
本发明实施例采用物理树的结构对路由表项进行存储,能够降低存储成本。例如,可以实现400万条IPV4路由表项和100万条IPV6路由表项的存储。即,可以实现大量路由表项的构建和存储,且占用的存储空间为百MB级别,因此,转发设备可实现更大规模的路由表项的存储。
一种实现方式中,可以基于转发设备的控制平面侧与数据平面侧实现上述报文处理的方法。如图7所示,图7为本发明实施例提供的一种控制平面侧与数据平面侧的结构示意图。图7中,Host CPU(主中央处理器)即控制平面侧,包含Control Plane(控制平面)、Driver(驱动)和OS(Operating System,操作系统),网络处理器单元即数据平面侧,包含Data Plane(数据平面)和OS。Host CPU与网络处理器单元可以通过PCIE(高速串行总线,Peripheral Component Interconnect Express)通道进行通信。Host CPU可以运行控制平面程序,并通过PCIE通道,向网络处理器单元发送配置参数,网络处理器单元可以运行数据平面程序,并可以完成具体业务处理,例如,查找表项和转发报文。
一种实现方式中,Host CPU中的控制平面程序,可以构建、存储、更新路由表项,并将其按照一定的编码格式写入到网络处理器单元的存储模块。网络处理器单元的硬件加速查找模块可以基于硬件指令实现表项的高效查找。其中,网络处理器单元的存储模块可以为DDR SDRAM。
一种实现方式中,如图8所示,图8为本发明实施例提供的一种控制平面侧的功能框架图。图8中,控制平面侧的功能框架包括表项构建模块、表项写入网络处理器单元模块、表项路径压缩模块和表项存储位置移动模块。
表项构建模块可以基于输入的表项集合(包含各路由表项)构建第一物理树,第一物理树中的各节点可以存储有前缀和转发参考信息,此外,表项构建模块可以将第一物理树中待优化的节点保存至相应前缀长度的链表中。其中,路由表项可以包括前缀、前缀的长度、掩码、下一跳地址和转发接口。
表项写入网络处理器单元模块,可以根据第一物理树中每个节点保存的信息,选择合适的编码格式,并按照编码格式对各节点保持的信息进行编码,将编码得到的信息写入到网络处理器单元的外部存储器中,以便于网络处理器单元的硬件加速查找模块进行快速查找。表项路径压缩模块,可以对链表中保存的待优化节点进行处理,根据第一物理树中节点存储的前缀和转发参考信息,对第一物理树进行重构(即对第一物理树进行优化),生成Jumps(跳跃),即,实现从第二节点至指定节点的查询,以减少访存次数,提高查找效率。
表项存储位置移动模块,可以根据第一物理树中节点存储的前缀和转发参考信息,利用网络处理器单元的层次存储架构,将最可能被频繁访问的节点复制到内部的SRAM(Static Random-Access Memory,静态随机存取存储器)中,即,将第二物理树存储至缓存存储空间,以提高查找效率。
上述过程中,控制平面程序通过网络处理器单元接口与网络处理器单元进行数据通信。
一种实现方式中,如表(2)所示,表(2)为本发明实施例提供的一种路由表项。路由表项可以包括5种数据:编号、前缀Prefix(十六进制)、长度Length(十进制)、掩码Mask(十六进制)和结果Result(十六进制)(即本发明实施例中的转发参考信息)。
表(2)
编号 | Prefix(Hex) | Length(Dec) | Mask(Hex) | Result(Hex) |
1 | 00000000000000 | 56 | FFFFFFFFFFFFFF | 00000000 |
2 | 00000000000001 | 56 | FFFFFFFFFFFFFF | 11111111 |
3 | 00000000000002 | 56 | FFFFFFFFFFFFFF | 22222222 |
4 | 00000000000003 | 56 | FFFFFFFFFFFFFF | 33333333 |
如图9A所示,图9A为本发明实施例提供的一种在物理树中记录编号为1的路由表项的示意图。在该实施例中,第二类型的节点支持的节点格式包括:4×2_LEAF、3×8_LEAF、2×24_LEAF和1×64_LEAF格式。
图9A中,物理树的根节点初始化为一个包含无效结果的R1节点(即本发明实施例中的第一类型的节点)。其中,无效结果可以为技术人员预先确定的,例如,下一跳地址可以为“FFFFFFFF”,转发接口可以为“0”。
由于当前R1节点中只保存转发参考信息,不保存前缀,因此,若要记录编号为1的路由表项,则可以对该R1节点进行节点类型转换。由于编号为1的路由表项中的前缀的长度为56,小于64位,因此,基于1x64_LEAF节点格式的第二类型的节点能够记录编号为1的路由表项。进而,可以将该R1节点转换为1x64_LEAF节点格式的第二类型的节点,得到图中右侧所示的L1节点。针对L1节点“00000000000000\00000000”,其中,前14个0表示L1节点中存储的节点前缀,后8个0表示节点前缀对应的转发参考信息。
如图9B所示,图9B为本发明实施例提供的一种在图9A中的物理树的基础上记录编号为2的路由表项流程示意图。由于1x64_LEAF的LeafNode并不能同时记录两个前缀,即,无法基于L1节点存储编号为1的路由表项和编号为2的路由表项。因此,可以对L1节点进行节点类型转换,即将1x64_LEAF的第二类型的节点转换为第三类型的节点(即S1节点)。
进而,可以基于5位前缀,在S1节点的第三层级的位图中进行位图寻址,确定出序号为0的位图位置,进而,在该位图位置,基于3位前缀进行空间寻址,确定出序号为0的空间位置,并在该空间位置生成第二类型的节点(可以称为节点1),以记录编号为1的路由表项。
相应的,当需要记录编号为1的路由表项时,基于上述处理,同样会寻址到节点1的位置,此时,确定无法基于节点1存储编号为1的路由表项和编号为2的路由表项。则可以将节点1转换为第三类型的节点(可以称为节点2)。
进而,可以在节点2的位图中进行位图寻址,得到位图位置,并在确定出的位图位置中进行空间寻址。具体过程,可以参考确定节点1的位置的方式。
图9B中的分裂两次,也就是进行两次位图寻址和空间寻址。
以此类推,当使用了路由表项中32位的前缀时,可以得到一个第三类型的节点(可以称为节点3)。然后,可以在节点3的第三层级的位图中进行位图寻址,确定出序号为0的位图位置,进而,在该位图位置,基于3位前缀进行空间寻址,确定出序号为0的空间位置,并在该空间位置生成第二类型的节点(即L2),且该第二类型的节点为2×24_LEAF的节点格式,以记录编号为1的路由表项和编号为2的路由表项。
针对L2节点“000000\00000000,000001\11111111”,“000000\00000000,000001\11111111”中前6位数值表示L2节点中记录的节点前缀,“000000\00000000,000001\11111111”中后8位数值表示L2节点中记录的节点前缀对应的转发参考信息。
如图9C所示,图9C为本发明实施例提供的一种在图9B中的物理树的基础上记录编号为3的路由表项流程示意图。由于2x24_LEAF的LeafNode并不能同时记录三个前缀,即,无法基于L2节点存储编号为1的路由表项、编号为2的路由表项,以及编号为3的路由表项。因此,可以对L2节点进行节点类型转换,即将2x24_LEAF的第二类型的节点转换为第三类型的节点(可以称为节点4)。
进而,可以基于5位前缀,在S2节点的第三层级的位图中进行位图寻址,确定出序号为0的位图位置,进而,在该位图位置,基于3位前缀进行空间寻址,确定出序号为0的空间位置,并在该空间位置生成第二类型的节点(可以称为节点5),以记录编号为1和编号为2的路由表项。
相应的,当需要记录编号为3的路由表项时,基于上述处理,同样会寻址到节点4的位置,此时,确定无法基于节点5存储编号为1的路由表项、编号为2的路由表项,以及编号为3的路由表项。则可以将节点5转换为第三类型的节点(可以称为节点6)。
然后,可以在节点6的第三层级的位图中进行位图寻址,确定出序号为0的位图位置,进而,在该位图位置,基于3位前缀进行空间寻址,确定出序号为0的空间位置,并在该空间位置生成第二类型的节点(即L3),且该第二类型的节点为3×8_LEAF的节点格式,以记录编号为1的路由表项、编号为2的路由表项,以及编号为3的路由表项。
针对L3节点“00\00000000,01\11111111,02\22222222”,“00\00000000,01\11111111,02\22222222”前2位数值表示L3节点中记录的节点前缀,“00\00000000,01\11111111,02\22222222”后8位数值表示L3节点中记录的节点前缀对应的转发参考信息。
如图9D所示,图9D为本发明实施例提供的一种在图9C中的物理树的基础上记录编号为4的路由表项流程示意图。
由于3x8_LEAF的LeafNode并不能同时记录四个前缀,即,无法基于L3节点存储编号为1的路由表项、编号为2的路由表项、编号为3的路由表项,以及编号为4的路由表项。因此,可以对L3节点进行节点类型转换,即将3x8_LEAF的第二类型的节点转换为第三类型的节点(可以称为节点7)。
进而,可以基于5位前缀,在节点7的第三层级的位图中进行位图寻址,确定出序号为0的位图位置,进而,在该位图位置,基于3位前缀进行空间寻址,确定出序号为0的空间位置,并在该空间位置生成第一类型的节点(即R1),以记录编号为1的转发参考信息。
相应的,当需要记录编号为2的路由表项时,在节点7的第三层级的位图中进行位图寻址,确定出序号为0的位图位置,进而,在该位图位置,基于3位前缀进行空间寻址,确定出序号为1的空间位置,并在该空间位置生成第一类型的节点(即R2),以记录编号为2的转发参考信息。
同理,可以得到第一类型的节点R3和R4,分别记录编号为3和编码为4的路由表项的转发参考信息。
一种实现方式中,如图10所示,图10为本发明实施例提供的基于图9D所示的物理树进行优化的示意图。图10中,由于节点7的分支前缀为“000000000000”,为R1、R2、R3和R4的共有的分支前缀,因此,可以在根节点S1中记录节点7的路径前缀和节点7在业务存储空间中的存储地址。
相应的,当接收到携带有与R1、R2、R3和R4各自的分支前缀相匹配的目的地址的报文时,可以直接基于根节点S1中记录的信息,确定与目的地址匹配的路径前缀对应的存储地址,根据该存储地址查询到节点7,进而,可以根据节点7中记录的信息进行查询,而无需从根节点S1逐层查找到节点7,能够以减少访存次数,提高查找效率。
一种实现方式中,如图11所示,图11本发明实施例提供的一种查找路由表项的流程图。图11中,转发设备可以得到待查找的表项Key(键)值,即,获取需要进行查找的目的地址。获取到第一物理树中的第一个树节点,即Root(根)节点。
若节点为第一类型,则获取节点本身保存的结果。若结果无效,表示未匹配。
若节点为第二类型,则根据节点中记录的节点前缀依次进行匹配,确定与出目的地址符合最长前缀匹配的节点前缀,并获取该节点前缀对应的结果。
若节点为第三类型,则获取节点本身保存的优化前缀。确定出与目的地址符合最长前缀匹配的优化前缀,并获取该优化前缀对应的节点的存储地址,以查询该存储地址指向的节点。若不存在与目的地址匹配的优化前缀,则根据与子节点之间的路径表征的路径前缀,将与目的地址匹配的前缀对应的子节点确定为下一个节点。
进而,可以重复上述处理过程,直至得到结果。相应的,可以基于得到的结果对报文进行转发。
针对一节点,若该节点既不是第一类型、也不是第二类型,且不是第三类型,则不做任何处理。
一种实现方式中,还可以基于路由表项生成对应的逻辑树,例如,参见图12,图12为本发明实施例提供的一种逻辑树的结构图。
图12中,父子节点之间的路径表征相应的前缀,节点中可以记录有对应的结果。例如,当需要记录包含前缀“0”的路由表项时,可以生成根节点的子节点(即节点1),在节点1中记录前缀“0”对应的结果;当需要记录包含前缀“01001”的路由表项时,可以生成节点2,在节点2中记录前缀“01001”对应的结果;当需要记录包含前缀“1101101”的路由表项时,可以生成节点4,在节点4中记录前缀“1101101”对应的结果。同理,节点3中可以记录前缀“01100”对应的结果;节点5中可以记录前缀“00”对应的结果;节点6中可以记录前缀“01001010”对应的结果。
基于相同的发明构思,本发明实施例还提供了一种报文处理装置,参见图13,图13为本发明实施例提供的一种报文处理装置的结构图,该装置应用于转发设备,该装置包括数据平面侧中的目的地址获取模块1301、节点类型确定模块1302、第一转发参考信息获取模块1303、第二转发参考信息获取模块1304、节点更新模块1305和第一待处理报文转发模块1306:
目的地址获取模块1301,用于获取待处理报文中携带的目的地址;
节点类型确定模块1302,用于按照所述目的地址,在预先基于路由表项构建的目标物理树中查询,确定当前待查询的节点的节点类型;其中,所述目标物理树中第一类型的节点记录有该节点的分支前缀对应的转发参考信息;一个节点的分支前缀包含在所述目标物理树中根节点与该节点之间的路径表征的路径前缀;所述目标物理树中第二类型的节点记录有该节点的节点前缀,以及该节点的节点前缀对应的参考转发信息;一个节点的节点前缀表示在该节点处进行查询时使用的前缀;所述目标物理树中第三类型的节点记录有该节点与子节点之间的路径表征的路径前缀;
第一转发参考信息获取模块1303,用于若当前待查询的节点为第一类型,则获取当前待查询的节点中记录的转发参考信息;
第二转发参考信息获取模块1304,用于若当前待查询的节点为第二类型,则确定所述目的地址与当前待查询的节点的分支前缀匹配后的第一剩余前缀部分,并获取当前待查询的节点中记录的与所述第一剩余前缀部分相匹配的节点前缀对应的转发参考信息;
节点更新模块1305,用于若当前待查询的节点为第三类型,则确定所述目的地址与当前待查询的节点的分支前缀匹配后的第二剩余前缀部分,以及确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀,并将确定出的路径前缀对应的子节点作为当前待查询的节点,触发所述节点类型确定模块1302;
第一待处理报文转发模块1306,用于基于获取到的转发参考信息对所述待处理报文进行转发。
在一些实施例中,所述装置还包括:
第一判断模块,用于在所述确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀之前,若当前待查询的节点中记录有第一优化前缀,则按照最长前缀匹配方式,判断所述第一优化前缀中是否存在与所述目的地址相匹配的前缀;
其中,所述第一优化前缀包含当前待查询的节点对应的子树中指定节点的分支前缀;当前待查询的节点对应的子树表示:所述目标物理树中以当前待查询的节点为根节点的部分;
所述节点更新模块1305,具体用于若所述第一优化前缀中不存在与所述目的地址相匹配的前缀,则确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀;
所述装置还包括:
第二待处理报文转发模块,用于若所述第一优化前缀中存在与所述目的地址相匹配的前缀,则将所述第一优化前缀中与所述第二剩余前缀部分相匹配的前缀对应的节点作为当前待查询的节点,并触发所述节点类型确定模块1302。
在一些实施例中,所述目标物理树中的节点为基于预设结构的平衡多路查找树Btree生成的。
在一些实施例中,参见图14,图14为本发明实施例提供的另一种报文处理装置的结构图,所述目标物理树包含业务存储空间中记录的第一物理树,所述装置还包括控制平面侧中的待添加路由表项获取模块1307、节点位置确定模块1308、第二判断模块1309、第一添加模块1310、第三判断模块1311和第二添加模块1312;所述目标物理树包含业务存储空间中记录的第一物理树;
所述待添加路由表项获取模块1307,用于若基于当前的第一物理树未查询到所述目的地址对应的转发参考信息,则获取待添加路由表项;其中,所述待添加路由表项中记录有与所述目的地址相匹配的待添加前缀和对应的待添加转发参考信息;
所述节点位置确定模块1308,用于基于所述待添加前缀和预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置;
所述第二判断模块1309,用于判断所述节点位置处是否已存在节点;若所述节点位置不存在节点,触发所述第一添加模块1310;若所述节点位置已存在节点,触发所述第三判断模块1311;
所述第一添加模块1310,用于在所述节点位置处添加所述待添加路由表项对应的节点,以更新当前的第一物理树;
所述第三判断模块1311,用于基于该节点的节点类型,判断是否能够基于该节点记录所述待添加路由表项;若基于该节点无法记录所述待添加路由表项,则触发所述第二添加模块1312;
所述第二添加模块1312,用于对该节点的节点类型进行转换,并基于转换后的节点记录所述待添加路由表项,以更新当前的第一物理树。
在一些实施例中,所述节点位置确定模块1308,具体用于:按照最长前缀匹配方式,从当前的第一物理树中确定所述第三类型的节点,作为第一节点;其中,所述第一节点的分支前缀与所述待添加前缀相匹配;确定所述待添加前缀与所述第一节点的分支前缀匹配后的剩余前缀部分,作为第三剩余前缀部分;在所述第一节点对应的各层级的位图Bitmap中,确定与所述第三剩余前缀部分相匹配的位图;基于所述第三剩余前缀部分,在确定出的位图中进行位图寻址,得到第一位图位置;基于所述第三剩余前缀部分在进行位图寻址后的第四剩余前缀部分,在所述第一位图位置对应的扩展空间中进行空间寻址,得到所述待添加路由表项在当前的第一物理树中对应的节点位置。
在一些实施例中,所述第二添加模块1312,具体用于若该节点为所述第一类型,则基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;若基于所述第二类型的节点能够记录所述待添加路由表项,则将该节点转换为所述第二类型,并在转换后的节点中记录转换前该节点中的转发参考信息,以及所述待添加转发参考信息;若基于所述第二类型的节点无法记录所述待添加路由表项,则将该节点转换为所述第三类型;基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;若基于所述第二类型的节点能够记录所述待添加路由表项,基于所述待添加前缀和所述预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置,并触发所述第一添加模块1310;若该节点为所述第二类型,则将该节点转换为所述第三类型;基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;若基于所述第二类型的节点能够记录所述待添加路由表项,基于所述待添加前缀和所述预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置,并触发所述第一添加模块1310。
在一些实施例中,所述第一添加模块1310具体用于:若所述节点位置处对应的分支前缀与所述待添加前缀的长度一致,则生成所述第一类型的节点,并在生成的节点中记录所述待添加转发参考信息;若所述节点位置处对应的分支前缀与所述待添加前缀的长度不一致,则生成所述第二类型的节点,并在生成的节点中对应记录第五剩余前缀部分以及所述待添加转发参考信息;其中,所述第五剩余前缀部分为所述待添加前缀与所述节点位置处对应的分支前缀匹配后的剩余前缀部分。
在一些实施例中,所述装置还包括:第二节点确定模块,用于从更新后的第一物理树中选择指定的第三类型的节点,作为第二节点;第二优化前缀记录模块,用于在所述第二节点中记录第二优化前缀;其中,所述第二优化前缀包含所述第二节点对应的子树中指定节点的分支前缀;所述第二节点对应的子树表示:当前的第一物理树中以所述第二节点为根节点的部分。
在一些实施例中,所述目标物理树还包含缓存存储空间中记录的第二物理树;所述装置还包括:第三节点确定模块,用于在对第一物理树进行更新后,根据当前的第一物理树中节点的查询次数,从当前的第一物理树中确定第三节点;第二物理树记录模块,用于将包含所述第三节点的待缓存路径作为第二物理树,记录在所述缓存存储空间;其中,所述待缓存路径为基于所述第三节点对应的目标路径确定的;所述第三节点对应的目标路径表示当前的第一物理树中根节点与所述第三节点之间的路径;第一存储地址确定模块,用于获取所述待缓存路径中除所述第三节点外的目标端节点在所述缓存存储空间中的存储地址,作为第一存储地址;第一存储地址记录模块,用于将所述业务存储空间中所述目标端节点的父节点中记录的所述目标端节点的存储地址,修改为所述第一存储地址。
本发明实施例还提供了一种转发设备,如图15所示,包括处理器1501、通信接口1502、存储器1503和通信总线1504,其中,处理器1501,通信接口1502,存储器1503通过通信总线1504完成相互间的通信,
存储器1503,用于存放计算机程序;
处理器1501,用于执行存储器1503上所存放的程序时,上述实施例中任一报文处理方法。
上述转发设备提到的通信总线可以是外设部件互连标准(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所述的方法,其特征在于,所述目标物理树中的节点为基于预设结构的平衡多路查找树Btree生成的。
4.根据权利要求3所述的方法,其特征在于,所述目标物理树包含业务存储空间中记录的第一物理树;所述方法还包括:
若基于当前的第一物理树未查询到所述目的地址对应的转发参考信息,则获取待添加路由表项;其中,所述待添加路由表项中记录有与所述目的地址相匹配的待添加前缀和对应的待添加转发参考信息;
基于所述待添加前缀和所述预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置;
判断所述节点位置处是否已存在节点;
若所述节点位置不存在节点,则在所述节点位置处添加所述待添加路由表项对应的节点,以更新当前的第一物理树;
若所述节点位置已存在节点,则基于该节点的节点类型,判断是否能够基于该节点记录所述待添加路由表项;若基于该节点无法记录所述待添加路由表项,则对该节点的节点类型进行转换,并基于该节点记录所述待添加路由表项,以更新当前的第一物理树。
5.根据权利要求4所述的方法,其特征在于,所述确定所述待添加路由表项在当前的第一物理树中对应的节点位置,包括:
按照最长前缀匹配方式,从当前的第一物理树中确定所述第三类型的节点,作为第一节点;其中,所述第一节点的分支前缀与所述待添加前缀相匹配;
确定所述待添加前缀与所述第一节点的分支前缀匹配后的剩余前缀部分,作为第三剩余前缀部分;
在所述第一节点对应的各层级的位图Bitmap中,确定与所述第三剩余前缀部分相匹配的位图;
基于所述第三剩余前缀部分,在确定出的位图中进行位图寻址,得到第一位图位置;
基于所述第三剩余前缀部分在进行位图寻址后的第四剩余前缀部分,在所述第一位图位置对应的扩展空间中进行空间寻址,得到所述待添加路由表项在当前的第一物理树中对应的节点位置。
6.根据权利要求4所述的方法,其特征在于,所述对该节点的节点类型进行转换,并基于该节点记录所述待添加路由表项,以更新当前的第一物理树,包括:
若该节点为所述第一类型,则基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;
若基于所述第二类型的节点能够记录所述待添加路由表项,则将该节点转换为所述第二类型,并在转换后的节点中记录转换前该节点中的转发参考信息,以及所述待添加转发参考信息;
若基于所述第二类型的节点无法记录所述待添加路由表项,则将该节点转换为所述第三类型;基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;若基于所述第二类型的节点能够记录所述待添加路由表项,基于所述待添加前缀和所述预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置,并执行所述在所述节点位置处添加所述待添加路由表项对应的节点,以更新当前的第一物理树的步骤;
若该节点为所述第二类型,则将该节点转换为所述第三类型;基于所述待添加前缀与该节点的分支前缀匹配后的剩余前缀部分,判断是否能够基于所述第二类型的节点记录所述待添加路由表项;若基于所述第二类型的节点能够记录所述待添加路由表项,基于所述待添加前缀和所述预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置,并执行所述在所述节点位置处添加所述待添加路由表项对应的节点,以更新当前的第一物理树的步骤。
7.根据权利要求6所述的方法,其特征在于,所述在所述节点位置处添加所述待添加路由表项对应的节点,包括:
若所述节点位置处对应的分支前缀与所述待添加前缀的长度一致,则生成所述第一类型的节点,并在生成的节点中记录所述待添加转发参考信息;
若所述节点位置处对应的分支前缀与所述待添加前缀的长度不一致,则生成所述第二类型的节点,并在生成的节点中对应记录第五剩余前缀部分以及所述待添加转发参考信息;其中,所述第五剩余前缀部分为所述待添加前缀与所述节点位置处对应的分支前缀匹配后的剩余前缀部分。
8.根据权利要求4所述的方法,其特征在于,所述方法还包括:
从更新后的第一物理树中选择指定的第三类型的节点,作为第二节点;
在所述第二节点中记录第二优化前缀;其中,所述第二优化前缀包含所述第二节点对应的子树中指定节点的分支前缀;所述第二节点对应的子树表示:当前的第一物理树中以所述第二节点为根节点的部分。
9.根据权利要求4所述的方法,其特征在于,所述目标物理树还包含缓存存储空间中记录的第二物理树;所述方法还包括:
在对第一物理树进行更新后,根据当前的第一物理树中节点的查询次数,从当前的第一物理树中确定第三节点;
将包含所述第三节点的待缓存路径作为第二物理树,记录在所述缓存存储空间;其中,所述待缓存路径为基于所述第三节点对应的目标路径确定的;所述第三节点对应的目标路径表示当前的第一物理树中根节点与所述第三节点之间的路径;
获取所述待缓存路径中除所述第三节点外的目标端节点在所述缓存存储空间中的存储地址,作为第一存储地址;
将所述业务存储空间中所述目标端节点的父节点中记录的所述目标端节点的存储地址,修改为所述第一存储地址。
10.一种报文处理装置,其特征在于,所述装置应用于转发设备,所述装置包括数据平面侧中的目的地址获取模块、节点类型确定模块、第一转发参考信息获取模块、第二转发参考信息获取模块、节点更新模块和第一待处理报文转发模块:
所述目的地址获取模块,用于获取待处理报文中携带的目的地址;
所述节点类型确定模块,用于按照所述目的地址,在预先基于路由表项构建的目标物理树中查询,确定当前待查询的节点的节点类型;其中,所述目标物理树中第一类型的节点记录有该节点的分支前缀对应的转发参考信息;一个节点的分支前缀包含在所述目标物理树中根节点与该节点之间的路径表征的路径前缀;所述目标物理树中第二类型的节点记录有该节点的节点前缀,以及该节点的节点前缀对应的参考转发信息;一个节点的节点前缀表示在该节点处进行查询时使用的前缀;所述目标物理树中第三类型的节点记录有该节点与子节点之间的路径表征的路径前缀;
所述第一转发参考信息获取模块,用于若当前待查询的节点为第一类型,则获取当前待查询的节点中记录的转发参考信息;
所述第二转发参考信息获取模块,用于若当前待查询的节点为第二类型,则确定所述目的地址与当前待查询的节点的分支前缀匹配后的第一剩余前缀部分,并获取当前待查询的节点中记录的与所述第一剩余前缀部分相匹配的节点前缀对应的转发参考信息;
所述节点更新模块,用于若当前待查询的节点为第三类型,则确定所述目的地址与当前待查询的节点的分支前缀匹配后的第二剩余前缀部分,以及确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀,并将确定出的路径前缀对应的子节点作为当前待查询的节点,触发所述节点类型确定模块;
所述第一待处理报文转发模块,用于基于获取到的转发参考信息对所述待处理报文进行转发。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
第一判断模块,用于在所述确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀之前,若当前待查询的节点中记录有第一优化前缀,则按照最长前缀匹配方式,判断所述第一优化前缀中是否存在与所述目的地址相匹配的前缀;其中,所述第一优化前缀包含当前待查询的节点对应的子树中指定节点的分支前缀;当前待查询的节点对应的子树表示:所述目标物理树中以当前待查询的节点为根节点的部分;
所述节点更新模块,具体用于若所述第一优化前缀中不存在与所述目的地址相匹配的前缀,则确定当前待查询的节点中记录的与所述第二剩余前缀部分相匹配的路径前缀;
所述装置还包括:
第二待处理报文转发模块,用于若所述第一优化前缀中存在与所述目的地址相匹配的前缀,则将所述第一优化前缀中与所述第二剩余前缀部分相匹配的前缀对应的节点作为当前待查询的节点,并触发所述节点类型确定模块。
12.根据权利要求10所述的装置,其特征在于,所述目标物理树包含业务存储空间中记录的第一物理树;所述装置还包括控制平面侧中的待添加路由表项获取模块、节点位置确定模块、第二判断模块、第一添加模块、第三判断模块和第二添加模块;所述目标物理树包含业务存储空间中记录的第一物理树;
所述待添加路由表项获取模块,用于若基于当前的第一物理树未查询到所述目的地址对应的转发参考信息,则获取待添加路由表项;其中,所述待添加路由表项中记录有与所述目的地址相匹配的待添加前缀和对应的待添加转发参考信息;
所述节点位置确定模块,用于基于所述待添加前缀和预设结构的Btree的维度,确定所述待添加路由表项在当前的第一物理树中对应的节点位置;
所述第二判断模块,用于判断所述节点位置处是否已存在节点;若所述节点位置不存在节点,触发所述第一添加模块;若所述节点位置已存在节点,触发所述第三判断模块;
所述第一添加模块,用于在所述节点位置处添加所述待添加路由表项对应的节点,以更新当前的第一物理树;
所述第三判断模块,用于基于该节点的节点类型,判断是否能够基于该节点记录所述待添加路由表项;若基于该节点无法记录所述待添加路由表项,则触发所述第二添加模块;
所述第二添加模块,用于对该节点的节点类型进行转换,并基于转换后的节点记录所述待添加路由表项,以更新当前的第一物理树。
13.一种转发设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-9任一所述的方法步骤。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-9任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210888989.9A CN115086221B (zh) | 2022-07-27 | 2022-07-27 | 一种报文处理方法、装置、转发设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210888989.9A CN115086221B (zh) | 2022-07-27 | 2022-07-27 | 一种报文处理方法、装置、转发设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115086221A true CN115086221A (zh) | 2022-09-20 |
CN115086221B CN115086221B (zh) | 2022-11-22 |
Family
ID=83242112
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210888989.9A Active CN115086221B (zh) | 2022-07-27 | 2022-07-27 | 一种报文处理方法、装置、转发设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115086221B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115567444A (zh) * | 2022-09-23 | 2023-01-03 | 北京香哈网络股份有限公司 | 一种控制器路由地址查找调用方法及系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6421660B1 (en) * | 1997-12-19 | 2002-07-16 | International Business Machines Corporation | Enhanced searching method and apparatus for variable bit chains |
CN1787477A (zh) * | 2004-12-09 | 2006-06-14 | 北京三星通信技术研究有限公司 | IPv6路由表的查找方法 |
CN101577662A (zh) * | 2008-05-05 | 2009-11-11 | 华为技术有限公司 | 一种基于树形数据结构的最长前缀匹配方法和装置 |
CN101631085A (zh) * | 2009-08-10 | 2010-01-20 | 武汉烽火网络有限责任公司 | 一种基于阈值的自适应路由缓存方法 |
CN105141525A (zh) * | 2015-06-30 | 2015-12-09 | 杭州华三通信技术有限公司 | IPv6路由查找方法及装置 |
CN106330716A (zh) * | 2015-06-30 | 2017-01-11 | 杭州华三通信技术有限公司 | Ip路由查找方法及装置 |
CN106416152A (zh) * | 2014-06-10 | 2017-02-15 | 华为技术有限公司 | 一种查找装置、查找配置方法和查找方法 |
-
2022
- 2022-07-27 CN CN202210888989.9A patent/CN115086221B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6421660B1 (en) * | 1997-12-19 | 2002-07-16 | International Business Machines Corporation | Enhanced searching method and apparatus for variable bit chains |
CN1787477A (zh) * | 2004-12-09 | 2006-06-14 | 北京三星通信技术研究有限公司 | IPv6路由表的查找方法 |
CN101577662A (zh) * | 2008-05-05 | 2009-11-11 | 华为技术有限公司 | 一种基于树形数据结构的最长前缀匹配方法和装置 |
CN101631085A (zh) * | 2009-08-10 | 2010-01-20 | 武汉烽火网络有限责任公司 | 一种基于阈值的自适应路由缓存方法 |
CN106416152A (zh) * | 2014-06-10 | 2017-02-15 | 华为技术有限公司 | 一种查找装置、查找配置方法和查找方法 |
US20170142013A1 (en) * | 2014-06-10 | 2017-05-18 | Huawei Technologies Co., Ltd. | Search apparatus, search configuration method, and search method |
CN105141525A (zh) * | 2015-06-30 | 2015-12-09 | 杭州华三通信技术有限公司 | IPv6路由查找方法及装置 |
CN106330716A (zh) * | 2015-06-30 | 2017-01-11 | 杭州华三通信技术有限公司 | Ip路由查找方法及装置 |
Non-Patent Citations (3)
Title |
---|
HOANG LE: ""Scalable Tree-Based Architectures for IPv4/v6 Lookup Using Prefix Partitioning"", 《IEEE TRANSACTIONS ON COMPUTERS》 * |
张荣高: ""网络处理器原型系统路由查找算法的研究"", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
陈蹊等: "多分枝trie树路由查找算法研究", 《电子设计工程》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115567444A (zh) * | 2022-09-23 | 2023-01-03 | 北京香哈网络股份有限公司 | 一种控制器路由地址查找调用方法及系统 |
CN115567444B (zh) * | 2022-09-23 | 2024-02-27 | 北京香哈网络股份有限公司 | 一种控制器路由地址查找调用方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115086221B (zh) | 2022-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6434144B1 (en) | Multi-level table lookup | |
US6985483B2 (en) | Methods and systems for fast packet forwarding | |
JP4727594B2 (ja) | コンテンツ・ベースの情報検索アーキテクチャー | |
EP1623347B1 (en) | Comparison tree data structures and lookup operations | |
Quan et al. | TB2F: Tree-bitmap and bloom-filter for a scalable and efficient name lookup in content-centric networking | |
US7633960B2 (en) | Dense mode coding scheme | |
US7443841B2 (en) | Longest prefix matching (LPM) using a fixed comparison hash table | |
US7415472B2 (en) | Comparison tree data structures of particular use in performing lookup operations | |
US7715385B2 (en) | Default route coding | |
KR100586461B1 (ko) | 파이프라인 이진 트리를 이용한 ip 어드레스 검색 방법,하드웨어 구조 및 기록매체 | |
US20110082866A1 (en) | Method and apparatus for logically expanding the length of a search key | |
US20060083247A1 (en) | Prefix lookup using address-directed hash tables | |
US20100058027A1 (en) | Method for selecting hash function, method for storing and searching routing table and devices thereof | |
WO2009135417A1 (zh) | 一种基于树形数据结构的最长前缀匹配方法和装置 | |
CN103428093A (zh) | 一种基于名字路由前缀存储、匹配及更新方法与装置 | |
US7478109B1 (en) | Identification of a longest matching prefix based on a search of intervals corresponding to the prefixes | |
CN115086221B (zh) | 一种报文处理方法、装置、转发设备和存储介质 | |
US20040044868A1 (en) | Method and apparatus for high-speed longest prefix match of keys in a memory | |
CN114884877B (zh) | 一种哈希表和HOT相结合的IPv6路由查找方法 | |
CN110995876B (zh) | 一种ip存储与查找的方法及装置 | |
CN113824814B (zh) | 一种转发表的地址匹配方法、装置、网络设备及介质 | |
KR101587756B1 (ko) | 블룸 필터 선-검색을 이용한 스트링 정보 검색 장치 및 방법 | |
JP3660311B2 (ja) | テーブル検索装置および方法およびプログラムおよび記録媒体 | |
EP3319279B1 (en) | Ip routing lookup | |
Li et al. | An IPv6 Routing Lookup Algorithm Based on Hash Table and HOT |
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 |