基于TCAM的路由查找及表项管理

本文是对TCAM相关知识的整理:D。

背景

为了取出RAM中的数据,操作系统必须给出存储数据的内存地址才能取出数据,CAM正相反, CAM通过对内容本身执行查询,CAM将此关键字与CAM中所有的表项同时进行匹配从而找到存储数据的地址,由于CAM的并行性使得它比RAM快很多。

而路由器查找有最长前缀匹配的特点,为了能够使用CAM来进行最长前缀路由的查找,我们可以为每一类可能的地址前缀长度使用一个CAM,每个CAM保存对应长度的所有前缀集合。对IPv4来说共需使用32个CAM,但是由于CAM仅提供两个结果:0或1,很明显,如果对地址前缀长度没有准确的了解,为了能够保证存储前N个前缀表,每个CAM都需要有N个表项的空间,因此CAM存储空间的利用率大大降低了。而为了克服该缺点,提出了TCAM。

什么是TCAM

TCAM(ternary content-addressable memory)三态内容寻址存储器是一种专用的高速内存,能够在单个时钟周期内搜索出数据(IP地址)。

TCAM,ternary content-addressable memory 中ternary三态指的是内存利用三种不同的输入(0、1、X)来存储和查询数据,其中X表示“不在乎”状态(也称无关状态),使TCAM能够基于模式匹配进行更广泛的搜索:既能精确匹配查找,也能模糊匹配查找。而CAM仅仅用0和1来进行精确匹配。

基于TCAM的路由查找

基于RAM的路由查找

最简单的基于RAM的路由查找方案是在RAM中为所有的IP地址都建立一个对应的转发表项,进行路由查找时,仅需要根据目的IP地址进行检索,一次访存就可以找到对应的路由信息,对IPv4来说,它所需要的转发表大小为232这会造成空间的极大浪费,因此Gupta等人在文献[1]中通过统计互联网中前缀长度的分布发现99.93%的前缀长度都分布在24比特或者小于24比特的范围内,因此他们提出了基于硬件的DIR-24-8-BASIC算法。DIR-24-8-BASIC算法结构如图1(DIR-24-8-BASIC算法结构图):DIR-24-8-BASIC算法结构图
DIR-24-8-BASIC算法原理:采用深度为2的多分支Trie树设计,其中第一层trie树步宽为24,对应的数据结构为TBL24表,主要保存的是路由地址前缀小于等于24的表项,因此一共含有16M个表项,第二层trie树步宽为24,对应的数据结构为TBLlong表,主要保存地址前缀大于24表项的下一跳的地址信息。路由查找时,先根据IP分组中目的地址前24个比特查找TBL24表,判断TBL24表输出的最高位,若为0,直接返回下一跳路由信息;若为1,则将其输出作为索引并和目的地址的后8位组成TBLlong的寻址地址,然后输出TBLlong相应单元内容,得到下一跳信息。

RAM的优点

算法简单,查表速度快,可用于高速路由器的设计实现。

RAM的缺点

  • 存储代价较高。
  • 算法的更新复杂,路由改变时,表项更新单元数多,在最坏情况下,更新一个表项需要操作64K个存储单元。

基于TCAM的路由查找

TCAM芯片通过保存关键字掩码的方式保存任意长度的关键字表项,其中每一个表项都是以<地址,掩码>序偶的形式保存[3]:假设地址关键字的长度从1到N,那么地址和掩码分别占用N比特,对于关键字长度为Y(1≤Y≤N)的表项来说,它的地址后W-Y个比特可以是0或1;它的掩码的前Y个比特为1,剩下的N-Y个比特为0。如:假设N为5,那么地址前缀10*就可以用<10000,11000>来表示。由于多个表项可能与输入的关键字匹配,因此TCAM规定在所有匹配的表项中选取地址最低的表项作为最后结果,而为了符合最长前缀路由的查找,在TCAM的低地址存储前缀较长的关键字,在高地址存储前缀较短的关键字。TCAM的查找结构如图2(TCAM查找结构图)。
TCAM查找结构图

TCAM的优点

查询速度快,实现简单,非常适合查找数据包或帧、决定发送数据包或帧的接口,常见于网络设备中,如高性能路由器和交换机,以提高路由查找、数据包分类、数据包转发等速度。

TCAM的缺点

  • 与RAM相比,TCAM更贵且存储芯片容量相对较小,制造成本高。
  • 由于TCAM是并行匹配的方式,与所有的关键字表项都进行了比较,因此TCAM的功耗较大,散热性高。
  • TCAM的更新操作比较复杂,当插入一条新的表项时,为了能够保证最长前缀匹配,需要对前缀长度比新表项长的表项进行移动。

基于RAM和TCAM的路由查找

根据2.1和2.2的分析可知(即上文分析),基于RAM的查找和基于TCAM的查找速度都比较快且实现简单,而基于RAM的查找需要较高的存储代价,基于TCAM的查找仅适合小路由表的情况,因此,结合RAM和TCAM优点得到的高速路由查找算法[2]原理如图3(基于RAM和TCAM查找的算法原理图):
基于RAM和TCAM查找的算法原理图
TCAM芯片用于存储所有路由器地址前缀大于24的表项,TCAM的地址存储前缀较长的关键字表项,高地址区域存储前缀较短的关键字表项;同时为便于TCAM更新,将空闲的TCAM表项至于TCAM的中间,RAM芯片保存所有路由地址前缀小于等于24的表项,TCAM和RAM返回的信息都送到优先权控制器。目的IP地址到达后,检查TCAM中是否有匹配的目的地址,同时目的地址的前24位查找RAM中的TBL24表,返回TBL24对应的下一跳信息, 若TCAM和RAM同时有下一跳信息返回,则下一跳地址为TCAM返回的路由信息。

TCAM的表项管理

路由表会随着网络拓扑结构的变化而改变,一般来说,在路由更新的同时,路由查找是不能进行的,因此我们希望路由更新的时间越小越好,而不同的表项管理算法带来的更新操作开销是不同的。

顺序移动法

从TCAM的低地址开始顺序排序,将所有的空闲空间存放在TCAM的高地址,如果我们需要插入一个表项,最简单的方法就是将比插入地址高的表项依次向空闲空间移动一位,这种方法效率很低,最差情况下的算法复杂度为O(N),N是目前TCAM中保存的表项数。

预留表项空间的顺序移动法

为了避免插入表项造成其他表项的大规模移动,可以为每个长度的前缀集合预留一些空闲的表项,当需要插入新表项时,如果对应前缀集合中包含空闲表项,则无需进行表项移动;如果不存在空闲表项,则需从相邻前缀集合中借用空闲表项。这种方法能够提高路由更新的平均效率,但是在最差情况下,更新算法的复杂度仍为O(N)。顺序移动法与预留表项空间的顺序移动法对比如图4所示(顺序移动法与预留表项空间的顺序移动法对比图):
顺序移动法与预留表项空间的顺序移动法对比图

选择移动法

根据最长前缀匹配,TCAM要求所有的路由按照前缀长度降序排列,令Pj代表前缀长度为j的路由集合,令Pk代表前缀长度为k的路由集合,若j>k,则,Pj的路由表项应该在Pk之前,但TCAM对各个路由前缀内部的顺序关系没有严格规定,因此当需要在TCAM中加入长度为k(8≤k≤32)的路由前缀时,首先从长度为8的前缀块开始,将前缀块的第一项移动到最后一项,即TCAM的空闲表项区,然后再将长度为9的前缀块中的第一项移动到这一个空闲表项处,以此类推,直到新加入表项加入到分配处的空闲表项即可,这种算法复杂度为O(W),W是路由前缀长度。

改进的选择移动法

将TCAM的空闲表项从TCAM的底部移动到TCAM的中间,算法的基本思想不变,此时算法的复杂度降低为O(W/2)。选择移动法与改进的选择移动法原理对比图如图5(选择移动法及其改进说明图):
选择移动法及其改进说明图

参考文献

[1]Pankaj Gupta,Steven Lin,Nick Mckeown.Routing lookups in Hardware at Memory Access Speeds[C].In:Proceeding of the IEEE INFOCOM,1998.
[2]殷科,邓亚平.基于RAM和TCAM存储结构的高速路由查找算[C].CNKI,2005
[3] D. Shah and P. Gupta, “Fast updating algorithms for TCAM,” in IEEE Micro, vol. 21, no. 1, pp. 36-47, Jan.-Feb. 2001.

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值