提到存儲介質,大家應該很容易想到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里面。
編輯:黃飛
?
評論
查看更多