提到存储介质,大家应该很容易想到RAM。相比于RAM,CAM可能就显得有些陌生了。实际上,TCAM对于交换芯片非常重要。比如了解OpenFlow的人都知道流表,最典型的流表都是用TCAM来做的。TCAM,主要用于快速查找ACL、路由等表项。
它到底是个什么东西,起到什么样的作用呢?接下来我们慢慢聊。
TIP:
OpenFlow,一种网络通信协议,属于数据链路层,能够控制网上交换器或路由器的转发平面(forwarding plane),借此改变网络数据包所走的网络路径。
什么是CAM?
CAM是Content Addressable Memory的缩写,即“内容寻址存储器”的意思,它是在传统的存储技术的基础上实现的联想记忆存储器,关于CAM的基本操作有三种:
1)写操作:输入地址和数据,将数据写到指定的地址上,写入速度与RAM相同;
2)读操作:输入地址,返回该地址上的数据,读取速度与RAM相同;
3)查找操作:输入待查数据,返回该数据被存储的地址。这也是CAM的最主要用途,它能够从巨大的数据库中进行快速查找,并且返回最佳的匹配地址,最快查找速度能达到每秒一亿次以上。
CAM和RAM有何区别?
相对于CAM,我们可能更加熟悉RAM。SRAM、DRAM大家可能或多或少有所接触。
如果想了解更多关于存储相关的内容,可以查看我们的往期文章:
科普:什么是OTP?什么是MTP?
科普:RAM和ROM有什么区别?
言归正传,在本文中,我们不再花费太多笔墨去阐释RAM相关内容。我们将重点放在CAM上。
那么,RAM与CAM,有什么区别呢?举个例子。
一个表(table)被放在RAM中以便进行高速操作,提供一个地址并从表中获取与该地址相匹配的数据。然而,使用RAM进行查找可能需要多个周期来完成,它的速度不是很理想。
因此,CAM应运而生。在原理上,它反其道而行之,数据被当作搜索其所在地址的钥匙。根据CAM设计的性质,搜索是并行的,这意味着查找可以在一个周期内完成。这使得CAM更适合做数据表的查找,它的速度更快。
与具有简单存储单元的静态 RAM (SRAM) 不同,全并行 CAM 中的每个单独的存储位都必须具有与自身相关的比对电路,以检测存储位和输入位之间的匹配情况。此外,在使用 CAM 时,必须将数据字中每个单元的匹配输出组合起来,才能产生完整的数据字匹配信号。
因而在搜索层面,CAM具有性能优势,而代价则是需要更大的面积和更高的功耗。
CAM的分类
我们通常使用两种不同类型的CAM,分别为BCAM(Binary CAM)和TCAM(Ternary CAM)。
BCAM,顾名思义,是指数据为二进制状态,即0或1,数据搜索必须完全匹配。它适用于具有唯一条目的数据查询,如MAC地址查询。
而TCAM是Ternary Content Addressable Memory的缩写,即“三态内容寻址存储器”的意思,它是从CAM的基础上发展而来的。
这个“三态”,就非常有意思了。
一般的CAM存储器中每个bit位的状态只有两个,“0”或“1”,而TCAM中每个bit位有三种状态,除掉“0”和“1”外,还有一个“don’t care”状态,也可以称作“wildcard”,也可以表示为“X”,从中文理解,就是忽略的意思。所以称为“三态”,它是通过掩码来实现的。
正是TCAM的这个第三种状态特征使其既能进行精确匹配查找,又能进行模糊匹配查找,而BCAM没有第三种状态,所以只能进行精确匹配查找。
TCAM的实现除了有ASIC芯片外,还可以在FPGA上用IP核实现。
当涉及到路由时,“don’t care”的概念在很多方面都是有用的。
例如,当我们写下1.1.1.0/24时,它描述了从1.1.1.0到1.1.1.255的IP地址范围。数字24表示IP地址的前24位必须被匹配,而后8位是什么并不重要。
TIP:
路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。路由工作在OSI参考模型第三层——网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。
查找方式的对比:
基于SRAM的查找(传统查找方式)
1、线性查找
2、二叉树查找
3、HASH查找
基于TCAM的查找
基于硬件的实现,整个表空间Database在同一时刻被查询
TCAM之所以能做到一个bit表示三个值,原因是它的一条entry其实在物理上由两条entry组成,一条存放data,另外一条存放相应的mask。由此可以实现0/1/X的表示。有了TCAM,就可以支持各种LOOKUP KEY的任何组合查找,任意地MASK掉任何不关心的字段,只有TCAM可以做这样的事情,HASH做不到。
TCAM的查找特点
如果有多条TCAM ENTRY都能匹配上,TCAM优先选择INDEX最小的那一条。TCAM的查找效率与深度无关,也就是说,无论表项多大,查找速度是一样的,这跟TCAM的硬件实现方式有关。命中其中一条之后,就返回index,然后根据这个index去它对应的RAM里面查找进一步的关联数据。
TCAM在高端路由器中的应用及查找过程
为什么TCAM都不会太大
TCAM可以内置在芯片里面,也可以外挂在芯片之外,芯片通过接口去访问。但是内置TCAM非常占芯片面积,如果芯片内部放了太大的TCAM会导致芯片成本和功耗直线上升。所以一般芯片都不会内置太大TCAM。这就是为什么基于TCAM的流表做不大的原因。
外挂TCAM的成本和功耗一样很大,甚至比ASIC芯片本身都贵,而且如果一个报文要访问外部TCAM多次的话,受限于TCAM接口速率,会导致无法线速。所以一般交换机也都不会使用外挂TCAM。
TCAM的优势
1、单周期查找;
2、平均查找速度是基于SRAM算法查找的6倍;
3、最好情况下,查找速度提高128倍。
总而言之,TCAM实现了通用性和高速度。TCAM的最大优势,就是速度。
TCAM的缺点
TCAM具有速度快、实现简单的优点,但是它也有三个不足之处:
1、与一般的随机存储器RAM 相比,单位比特的TCAM 更为昂贵,而且存储芯片的容量相对要小一些;
2、由于TCAM 使用的是并行匹配比较方式,所以TCAM 芯片的功耗较大。查找过程所有关键字表项都进行了比较,但是实际能够匹配上的关键字只是几项,因此大部分的比较操作都被浪费了;
3、 TCAM 需要保证前缀较长的关键字保存在前缀较短的关键字之前,这种关键字之间的顺序关系使得TCAM的关键字更新工作变得相对复杂了。当加入一条新的表项时,为了能够仍然保持关键字间的顺序关系,就需要移动一些前缀长度比新表项要长的一些表项,因此TCAM 的更新操作较为复杂。
总结下来就是:成本高、功耗大、路由更新复杂。
关于TCAM器件的应用
TCAM器件在通信领域种有非常广泛的应用,主要有:
1、ATM Switching设备中的VCI/VPI转发和ATM-to-MPLS or ATM-to-TCP-Flow地址映射表项的存储和查找;
2、Ethernet Switching设备中的二层MAC地址、ARP/RARP解析和三层IP路由表项的存储和查找;
3、Emerging Protocols and functions方面的MPLS label表项的存储和查找;
4、Packet Classification业务中的Enforce security、Enforce departmental policies和QOS检测表项的存储和查找;
5、安全防护设备中的FIB/LBT、MFIB及ACL表项存储和查找。
TCAM器件的硬件设计方式一般有三种:
关于ACL
访问控制列表ACL(Access Control List)是由一条或多条规则组成的集合。所谓规则,是指描述报文匹配条件的判断语句,这些条件可以是报文的源地址、目的地址、端口号等。
ACL本质上是一种过滤器,规则是过滤器的滤芯。设备基于这些规则进行报文匹配,可以过滤出特定的报文,并根据应用ACL的业务模块的处理策略来允许或阻止该报文通过。
访问控制列表被广泛地应用于路由器和三层交换机,借助于访问控制列表,可以有效地控制用户对网络的访问,从而最大程度地保障网络安全。
TIP:
报文(message)是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。
应用场景
-匹配IP流量(可基于源,目的IP地址,协议类型,端口号等类型)
-在Traffic-fiter中被调用
-在NAT中被调用
-在路由策略调用
-在IPSec VPN中被调用
-在防火墙的策略部署中被调用
-在QoS中被调用
分类
目前遇到最多就是基本acl和高级acl,其他种类acl很少见。
ACL/路由表/Mac表跟TCAM的关系
普通交换机中的ACL功能必须使用TCAM,所以内置TCAM省不掉。而对于路由,以前的芯片也都用TCAM来做(主机路由除外),所以路由表项也做不大。现在最新的商业芯片都已经使用算法来支持路由了,这样就可以使用RAM来做路由。至于Mac表,它的查找是根据Mac+Vlan进行精确匹配,可以用Hash来做,所以跟路由一样,都存放在RAM里面。
编辑:黄飞
评论
查看更多