本發(fā)明涉及分組傳輸領(lǐng)域,尤其涉及一種訪問控制列表ACL的實現(xiàn)方法及裝置。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,越來越多的網(wǎng)絡(luò)設(shè)備需要支持快速準確的報文分類,如安全網(wǎng)關(guān)、邊緣路由器、核心路由器等。未來網(wǎng)絡(luò)的發(fā)展趨勢需要為用戶提供更好的服務(wù)質(zhì)量,而諸如防火墻、區(qū)分服務(wù)、虛擬專網(wǎng)VPN、基于策略的路由等提高服務(wù)質(zhì)量的機制都是基于高效訪問控制列表(ACL,Access Control List)技術(shù)之上的。此外,隨著光纖通信技術(shù)的發(fā)展,鏈路帶寬和傳輸速率已不再成為問題,路由轉(zhuǎn)發(fā)設(shè)備正在成為網(wǎng)絡(luò)瓶頸,而ACL更是關(guān)鍵之關(guān)鍵。因此高效快速的實現(xiàn)ACL對于未來互聯(lián)網(wǎng)的發(fā)展具有極其重要的意義。
現(xiàn)行分組傳輸設(shè)備采用三態(tài)內(nèi)容尋址存儲器(TCAM,Ternary Content Addressable Memory)實現(xiàn)ACL。采用TCAM實現(xiàn)ACL的優(yōu)點在于實現(xiàn)簡單,但是TCAM也有許多不足的地方。首先,TCAM在同一時鐘周期內(nèi)將待查找的關(guān)鍵字和TCAM的每一個條目進行比較,導(dǎo)致功耗比較大;第二是TCAM器件成本比較高,價格昂貴。因此,現(xiàn)有技術(shù)中并不存在一種較為合適的ACL的實現(xiàn)方法。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例期望提供一種訪問控制列表ACL的實現(xiàn)方法及裝置,以提供一種新的實現(xiàn)ACL的方法,避免TCAM所導(dǎo)致的功耗大、成本高的問題。
為達到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
第一方面,本發(fā)明實施例提供一種訪問控制列表ACL的實現(xiàn)方法,包括:步驟A、將從同一數(shù)據(jù)包中提取出的每一個待查找關(guān)鍵字劃分為M個關(guān)鍵字段,其中,M為大于等于1的整數(shù);步驟B、至少以所述M個關(guān)鍵字段中的第i個關(guān)鍵字段作為地址訪問預(yù)設(shè)的M個規(guī)則表中的第i個規(guī)則表,獲得所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型,其中,i=1、2、3、4、…、M,所述M個規(guī)則表對應(yīng)于同一維度的規(guī)則;步驟C、當所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型是葉子節(jié)點時,將所述第i個關(guān)鍵字段對應(yīng)的規(guī)則編號確定為所述M個關(guān)鍵字段對應(yīng)的待查找關(guān)鍵字的規(guī)則編號,轉(zhuǎn)到執(zhí)行步驟E;步驟D、當所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為中間節(jié)點或混合節(jié)點時,將i取值加1,轉(zhuǎn)到執(zhí)行步驟B;步驟E、在確定所述待查找關(guān)鍵字的規(guī)則編號后,根據(jù)所述待查找關(guān)鍵字的規(guī)則編號,獲得所述待查找關(guān)鍵字的規(guī)則編號對應(yīng)的動作。
在上述方案中,當i=2、3、…、M時,在所述步驟B之后,所述方法還包括:當所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為無效節(jié)點,且所述第i-1個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為混合節(jié)點類型時,將所述第i-1個關(guān)鍵字段對應(yīng)的規(guī)則編號確定為所述M個關(guān)鍵字段對應(yīng)的待查找關(guān)鍵字的規(guī)則編號,轉(zhuǎn)到執(zhí)行步驟E。
在上述方案中,當i=1時,所述步驟B,包括:以第1個關(guān)鍵字段作為地址訪問預(yù)設(shè)的M個規(guī)則表中的第1個規(guī)則表。
在上述方案中,當i=2、3、…、M時,所述步驟B,包括:以所述第i-1個關(guān)鍵字段的下一級索引和所述第i個關(guān)鍵字段為地址訪問所述第i個規(guī)則表。
在上述方案中,所述步驟D,包括:當所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為中間節(jié)點時,將i取值加1,轉(zhuǎn)到執(zhí)行所述步驟B;當所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為混合節(jié)點時,記錄所述第i個關(guān)鍵字段對應(yīng)的規(guī)則編號,并將i取值加1,轉(zhuǎn)到執(zhí)行所述步驟B。
在上述方案中,所述方法還包括:將同一維度的規(guī)則對應(yīng)的關(guān)鍵字分成M段;當所述關(guān)鍵字的長度等于第1個關(guān)鍵字段的長度時,將所述第1個關(guān)鍵字段作為地址讀取第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息;當所述關(guān)鍵字的 長度小于所述第1個關(guān)鍵字段的長度時,將本次的剩余字段進行擴充,得到關(guān)鍵字剩余字段,以所述關(guān)鍵字剩余字段為地址分別讀取所述第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息,其中,所述本次的剩余字段為所述關(guān)鍵字中需要關(guān)心的關(guān)鍵字段;當所述關(guān)鍵字的長度大于所述第1個關(guān)鍵字段的長度時,將所述第1個關(guān)鍵字段作為地址讀取所述第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息。
在上述方案中,所述方法還包括:針對所述M個關(guān)鍵字段中的第i個關(guān)鍵字段,其中,i=2、3、…、M,依次執(zhí)行以下步驟:計算前一次的差值與所述第i個關(guān)鍵字段長度的差值,其中,所述前一次的差值所述關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度與所述第i個關(guān)鍵字段長度的差值;當所述差值等于所述第i個關(guān)鍵字段的長度時,將所述第i-1個關(guān)鍵字段的下一級索引和所述第i個關(guān)鍵字段作為地址讀取第i個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息;當所述差值小于所述第i個關(guān)鍵字段的長度時,將本次的剩余字段進行擴充,得到關(guān)鍵字剩余字段,以所述關(guān)鍵字剩余字段為地址分別讀取所述第i個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息,其中,所述本次的剩余字段為所述關(guān)鍵字中需要關(guān)心的關(guān)鍵字段除去前i個關(guān)鍵字段之后剩余的字段;當所述差值大于所述第i個關(guān)鍵字段的長度時,將所述第i-1個關(guān)鍵字段的下一級索引和所述第i個關(guān)鍵字段作為地址讀取所述第i個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息。
在上述方案中,所述方法還包括:當配置規(guī)則完成更新之后,基于新的配置規(guī)則,更新M個備份規(guī)則表,其中,所述M個備份規(guī)則表與所述M個規(guī)則表一一對應(yīng);在所述M個備份規(guī)則表完成更新之后,切換至訪問更新后的M個備份規(guī)則表,并更新所述M個規(guī)則表;在所述M個規(guī)則表完成更新之后,回切至訪問更新后的M個備份規(guī)則表。
在上述方案中,在所述步驟E之后,所述方法還包括:將所述每一個待查找關(guān)鍵字的規(guī)則編號對應(yīng)的動作進行歸并,獲得所述數(shù)據(jù)包的ACL結(jié)果。
第二方面,本發(fā)明實施例提供一種訪問控制列表ACL的實現(xiàn)裝置,包括:規(guī)則表模塊、調(diào)度模塊、訪問模塊、確定模塊、循環(huán)模塊、獲得模塊;其中, 所述規(guī)則表模塊,用于存儲同一維度的規(guī)則所對應(yīng)的M個規(guī)則表,M為大于等于1的整數(shù);所述調(diào)度模塊,用于將從同一數(shù)據(jù)包中提取出的每一個待查找關(guān)鍵字劃分為M個關(guān)鍵字段;所述訪問模塊,用于至少以所述M個關(guān)鍵字段中的第i個關(guān)鍵字段作為地址訪問預(yù)設(shè)的M個規(guī)則表中的第i個規(guī)則表,獲得所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型,其中,i=1、2、3、4、…、M;所述確定模塊,用于當所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型是葉子節(jié)點時,將所述第i個關(guān)鍵字段對應(yīng)的規(guī)則編號確定為所述M個關(guān)鍵字段對應(yīng)的待查找關(guān)鍵字的規(guī)則編號,觸發(fā)所述獲得模塊;所述循環(huán)模塊,用于當所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為中間節(jié)點或混合節(jié)點時,將i取值加1,觸發(fā)所述訪問模塊;所述獲得模塊,用于在確定所述待查找關(guān)鍵字的規(guī)則編號后,根據(jù)所述待查找關(guān)鍵字的規(guī)則編號,獲得所述待查找關(guān)鍵字的規(guī)則編號對應(yīng)的動作。
在上述方案中,當i=2、3、…、M時,所述確定模塊,還用于當所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為無效節(jié)點,且第i-1個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為混合節(jié)點時,將所述第i-1個關(guān)鍵字段對應(yīng)的規(guī)則編號確定為所述M個關(guān)鍵字段對應(yīng)的待查找關(guān)鍵字的規(guī)則編號,觸發(fā)所述獲得模塊。
在上述方案中,當i=1時,所述訪問模塊,用于以第1個關(guān)鍵字段作為地址訪問預(yù)設(shè)的M個規(guī)則表中的第1個規(guī)則表。
在上述方案中,當i=2、3、…、M時,所述訪問模塊,用于以所述第i-1個關(guān)鍵字段的下一級索引和所述第i個關(guān)鍵字段為地址訪問所述第i個規(guī)則表。
在上述方案中,所述循環(huán)模塊,用于當所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為中間節(jié)點時,將i取值加1,觸發(fā)所述訪問模塊;還用于當所述第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為混合節(jié)點時,記錄所述第i個關(guān)鍵字段對應(yīng)的規(guī)則編號,并將i取值加1,觸發(fā)所述訪問模塊。
在上述方案中,所述裝置還包括:規(guī)則表生成模塊,用于將同一維度的規(guī)則對應(yīng)的關(guān)鍵字分成M段;當所述關(guān)鍵字的長度等于第1個關(guān)鍵字段的長度時,將所述第1個關(guān)鍵字段作為地址讀取第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息;當所述關(guān)鍵字的長度小于所述第1個關(guān)鍵字段的長度時,將本次的剩余字 段進行擴充,得到關(guān)鍵字剩余字段,以所述關(guān)鍵字剩余字段為地址分別讀取所述第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息,其中,所述本次的剩余字段為所述關(guān)鍵字中需要關(guān)心的關(guān)鍵字段;當所述關(guān)鍵字的長度大于所述第1個關(guān)鍵字段的長度時,將所述第1個關(guān)鍵字段作為地址讀取所述第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息。
在上述方案中,所述規(guī)則表生成模塊,用于針對所述M個關(guān)鍵字段中的第i個關(guān)鍵字段,計算前一次的差值與所述第i個關(guān)鍵字段長度的差值,其中,所述前一次的差值所述關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度與所述第i個關(guān)鍵字段長度的差值,i=2、3、…、M;當所述差值等于所述第i個關(guān)鍵字段的長度時,將所述第i-1個關(guān)鍵字段的下一級索引和所述第i個關(guān)鍵字段作為地址讀取第i個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息;當所述差值小于所述第i個關(guān)鍵字段的長度時,將本次的剩余字段進行擴充,得到關(guān)鍵字剩余字段,以所述關(guān)鍵字剩余字段為地址分別讀取所述第i個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息,其中,所述本次的剩余字段為所述關(guān)鍵字中需要關(guān)心的關(guān)鍵字段除去前i個關(guān)鍵字段之后剩余的字段;當所述差值大于所述第i個關(guān)鍵字段的長度時,將所述第i-1個關(guān)鍵字段的下一級索引和所述第i個關(guān)鍵字段作為地址讀取所述第i個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息。
在上述方案中,所述規(guī)則表模塊,還用于當配置規(guī)則完成更新之后,基于新的配置規(guī)則,更新M個備份規(guī)則表,其中,所述M個備份規(guī)則表與所述M個規(guī)則表一一對應(yīng);相應(yīng)地,所述訪問模塊,還用于在所述M個備份規(guī)則表完成更新之后,切換至訪問更新后的M個備份規(guī)則表,并更新所述M個規(guī)則表;在所述M個規(guī)則表完成更新之后,回切至訪問更新后的M個備份規(guī)則表。
在上述方案中,所述裝置還包括:歸并模塊,用于在多個所述獲得模塊獲得所述每一個待查找關(guān)鍵字的規(guī)則編號對應(yīng)的動作之后,將所述動作進行歸并,獲得所述數(shù)據(jù)包的ACL結(jié)果。
本發(fā)明實施例提供了一種訪問控制列表ACL的實現(xiàn)方法及裝置,首先,將從同一數(shù)據(jù)包中提取的每一個待查找關(guān)鍵字劃分為M個關(guān)鍵字段,然后,以M 個關(guān)鍵字段中第i個關(guān)鍵字段作為地址訪問預(yù)設(shè)的M個規(guī)則表中的第i個規(guī)則表,至少獲得第i個關(guān)鍵字段對應(yīng)的規(guī)則類型,這里,M個規(guī)則表對應(yīng)一個規(guī)則,接著,根據(jù)第i個關(guān)鍵字段對應(yīng)的規(guī)則類型,確定待查找關(guān)鍵字的規(guī)則編號,最后,根據(jù)確定出來的規(guī)則編號,獲得待查找關(guān)鍵字對應(yīng)的動作,即確定了該規(guī)則對應(yīng)的動作,實現(xiàn)了ACL。如此,就避免了TCAM所導(dǎo)致的功耗大、成本高的問題;
進一步地,由于將一個待查找關(guān)鍵字劃分為M個關(guān)鍵字段,當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為葉子節(jié)點時,就將該關(guān)鍵字段對應(yīng)的規(guī)則編號確定為該待查找關(guān)鍵字的規(guī)則編號,如此,就不必對整個待查找關(guān)鍵字進行查找,大大減少了數(shù)據(jù)處理量,進而提高了查找效率;
進一步地,由于對同一數(shù)據(jù)包中的每一個關(guān)鍵字都進行劃分M個關(guān)鍵字段,并進行后續(xù)的處理,這里的關(guān)鍵字可以為一個維度的關(guān)鍵字,也可以為多個維度的關(guān)鍵字,也就是說可以實現(xiàn)多維度的ACL。
附圖說明
圖1為本發(fā)明實施例中的ACL的實現(xiàn)裝置的第一種結(jié)構(gòu)示意圖;
圖2為本發(fā)明實施例中的ACL的實現(xiàn)裝置的第二種結(jié)構(gòu)示意圖;
圖3為本發(fā)明實施例中的ACL的實現(xiàn)裝置的第三種結(jié)構(gòu)示意圖;
圖4為本發(fā)明實施例中的ACL的實現(xiàn)方法的流程示意圖;
圖5為本發(fā)明實施例中的生成規(guī)則表的一種方法的流程示意圖;
圖6為本發(fā)明實施例中的生成規(guī)則表的另一種方法的流程示意圖;
圖7為本發(fā)明實施例中的規(guī)則表的示意圖;
圖8為本發(fā)明實施例中的動作表的示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述。
首先,需要說明的是,在分組數(shù)據(jù)傳輸時,根據(jù)數(shù)據(jù)包特定關(guān)鍵字段將數(shù)據(jù)包分成不同的流。分成流后,可以針對該流進行各種處理,例如丟棄或轉(zhuǎn)發(fā),限速,重新分配優(yōu)先級等,這種處理稱之為動作。通常一個規(guī)則加上對應(yīng)動作稱之為一個ACL。
舉例來說,一般業(yè)界標準組成規(guī)則的關(guān)鍵字段有5個,通常也稱5元組,這5個關(guān)鍵字是:IP報文的源地址、IP報文的目的地址、IP報文的承載協(xié)議類型、TCP或UDP源端口號、TCP或UDP的目的端口號。在具體實現(xiàn)中,使用的關(guān)鍵字還可以有其他擴展,如COS、TOS、DSCP、虛擬局域網(wǎng)索引VLANID、源和目的MAC地址等,本發(fā)明不做具體限定。上述各個關(guān)鍵字可以任意組合,并且可以設(shè)置范圍限制,例如,一個規(guī)則可以是:TCP端口1000~2000+IP地址255.122.122.*(*為不需要關(guān)心的字段)。
下面對本發(fā)明實施例提供的ACL的實現(xiàn)方法進行說明。
本發(fā)明實施例提供一種ACL的實現(xiàn)裝置中,參見圖1所示,該裝置包括:規(guī)則表模塊1、調(diào)度模塊2、訪問模塊31、確定模塊32、循環(huán)模塊33、獲得模塊34;
在實際應(yīng)用中,上述規(guī)則表模塊1,可以為一個模塊,可以為多個模塊,每一個模塊與一個維度的規(guī)則對應(yīng),每一個模塊中存儲有M個規(guī)則表,M為大于等于1的整數(shù);
上述訪問模塊31、確定模塊32、循環(huán)模塊33以及獲得模塊34設(shè)置在搜索引擎中,參見圖2所示,一個搜索引擎3與一個規(guī)則表模塊1連接,也就是說,針對同一個數(shù)據(jù)包,一個搜索引擎3能夠針對一個維度的規(guī)則進行搜索。那么,當上述裝置中包含多個搜索引擎3時,就表示該裝置能夠針對同一數(shù)據(jù)包的多個維度的規(guī)則進行的并行搜索,大大提高了ACL實現(xiàn)的效率。
此時,當ACL的實現(xiàn)裝置進行多個維度搜索時,該裝置還就可以包括:歸并模塊4,用于將針對同一個數(shù)據(jù)包的多個維度的規(guī)則所對應(yīng)的動作進行歸并,以獲得該數(shù)據(jù)包的ACL結(jié)果。
進一步地,參見圖3所示,該裝置還可以同時針對多個數(shù)據(jù)包并行進行一 維度或者多維度的搜索,如此,大大提高了并行數(shù)據(jù)處理能力,使得處理速度大提升,能夠很好的保證ACL的實時性。
當ACL的實現(xiàn)裝置對多個數(shù)據(jù)包進行處理時,該裝置還可以包括:輪詢調(diào)度模塊,用于對多個數(shù)據(jù)包的ACL結(jié)果進行調(diào)度,輸出給下一級處理模塊。
結(jié)合本發(fā)明實施例,上述規(guī)則表模塊,用于存儲同一維度的規(guī)則所對應(yīng)的M個規(guī)則表;
上述調(diào)度模塊,用于將從同一數(shù)據(jù)包中提取出的每一個待查找關(guān)鍵字劃分為M個關(guān)鍵字段,并分發(fā)給對應(yīng)的搜索引擎;
上述訪問模塊,用于至少以M個關(guān)鍵字段中的第i個關(guān)鍵字段作為地址訪問預(yù)設(shè)的M個規(guī)則表中的第i個規(guī)則表,獲得第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型,其中,i=1、2、3、4、…、M,M個規(guī)則表與一個規(guī)則對應(yīng);
上述確定模塊,用于當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型是葉子節(jié)點時,將第i個關(guān)鍵字段對應(yīng)的規(guī)則編號確定為M個關(guān)鍵字段對應(yīng)的待查找關(guān)鍵字的規(guī)則編號,觸發(fā)上述獲得模塊;
上述循環(huán)模塊,用于當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為中間節(jié)點或混合節(jié)點時,將i取值加1,觸發(fā)上述訪問模塊;
上述獲得模塊,用于在確定待查找關(guān)鍵字的規(guī)則編號后,根據(jù)待查找關(guān)鍵字的規(guī)則編號,獲得待查找關(guān)鍵字的規(guī)則編號對應(yīng)的動作。
下面結(jié)合上述系統(tǒng),對本發(fā)明實施例提供的ACL的實現(xiàn)方法進行說明。
參見圖4所示,該方法包括:
S401:將從同一數(shù)據(jù)包中提取出的每一個待查找關(guān)鍵字劃分為M個關(guān)鍵字段;
具體來說,調(diào)度模塊對于同一個數(shù)據(jù)包,按照預(yù)先設(shè)定的配置信息,從該數(shù)據(jù)包中解析出一個維度規(guī)則下的待查找關(guān)鍵字,例如,提取數(shù)據(jù)包中的輸入端口,目的IP地址和IP優(yōu)先級TOS組合成{輸入端口,目的IP地址,IP優(yōu)先級TOS}記為待查找關(guān)鍵字A。然后,將待查找關(guān)鍵字劃分M個關(guān)鍵字段,這里,對于關(guān)鍵字段的劃分可以根據(jù)預(yù)先人為設(shè)定的劃分策略進行,以實際應(yīng)用 為準,本發(fā)明不做具體限定。
S402:至少以M個關(guān)鍵字段中的第i個關(guān)鍵字段作為地址訪問預(yù)設(shè)的M個規(guī)則表中的第i個規(guī)則表,獲得第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型;
具體來說,當調(diào)度模塊劃分好關(guān)鍵字段后,將這些字段發(fā)送給上述維度的規(guī)則所對應(yīng)的搜索引擎,那么,搜索引擎中的訪問模塊以M個關(guān)鍵字段中的第i個關(guān)鍵字段作為地址訪問規(guī)則表模塊中預(yù)先存儲的M個規(guī)則表中的第i個規(guī)則表,獲得第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型,其中,i=1、2、3、4、…、M;可見,關(guān)鍵字段與規(guī)則表是一一對應(yīng)的,規(guī)則、待查找關(guān)鍵、搜索引擎以及規(guī)則表模塊是一一對應(yīng)的。
在實際應(yīng)用中,通過訪問規(guī)則表,除了可以獲得第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型,還可以獲得第i個關(guān)鍵字段對應(yīng)的下一級索引以及規(guī)則編號。當然,還可以有其它屬性參數(shù),如當前分段長度,本發(fā)明不做具體限定。
另外,由于第1個關(guān)鍵字段為初始字段,所以,訪問模塊可以以第1個關(guān)鍵字段作為地址訪問第1個規(guī)則表,獲得第1個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型;而對于其它關(guān)鍵字段,即第2、3、…、M個關(guān)鍵字段,訪問模塊可以以該關(guān)鍵字段的上一級索引以及該關(guān)鍵字段作為地址訪問對應(yīng)的規(guī)則表。
進一步地,上述每一個規(guī)則表模塊中的M個規(guī)則表都對應(yīng)于同一維度的規(guī)則在規(guī)則表模塊中存儲的規(guī)則表是預(yù)置好的,那么,在S401之前,還需要針對同一維度的規(guī)則,生成對應(yīng)的M個規(guī)則表。
那么,參見圖5所示,生成規(guī)則表的方法步驟包括:
S501:將同一維度規(guī)則對應(yīng)的關(guān)鍵字分成M段;
這里,上述關(guān)鍵字記為B,其比特位寬為N,M段關(guān)鍵字段記為Bi,B={B1,B2,…,BM},i=1、2、…、M,Bi的長度記為Ni,N1+N2+…+NM=N。在實際應(yīng)用中,Ni的長度可以根據(jù)具體實現(xiàn)進行調(diào)整,每關(guān)鍵字段的長度Ni可以相等也可以不等。
進一步地,將上述關(guān)鍵字B中需要關(guān)心的關(guān)鍵字段記為C,長度為P,不需要關(guān)心的關(guān)鍵字段記為D,長度為Q,那么,B={C,D},P+Q=N。
例如,關(guān)鍵字B為IP地址為168.152.128.*,長度為32比特,將其平均分成四段,每段長度為8比特。關(guān)鍵字B中需要關(guān)心的關(guān)鍵字段C為168.152.128,長度為24比特,不需要關(guān)心的關(guān)鍵字段D為*,長度為8比特。
S502:當關(guān)鍵字的長度等于第1個關(guān)鍵字段的長度時,將第1個關(guān)鍵字段作為地址讀取第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息;
這里,上述節(jié)點信息包括:節(jié)點類型、規(guī)則編號、下一級索引以及當前分段長度。當然,還可以包含其它內(nèi)容,本發(fā)明不做具體限定。在規(guī)則表中,一個關(guān)鍵字段對應(yīng)的節(jié)點信息為一個條目。
那么,上述管理節(jié)點信息的步驟可以包括:當?shù)?個關(guān)鍵字段在第1個規(guī)則表中所對應(yīng)的節(jié)點類型為無效節(jié)點時,將節(jié)點類型更改為葉子節(jié)點,并寫入關(guān)鍵字對應(yīng)的規(guī)則編號以及將當前分段長度設(shè)置為該關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度;
當?shù)?個關(guān)鍵字段在第1個規(guī)則表中所對應(yīng)的節(jié)點類型為中間節(jié)點時,將節(jié)點類型更改為混合節(jié)點,并寫入關(guān)鍵字對應(yīng)的規(guī)則編號,將當前分段長度設(shè)置為該關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度;
當?shù)?個關(guān)鍵字段在第1個規(guī)則表中所對應(yīng)的節(jié)點類型為混合節(jié)點或葉子節(jié)點時,保持節(jié)點類型不變,并寫入關(guān)鍵字對應(yīng)的規(guī)則編號,將當前分段長度設(shè)置為該關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度。
S503:當關(guān)鍵字的長度小于第1個關(guān)鍵字段的長度時,將本次的剩余字段進行擴充,得到關(guān)鍵字剩余字段,以關(guān)鍵字剩余字段為地址分別讀取第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息;
那么,上述管理節(jié)點信息的步驟可以包括:當?shù)?個關(guān)鍵字段在第1個規(guī)則表中所對應(yīng)的節(jié)點類型為無效節(jié)點時,將節(jié)點類型更改為葉子節(jié)點,并寫入關(guān)鍵字對應(yīng)的規(guī)則編號以及將當前分段長度設(shè)置為該關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度;
這里,上述本次剩余字段是指關(guān)鍵字中需要關(guān)心的關(guān)鍵字段。
當?shù)?個關(guān)鍵字段在第1個規(guī)則表中所對應(yīng)的節(jié)點類型為中間節(jié)點時,將 節(jié)點類型更改為混合節(jié)點,并寫入關(guān)鍵字對應(yīng)的規(guī)則編號,將當前分段長度設(shè)置為該關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度;
當?shù)?個關(guān)鍵字段在第1個規(guī)則表中所對應(yīng)的節(jié)點類型為混合節(jié)點或葉子節(jié)點時,保持節(jié)點類型不變,同時,比較關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度和當前分段長度的大小,如果需要關(guān)心的關(guān)鍵字段長度小于當前分段長度,則保持原來的規(guī)則編號和當前分段長度不變,否則,寫入關(guān)鍵字對應(yīng)的規(guī)則編號以及將當前分段長度設(shè)置為該關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度。
需要說明的是,上述將本次剩余字段進行擴充,得到關(guān)鍵字剩余字段,具體為:用第1個關(guān)鍵字段長度N1減去關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度P,獲得差值x,將本次剩余字段進行擴充,得到2x個關(guān)鍵字剩余字段C11={C1,0},C12={C1,1},……,C12x={C,(2x-1)}。
S504:當關(guān)鍵字的長度大于第1個關(guān)鍵字段的長度時,將第1個關(guān)鍵字段作為地址讀取第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息。
這里,上述管理節(jié)點信息的步驟可以包括:當?shù)?個關(guān)鍵字段在第1個規(guī)則表中所對應(yīng)的節(jié)點類型為無效節(jié)點時,將節(jié)點類型更改為中間節(jié)點,并寫入第1個關(guān)鍵字段對應(yīng)的下一級索引;當?shù)?個關(guān)鍵字段在第1個規(guī)則表中所對應(yīng)的節(jié)點類型為中間節(jié)點或混合節(jié)點時,保持節(jié)點信息不變;當?shù)?個關(guān)鍵字段在第1個規(guī)則表中所對應(yīng)的節(jié)點類型為葉子節(jié)點時,則將節(jié)點類型更改為混合節(jié)點,并寫入第1個關(guān)鍵字段對應(yīng)的下一級索引。
接下來,針對第i個關(guān)鍵字段,i=2、3、…、M,在S504之后,參見圖6所示,該方法還包括:
S601:計算前一次的差值與第i個關(guān)鍵字段長度之差值;
這里,前一次的差值是指:當i=1時,前一次的差值為關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度;當i=2時,前一次的差值為關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度與第i個關(guān)鍵字段長度的差值,依次迭代,以此類推。
S602:當差值等于第i個關(guān)鍵字段的長度時,將第i-1個關(guān)鍵字段的下一級 索引和第i個關(guān)鍵字段作為地址讀取第i個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息;
那么,上述管理節(jié)點信息的步驟可以包括:當?shù)趇個關(guān)鍵字段在第i個規(guī)則表中所對應(yīng)的節(jié)點類型為無效節(jié)點時,將節(jié)點類型更改為葉子節(jié)點,并寫入關(guān)鍵字對應(yīng)的規(guī)則編號以及將當前分段長度設(shè)置為上述差值;
當?shù)趇個關(guān)鍵字段在第i個規(guī)則表中所對應(yīng)的節(jié)點類型為中間節(jié)點時,將節(jié)點類型更改為混合節(jié)點,并寫入關(guān)鍵字對應(yīng)的規(guī)則編號,將當前分段長度設(shè)置為上述差值;
當?shù)趇個關(guān)鍵字段在第i個規(guī)則表中所對應(yīng)的節(jié)點類型為混合節(jié)點或葉子節(jié)點時,保持節(jié)點類型不變,并寫入關(guān)鍵字對應(yīng)的規(guī)則編號,將當前分段長度設(shè)置為上述差值。
S603:當差值小于第i個關(guān)鍵字段的長度時,將本次剩余字段進行擴充,得到關(guān)鍵字剩余字段,以關(guān)鍵字剩余字段為地址分別讀取第i個規(guī)則表,獲取并管理對應(yīng)節(jié)點的信息;
那么,上述管理節(jié)點信息的步驟可以包括:當?shù)趇個關(guān)鍵字段在第i個規(guī)則表中所對應(yīng)的節(jié)點類型為無效節(jié)點時,將節(jié)點類型更改為葉子節(jié)點,并寫入關(guān)鍵字對應(yīng)的規(guī)則編號以及將當前分段長度設(shè)置為上述差值;
這里,上述本次剩余字段是指關(guān)鍵字中需要關(guān)心的關(guān)鍵字段除去前i個關(guān)鍵字段之后剩余的字段。
當?shù)趇個關(guān)鍵字段在第i個規(guī)則表中所對應(yīng)的節(jié)點類型為中間節(jié)點時,將節(jié)點類型更改為混合節(jié)點,并寫入關(guān)鍵字對應(yīng)的規(guī)則編號以及將當前分段長度設(shè)置為上述差值;
當?shù)趇個關(guān)鍵字段在第i個規(guī)則表中所對應(yīng)的節(jié)點類型為混合節(jié)點或葉子節(jié)點時,保持節(jié)點類型不變,同時,比較上述差值和當前分段長度的大小,如果上述差值小于當前分段長度,則保持原來的規(guī)則編號和當前分段長度不變,否則,寫入關(guān)鍵字對應(yīng)的規(guī)則編號以及將當前分段長度設(shè)置為上述差值。
S604:當差值大于第i個關(guān)鍵字段的長度時,將第i-1個關(guān)鍵字段的下一級索引和第i個關(guān)鍵字段作為地址讀取第i個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息。
這里,上述管理節(jié)點信息的步驟可以包括:當?shù)趇個關(guān)鍵字段在第i個規(guī)則表中所對應(yīng)的節(jié)點類型為無效節(jié)點時,將節(jié)點類型更改為中間節(jié)點,并寫入第i個關(guān)鍵字段對應(yīng)的下一級索引;當?shù)趇個關(guān)鍵字段在第i個規(guī)則表中所對應(yīng)的節(jié)點類型為中間節(jié)點或混合節(jié)點時,保持節(jié)點信息不變;當?shù)趇個關(guān)鍵字段在第i個規(guī)則表中所對應(yīng)的節(jié)點類型為葉子節(jié)點時,則將節(jié)點類型更改為混合節(jié)點,并寫入第i個關(guān)鍵字段對應(yīng)的下一級索引。
按照S601~S604的方法一致循環(huán),直至生成第M個規(guī)則表。此時,第i個規(guī)則表如圖7所示,每個條目包括節(jié)點類型、當前分段長度、下一級索引以及規(guī)則編號。
進一步地,在規(guī)則表生成之后,將規(guī)則編號對應(yīng)的動作寫入到動作表中。參見圖8所示,每個條目包括在該維度上的優(yōu)先級,丟棄/轉(zhuǎn)發(fā)指示,QoS映射,限速標識等。
S403a:當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型是葉子節(jié)點時,將第i個關(guān)鍵字段對應(yīng)的規(guī)則編號確定為M個關(guān)鍵字段對應(yīng)的待查找關(guān)鍵字的規(guī)則編號,轉(zhuǎn)到執(zhí)行S404;
具體來說,關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型可以為分了三種,即葉子節(jié)點、中間節(jié)點和混合節(jié)點,當通過S402獲得節(jié)點類型表示第i個關(guān)鍵字段為葉子節(jié)點時,確定模塊就將該關(guān)鍵字段的規(guī)則編號確定為待查找關(guān)鍵字的規(guī)則編號,此時,i=1、2、3、…、M。
S403b:當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為中間節(jié)點或混合節(jié)點時,將i取值加1,轉(zhuǎn)到執(zhí)行S402;
具體來說,在S402之后,當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為中間節(jié)點或混合節(jié)點時,循環(huán)模塊將i取值加1,再次觸發(fā)訪問模塊,這樣,訪問模塊以第i+1個關(guān)鍵字段作為地址訪問預(yù)設(shè)的第i+1個規(guī)則表,獲得第i+1個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型,以此類推,循環(huán)執(zhí)行S402~S403b,直至獲得待查找關(guān)鍵字的規(guī)則編號。
在具體實施過程中,當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為中間節(jié)點時, 將i取值加1,轉(zhuǎn)到執(zhí)行S402;當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為混合節(jié)點時,記錄第i個關(guān)鍵字段對應(yīng)的規(guī)則編號,并將i取值加1,轉(zhuǎn)到執(zhí)行S402。
在實際應(yīng)用中,關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型還可以為無效節(jié)點,那么,當i=2、3、…、M時,當通過S402獲得節(jié)點類型表示第i個關(guān)鍵字段為無效節(jié)點,且第i-1個關(guān)鍵字段為混合節(jié)點時,確定模塊就將第i-1個關(guān)鍵字段的規(guī)則編號確定為待查找關(guān)鍵字的規(guī)則編號。
舉例來說,取A1作為M個規(guī)則表中的規(guī)則表1的地址訪問規(guī)則表1,得到了A1對應(yīng)的規(guī)則節(jié)點類型,A1下一級索引和A1對應(yīng)的規(guī)則編號。
當A1對應(yīng)的規(guī)則節(jié)點類型是葉子節(jié)點時,則將A1對應(yīng)的規(guī)則編號作為該關(guān)鍵字A對應(yīng)的規(guī)則編號并結(jié)束本次查找;
當A1對應(yīng)的節(jié)點為中間節(jié)點,用A1的下一級索引和A2作為地址訪問規(guī)則表2,獲取A2對應(yīng)的規(guī)則節(jié)點類型,A2的下一級索引和A2規(guī)則編號,然后,執(zhí)行A1相同判斷和處理。
當A1對應(yīng)的節(jié)點為混合節(jié)點則記錄A1對應(yīng)的規(guī)則編號,然后,用A1的下一級索引和A2作為地址訪問規(guī)則表2,如果A2對應(yīng)的節(jié)點為無效節(jié)點,則關(guān)鍵字A對應(yīng)的規(guī)則編號為A1對應(yīng)的規(guī)則編號并結(jié)束本次查找;如果A2對應(yīng)的節(jié)點是葉子節(jié)點,則關(guān)鍵字A的規(guī)則編號為A2對應(yīng)的編號并結(jié)束本次查找;如果A2對應(yīng)的節(jié)點是中間節(jié)點或是混合節(jié)點則重復(fù)A1的查找方法繼續(xù)用A2的下一級索引和A3作為地址訪問規(guī)則表3,其處理方法和A1類似。如此重復(fù)直到獲取關(guān)鍵字的規(guī)則編號或整個關(guān)鍵字查找完成為止。
S404:在確定待查找關(guān)鍵字的規(guī)則編號后,根據(jù)待查找關(guān)鍵字的規(guī)則編號,獲得待查找關(guān)鍵字的規(guī)則編號對應(yīng)的動作。
具體來說,在ACL的實現(xiàn)裝置中還預(yù)設(shè)有如圖8所示的動作表,獲得單元以待查找關(guān)鍵字的規(guī)則編號作為地址訪問動作表,獲得待查找關(guān)鍵字對應(yīng)的動作,也就是說,該維度的規(guī)則所對應(yīng)的動作。
可選地,通過訪問動作表還可以獲得報文屬性,如優(yōu)先級、該維度的規(guī)則對應(yīng)的QoS和QoS優(yōu)先級、限速標識和限速標識優(yōu)先級、報文的顏色以及丟棄 還是轉(zhuǎn)發(fā)等。當然,還可以有其它報文屬性,本發(fā)明不做具體限定。
至此,就實現(xiàn)了針對單個維度的規(guī)則的ACL的整個過程。那么,對于多個維度的規(guī)則時,歸并模塊將每一個維度的規(guī)則對應(yīng)的待查找關(guān)鍵字的規(guī)則編號對應(yīng)的動作進行歸并,獲得數(shù)據(jù)包的ACL結(jié)果。
在上述過程中,規(guī)則表模塊中的規(guī)則表還可能根據(jù)用戶的配置進行調(diào)整,由于規(guī)則表無法一次性更新完,所以,為了降低出錯率,規(guī)則表模塊中存儲有M個規(guī)則表以及一一對應(yīng)的M個備份規(guī)則表。那么,上述方法還包括:當配置規(guī)則完成更新之后,基于新的配置規(guī)則,更新M個備份規(guī)則表,其中,M個備份規(guī)則表與M個規(guī)則表一一對應(yīng);在M個備份規(guī)則表完成更新之后,切換至訪問更新后的M個備份規(guī)則表,并更新M個規(guī)則表;在M個規(guī)則表完成更新之后,回切至訪問更新后的M個備份規(guī)則表。
具體來說,在進行規(guī)則表更新的過程中,首先,更新備份規(guī)則表,在備份規(guī)則表更新完成之后,訪問模塊切換至訪問備份規(guī)則表,同時再更新規(guī)則表,在規(guī)則表更新完畢之后,訪問模塊再切換至更新后的規(guī)則表,如此,就不會出現(xiàn)應(yīng)該更新的規(guī)則沒有更新而導(dǎo)致的出錯,保證了ACL實現(xiàn)的正確率。
由上述可知,首先,將從同一數(shù)據(jù)包中提取的每一個待查找關(guān)鍵字劃分為M個關(guān)鍵字段,然后,以M個關(guān)鍵字段中第i個關(guān)鍵字段作為地址訪問預(yù)設(shè)的M個規(guī)則表中的第i個規(guī)則表,至少獲得第i個關(guān)鍵字段對應(yīng)的規(guī)則類型,這里,M個規(guī)則表對應(yīng)一個規(guī)則,接著,根據(jù)第i個關(guān)鍵字段對應(yīng)的規(guī)則類型,確定待查找關(guān)鍵字的規(guī)則編號,最后,根據(jù)確定出來的規(guī)則編號,獲得待查找關(guān)鍵字對應(yīng)的動作,即確定了該規(guī)則對應(yīng)的動作,實現(xiàn)了ACL。如此,就避免了TCAM所導(dǎo)致的功耗大、成本高的問題;進一步地,由于將一個待查找關(guān)鍵字劃分為M個關(guān)鍵字段,當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為無效節(jié)點或葉子節(jié)點時,就將該關(guān)鍵字段對應(yīng)的規(guī)則編號確定為該待查找關(guān)鍵字的規(guī)則編號,如此,就不必對整個待查找關(guān)鍵字進行查找,大大減少了數(shù)據(jù)處理量,進而提高了查找效率;進一步地,由于對同一數(shù)據(jù)包中的每一個關(guān)鍵字都進行劃分M個關(guān)鍵字段,并進行后續(xù)的處理,這里的關(guān)鍵字可以為一個維度的關(guān)鍵字, 也可以為多個維度的關(guān)鍵字,也就是說可以實現(xiàn)多維度的ACL。
基于同一發(fā)明構(gòu)思,本發(fā)明實施例還提供一種ACL的實現(xiàn)裝置,與上述一個或者多個實施例中所述的ACL的實現(xiàn)裝置一致。
參見圖1所示,該裝置包括:規(guī)則表模塊1、調(diào)度模塊2、訪問模塊31、確定模塊32、循環(huán)模塊33、獲得模塊34;其中,規(guī)則表模塊1,用于存儲同一維度的規(guī)則所對應(yīng)的M個規(guī)則表,M為大于等于1的整數(shù);調(diào)度模塊2,用于將從同一數(shù)據(jù)包中提取出的每一個待查找關(guān)鍵字劃分為M個關(guān)鍵字段;訪問模塊31,用于至少以M個關(guān)鍵字段中的第i個關(guān)鍵字段作為地址訪問預(yù)設(shè)的M個規(guī)則表中的第i個規(guī)則表,獲得第i個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型,其中,i=1、2、3、4、…、M;確定模塊32,用于當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型是葉子節(jié)點時,將第i個關(guān)鍵字段對應(yīng)的規(guī)則編號確定為M個關(guān)鍵字段對應(yīng)的待查找關(guān)鍵字的規(guī)則編號,觸發(fā)獲得模塊34;循環(huán)模塊33,用于當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為中間節(jié)點或混合節(jié)點時,將i取值加1,觸發(fā)訪問模塊31;獲得模塊34,用于在確定待查找關(guān)鍵字的規(guī)則編號后,根據(jù)待查找關(guān)鍵字的規(guī)則編號,獲得待查找關(guān)鍵字的規(guī)則編號對應(yīng)的動作。
在上述方案中,當i=2、3、…、M時,確定模塊32,還用于當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為無效節(jié)點,且第i-1個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為混合節(jié)點時,將所述第i-1個關(guān)鍵字段對應(yīng)的規(guī)則編號確定為M個關(guān)鍵字段對應(yīng)的待查找關(guān)鍵字的規(guī)則編號,觸發(fā)獲得模塊34。
在上述方案中,當i=1時,訪問模塊31,用于以第1個關(guān)鍵字段作為地址訪問預(yù)設(shè)的M個規(guī)則表中的第1個規(guī)則表。
在上述方案中,當i=2、3、…、M時,訪問模塊31,用于以第i-1個關(guān)鍵字段的下一級索引和第i個關(guān)鍵字段為地址訪問第i個規(guī)則表。
在上述方案中,循環(huán)模塊33,用于當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為中間節(jié)點時,將i取值加1,觸發(fā)訪問模塊31;還用于當?shù)趇個關(guān)鍵字段對應(yīng)的規(guī)則節(jié)點類型為混合節(jié)點時,記錄第i個關(guān)鍵字段對應(yīng)的規(guī)則編號,并將i取值加1,觸發(fā)訪問模塊31。
在上述方案中,裝置還包括:規(guī)則表生成模塊,用于將同一維度的規(guī)則對應(yīng)的關(guān)鍵字分成M段;當關(guān)鍵字的長度等于第1個關(guān)鍵字段的長度時,將第1個關(guān)鍵字段作為地址讀取第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息;當關(guān)鍵字的長度小于第1個關(guān)鍵字段的長度時,將本次的剩余字段進行擴充,得到關(guān)鍵字剩余字段,以關(guān)鍵字剩余字段為地址分別讀取第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息,其中,本次的剩余字段為關(guān)鍵字中需要關(guān)心的關(guān)鍵字段;當關(guān)鍵字的長度大于第1個關(guān)鍵字段的長度時,將第1個關(guān)鍵字段作為地址讀取第1個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息。
在上述方案中,規(guī)則表生成模塊,用于針對M個關(guān)鍵字段中的第i個關(guān)鍵字段,計算前一次的差值與第i個關(guān)鍵字段長度的差值,其中,前一次的差值關(guān)鍵字中需要關(guān)心的關(guān)鍵字段長度與第i個關(guān)鍵字段長度的差值,i=2、3、…、M;當差值等于第i個關(guān)鍵字段的長度時,將第i-1個關(guān)鍵字段的下一級索引和第i個關(guān)鍵字段作為地址讀取第i個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息;當差值小于第i個關(guān)鍵字段的長度時,將本次的剩余字段進行擴充,得到關(guān)鍵字剩余字段,以關(guān)鍵字剩余字段為地址分別讀取第i個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息,其中,本次的剩余字段為關(guān)鍵字中需要關(guān)心的關(guān)鍵字段除去前i個關(guān)鍵字段之后剩余的字段;當差值大于第i個關(guān)鍵字段的長度時,將第i-1個關(guān)鍵字段的下一級索引和第i個關(guān)鍵字段作為地址讀取第i個規(guī)則表,獲取并管理對應(yīng)的節(jié)點信息。
在上述方案中,規(guī)則表模塊1,還用于當配置規(guī)則完成更新之后,基于新的配置規(guī)則,更新M個備份規(guī)則表,其中,M個備份規(guī)則表與M個規(guī)則表一一對應(yīng);相應(yīng)地,訪問模塊31,還用于在M個備份規(guī)則表完成更新之后,切換至訪問更新后的M個備份規(guī)則表,并更新M個規(guī)則表;在M個規(guī)則表完成更新之后,回切至訪問更新后的M個備份規(guī)則表。
在實際應(yīng)用中,上述訪問模塊31、確定模塊32、循環(huán)模塊33以及獲得模塊34設(shè)置在搜索引擎3中,一個搜索引擎3與一個規(guī)則表模塊1連接,也就是說,針對同一個數(shù)據(jù)包,一個搜索引擎3能夠針對一個維度的規(guī)則進行搜索。 那么,參見圖2所示,當上述裝置中包含多個搜索引擎3時,就表示該裝置能夠針對同一數(shù)據(jù)包的多個維度的規(guī)則進行的并行搜索,大大提高了ACL實現(xiàn)的效率。進一步地,參見圖3所示,該裝置還可以同時針對多個數(shù)據(jù)包并行進行一維度或者多維度的搜索,如此,大大提高了并行數(shù)據(jù)處理能力,使得處理速度大提升,能夠很好的保證ACL的實時性。
在上述方案中,當ACL裝置進行多個維度搜索時,裝置還包括:歸并模塊,用于在多個獲得模塊獲得每一個待查找關(guān)鍵字的規(guī)則編號對應(yīng)的動作之后,將動作進行歸并,獲得數(shù)據(jù)包的ACL結(jié)果。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用硬件實施例、軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器和光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個 流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。