一种基于Trie转发表的虚拟路由IP查找方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种基于Trie转发表的虚拟路由IP查找方法
叶光辉;林亚平;王刚
【摘要】为了使路由器在有限的存储资源中支持更多的虚拟路由实例,提出一种
基于多分支Trie的动态共享转发表结构,并在此结构上实现了相应的虚拟路由IP
查找方法.该方法采用多比特位的IP查找,减少了转发表中结构性消耗及访存次数,同时该方法具有自适应性,能够根据已有的IP规则集,通过动态规划构造空间最
优的Trie.仿真结果表明,与已有的共享转发表结构相比,该方法节约了大量的存
储空间,并且能够实现快速的IP查找.
【期刊名称】《计算机应用与软件》
【年(卷),期】2012(000)011
【总页数】6页(P257-261,284)
【关键词】多分支Trie;动态规划;IP查找;虚拟路由;共享转发表
【作者】叶光辉;林亚平;王刚
【作者单位】湖南大学信息科学与工程学院湖南长沙410082;湖南大学信息科学与工程学院湖南长沙410082;湖南大学信息科学与工程学院湖南长沙410082【正文语种】中文
【中图分类】TP393
0 引言
随着Internet的发展,网络趋于复杂化,网络路由也变得越来越复杂。
虚拟路由
技术是解决此难题的一种有效方案。
虚拟路由是对一台物理路由器的扩展,是在一台物理路由器上运行多个虚拟路由实例(instance)。
虚拟路由之间的转发表是独立存储的,这对只有少量存储空间的路由器是一个巨大的挑战。
在高速运行的网络中,路由器要以线性速度处理每个虚拟路由的IP分组,如何保证虚拟路由实例的IP查找性能也是一个亟待解决的问题。
因此,虚拟路由技术主要需要解决两个问题:减少转发表的存储空间和加快IP查找速度。
在高速运行的骨干网中,路由器的所有转发表会被载入低时延的存储器(如TCAMs)当中,此类存储器容量小、造价贵,严重限制了虚拟路由器的并发数量,如Juniper的路由器仅能并发16个虚拟路由实例[1]。
本文提出一种具有共享
性和动态性的转发表结构及基于此结构的一种IP查找方法。
该结构和算法可以有
效地减少转发表的空间消耗,同时能够提供高效率的IP查找。
1 背景及相关工作
当前,网络链路速度的提高(100Gbps的数据传输率[2,3])需要路由器有更高
效的转发表结构和IP查找方法;转发规则集的膨胀扩张(骨干网上的核心路由器保存有310000条规则[4])需要路由器能够保存海量的规则集;虚拟路由技术的广泛
使用[5,6]要求路由器能够尽可能多地增加并发的虚拟路由数量。
路由器中的IP查找方法与选取的转发表结构是密切相关的。
当前,根据转发表结
构的不同,可以分为以下几类:基于TCAM 技术[7,8]、基于哈希技术[9,10]和基于 Trie 技术[1,11,12]。
基于TCAM技术和哈希技术能够实现快速的IP 查找性能,但是功耗大,硬件成本高。
而基于Trie技术所需的硬件成本低,通过
合理的设计转发表结构及相应的IP算法,不仅能够节省转发表存储空间,也能实
现高效的IP查找性能,而且功耗小。
文献[1,11,12]采用二叉Trie(binary trie)来构造转发表,其结构如图1中的(c)、(d)所示。
它由转发规则集(如图1中的(a)、(b))根据左子节点表示IP地址二进制的0、右子节点表示IP地址二进制的1
的原则产生,节点值保存转发接口信息,节点在Trie的位置表示IP分组从根节点到该节点形成的IP前缀。
每个虚拟路由表都会有各自独立转发表。
图1 基于Trie的多转发表合并过程
为减少转发表的空间消耗,文献[1]提出将各转发表进行合并,生成共享转发表(SFIB),如图1(e)所示,合并后的Trie在不丢失任何转发信息的情况下,减少重复存储子节点指针域数量实现压缩空间的效果。
文献[11]以文献[1]为基础,在Trie结构加入标记位,增加文献[1]的表结构的适应性,使得该结构在对特殊分布的转发规则集进行Trie构造时,节省更多的空间。
但是,在构造Trie过程中,采用的是单步长方式,构造的Trie节点数量多,结构臃肿,用于保存指针的结构性开销大。
文献[12]提出了一种无指针型的Trie结构,父节点对子节点的连接是用节点序号及偏移量来确定的,减少了传统指针型节点的指针空间消耗,因此能够大幅度地减少节点的空间消耗。
另外,该文献通过Hash函数来映射IP分组的转发接口位置。
然而,使用该结构构建转发表,必须先输入整个规则集,待Trie的构造完成后才能确定节点的序号及偏移量,而对规则的改变可能会引起Trie的重构,缺乏灵活性。
2 动态共享转发表及实现
以二叉Trie方式构造转发表(文献[1,11]所采用的方式),易导致Trie的树形结构臃肿复杂,空间消耗大。
而以多叉树的方式构造转发表,能够有效的减少节点的数量,降低树的高度,减少转发表的空间消耗。
结合指针的灵活性和使用偏移量的低开销性,提出一种适用于虚拟路由技术,基于多分支Trie的动态共享转发表结构,并在此结构上实现了快速的IP查找。
此外,在动态共享转发表的结构上应用动态规划思想,实现了构造空间最优的Trie算法。
2.1 动态共享转发表结构
在构造Trie及IP查找的过程中,每次在转发表中进行处理的比特位数称为步长
S(Stride)。
步长的取值决定Trie的分支数。
以二叉Trie为例,转发表的IP查找
过程对应于二叉树中的二叉搜索过程,如图1(e)中Trie使用步长为1的方式进行
构造,其IP查找过程中每次只处理1比特,故其子节点分支数仅为2,当步长S
取值增加时,其子节点分支数n有n=2S。
转发表的空间消耗取决于表中节点的数量和单个节点的空间消耗。
节点的数量由转发规则集的构成及构造Trie的步长值相关,转发规则越多、步长取值越小,转发
表的节点数量就越多,反之则越少。
转发表的节点通常需要保存两种类型的信息:
转发接口信息和后续节点结构信息(以下简称结构信息)。
前者用于指定分组的下一跳接口位置,后者则是维持Trie分支连续的结构信息,用于IP查找过程中的节点定位和查询。
节点的转发信息保存着路由器中下一跳的接口位置,在共享转发表中,转发信息的数量与并发运行的虚拟路由实例相等,如图1(e)的根节点保存有P1|P1两个虚拟路由的转发信息。
节点的结构信息一般使用指针域来存储,而指针的空间代价比较大。
在Trie中,指针域的数量与该节点的后续子节点的数量相同,如图
1中(c)所示,每个节点对应有2个指针域的结构信息。
所以,要减少转发表的空
间消耗,需要减少表中的节点数量和单个节点的大小。
然而,在多分支Trie结构中,增加Trie的步长值,虽然可以减少转发表的节点数量,但是步长的增加意味
着节点需要保存的后续节点信息增多,从而导致单节点的空间消耗也会成倍的增加,这对转发表的空间压缩效果并不明显。
为此,本文在多分支Trie的结构基础上,研究一种改进结构,即动态共享转发表
结构,该结构节点只需保存少量的结构信息,并在节点步长增加时,能够减少单个节点的空间消耗增长量。
此外,节点结构具有动态扩展性,能够适应于任意步长下的结构需求。
在动态共享转发表中,使用单个指针域与计算偏移量相结合的方式作为节点的结构
信息。
此外,我们将原本保存于节点中的转发信息进行分离,并独立保存于共享信息表中,以消除冗余的转发信息,提高空间的利用率。
为此,我们将转发表中的兄弟节点进行连续存储,并以状态标记位确定子节点的存在情况,同时,节点仅保存共享信息表的索引值。
故动态共享转发表的结构如图2所示,其中,(a)为转发表
的节点结构,(b)则为共享信息表结构。
图2 动态共享转发表中的结构示意图
动态共享转发表的节点结构由三部分组成:cFlag、cArray-Pointer和Index,其中,cFlag与cArrayPointer保存节点的结构信息,Index则保存节点的转发接口信息。
cFlag是子节点的状态标记位,标记着所有后续子节点的存在情况,如果子节点存在,值为1,否则为0。
故cFlag由多个flag位组成,且flag的数量n1由节点的分支数,即步长S所决定,有关系式n1=2S。
以图3为例,图中(a)(b)是动态共
享转发表在不同步长下的简单示意图,其中(a)的节点步长为1,(b)的节点步长为2。
在(a)中,节点的最大分支数为2,且都存在后续子节点,故cFlag有2个标记位,值为11。
而在(b)中,节点的最大分支数为4(00,01,10,11分支),但只
有01分支有后续节点,故cFlag有4个标记位,值为0100。
cArrayPointer是
指向子节点的指针域,因为兄弟节点都是连续存储的,故cArrayPointer只需指
向其最左子节点,且指针域的数量与节点步长无关。
如图3(a)(b)中cArrayPointer的指针数量恒为1。
Index保存的是共享信息表中的索引值,节点
需要保存的转发信息数量n2亦由步长决定。
有关系式n2=2S-1。
以图3为例,当步长为1时,节点只需要保存1组转发信息(图3(a)中P1|P2),将转发信息添加入共享信息表后,该转发信息处在表中的位置即为Index需要保存的索引值(图
3(a)中共享信息表的第0项)。
在步长为2时,节点需要的保存的转发信息增加至
2组(图3(b)中P1|P2和P2|P1),同样的,Index中保存的是对应项的索引值(图
3(b)中共享信息表的第0、1项)。
图3 不同步长下的动态共享转发表的节点结构
共享信息表是n × j(n=1,2,…;j=0,1,…)的二维矩阵,矩阵的行代表路由器中运行的虚拟路由实例编号,列表示转发规则集中每个虚拟路由的转发信息。
Iab表示在表结构中第a(1≤a≤n)号虚拟路由的第b(0≤b≤j)项的转发接口位置,且一种
转发规则只对应表中的一项记录。
2.2 构造动态共享转发表
本文设计并实现了动态共享转发表的构造算法,如算法1所示。
构造算法在获取
输入参数后对IPPrefix进行遍历解析,当IPPrefix解析完成后,算法结束,即算
法步骤(以下简称行)19所示。
构造算法每次解析的的比特位数由步长stride决定,并存入buff(行3)。
在对buff进行解析前,确定是否已经对IP完成解析,如果loopend值为0,将输入参数中的转发信息先与共享信息表中的所有记录项进行
比较,如果存在着相同的记录项,返回重复项在信息表中的偏移值。
否则,将输入参数的转发信息写入信息表,并建立节点与共享信息表的位置对应关系(行17-行18);如果loopend值为1,则需确定子节点对象在子节点数组的偏移量,对buff
进行十进制转换,并取节点中第flagIndex位的flag值(行6-行7)。
根据flag的值确定是否需要创建新的节点对象,如果flag值为0,新建子节点对象,并对原
节点修改相应的标记位(行8-行12);如果flag值为1,将当前节点对象设置成对
应的子节点对象(行13-行16)。
算法1 动态共享转发表的构造算法
输入:多分支Trie根节点root,IP前缀IPPrefix;节点步长stride,转发信息info。
输出:多分支Trie根节点root;转发信息rValue。
变量说明:loopend为解析结束标记位,当对IPPrefix解析完成后,值为
0;current指向当前访问节点;buff为当前需要解析的部分IP前缀;flagIndex为
buff的十进制表示,用于确定子节点对象的偏移值;flag为节点第flagIndex个子
节点的状态标记位。
步骤:
通过算法1可以将图1(a)、(b)构造成步长S=1的动态共享转发表结构,如图4所示,其中,N表示空值。
节点的第一部分表示其子节点的存在状态。
表中除根节
点外,所有兄弟节点均在连续存储的数组(图4中childArray)中,首地址保存在父节点的第二部分。
所有虚拟路由的转发信息均保存在共享信息表中,节点第三部分只保存在共享信息表中相应的偏移量。
图4 步长S=1的动态共享转发表
不同步长S的值,可以构造出不同的Trie,如图5(a)所示,每S(图5中S=2)层的节点合并为一个节点(图中的虚线包含的部分),根据设计规则构建出图5(b)中动态共享转发表结构。
通过对节点的合并,降低了树的高度,如图5中(a)的高度Lv=3,(b)的高度则为1。
但是,当步长S>1时,规则集中IP前缀长度不一定都等于步长,如图5(a)中的01*、10*、11*规则,长度为3,不是步长S=2的整数倍,因此,需要对不规则长度的IP前缀进行处理。
对不合适的IP前缀添加冗余信息,如对于01*,可以将其扩充为2条规则:010*、011*,其转发信息与原规则01*的相同。
如果扩充后的新规则与原规则重复,且原规则的转发信息不为空,则该新规则失效,如图5(a)中Lv0与Lv1合并时,Lv1中的节点各有一半为空值,故合并后
产生的转发信息分别为P2|P1(图5(b)共享信息表中的第2项)、P1|P2((图5(b)共
享信息表中的第0项))。
图5 步长S=2的动态共享转发表
2.3 动态共享转发表的IP查找过程
用字符串B1B2…Blen表示IP分组目的地址的二进制形式,其中len为目的地址
的长度,IPv4的len=32,IPv6的len=128。
在动态共享转发表进行IP查找时,
路由器会将当前处理的IP分组的目的地址根据设定的步长值依次取S位,并在Trie中进行匹配,直到查找的节点为叶子节点,然后取出转发信息,查找结束,一次完整IP查找需要进行多次的节点比较。
当路由器进行一次节点比较时,假设传入IP地址为BiBi+1…Bi+S-1,由IP地址的传入规则,i满足i={i|k× S+1,(k=0,1,…-1)},将传入的BiBi+1…Bi+S-1转成十进制数Dbin,取出标记位第Dbin位Fn(下标索引均以0开始),判断Fn的值,如果Fn值为1,表示有后续节点,需再进行地址匹配。
因子节点是连续存储,故取出子节点对象时需要进行偏移量计算,方法是统计节点的标记位字段中F0F1…Fn-1(Fn-1是Fn的前一标记位)值为1的数量,其值即所需子节点位置索引;如果Fn为0,表示当前节点没有后续节点,取出当前节点的转发信息。
当S>1时,节点保存的转发信息索引会有多个,对于转发信息偏移量计算,只需计算[Dbin/2]的值On,取出IndexOn的值SIn,然后取出共享信息表中第SIn项,根据分组所属的虚拟路由编号,返回转发接口位置,完成IP查找。
假设图5(b)中len=4,在某时刻接收到目的地址为1110,虚拟路由编号为2的IP分组,图中Trie是以S=2构建,故首次访存操作取地址11进行匹配,11的十进制为3,标记位第3位值为1(下标索引均以0开始),而标记位的前3位为1的数量为3,故子节点对象在子节点数组的第3位;第二次操作将10传入,10的十进制为2,标记位第2位值为0,故取对应转发索引,[2/2]=1,即取第1位Index字段的值1,通过查询共享信息表取出2号虚拟路由在第1项中的转发接口P2,完成IP查找。
2.4 动态规划构造最优Trie
不同S值构造出来的Trie占用空间可能不同。
应用动态规划的算法思想能够根据转发规则集的分布构造出空间最优的Trie。
(1)算法思想
动态规划是一种将问题实例分解为更小的、相似的子问题,并通过求解子问题来产
生一个全局最优解的算法策略。
构造空间最优的Trie,步长S不能是固定值,而需要针对每一层的节点分布动态调整。
文献[13]中对可变步长的定义是在Trie 中,同一层中的节点步长值是相等的,不同层的节点可能有不同的步长值。
由动态规划的思想可知,对于给定的规则集P和一个正整数k,总能确定步长S的划分,使得划分为k层的期望Trie所占用的存储空间最少[13]。
图6是动态规划步长的原理图,其中,虚线框及Lv层表示最优Trie的层次结构,而虚线框包含的的方框为原始Trie的层次结构;C表示空间消耗;Nodes(x)表示在原始Trie中,第x层的节点个数;T(m,r-1)表示高度为m的原始Trie,划分成r-1层的最优Trie所需的最少空间;Ssum(j-m)表示步长为j-m的动态共享转发表节点所占用存储空间。
图6 动态规划步长值
根据动态规划的思想,比较不同m值情况的T(m,r-1)值,取最少空间消耗T的m值,则当遍历整个问题域T(j,r),可得最优解,即划分r层的最优Trie所占的最小存储空间。
文献[13]中得出动态规划表达式为:
其中,2j-m及2j+1为节点的空间消耗。
本文节点的空间消耗为
Ssum(S)=Sflag+Sarray+Sindex,其中Sflag为标记位空间消耗,有
Sflag=2S;Sarray为子节点数组的指针空间消耗,Sarray=Size(P),其中,函数Size(x)是返回x的指针空间大小;Sindex为转发信息索引的空间的消耗,有Sindex=∑2S-1i=0BinLen(Oi),其中Oi是第 i项的索引值,函数BinLen(x)是求x的二进制长度。
修改后的动态规划表达式为:
(2)动态规划计算最优值算法
由式(3)和式(4),本文实现了计算最优解算法:
算法2 计算最优值算法
输入:转发规则集中规则最大长度L;最优Trie的层数划分k。
输出:步长划分数组sArray。
步骤:
算法2的计算中包含两个矩阵,分别是最优值矩阵T,辅助矩阵M,其中T记录
了每一个子问题的空间最优值,而T[L][k]则是构造最优Trie的最少空间值,辅助矩阵M则记录了整个构造过程中不同层的步长划分,数组sArray保存从M
中得出的每层节点需设定的步长值。
在Trie的构造过程中,通过选取sArray中对应的值作为节点的构造步长S,便能构造出最省空间的多步长的Trie。
3 实验结果
3.1 实验环境
本文的实验环境是便携式计算机,配置如下:Intel酷睿2双核 P8700,2.53GHz
主频,每核心32KB数据缓存和32KB指令缓存的一级缓存,并带3MB的二级缓存。
系统内存是4GB双通道800MHz的DDR2内存。
3.2 存储空间对比实验
本文对动态共享转发表进行了原型构造。
Trie的转发规则均取自于互联网AS6447[4](无冗余规则数为39529条)骨干路由器上的转发表。
图7记录了不同转发表结构的Trie在构造AS6447规则集的空间消耗情况。
图7的横坐标表示并发运行
的虚拟路由实例的数量。
分析所得的实验数据,在并发虚拟路由实例数量从5个
增加到50个的过程中,使用动态共享转发表的Trie及SFIB的空间消耗略微上升,空间消耗为1.16MB至4.3MB,而通过独立存储各虚拟转发表的普通Trie结构,空间消耗呈线性增长,空间消耗为2.75MB至20.43MB。
其中,SFIB的空间消耗
为2.01MB至4.3MB,使用动态共享转发表(k=28)的Trie的空间消耗为1.16MB 至3.49MB,较 SFIB节省空间约43%。
k值表示不同层数Trie的最优划分,如
k=28,表示将转发规则集通过动态规划构造层数为28的最优Trie的空间消耗。
不同的构造参数k生成的最优Trie的空间消耗可能不同,如图7中动态共享转发
表(k=26)曲线,空间消耗为1.36MB至3.70MB,较SFIB节省空间约30%。
图7 动态共享转发表与其他类型结构的空间消耗对比图
3.3 IP查找速度对比实验
为研究动态共享转发表的IP查找速度,本文使用真实的路由数据包作为输入数据,记录其平均的IP查找时间。
如图8所示,曲线展示了不同参数构造的最优Trie与其他Trie结构的平均IP查找时间。
比较记录的实验数据,使用动态共享转发表的Trie结构,其平均IP查找时间基本与SFIB的时间相近,如图8中 k=26、k=28 曲线的时间消耗分别为33.15μs至37.22μs、34.77μs至37.29μs,SFIB 及无共
享转发表的 IP 查找时间消耗分别为34.79μs至 37.30μs、41.80μs至49.77μs。
动态共享转发表结构与SFIB在IP查找的平均耗时上相差不足5%。
k的取值同样
影响其IP查找速度,k值越小,其平均查找时间耗时越少。
图8 不同结构的平均查找时间
从图7、图8的动态共享转发表数据曲线可知,转发表的空间消耗与k值大小成反比,而平均查找时间与k值大小成正比。
因此,当虚拟路由实例数量较多时,选
取较大的k值能够支持更多并发实例数量,而如果对虚拟路由实例的IP查找性能
有着更高的要求时,选取较小的k以便改善其IP查找性能。
4 结语
本文在分析了当前虚拟路由器的转发表结构和相关IP查找方法的基础上,提出了
一种基于步长可变的、多分支Trie树的动态共享转发表结构,然后根据已有的IP
规则集,通过动态规划构造空间最优的Trie树,并在此结构上实现了相应的虚拟
路由IP查找方法。
通过仿真实验和分析,与现有的相关方法比较,本文设计的转发表结构能节省约43%的存储空间,并能保证快速的IP查找。
参考文献
[1]Fu Jing,Jennifer Rexford.Efficient IP-address lookup with a shared forwarding table for multiple virtual routers[C]//CoNEXT,2008.
[2]Song H,Hao F,Kodialam M,et al.IPv6 lookups using distributed and load balanced Bloom filters for 100Gbps core router line cards[C]//IEEE INFOCOM,2009.
[3]Bando M,Chao H J.FlashTrie:hash-based prefrix-compressed trie for IP route lookup beyond 100Gbps[C]//IEEE INFOCOM,2010.
[4]BGP table[EB/OL]..
[5]Bavier A,Feamster N,Huang M,et al.In VINI veritas:realistic and controlled network experimentation[C]//SIGCOMM,2006.
[6]Anwer M B,Feamster N.Building a fast,virtualized data plane with programmable hardware[C]//SIGCOMM,2009.
[7]Zan Fe,Narlikar G,Basu A.CoolCAMs:power-efficient TCAMs for forwarding engines[C]//INFOCOM,2003.
[8]Lu W,Sahni S.Low power TCAMs for very large forwarding Tables [J].IEEE Transactions on Networking,2010.
[9]Yu H,Mahapatra R,Bhuyan L.A hash-based scalable IP lookup using Bloom and fingerprint filters[J].IEEE,2009.
[10]Kumar S,Tuner J,Crowley P,et al.HEXA:compact data structures for faster packet processing[C]//IEEE ICNP,2007.
[11]Song Haoyu,Kodialam M,Fang Hao,et al.Building Scalable
Virtual Routers with Trie Braiding[C]//INFOCOM,2010.
[12]Huang Kun,Xie Gaogang,Li Yanbiao,et al.Offset addressing approach to memory-efficient IP address lookup[C]//INFOCOM,2011. [13]Sahni S,Kun Suk Kim.Efficient construction of fixed-stride multibit tries for IP lookup[C]//FTDCS,2001.。