專利名稱:基于tcam的解決范圍匹配的并行ip包分類器及方法
技術(shù)領(lǐng)域:
IP包分類是計算機網(wǎng)絡(luò)應(yīng)用的關(guān)鍵技術(shù)之一,被應(yīng)用在路由器,交換機等網(wǎng)絡(luò)設(shè)備中;他的任務(wù)是根據(jù)需要轉(zhuǎn)發(fā)的IP包的包頭信息以及路由器內(nèi)分類規(guī)則表對該IP包進行分類,得到每個IP包的優(yōu)先級或者相應(yīng)的處理動作;本發(fā)明屬于計算機網(wǎng)絡(luò)技術(shù)領(lǐng)域。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,各種新的網(wǎng)絡(luò)應(yīng)用不斷涌現(xiàn),包括相當(dāng)多對網(wǎng)絡(luò)服務(wù)質(zhì)量敏感的流媒體應(yīng)用。網(wǎng)絡(luò)提供商越來越需要對他們提供的網(wǎng)絡(luò)傳輸服務(wù)資源按照客戶應(yīng)用的要求(比如對傳輸質(zhì)量的要求)進行更合理的管理和分配。同時網(wǎng)絡(luò)提供商也希望能夠根據(jù)某些經(jīng)濟原則(如付費原則)或者安全規(guī)則(如防止黑客)對網(wǎng)絡(luò)的流量實現(xiàn)監(jiān)控和管理。這些都需要網(wǎng)絡(luò)設(shè)備提供可以對IP數(shù)據(jù)包進行分類的能力。IP包分類器,或流分類器應(yīng)運而生。
流分類器的主要工作原理是它首先提取每個進入網(wǎng)絡(luò)設(shè)備的IP數(shù)據(jù)包的一些相關(guān)特征信息,這些信息主要包含在IP包(或其上層的TCP/UDP報文)的包頭協(xié)議域,如目的IP地址,源IP地址,TCP/UDP的目的端口號,源端口號,高層的協(xié)議類型號等等。然后分類器根據(jù)提取的IP包的相關(guān)信息在預(yù)先設(shè)定好的流分類規(guī)則庫內(nèi)進行匹配查找,尋找與該IP包最為匹配/吻合的規(guī)則,然后根據(jù)該規(guī)則的要求對此IP進行處理,比如丟棄該IP包,按高優(yōu)先級轉(zhuǎn)發(fā)該IP包,或按低優(yōu)先級轉(zhuǎn)發(fā)該IP包,等等等等。
一方面,由于分類器需要對付各種IP包的信息域(每種信息域需要按照不同的原則匹配,例如前綴匹配,范圍匹配,精確匹配等等),使得分類器的實現(xiàn)相當(dāng)復(fù)雜;另一方面,由于IP包的分類需要對每一個進入網(wǎng)絡(luò)設(shè)備(比如路由器)的IP包都進行,最壞情況下(最短的即40字節(jié)的IP包,100%的流量負(fù)荷),對于10Gbps(10千兆位每秒)的接口需要每秒處理25兆個包;而對于40Gbps的接口需要處理100兆個IP包。這2點使得能滿足高端要求的流分類器的實現(xiàn)相當(dāng)困難。
傳統(tǒng)的基于軟件(微代碼+高性能的CPU)的分類方法由于效率較低,根本不能滿足高端的IP包分類器的設(shè)計需求。主要的原因是這些算法通常需要很多次的內(nèi)存交互,來訪問查找分類規(guī)則庫,而內(nèi)存訪問的速度是很難被提高的。
TCAM(Ternary Content Accessible Memory),即三元內(nèi)容尋址內(nèi)存,是一種新穎的存儲器,他不但可以實現(xiàn)對某個關(guān)鍵字基于內(nèi)容的(在數(shù)據(jù)庫內(nèi))全并行查找,還支持帶有掩碼的查找。這種新穎的存儲器首先是被運用在“基于最長前綴匹配的IP路由查找”,它可以實現(xiàn)對于一個32bit(位)的IP地址,一次TCAM訪問就可以得到結(jié)果的性能。由于IP路由查找和IP包分類有很多相似點,不少人考慮把TCAM也引入到IP包分類器的實現(xiàn)上來。但我們發(fā)現(xiàn),這其中存在不少問題,例如
1)通常的TCAM的數(shù)據(jù)寬度是72比特(如CYRESS芯片公司[http://www.cypress.com/]和IDT芯片公司[http://www.IDT.com/]的所有TCAM產(chǎn)品),而IP包分類需要匹配的信息通常都遠(yuǎn)遠(yuǎn)大于72比特,例如用我們前面提到的5個信息域,總共需要104比特,這導(dǎo)致需要2個或者多個TCAM訪問周期來送匹配關(guān)鍵字,會導(dǎo)致分類吞吐量的成倍下降。當(dāng)前最快的TCAM可以工作在133MHz,如果一個IP包需要2個TCAM訪問周期的話,分類器每秒最多只可以完成133/2=67M個IP包,滿足不了40Gbps線卡的要求(100M個包);2)TCAM能夠很好的支持基于前綴匹配的信息域,因此TCAM可以很好的被應(yīng)用在基于最長前綴匹配的IP路由查找問題上。但TCAM卻不能很好的支持范圍匹配(包含TCP/UDP的端口號范圍的規(guī)則需要運用這種匹配方式),直接的后果就是,一條含有范圍匹配的規(guī)則,可能需要多條TCAM表項來表示(關(guān)于TCAM不支持范圍匹配的說明請見附錄),使得TCAM的利用率大大降低。要知道,TCAM是一種很昂貴的,而且集成度很低的存儲器。利用率低不但導(dǎo)致需要很高的成本,而且很有可能導(dǎo)致基于TCAM的方案不能支持較大的規(guī)則庫。
以上2個問題目前都沒有被很好的解決,或者說沒有同時解決(要知道,其中任何一條都導(dǎo)致基于TCAM的方案不可行),只有很少數(shù)試圖解決第二個問題的研究(1)利用簡單的編碼方式,對某些需要多條TCAM表示的范圍進行編碼,相當(dāng)于“用寬度換取深度”,從而減少TCAM的表項數(shù)目[Huan Liu,″Efficient Mapping of RangeClassifier into Ternary-CAM″,Proceedings of the 10TH Symposium on High PerformanceInterconnects Hot Interconnects(HotI’02),2002.],弊端編碼過程不可以控制,甚至可能或產(chǎn)生負(fù)面效果;因為規(guī)則被編碼,導(dǎo)致待查找的關(guān)鍵字也需要編碼,需要額外的硬件來對每個IP包相關(guān)的端口號進行編碼。
(2)在前面這個算法的基礎(chǔ)上改進,利用某些本來就浪費的TCAM比特位來編碼[H.Che,Z.Wang,K.Zheng,and B.Liu,“DRES:Dynamic Range Encoding Scheme for TCAMCoprocessors,”http://crewman.uta.edu/~zwang/dres.pdf.],同時考慮哪些范圍最需要被編碼,可以很好的控制編碼的效率,避免產(chǎn)生負(fù)面效果;采用TCAM本身完成對待查找的IP包信息域的編碼,不需要額外硬件;但是,編碼也用TCAM,降低了TCAM的可用帶寬,使得原來就不足的帶寬資源更不足,因而它不能實現(xiàn)高端的要求。
與目前現(xiàn)有的解決方案對比,我們設(shè)計的基于TCAM的流分類器的先進性和新穎性在于,它首先利用了一種分布式并行的技術(shù)大大的提高了TCAM的處理吞吐量,同時不需要明顯的額外的開銷,而且他很好的結(jié)合了上述第二種算法提到的編碼方式,很好的解決了范圍匹配的問題,同時也滿足高端處理能力的需求。不但如此,我們還在此基礎(chǔ)上提供了一個很完美的在各個并行TCAM芯片之間流量均衡策略,使得該方案提供的吞吐量有很好的穩(wěn)定性。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一個高吞吐量、穩(wěn)定性好且同時又解決了端口域范圍匹配問題的基于TCAM的并行IP包分類器。本發(fā)明的特征在于,它含有路由器負(fù)責(zé)維護和管理的CPU,它通過運行分布式規(guī)則表生成算法,把IP包分類規(guī)則表劃分成K個分布式的子規(guī)則表,同時對規(guī)則的端口域進行編碼,同時生成關(guān)鍵字編碼表,并把編碼后的分布式子規(guī)則表和關(guān)鍵字編碼表送到TCAM(和與其配套的SRAM)進行存儲;K個三元基于內(nèi)容尋址的存儲器,即K個TCAM,每個TCAM內(nèi)存有一個由上述路由器CPU劃分成的分布式子規(guī)則表和一個關(guān)鍵字編碼表,對待分類的IP包的關(guān)鍵字進行分類和范圍域的編碼。
K個SRAM,用于存儲每個分類規(guī)則對應(yīng)的實施動作的代碼;并行分類器的控制部分,他是一個現(xiàn)場可編程門陣列,即FPGA芯片,他含有一個IP包緩沖器,緩沖待分類的IP包;一個集中分配器,它內(nèi)存有各個TCAM內(nèi)存放的由路由器CPU告知的分布式子規(guī)則表的信息,它負(fù)責(zé)提取待分類的IP包的關(guān)鍵字,并根據(jù)分布式子規(guī)則表在各個TCAM內(nèi)存放的信息,把待分類IP包的關(guān)鍵字分配給對應(yīng)的TCAM進行分類查找,同時根據(jù)各個TCAM的負(fù)載情況,自適應(yīng)均衡的把對IP包待編碼的端口信息域的編碼的任務(wù)分配給各個TCAM;他的輸入端連接IP包緩沖器的輸出端;K個關(guān)鍵字緩沖器,它們是用來緩存待分類但還沒有編碼的IP包的關(guān)鍵字,它們各自的輸入端與上述的集中分配器的對應(yīng)輸出端相連;K個待編碼信息緩沖器,它們是用來緩存IP包關(guān)鍵字中需要編碼的端口域信息;它們各自的輸入端與上述的集中分配器的對應(yīng)輸出端相連;K個調(diào)度器,他們各自的2個輸入端分別與上述的K個關(guān)鍵字緩沖器、K個代編碼信息緩沖器的相應(yīng)輸出端相連,他們各自的一個輸出端與上述相應(yīng)的一個TCAM的輸入端相連,他負(fù)責(zé)安排和調(diào)度對應(yīng)的TCAM的訪問;K個編碼結(jié)果存儲器,它們各自的輸出端與上述相應(yīng)的調(diào)度器的輸入端相連;一個編碼返回器,他的編碼結(jié)果的輸出端與上述各編碼結(jié)果存儲器的輸入端相連;他還有一個最終分類結(jié)果的輸出端。
從本申請文件提供的IP包分類吞吐量和待查找IP包負(fù)荷的變化曲線可見,采用4片工作在133MHz的TCAM時,本分類器可以實現(xiàn)接近40Gbps的線速包分類,并且分類吞吐量曲線和輸入IP包負(fù)荷有很好的線性關(guān)系。
圖1一個簡單的規(guī)則表和其中的規(guī)則圖2對一個現(xiàn)實規(guī)則庫ID位選擇的結(jié)果圖3分布式規(guī)則表的生成算法流程圖4對規(guī)則范圍域的編碼示意。不同顏色代表不同的域4a要存儲的規(guī)則。
4bTCAM內(nèi)每個表項(2個內(nèi)存字)存放規(guī)則信息域的安排。
4c不采用編碼時,每個表項144比特,這個規(guī)則占用6個表項。
4d編碼后,每個表項仍然144比特,但這個規(guī)則只需要1個表項。
圖5自適應(yīng)均衡的并行IP包分類方案]圖6設(shè)定的16個關(guān)鍵字ID組的等效訪問頻率分布圖7關(guān)鍵字編碼方案示例。
7a有三個要編碼的范圍。
7b根據(jù)這三個要編碼的范圍生成的關(guān)鍵字編碼表。
圖8IP包分類和待查找IP包負(fù)荷的變化曲線(按照40Gbps速度的百分比算)圖9并行IP包分類流程圖。
具體實施例方式
IP包分類器的設(shè)計主要包含2個組成部分一個是把所給出的規(guī)則庫按照一定的原則存放到存儲器(在我們的設(shè)計里即TCAM)芯片里,也就是規(guī)則表的組織;另一個是設(shè)計一個IP包分類器的流程,即對于每個IP包,如何把其信息域,即關(guān)鍵字,送到規(guī)則表內(nèi)匹配查找,得到與規(guī)則匹配而且優(yōu)先級最高的規(guī)則,根據(jù)規(guī)則給IP包打上標(biāo)記,以便后面進行處理。
相應(yīng)的,對于我們的發(fā)明內(nèi)容也分為2部分,第一部分是分布式規(guī)則表的生成和規(guī)則中范圍域的編碼;第二個是自適應(yīng)均衡的并行IP包分類方案。
一、分布式規(guī)則表的生成現(xiàn)行的基于TCAM的分類器只采用一個TCAM芯片,由于一個IP包分類需要占用2次(或更多的)TCAM訪問,造成目前的TCAM速度不能滿足高端的要求。因此要解決這個問題,必須采用多塊TCAM同時并行的處理多個IP包來提高吞吐量。但如果簡單的把所有的規(guī)則都復(fù)制到這些TCAM里來實現(xiàn),那么很顯然我們就需要成倍的增加TCAM的需求量,這顯然是不可行的。
我們的新穎就在于,我們考慮把規(guī)則庫進行分割,把分割后的規(guī)則子集分別存放在各個TCAM里面,這樣就不會產(chǎn)生冗余了,而且多個IP包可以同時在多個TCAM內(nèi)被匹配查找。大大提高吞吐量。但要實現(xiàn)這個方案,仍存在幾個很嚴(yán)峻的問題1)我們要保證被分到每個TCAM的哪些規(guī)則可以保證一個查找的完整性,也就是不能存在一個IP包匹配了在其中一個TCAM的某個規(guī)則,而在其他的TCAM內(nèi)也有別的規(guī)則和這個IP包匹配(和任何一個IP包匹配的規(guī)則必須都存放在一個TCAM內(nèi));2)我們要盡量保證被儲存在各個TCAM內(nèi)的規(guī)則數(shù)目差不多,這樣才可以保證TCAM的利用率,否則某些TCAM滿了,其他一些還很空;3)我們應(yīng)該保證,被分到各個TCAM的IP包分類的任務(wù)量接近,否則在查找過程中某些TCAM可能負(fù)擔(dān)過重,而另外一些則可能沒有任務(wù)。
我們的發(fā)明方案就是圍繞這三個問題展開的,這里,我們首先需要先給出一些符號定義,然后我們在給出設(shè)計思路和具體的算法流程說明。
符號說明1)對于每一條規(guī)則,它包含5個匹配域,相應(yīng)的處理動作和該規(guī)則的優(yōu)先級這3類信息。5個匹配域包括源IP地址前綴,目的IP地址前綴,協(xié)議代號,TCP/UDP源端口范圍和TCP/UDP目的端口范圍。圖一給出了一個常規(guī)規(guī)則表的示例。
2)每條規(guī)則的源IP地址前綴,目的IP地址前綴,協(xié)議代號這3個域都可以表示成“三態(tài)比特串”的形式,所謂“三態(tài)比特串”就是一個在“0,1,*”這3種符號間選擇的比特串。例如圖一第一個規(guī)則的源IP前綴“166.111.*.*”,可以表示成一個“三態(tài)畢特串”“10100110.01101111.********.*******”。正是因為這樣,這三個可以表現(xiàn)為“三態(tài)畢特串”的域才可以直接存放在TCAM內(nèi)。
我們定義從一個規(guī)則的這3個域(源IP地址前綴,目的IP地址前綴,協(xié)議代號)中P個指定位置提取的P個三態(tài)比特叫做該規(guī)則的規(guī)則ID。例如,如果定義源IP前綴的第1(左邊起是第1)和第24位以及目的IP地址前綴的第24位這3個位置為指定位置,那么圖一中規(guī)則第1-5條規(guī)則ID分別是1**,10*,11*,**0,***。
3)從一個要分類的IP包提取出來的分類信息我們把它叫做關(guān)鍵字。相應(yīng)的,它包含這個IP包的5個包頭信息域源IP地址,目的IP地址,協(xié)議類型號,TCP/UDP源端口號和TCP/UDP目的端口號。(注意這里的IP是“地址”不是“前綴”,端口是“號”,不是“范圍”)。
4)每個關(guān)鍵字的源IP地址,目的IP地址和協(xié)議代號這3個域都可以表示成一個“兩態(tài)比特串”的形式。例如一個IP地址166.111.0.1可以表示成一個“兩態(tài)比特串”“10100110.01101111.00000000.00000001”。
對應(yīng)的,我們定義從一個關(guān)鍵字,對應(yīng)于規(guī)則ID那P個位置提取出來的P個兩態(tài)比特,叫做該關(guān)鍵字的關(guān)鍵字ID。例如仍然定義源IP前綴的第1(左邊起是第1)和第24位以及目的IP前綴的第24位這3個位置為指定位置,那么關(guān)鍵字“166.111.0.1,202.112.0.1,80,1024,11”的關(guān)鍵字ID就是110。
5)我們定義擁有相同規(guī)則ID的規(guī)則組成的集合為一個規(guī)則ID組。例如圖一中的5個規(guī)則,由于他們的規(guī)則ID都不同,所以分別屬于5各不同的規(guī)則ID組。
6)我們定義2個比特串匹配當(dāng)且僅當(dāng)這2個比特串對應(yīng)的比特都滿足1)相同或2)其中一個為″*″(即任意,或者通配符)。
7)我們定義擁有能夠匹配同一個關(guān)鍵字ID的規(guī)則ID的那些規(guī)則組成的集合為一個關(guān)鍵字ID組。例如對于一個關(guān)鍵字ID“110”,圖一中的第1,3,4,5這4個規(guī)則的規(guī)則ID都可以和它匹配,所以這4個規(guī)則屬于同一個關(guān)鍵字ID組。
定理只要1)保證一個關(guān)鍵字ID組被存放在同一個TCAM內(nèi),2)每個關(guān)鍵字都被送到存放對應(yīng)關(guān)鍵字ID組的TCAM進行查找,就可以保證對于某個IP包查找/匹配的完整性。
證明因為1)如果某個規(guī)則和某個關(guān)鍵字匹配,一個必要條件是這個規(guī)則的規(guī)則ID和這個關(guān)鍵字的關(guān)鍵字ID匹配;2)那些不屬于某個關(guān)鍵字ID組的規(guī)則,不可能匹配擁有該關(guān)鍵字ID的關(guān)鍵字,因為根據(jù)定義和1),所有能匹配該關(guān)鍵字匹配的規(guī)則都屬于該關(guān)鍵字ID組。因此只要我們把一個待查找的關(guān)鍵字送到存放對應(yīng)關(guān)鍵字ID組的TCAM去查找就可以保證匹配查找的完整性。
到此為止,我們知道只要按照關(guān)鍵字ID組為單位來存放規(guī)則,就可以解決查找完整性的問題。接下來,我們解決如何保證存放在各個TCAM的規(guī)則盡可能一樣和如何盡量保證被分配到各個TCAM的匹配查找任務(wù)盡可能均衡的問題。
對于平均分配規(guī)則到各個TCAM的要求,我們注意到,只要盡可能的保證各個關(guān)鍵字ID組包含的規(guī)則數(shù)接近,而且被分配到各個TCAM的關(guān)鍵字ID組的個數(shù)相等,那么就可以較好的保證。在我們的發(fā)明里,我們是通過對ID比特串指定位置的選擇首先解決了使各個關(guān)鍵字ID組包含的規(guī)則數(shù)接近的問題。給定一個參數(shù)P,我們通過對各種P比特串組合指定位置的測試(因為可以作為ID位的位置有32+32+8=72個,因此這個測試要做C72P次),看看在每種選擇下的,各個關(guān)鍵字ID組內(nèi)規(guī)則數(shù)的分布情況,通過比較選擇出其中最佳的分配。圖二給出了一個對一個真實IP包分類數(shù)據(jù)庫[索引]ID位選擇的結(jié)果。在這個測試?yán)铮繕?biāo)規(guī)則庫有1550個規(guī)則,我們指定P=4。也就是說我們需要對C724種組合進行測試,會得到24=16個關(guān)鍵字ID組。最后的結(jié)果是當(dāng)選擇目的IP地址前綴的第1和第21位,源IP地址前綴的第4位以及協(xié)議類型的第5位時結(jié)果最好,如圖二所示,每個關(guān)鍵字ID組的大小已經(jīng)比較接近了。
接下來,分布式規(guī)則表的生成還剩2個問題沒有解決,即1)是要把這些關(guān)鍵字ID組平均分配到各個TCAM內(nèi)(這樣就可以保證每個TCAM得到的規(guī)則數(shù)接近,提高利用率),2)保證每個TCAM分得的查找任務(wù)量在宏觀上要盡可能接近,避免由于不均衡帶來的擁塞。在我們的發(fā)明里,我們通過一個叫做分布式規(guī)則表生成算法的方案來同時解決這2個問題。(可以證明,這是一個NP難的問題,所以所有可行的解法都只能是近似最佳的解法,我們的方法也一樣。)為了介紹這個算法,我們?nèi)匀恍枰冉榻B一下有關(guān)的定義8)我們定義Qk代表被分到第k個TCAM的關(guān)鍵字ID組的集合,k=1,2,...,K,其中K是系統(tǒng)中TCAM的個數(shù);W[j]為擁有第j個關(guān)鍵字ID的關(guān)鍵字在所有關(guān)鍵字里出現(xiàn)的頻率/概率(這個可以通過統(tǒng)計方法獲得),j=1,2,...,2P。他代表第j個關(guān)鍵字ID組的等效訪問頻率,這個頻率越高,那么裝有這個關(guān)鍵字ID組的TCAM需要負(fù)荷的任務(wù)就越重。
RM[k]為分配到第k個TCAM內(nèi)所有的關(guān)鍵字ID組對應(yīng)的等效訪問頻率,k=1,2,...,K。它數(shù)值上等于被分配到第k個TCAM內(nèi)的關(guān)鍵字ID組的等效訪問頻率值和。
G[k]為被分配到第k個TCAM的關(guān)鍵字ID組的個數(shù),k=1,2,...,K。
分布式規(guī)則表的生成算法流程參見圖三,我們具體描述如下第一步初始化。把所有決策變量復(fù)位,包括決策變量Qk(k=1,2,...,K),目標(biāo)(相關(guān))值RM[k](k=1,2,...,K)和一些中間變量。
第二步分配關(guān)鍵字ID組到TCAM。
首先,我們將所有關(guān)鍵字ID組按照W[j]的大小從大到小排隊,先分配W[j]值大的組,后分配小的組,這樣做的好處是到了分配的后半階段,我們可以更好的利用W[j]值小的這些組來均衡(大的不利于調(diào)節(jié))。
在分配每個關(guān)鍵字ID組的時候,我們需要對TCAM,根據(jù)他們當(dāng)前RM[k]的值從小大大排序,優(yōu)先把目前要分配的關(guān)鍵字ID組分配給RM[k]較小的TCAM。這樣可以盡可能保證匹配查找任務(wù)均衡的分配。每分配完一個關(guān)鍵字ID組到某個TCAM,這個TCAM對應(yīng)的Qk,RM[k]就會被更新。接下來就是分配下一個關(guān)鍵字ID組。直到所有組被分完為止。
第三步根據(jù)Qk,實現(xiàn)分配。
二、對規(guī)則中范圍域的編碼以及相應(yīng)的生成關(guān)鍵字編碼表范圍匹配造成一個規(guī)則可能需要多個TCAM表項存儲的問題。我們舉一個簡單的例子來說明。同時,請參考圖1中關(guān)鍵字編碼表生成的例子中,一個范圍需要用多個TCAM表項表示的例子。
我們知道,TCAM儲存的“字”是“三態(tài)比特串”,也就是說,一個TCAM字可以表示一個三態(tài)比特串,例如所有的前綴都可以表示為一個三態(tài)比特串,因此一個前綴可以用一個TCAM表項來存儲。與此相反,一個端口范圍往往不能用一個三態(tài)比特串來表示,需要多個表示。例如端口范圍{>1023}(或{1024-65535})就不可以用一個三態(tài)比特串來表示,他需要至少6條三態(tài)比特串來表示,如下表表1表示范圍{>1023}所需要的6個三態(tài)比特串
表中右邊表示2進制數(shù)的低位,左邊高位?!?″代表任意。要覆蓋從1024到65535所有這些端口值,至少要這6個三態(tài)比特串表示。因此擁有{>1023}的規(guī)則同樣至少需要6個TCAM表項存儲。但是,更嚴(yán)重的是,我們注意到,每個規(guī)則有2個范圍匹配類型的域,即源端口范圍和目的端口范圍。因此,如果某個規(guī)則的這兩個域包含的范圍都需要多個三態(tài)比特串來表示,例如源端口范圍需要N個三態(tài)比特串,目的端口范圍需要M個的話,那么這個管子就至少需要M*N條TCAM表項來存儲。這就意味著TCAM的需求量將會由于TCAM不直接支持范圍匹配而爆炸性的增長。這就是我們不得不解決他的原因。
如上所述,由于某些規(guī)則包含一些范圍,這些范圍不能用一個“三態(tài)比特串”來表示,所以這些規(guī)則可能需要很多的TCAM表項來存儲,消耗很多的成本。對于這些范圍的編碼是解決浪費的一個有效的辦法。
在我們的發(fā)明中,我們注意到,通??缮逃玫腡CAM芯片,數(shù)據(jù)寬度是72比特,因而他只支持寬度是72整倍數(shù)的關(guān)鍵字的查找。要是關(guān)鍵字不是72比特的整倍數(shù),那么勢必會形成一些浪費的比特。例如我們涉及的5個IP包信息域共需要23+32+16+16+8=104比特,72<104<72*2,因此一個規(guī)則起碼占用2個TCAM的字寬,同時多出來的72*2-104=40個比特則被浪費。我們正是利用這40個被浪費的比特來對范圍域進行編碼。我們稱這40比特為可用編碼比特。
規(guī)則的編碼的原理如圖4所示一條規(guī)則要104比特,需要占用2個TCAM字,即144比特。圖4a給出了一個我們需要存放的規(guī)則例子。假設(shè)TCAM內(nèi)每個表項(2個內(nèi)存字)存放規(guī)則信息域的安排如圖4b所示。那么在沒有編碼前,由于這條規(guī)則的源端口范圍包含有{>1023}這個規(guī)則,因此要存儲這個規(guī)則需要6個表項(共計12個內(nèi)存字),如圖4c所示。假設(shè)我們定義40個可用編碼比特的第一位來代表源端口范圍{>1023},那么現(xiàn)在我們只需要用一個表項來儲存這個規(guī)則,從而達到減少TCAM使用量的作用。
另一方面,通過對真實規(guī)則庫的分析我們發(fā)現(xiàn),現(xiàn)實的應(yīng)用中,需要編碼的范圍其實并不多,40個可用編碼比特其實足夠用了。而我們并不滿足于此,我們采用優(yōu)先對那些造成更多開銷的范圍進行編碼,這樣,就算在很極端的情況40比特不夠用,我們?nèi)钥梢员WC盡可能有效的利用這40比特降低TCAM的使用量。
關(guān)鍵字的編碼表的生成為了實現(xiàn)編碼,除了對規(guī)則進行編碼外,我們對待查找的關(guān)鍵字也需要進行調(diào)整/編碼。方法很簡單,我們對于每一個待查找的關(guān)鍵字,我們需要先檢查他的2個端口域,看看這2個端口值有沒有落到某些需要編碼的范圍里面,如果落在了,那么對應(yīng)于需要編碼的范圍的位置(也就是關(guān)鍵字的第105-144這40個比特)上的比特被置為‘1’,當(dāng)這個端口值同時落在了多個需要編碼端口的范圍內(nèi),那么相應(yīng)的“可用編碼比特”的所有對應(yīng)位置都要置成‘1’;相反,如果該端口沒有落到某個需要編碼的端口范圍內(nèi),那么“可用編碼比特”的對應(yīng)位就是‘0’。
例如,我們用“可用編碼比特”的第一位代表源端口范圍{>1023},第二位代表源端口范圍{256-1023},第三位代表源端口范圍{0-513}。如果某個關(guān)鍵字的源端口號是258,那么它落在了范圍{0-513}和{256-1023}內(nèi),所以,關(guān)鍵字的可用編碼比特的第1,3位應(yīng)該為‘1’,而第2位為‘0’。在我們的發(fā)明中,這個任務(wù)是用TCAM本身來完成的,每個TCAM都有一個關(guān)鍵字編碼表,用來對關(guān)鍵字按照上面提到得方法進行編碼(具體的實現(xiàn)方法見“具體注意到用TCAM來做關(guān)鍵字的編碼雖然實現(xiàn)簡單,但這會降低TCAM的可用帶寬。而由于我們結(jié)合了分布式并行的分類技術(shù),他們可以得到互補,從后面的分析我們可以發(fā)現(xiàn),采用4個TCAM并行,就可以滿足40Gbps的線卡要求,計算用TCAM本身來做關(guān)鍵字編碼。
三、自適應(yīng)均衡的并行IP包分類方案有了分布式規(guī)則表的生成算法,我們就可以利用并行的方式同時對多個IP包進行匹配查找,大幅度的提高吞吐量,另一方面也補足了用TCAM做關(guān)鍵字編碼帶來的影響。
總體設(shè)計如圖五所示每個要分類的IP包首先會被裝入IP包緩沖器。接下來,集中分配器從IP包緩沖器調(diào)出一個包,提取他的5個信息域和關(guān)鍵字ID;然后根據(jù)關(guān)鍵字ID,得知當(dāng)前這個IP包應(yīng)該送到哪一個TCAM進行匹配查找(即存放有對應(yīng)關(guān)鍵字ID組的那個TCAM),并把相關(guān)信息送到這個TCAM對應(yīng)的關(guān)鍵字緩沖器內(nèi)。接下來,集中分配器還需要把這個關(guān)鍵字的端口域送到某個TCAM進行編碼。所謂的自適應(yīng)均衡就在這一步進行。由于每個TCAM都有一個關(guān)鍵字編碼表,所以對任何一個關(guān)鍵字的編碼可以在任何一個TCAM內(nèi)進行(不同于規(guī)則庫)。調(diào)度器會根據(jù)當(dāng)前各個TCAM的負(fù)載程度,選擇其中負(fù)載最輕的一個TCAM來對關(guān)鍵字進行編碼,并將相關(guān)的信息送到這個TCAM對應(yīng)的調(diào)度器的待編碼信息緩沖器中。每個TCAM對應(yīng)一個調(diào)度器,他負(fù)責(zé)管理TCAM的工作。每當(dāng)有關(guān)鍵字編碼任務(wù)時,他就從對應(yīng)的待編碼信息緩沖器取出要編碼的端口信息,送到TCAM進行編碼。TCAM編碼的結(jié)果被編碼返回器返回到對應(yīng)調(diào)度器的編碼結(jié)果存儲器里。TCAM對應(yīng)的調(diào)度器發(fā)現(xiàn)編碼結(jié)果返回時,他就(1)從關(guān)鍵字緩沖器取出待查關(guān)鍵字;(2)從編碼結(jié)果存儲器里取出對端口域的編碼結(jié)果,將他們組合起來送入TCAM查找,并返回最終分類結(jié)果。
每個模塊的具體功能描述1)IP包緩沖器是先進先出的雙端口存儲器,用于緩沖存儲待分類的IP包;2)關(guān)鍵字緩沖器是先進先出的雙端口存儲器,用于緩沖存儲待分類但還沒有編碼的關(guān)鍵字。
3)待編碼信息緩沖器是先進先出的雙端口存儲器,用于緩沖存儲每個IP包需要編碼的端口域信息;4)編碼結(jié)果存儲器用于存儲完成IP包端口信息在TCAM內(nèi)進行編碼的結(jié)果;5)集中分配器它主要負(fù)責(zé)3個任務(wù)第一提取每個待分類的IP包的信息;第二根據(jù)各個TCAM當(dāng)前的負(fù)荷情況,確定其中最空閑的一個,把當(dāng)前(IP包的)關(guān)鍵字的編碼任務(wù)交給他(放入它對應(yīng)的待編碼信息緩沖器內(nèi));第三根據(jù)當(dāng)前IP包關(guān)鍵字的關(guān)鍵字ID確定,當(dāng)前的關(guān)鍵字應(yīng)該送入哪一個TCAM進行匹配查找,并把關(guān)鍵字放入其對應(yīng)的關(guān)鍵字緩沖器內(nèi),等待編碼結(jié)果返回,一并送入TCAM進行查找。
6)調(diào)度器每個TCAM有一個處理專門負(fù)責(zé)管理這個TCAM的工作調(diào)度。它主要有2個任務(wù)第一當(dāng)發(fā)現(xiàn)有需要編碼的任務(wù)時,從對應(yīng)的待編碼信息緩沖器取出需要編碼的端口信息,送到TCAM進行編碼;第二當(dāng)發(fā)現(xiàn)有編碼結(jié)果從編碼結(jié)果返回器返回時,從關(guān)鍵字緩沖器取出對應(yīng)關(guān)鍵字與返回的編碼結(jié)果一起送入TCAM進行匹配查找。
7)編碼返回器它的主要任務(wù)是判斷從各個TCAM返回的結(jié)果是編碼結(jié)果還是匹配查找結(jié)果。要是編碼結(jié)果,他就將結(jié)果送到對應(yīng)的編碼結(jié)果存儲器內(nèi);要是匹配查找結(jié)果,他就將這作為最終結(jié)果返回。
8)TCAM和配套的SRAM實現(xiàn)IP包分類的最基本存儲器,TCAM用來放規(guī)則的匹配域,SRAM(靜態(tài)隨機存儲器)用來放規(guī)則對應(yīng)的實施動作。(所有基于TCAM的查找裝置都必須有SRAM和他配套)詳細(xì)流程我們采用CYPRESS公司型號為CYNSE70128的TCAM芯片來進行具體的實施示范??刂撇糠帜K采用Altera公司的FPGA(EP2A70)。CYPRESS的這款TCAM工作在133兆Hz,對于我們的發(fā)明,每個IP包分類需要2次TCAM訪問,因此一個TCAM可以實現(xiàn)大約每秒66兆次的包分類;單個TCAM的容量是64K*72bit約為570KByte,約支持32K條規(guī)則的存儲(因為關(guān)鍵字編碼表較小,所以忽略),當(dāng)所有表項同時進行匹配時最大功耗是8瓦。
對于一個有100K條規(guī)則的規(guī)則庫1)我們采用4個TCAM芯片(CYNSE70128)(4個共支持大約120K條規(guī)則,多于100K條,有些富裕,允許各個TCAM分得的規(guī)則數(shù)有少量的不平均);2)假設(shè)我們采用4位寬的ID比特。首先,我們通過遍歷所有72個位置(即32位目的IP前綴,32位源IP前綴和8位協(xié)議號)里4個的組合,挑選其中能夠使關(guān)鍵字ID組劃分最平均的一個組合,作為ID比特位置,把規(guī)則集劃分成24=16個關(guān)鍵字ID組。
3)假設(shè)16個關(guān)鍵字ID組的等效訪問頻率分布如圖六所示(我們有意設(shè)計一個不均勻得分布,這樣可以體現(xiàn)我們發(fā)明的調(diào)節(jié)能力),根據(jù)分布式規(guī)則表的生成算法,得到關(guān)鍵字ID組在4個TCAM內(nèi)的分配Q1={2,15,13,O};Q2={12,8,9,11};Q3={6,5,3,14);Q4={7,10,4,1};具體如表2所示表116個關(guān)鍵字ID組在4個TCAM內(nèi)的分配結(jié)果
我們可以看到,各個TCAM分得的訪問頻率很接近。
4)接下來,在把規(guī)則裝入TCAM之前,我們還需要對規(guī)則里的某些范圍進行編碼。具體需要編碼的范圍和具體的規(guī)則有關(guān),我們假設(shè),在這個例子里面,有三個范圍{256-1023},{0-513}和{>1023}需要編碼(可能有很多規(guī)則包含這3個范圍,因此所有含有這3個范圍的規(guī)則都需要編碼),我們定義40個可用編碼比特的前三個分別代表這3范圍(按順序),也就是說,所有包含這3個范圍的規(guī)則,在40個可用編碼比特位置上的對應(yīng)位置都為‘1’,否則為‘0’。而40個可用編碼比特的后37位沒有用到,因此所有規(guī)則的可用編碼比特的后37位都是‘*’(任意)。
5)接下來,我們就根據(jù)3),4)的結(jié)果,把編碼后的第2,15,13,0這4個關(guān)鍵字ID組分到第一個TCAM;第12,8,9,11這四個分到第二個TCAM;第6,5,3,14分到第三個TCAM,剩下的第7,10,4,1分到第四個TCAM。到此為止,規(guī)則的分配就完成了。
6)下一步是生成關(guān)鍵字編碼表(根據(jù)關(guān)鍵字的端口域,得到關(guān)鍵字的可用編碼比特應(yīng)該是什么)。整個過程如圖7所示。根據(jù)上一步,我們知道三個范圍需要編碼,也就是說所有端口落在這三個范圍內(nèi)的那些關(guān)鍵字,在他的可用編碼比特上應(yīng)該體現(xiàn)出來(對應(yīng)德位置應(yīng)該是‘1’)。我們看見,這三個范圍是有重疊的,因此對有某些區(qū)間的端口,他可能同時屬于這3個范圍中的多個,也就是說有多個‘1’。從圖中,我們看見這3個范圍把整個區(qū)間劃分為4個區(qū)域<0-255>,<256-513>,<514-1023>和<1024-65535>,每個區(qū)域應(yīng)該對應(yīng)一個編碼結(jié)果。例如如果一個關(guān)鍵字的端口為300,它落在第2個區(qū)間,這個區(qū)間被2個需要編碼的范圍跨過{0-513}和{256-1023},所以這個區(qū)間對應(yīng)的編碼就必須是對應(yīng){0-513}和{256-1023}這2個范圍的比特為‘1’,其他為‘0’(或‘*’),即“011***...****”。
同時我們注意到,要表示這個4個區(qū)域,每個都可能需要不止一個TCAM表項,比如<256-513>這個區(qū)域需要3個表項(三態(tài)比特串),而<1024-65535>更是要6個。從圖七看出,要對這3個范圍完成編碼,一共需要18個TCAM表項。但值得注意的是,雖然不編碼前存儲一個規(guī)則需要多個表項,而編碼后儲存編碼表的一個范圍也需要多條表項,但2者產(chǎn)生的后果是不同的。因為同樣一個范圍,很有可能有多個規(guī)則包含這個范圍,如果不編碼,這些規(guī)則每個都需要多條TCAM表項,而編碼之后,在關(guān)鍵字編碼表這個范圍只需要一次表示為多條表項即可。所以編碼可以節(jié)省TCAM的使用量。
7)以上這些都就緒后,分布式的規(guī)則表就生成了,我們就可以進行IP包分類了。具體的流程根據(jù)“發(fā)明內(nèi)容”一章的描述。
我們對我們的發(fā)明進行的仿真試驗,圖8給出了IP包分類吞吐量根據(jù)輸入待分類的IP包的流量強度的變化曲線我們發(fā)現(xiàn),由于自適應(yīng)均衡的作用,在高負(fù)荷段(接近40Gbps的100%時),曲線仍然保持接近線形,表示我們的發(fā)明可以適應(yīng)高負(fù)荷的情況。在流量輸入達到40Gbps的100%(大概100兆包每秒),采用4個TCAM的這個方案可以實現(xiàn)近乎100%的吞吐率,即每秒100兆個IP包的查找。這是當(dāng)前其他任何技術(shù)都不可比擬的。
權(quán)利要求
1.基于TCAM的解決范圍匹配的并行IP包分類器,其特征在于,它含有路由器負(fù)責(zé)維護和管理的CPU,它通過運行分布式規(guī)則表生成算法,把IP包分類規(guī)則表劃分成K個分布式的子規(guī)則表,同時對規(guī)則的端口域進行編碼,并生成關(guān)鍵字編碼表,然后把編碼后的分布式子規(guī)則表和關(guān)鍵字編碼表送到TCAM(和與其配套的SRAM)進行存儲;K個三元的基于內(nèi)容尋址的存儲器,即K個TCAM(Ternary Content AccessibleMemory),每個TCAM內(nèi)存有一個由上述路由器CPU劃分成的分布式子規(guī)則表和一個關(guān)鍵字編碼表,對待分類的IP包的關(guān)鍵字進行分類和范圍域的編碼。K個SRAM,用于存儲每個分類規(guī)則對應(yīng)的實施動作的代碼;并行分類器的控制部分,他由一個現(xiàn)場可編程門陣列(即FPGA芯片)實現(xiàn),,他含有一個IP包緩沖器,緩沖待分類的IP包;一個集中分配器,它內(nèi)存有各個TCAM內(nèi)存放的由路由器CPU告知的分布式子規(guī)則表的信息,它負(fù)責(zé)提取待分類的IP包的關(guān)鍵字,并根據(jù)分布式子規(guī)則表在各個TCAM內(nèi)存放的信息,把待分類IP包的關(guān)鍵字分配給對應(yīng)的TCAM進行分類查找,同時根據(jù)各個TCAM的負(fù)載情況,自適應(yīng)均衡的把對IP包待編碼的端口信息域的編碼的任務(wù)分配給各個TCAM;他的輸入端連接IP包緩沖器的輸出端;K個關(guān)鍵字緩沖器,它們是用來緩存待分類但還沒有編碼的IP包的關(guān)鍵字,它們各自的輸入端與上述的集中分配器的對應(yīng)輸出端相連;K個待編碼信息緩沖器,它們是用來緩存IP包關(guān)鍵字中需要編碼的端口域信息;它們各自的輸入端與上述的集中分配器的對應(yīng)輸出端相連;K個調(diào)度器,他們各自的2個輸入端分別與上述的K個關(guān)鍵字緩沖器、K個代編碼信息緩沖器的相應(yīng)輸出端相連,他們各自的一個輸出端與上述相應(yīng)的一個TCAM的輸入端相連,他負(fù)責(zé)安排和調(diào)度對應(yīng)的TCAM的訪問;K個編碼結(jié)果存儲器,它們各自的輸出端與上述相應(yīng)的調(diào)度器的輸入端相連;一個編碼返回器,他的編碼結(jié)果的輸出端與上述各編碼結(jié)果存儲器的輸入端相連;他還有一個最終分類結(jié)果的輸出端。
2.根據(jù)權(quán)利要求1所述的基于TCAM的解決范圍匹配的并行IP包分類器提出的分類方法,其特征在于,它依次包含以下步驟步驟1,定義以下參量分類規(guī)則,IP包分類規(guī)則庫中的每一條規(guī)則,它包含5個匹配域,相應(yīng)的處理動作和該規(guī)則的優(yōu)先級這3類信息,上述的匹配域包括源IP地址前綴,目的IP地址前綴,協(xié)議代號,TCP/UDP源端口范圍和TCP/UDP目的端口范圍;規(guī)則ID,從一個規(guī)則的源IP地址前綴,目的IP地址前綴,協(xié)議代號這三個域中P個指定位置提取組成的三態(tài)比特串,所述的三態(tài)比特串就是一個在“0,1,*”這3個符號間選擇組成的比特串;關(guān)鍵字,從一個要分類的IP包提取出來的分類信息,它包含這個IP包的5個包頭信息域源IP地址,目的IP地址,協(xié)議類型號,TCP/UDP源端口號和TCP/UDP目的端口號;規(guī)則ID組,即含有相同的ID的規(guī)則組成的集合;關(guān)鍵字ID,它是指從一個關(guān)鍵字中,對應(yīng)于規(guī)則ID那P個位置提取出來的P個兩態(tài)比特串,所述的兩態(tài)比特串是指一個在“0,1”這2個符號間選擇組成的比特串;關(guān)鍵字ID組,它是一些規(guī)則ID組的集合,這些規(guī)則ID組的ID能夠匹配同一個關(guān)鍵字ID,所述的匹配是指2個比特串對應(yīng)的比特相同,或其中一個為“*”,即通配符。步驟2,依次按以下步驟,路由器CPU得到分布式規(guī)則表方案,即關(guān)鍵字ID組的分配方案步驟2.1,在路由器CPU內(nèi)定義以下參量P為ID比特的位數(shù);Qk代表被分到第k個TCAM的關(guān)鍵字ID組的集合,k=1,2,...,K,其中K是系統(tǒng)中TCAM的個數(shù);W[j]為擁有第j個關(guān)鍵字ID的關(guān)鍵字在所有關(guān)鍵字里出現(xiàn)的頻率/概率,j=1,2,...,2P。他代表第j個關(guān)鍵字ID組的等效訪問頻率;RM[k]為分配到第k個TCAM內(nèi)所有的關(guān)鍵字ID組對應(yīng)的等效訪問頻率,k=1,2,...,K。它數(shù)值上等于被分配到第k個TCAM內(nèi)的關(guān)鍵字ID組的等效訪問頻率值和。G[k]為被分配到第k個TCAM的關(guān)鍵字ID組的個數(shù),k=1,2,...,K。步驟2.2,根據(jù)關(guān)鍵字ID組的定義,只要我們給出一種ID比特位置的選擇方案,就會得到一個關(guān)鍵字ID組的劃分方案;在本步驟里,我們通過遍歷目的IP前綴,源IP前綴,協(xié)議代號里所有比特位置中P個的組合,挑選其中能夠使關(guān)鍵字ID組劃分最平均的一個組合,作為最終ID比特的位置,即它是通過對C位置數(shù)P種組合進行測試實現(xiàn)的;步驟2.3,依次按照下述分布式規(guī)則表的生成步驟,得到關(guān)鍵字ID組在K個TCAM內(nèi)的分配方案步驟2.3.1,路由器CPU對上述Qk,RM[k]和G[k]復(fù)位;步驟2.3.2,路由器CPU分配關(guān)鍵字ID組到K個TCAM,首先,把所有待分配的關(guān)鍵字ID組按上述W[j]的值從大到小排列,選出其中最大的一個作為目前要分配的關(guān)鍵字ID組,同時按照RM[k]較小的TCAM優(yōu)先的原則,把目前要分配的關(guān)鍵字ID組分配給上述RM[k]較小的TCAM;其次,每分配完一個關(guān)鍵字組到上述TCAM,就更新與該TCAM對應(yīng)的Qk,RM[k]和G[k]值,然后再根據(jù)上一步的做法,分配下一個關(guān)鍵字ID組;步驟2.3.3,重復(fù)步驟2.3.2,直到所有關(guān)鍵字組分配完為止,最后得到分配給各個TCAM的關(guān)鍵字ID組的集合Qk,k=1,2,...,K,這個也就是分布式規(guī)則表;步驟2.3.4,路由器CPU把上述獲得的關(guān)鍵字ID組的分配方案告知集中分配器;步驟3,路由器CPU對各條規(guī)則中的范圍域進行編碼,同時根據(jù)對規(guī)則編碼結(jié)果,生成關(guān)鍵字編碼表步驟3.1,定義以下參量可用比特數(shù)T,它等于一個TCAM表項包含的比特數(shù)減去5個IP包信息域總共需要的比特數(shù);規(guī)則端口范圍的度對于一些規(guī)則,其目的端口范圍或源端口范圍可能需要用多于一個三態(tài)比特串來表示,我們稱所需的三態(tài)比特串的條數(shù)為該端口范圍的度;步驟3.2,確定上述TCAM內(nèi)存在的可用編碼比特數(shù)T;步驟3.3,按照所有規(guī)則包含的所有端口范圍的度的值從大到小來排列,選取其中度較大的T個端口范圍來進行編碼分配一個可用編碼比特給每一個需要編碼的端口范圍,即對該范圍進行編碼;具體的,凡是包含該端口范圍的規(guī)則,可用編碼比特中對應(yīng)分配給這個端口的位置設(shè)為1,其他可用編碼比特位置則設(shè)為0;而不包含任何需要編碼的端口范圍的規(guī)則,其可用編碼比特全部位置都為0;步驟3.4,路由器CPU根據(jù)對規(guī)則范圍端口的編碼結(jié)果,生成關(guān)鍵字編碼表,依次包含以下步驟步驟3.4.1,根據(jù)所有需要編碼的端口范圍的重疊關(guān)系,得到w個原子編碼端口范圍,原子編碼端口范圍就是由所有需要編碼的端口范圍的邊界經(jīng)過互相組合,得到的一系列不相重疊的子范圍,每個原子編碼端口范圍都包含在一個或多個需要編碼的端口范圍內(nèi),我們定義一組T比特的編碼,叫原子范圍端口編碼,每一個比特代表一個需要編碼的端口范圍;原子范圍端口編碼用來表示這個原子端口范圍包含在哪些需要編碼的端口范圍里凡是包含的對應(yīng)的比特設(shè)為‘1’,否則設(shè)為0;步驟3.4.2,對于每個原子編碼端口范圍生成若干關(guān)鍵字編碼表的表項,其步驟依次包括步驟3.4.2.1得到表示該原子端口范圍需要的v個三態(tài)比特串,其中v是該原子端口范圍的度;步驟3.4.2.2生成v個關(guān)鍵字編碼表項,其中每條表項在TCAM內(nèi)存放的是其中一個三態(tài)比特串,而配套SRAM內(nèi)存放該原子端口范圍的原子端口范圍編碼;步驟4,路由器CPU根據(jù)步驟2得到的分布式規(guī)則表方案,把在步驟3里經(jīng)過編碼的規(guī)則,以關(guān)鍵字ID組為單位,送到相應(yīng)的TCAM進行存儲;同時每個TCAM都存儲一份步驟3.4中得到的關(guān)鍵字編碼表;步驟5,對每個送入系統(tǒng)的IP包進行自適應(yīng)均衡的并行IP包分類,它依次含有以下步驟步驟5.1,把每個要分類的IP包裝入IP包緩沖器;步驟5.2,集中分配器從IP包緩沖器中提取出排在最前頭的IP包,提取出它的5個信息域,即關(guān)鍵字,并獲得該IP包的關(guān)鍵字ID;步驟5.3,集中分配器根據(jù)在步驟2.3.4由路由器CPU告知的關(guān)鍵字ID組分配信息和當(dāng)前IP包的關(guān)鍵字ID,判斷當(dāng)前這個IP包應(yīng)該送往哪一個TCAM進行分類查找,并把該IP包的關(guān)鍵字送入對應(yīng)的該TCAM的關(guān)鍵字緩沖器;步驟5.4,集中分配器根據(jù)每個關(guān)鍵字緩沖器的空滿情況,判斷對應(yīng)的各個TCAM負(fù)載的高低,從而選出其中最空閑的一個TCAM,把對當(dāng)前IP包端口范圍編碼的任務(wù)交給他,即把當(dāng)前IP包的端口范圍域放入對應(yīng)的待編碼信息緩沖器;步驟5.5,對于每一個TCAM,對應(yīng)的調(diào)度器從步驟5.4所述的待編碼信息緩沖器中取出一個待編碼端口范圍,送入TCAM的關(guān)鍵字編碼表進行關(guān)鍵字的端口域編碼;步驟5.6,編碼結(jié)果從對應(yīng)的SRAM輸出,經(jīng)過編碼返回器返回,輸出到對應(yīng)TCAM的編碼結(jié)果存儲器里;步驟5.7,對應(yīng)的調(diào)度器從編碼結(jié)果存儲器里取出端口范圍的編碼結(jié)果,同時從關(guān)鍵字緩沖器中取出IP包的關(guān)鍵字,組合起來,一起送入TCAM的分布式規(guī)則表內(nèi)進行規(guī)則的分類匹配查找;步驟5.8,分類匹配查找結(jié)果從SRAM返回,經(jīng)過編碼結(jié)果返回器最終返回。
全文摘要
基于TCAM的解決范圍匹配的并行IP包分類方法屬于計算機網(wǎng)絡(luò)技術(shù)中IP包轉(zhuǎn)發(fā)和處理領(lǐng)域,其特征在于他通過對IP包的分類規(guī)則定義其ID,并根據(jù)ID進而將分類規(guī)則劃分成多個組,然后將各規(guī)則組分別存儲在多個TCAM芯片內(nèi)實現(xiàn)分布式的存儲,在實現(xiàn)并行IP包分類的同時,無需顯著的增加TCAM的使用量;同時,他充分利用常規(guī)TCAM中一些未被實用的比特,對規(guī)則中的范圍域進行編碼,使得某些本來需要用多條TCAM表項存儲的規(guī)則,僅用一條TCAM表項即可存儲,解決了TCAM的范圍匹配問題,節(jié)省了TCAM的實用量。他具有吞吐量高,穩(wěn)定性好和實現(xiàn)成本低的優(yōu)點。
文檔編號H04L12/56GK1674557SQ20051001151
公開日2005年9月28日 申請日期2005年4月1日 優(yōu)先權(quán)日2005年4月1日
發(fā)明者鄭凱, 劉斌, 車浩, 王志君 申請人:清華大學(xué)