通過優(yōu)化的決策樹進行的包分類的制作方法
【專利摘要】提供了一種包分類系統(tǒng)、方法和相應的裝置,以用于實現(xiàn)包分類。被耦合至網(wǎng)絡的安全設備的處理器使用具有多個規(guī)則的分類器表,該多個規(guī)則具有至少一個字段,以建立包括多個節(jié)點的決策樹結構,該多個節(jié)點包括多個規(guī)則的子組。該方法可以生成更寬、更淺的樹,這導致更短的搜索時間和用于存儲樹的減少的存儲器需求。
【專利說明】通過優(yōu)化的決策樹進行的包分類
[0001]相關申請
[0002]本申請要求于2011年8月2日提交的美國臨時申請N0.61/514,344、于2011年8月2日提交的美國臨時申請N0.61/514,382、于2011年8月2日提交的美國臨時申請N0.61/514,379、于2011年8月2日提交的美國臨時申請N0.61/514,400、于2011年8月2日提交的美國臨時申請N0.61/514,406、于2011年8月2日提交的美國臨時申請N0.61/514,407、于2011年8月2日提交的美國臨時申請N0.61/514,438、于2011年8月2日提交的美國臨時申請N0.61/514,447、于2011年8月2日提交的美國臨時申請N0.61/514,450、于2011年8月2日提交的美國臨時申請N0.61/514,459、以及于2011年8月2日提交的美國臨時申請N0.61/514,463的權益。
[0003]上述申請的整個教導通過引用被合并于此。
【背景技術】
[0004]開放系統(tǒng)互連(OSI)參考模型定義了七個網(wǎng)絡協(xié)議層(L1-L7)用于在傳輸介質(zhì)上進行通信。上層(L4-L7)表示端到端通信,以及下層(L1-L3)表示本地通信。
[0005]網(wǎng)絡化應用感知系統(tǒng)需要處理、濾波和切換L3至L7網(wǎng)絡協(xié)議層的范圍,例如L7網(wǎng)絡協(xié)議層,諸如超文本傳輸協(xié)議(HTTP)和簡單郵件傳輸協(xié)議(SMTP),以及L4網(wǎng)絡協(xié)議層,諸如傳輸控制協(xié)議(TCP)。除了處理網(wǎng)絡協(xié)議層,網(wǎng)絡化應用感知系統(tǒng)需要使用通過L4-L7網(wǎng)絡協(xié)議層的基于接入和內(nèi)容的安全性以同時保護這些協(xié)議,這包括防火墻、虛擬私人網(wǎng)絡(VPN)、安全套接層(SSL)、入侵檢測系統(tǒng)(IDS)、互聯(lián)網(wǎng)協(xié)議安全(IPsec)、以線速的反病毒(AV)和反垃圾郵件功能。
[0006]在現(xiàn)今的互聯(lián)網(wǎng)世界中改善網(wǎng)絡操作的有效性和安全性依然是互聯(lián)網(wǎng)用戶的終極目標。接入控制、流量工程、入侵檢測和許多其他網(wǎng)絡服務要求基于包頭的多個字段(被稱作包分類)進行包的識別。
[0007]互聯(lián)網(wǎng)路由器對包進行分類以實施多個高級的互聯(lián)網(wǎng)服務,諸如路由、速率限制、在防火墻中的接入控制、虛擬帶寬分配、基于策略的路由、服務區(qū)分、負載平衡、流量整形和流量付費。這些服務要求路由器將到來的包分類成不同的流,并且然后依據(jù)這種分類執(zhí)行適當?shù)牟僮鳌?br>
[0008]分類器,使用一組濾波器或規(guī)則,指定流或類別。例如,在防火墻中的每個規(guī)則可以指定一組源和目標地址,并且將它和相應的拒絕或許可動作相關聯(lián)。備選地,規(guī)則可以基于包頭的多個字段,包括OSI模型的層2、3、4和5,其包含了尋址和協(xié)議信息。
[0009]對于一些類型的專用硬件,接入控制列表(ACL)指代被應用于存在于主機或?qū)?設備上的端口號或網(wǎng)絡守護進程名稱的規(guī)則,每個ACL具有被許可使用服務的主機和/或網(wǎng)絡的列表。單獨的服務器以及路由器都能夠有網(wǎng)絡ACL。ACL能夠被配置為控制入界(inbound)和出界(outbound)的流量。
【發(fā)明內(nèi)容】
[0010]一種系統(tǒng)、方法和相應的裝置涉及對包進行分類。
[0011]一種方法可以使用具有多個規(guī)則的分類器表,該多個規(guī)則具有至少一個字段,并且建立包括多個節(jié)點的決策樹結構。每個節(jié)點可以表示多個規(guī)則的子組。對于決策樹的每個節(jié)點,方法可以(a)確定可以在至少一個字段的每個字段上進行的若干剪切,從而創(chuàng)建等于剪切的個數(shù)的子節(jié)點;(b)基于對所創(chuàng)建的每個子節(jié)點的規(guī)則的平均個數(shù)與至少一個字段的每個字段所創(chuàng)建的每個子節(jié)點的規(guī)則的實際個數(shù)之間的平均差異的比較,選擇在其上剪切所述節(jié)點的字段;(C)在所選擇的字段上將節(jié)點剪切成若干子節(jié)點,以及存儲決策樹結構。
[0012]該方法可以進一步基于針對給定的存儲容量的剪切的最大個數(shù)來確定可以在至少字段的每個字段上進行的剪切的個數(shù)。
[0013]該方法可以基于如下字段,即所述至少一個字段中的、具有在每個子節(jié)點的規(guī)則的平均個數(shù)和每個子節(jié)點的規(guī)則的實際個數(shù)之間的最小平均差異的字段,而選擇在其上將所述節(jié)點剪切成若干子節(jié)點的字段。
[0014]只有在節(jié)點具有比的多個規(guī)則的子組的預定個數(shù)更多時,該方法可以剪切節(jié)點。預定個數(shù)可以是可調(diào)整的個數(shù)。該方法可以進一步通過迭代地調(diào)整預定個數(shù)來控制決策樹結構的深度。調(diào)整預定個數(shù)可以包括隨著樹的層次的增加而增加預定個數(shù)。
[0015]如果剪切創(chuàng)建了多個子節(jié)點,并且只有一個子節(jié)點具有多個規(guī)則的子組,那么方法可以在節(jié)點處存儲至少一個字段中的字段的標識符以及所述至少一個字段中的、在遍歷所述節(jié)點以獲得規(guī)則匹配時略過的所述字段中的若干比特。至少一個字段中的、略過的字段的比特的個數(shù)可以與用于剪切所述節(jié)點的若干比特的個數(shù)相同。
[0016]在建立決策樹結構時,該方法可以進一步包括,對于決策樹的每個層次,比較由具有相同母節(jié)點的子節(jié)點所表示的規(guī)則子組。方法可以識別復制子節(jié)點組,復制子節(jié)點組可以是多個規(guī)則的復制子組。方法可以選擇被識別的復制子節(jié)點組的一個子節(jié)點作為唯一的子節(jié)點。方法可以將被識別的所述復制子節(jié)點組的其他子節(jié)點鏈接至與所述唯一的子節(jié)點相同的子樹。方法可以使用唯一的子節(jié)點用于決策樹結構的后續(xù)建立,以及抑制使用將被識別的復制子節(jié)點組的其他子節(jié)點用于決策樹結構的后續(xù)建立。
[0017]在建立決策樹結構時,方法可以進一步包括,對于決策樹的每個層次,在決策樹的層次上識別部分的復制節(jié)點。部分的復制節(jié)點可以是部分復制的多個規(guī)則的子組。方法可以基于被識別的一個或多個部分的復制節(jié)點,在決策樹的層次上創(chuàng)建新的節(jié)點。多個規(guī)則的子組的部分復制可以被包括在創(chuàng)建的新節(jié)點中,并且被從所識別的部分節(jié)點中去除。
[0018]方法可以將分類器表中的多個規(guī)則分組成多個規(guī)則分類。方法可以針對多個規(guī)則分類中的每個規(guī)則分類,建立包括多個節(jié)點的決策樹。多個規(guī)則分類可以基于應用于多個規(guī)則的一個或多個字段功能,或者一個或多個字段功能的組合。一個或多個字段功能可以包括應用非互聯(lián)網(wǎng)協(xié)議(IP)地址通配符、源IP但不是目標IP通配符、目標IP但不是源IP通配符、目標和源地址通配符、字段范圍比較、與一個或多個至少一個字段相關聯(lián)的一個或多個掩碼。方法可以進一步包括使得所接收的包遍歷所建立的每個決策樹,并且比較從每個樹得到的規(guī)則以選擇最終的匹配。所選擇的最終的匹配可以是具有最高優(yōu)先級的規(guī)則。
[0019]方法可以進一步將具有小于或等于規(guī)則的給定個數(shù)的若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點。方法可以針對所轉換的每個子節(jié)點創(chuàng)建相應的桶。相應的桶可以包括所轉換的子節(jié)點的規(guī)則。方法可以將每個葉節(jié)點鏈接至所創(chuàng)建的相應的桶。復制桶組可以被識別,每個復制桶包括相同的規(guī)則組。方法可以選擇復制桶組中的一個桶,并且去除復制桶組中的其他桶。方法可以將到所去除的桶的鏈接改變成到所選擇的一個桶的鏈接。
[0020]方法可以進一步識別部分復制桶組。每個部分復制桶可以包括復制部分規(guī)則組。方法可以將部分復制桶組中的每個桶分成針對每個桶的第一規(guī)則組和第二規(guī)則組。針對每個桶的第一規(guī)則組可以包括復制部分規(guī)則組,并且針對每個桶的第二規(guī)則組可以包括針對每個桶的任何剩余的規(guī)則。方法可以在每個部分復制的桶中創(chuàng)建到第一規(guī)則組的鏈接,并且在每個部分復制的桶中創(chuàng)建到第二組規(guī)則的鏈接。每個部分復制桶可以包括指向第一規(guī)則組和第二規(guī)則組的指針的鏈接列表。
[0021]決策樹結構可以是二進制數(shù)據(jù)結構。
[0022]決策樹結構可以從分類器表被編譯。
[0023]對應每個規(guī)則的優(yōu)先級可以被存儲于決策樹結構中。
[0024]方法可以進一步確定規(guī)則是否被一個或多個其他規(guī)則覆蓋,并且如果規(guī)則被覆蓋,從決策樹結構中忽略規(guī)則。
[0025]方法可以使用具有多個規(guī)則的分類器表,多個規(guī)則具有至少一個字段,用于建立包括多個節(jié)點的決策樹結構。每個節(jié)點可以包括多個規(guī)則的子組。方法可以針對決策樹的每個層次,基于母節(jié)點的子節(jié)點的結果總數(shù)不大于給定的閾值,確定是否合并母節(jié)點的孫子和母節(jié)點的子節(jié)點。方法可以存儲決策樹結構。方法可以進一步將子節(jié)點的剪切合并到母節(jié)點的剪切中,從而產(chǎn)生母節(jié)點的新的子節(jié)點。子節(jié)點的剪切可以與母節(jié)點的剪切在同一字段上,或者子節(jié)點的剪切可以與母節(jié)點的剪切在不同的字段上。給定的閾值可以是可調(diào)整的。方法可以迭代地調(diào)整給定的閾值,并且合并母節(jié)點的孫子和母節(jié)點的子節(jié)點,直到母節(jié)點的子節(jié)點的結果總數(shù)達到了子節(jié)點的給定的閾值的個數(shù)。
[0026]方法可以使用具有多個規(guī)則的分類器表,多個規(guī)則具有至少一個字段,用于建立包括多個節(jié)點的決策樹結構。每個節(jié)點可以包括多個規(guī)則的子組。方法可以基于規(guī)則是否競爭來分組規(guī)則。方法可以給多個規(guī)則分配優(yōu)先級值,并且在每組競爭規(guī)則內(nèi)分配唯一的優(yōu)先級值。方法可以使得非競爭規(guī)則具有相同優(yōu)先級值。方法可以存儲決策樹結構,并且包括存儲多個規(guī)則和所分配的優(yōu)先級值。
[0027]裝置可以包括存儲器和耦合至存儲器的處理器。處理器可以被配置為使用具有存儲在存儲器中的多個規(guī)則的分類器表,多個規(guī)則具有至少一個字段,處理器可以被配置為建立包括多個節(jié)點的決策樹結構,多個節(jié)點包括多個規(guī)則的子組。處理器可以進一步被配置為針對決策樹的每個節(jié)點,確定可以在至少一個字段的每個字段上進行的若干剪切,從而創(chuàng)建等于剪切的個數(shù)的子節(jié)點。確定可以在至少一個字段的每個字段上所進行的若干剪切時,處理器可以進一步被配置為基于比較所創(chuàng)建的每個子節(jié)點的規(guī)則的平均個數(shù)與至少一個字段的每個字段所創(chuàng)建的每個子節(jié)點的規(guī)則的實際個數(shù)之間的平均差異,選擇在其上剪切節(jié)點的字段。處理器可以進一步被配置為在所選擇的字段上將節(jié)點剪切成若干子節(jié)點,并且在存儲器中存儲決策樹結構。
[0028]非瞬態(tài)計算機可讀介質(zhì)可以具有在其上被編碼的一系列指令,在由處理器執(zhí)行時,這些指令使得處理器使用具有多個規(guī)則的分類器表,多個規(guī)則具有至少一個字段,建立包括多個節(jié)點的決策樹結構,多個節(jié)點包括多個規(guī)則的子組;針對決策樹的每個節(jié)點,確定可以在至少一個字段的每個字段上進行的若干剪切,從而創(chuàng)建等于剪切的個數(shù)的子節(jié)點。在確定至少一個字段的每個字段上所進行的若干剪切之后,處理器可以進一步被配置為基于比較所創(chuàng)建的每個子節(jié)點的規(guī)則的平均個數(shù)與至少一個字段的每個字段所創(chuàng)建的每個子節(jié)點的規(guī)則的實際個數(shù)之間的平均差異,選擇在其上剪切節(jié)點的字段。處理器可以至少在所選擇的字段上將節(jié)點剪切成若干子節(jié)點,并且存儲決策樹結構。
[0029]處理器可以基于具有每個子節(jié)點的規(guī)則的平均個數(shù)和每個子節(jié)點的規(guī)則的實際個數(shù)之間的最小平均差異的至少一個字段,而選擇在其上將節(jié)點剪切成若干子節(jié)點的字段,。
[0030]方法可以包括使用具有多個規(guī)則的分類器表,多個規(guī)則具有至少一個字段,建立包括多個節(jié)點的決策樹結構,每個節(jié)點表示多個規(guī)則的子組,并且識別決策樹結構中的復制。方法可以包括基于所識別的復制修改決策樹結構,并且存儲所修改的決策樹結構。多個節(jié)點可以包括母節(jié)點和子節(jié)點。識別可以包括,針對決策樹的每個層次,比較由具有相同母節(jié)點的子節(jié)點所表示的規(guī)則子組,并且識別復制子節(jié)點組。復制子節(jié)點組可以具有多個規(guī)則的復制子組。修改可以包括選擇被識別的復制子節(jié)點組的一個子節(jié)點作為唯一的子節(jié)點,以及將被識別的所述復制子節(jié)點組的其他子節(jié)點鏈接至與所述唯一的子節(jié)點相同的子樹。
[0031]其中在多個節(jié)點可以包括母節(jié)點和子節(jié)點的方法,可以進一步包括,將具有小于或等于規(guī)則的給定個數(shù)的若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,相應的桶包括所轉換的子節(jié)點的規(guī)則,將每個葉節(jié)點鏈接至所創(chuàng)建的相應的桶,識別復制桶組,每個復制桶包括相同的規(guī)則組,選擇復制桶組中的一個桶,并且去除復制桶組中的其他桶,將到所去除的桶的鏈接改變成到所選擇的一個桶的鏈接。
[0032]其中在多個節(jié)點可以包括母節(jié)點和子節(jié)點的方法,可以進一步包括,將具有小于或等于規(guī)則的給定個數(shù)的若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,相應的桶包括所轉換的子節(jié)點的規(guī)則,將每個葉節(jié)點鏈接至所創(chuàng)建的相應的桶,識別部分復制桶組,每個部分復制桶可以包括復制部分的規(guī)則組,將部分復制桶組中的每個桶中的規(guī)則分成針對每個桶的第一規(guī)則組和第二規(guī)則組,針對每個桶的第一規(guī)則組包括復制部分的規(guī)則組,并且針對每個桶的第二規(guī)則組包括針對每個桶的任何剩余的規(guī)貝U,以及在每個部分復制的桶中創(chuàng)建到第一規(guī)則組的鏈接,并且在每個部分復制的桶中創(chuàng)建到第二規(guī)則組的鏈接。每個部分復制的桶可以包括指向第一規(guī)則組和第二規(guī)則組的指針的鏈接列表。
【專利附圖】
【附圖說明】
[0033]上述將從下面本發(fā)明的示例實施例的更具體的描述中變得清楚,如在附圖中所圖示的,其中相同的參考符號指代在不同的視圖中相同的部分。附圖不一定是按比例的,相反重點被放在圖示本發(fā)明的實施例上。
[0034]圖1圖示用于對包進行分類的包括規(guī)則的分類器表。
[0035]圖2圖示在圖1中所圖示的分類器表的規(guī)則的幾何表示。
[0036]圖3A圖示在圖1中所圖示的從分類器表編譯的決策樹數(shù)據(jù)結構。
[0037]圖3B圖示決策樹數(shù)據(jù)結構的深度。[0038]圖3C圖示決策樹數(shù)據(jù)結構的深度和形狀。
[0039]圖4是用于建立決策樹的方法的流程圖。
[0040]圖5是用于確定在其上剪切節(jié)點的字段的方法的流程圖。
[0041]圖6是圖示在分類表中對規(guī)則的字段進行剪切的圖。
[0042]圖7是用于合并決策樹的節(jié)點的方法的流程圖。
[0043]圖8A-C示出合并節(jié)點的圖解示例。
[0044]圖9A示出導致子節(jié)點具有分類器表的所有規(guī)則的節(jié)點剪切的圖解示例。
[0045]圖9B是樹、指向包含分類器規(guī)則表的一組規(guī)則的桶的葉節(jié)點的圖示。
[0046]圖9C是圖示將一組規(guī)則編譯進入決策樹數(shù)據(jù)結構的示例實施例的方框圖。
[0047]圖9D圖示包括樹、桶和規(guī)則的決策樹數(shù)據(jù)結構。
[0048]圖1OA是圖示識別包含相同規(guī)則組的子節(jié)點的方法的流程圖。
[0049]圖1OB是用于優(yōu)先級復制的方法的流程圖。
[0050]圖10C-D圖示在決策樹的節(jié)點中去除規(guī)則的復制桶的圖解示例。
[0051]圖1OE圖示在決策樹的節(jié)點中去除規(guī)則的復制桶的方法。
`[0052]圖1OF圖示從決策樹的非兄弟節(jié)點中去除規(guī)則的復制桶的圖解示例。
[0053]圖1OG圖示在決策樹的節(jié)點中去除規(guī)則的部分復制桶的圖解示例。
[0054]圖1lA是用于在決策樹的節(jié)點中的規(guī)則的部分復制桶的方法的流程圖。
[0055]圖1lB圖示用于將編譯器表解析為規(guī)則的分類并且針對每個分類建立決策樹的方法。
[0056]圖1lC圖示用于選擇匹配規(guī)則的方法。
[0057]圖12是圖示其中包分類器操作以對包進行分類來向私人網(wǎng)絡提供互聯(lián)網(wǎng)服務的系統(tǒng)的方框圖。
[0058]圖13是可以根據(jù)本文中所公開的技術對包進行分類的路由器的方框圖。
【具體實施方式】
[0059]下面是本發(fā)明的示例實施例的描述。
[0060]本文中所引用的所有專利、公開的申請及參考的教導通過全文引用而被并入。
[0061]雖然包分類已經(jīng)被廣泛研究了很長時間,研究人員仍然有動機去尋求新穎的和有效的包分類方案,這是由于:i)網(wǎng)絡帶寬的持續(xù)增長,?)網(wǎng)絡應用的增長的復雜度,以及ii)網(wǎng)絡系統(tǒng)的技術革新。
[0062]對網(wǎng)絡帶寬的爆炸性需求通常歸結于數(shù)據(jù)流量的增長。主流的服務提供商每六到九個月報告在他們的骨干網(wǎng)上的帶寬加倍。因此,新穎的包分類方案被要求來處理在邊緣和核心設備上指數(shù)級增長的流量。
[0063]由于在網(wǎng)絡設備中被實施的網(wǎng)絡應用的數(shù)量的增長,網(wǎng)絡應用的復雜度增加。包分類被廣泛用于各種應用,諸如服務感知路由、入侵阻止和流量整形。因此,新穎的包分類方案必須更智能以不明顯損失性能的情況下處理各種類型的規(guī)則組。
[0064]此外,諸如多核處理器的新技術提供空前的計算能力以及高集成的資源。因此,新穎的包分類方案必須很好的適合高級的硬件和軟件技術。
[0065]在詳細地描述示例實施例之前,下面立即描述示例包分類系統(tǒng)和相關聯(lián)的方法來幫助讀者理解本文中所描述的發(fā)明特征。
[0066]現(xiàn)有的包分類方法用存儲器來交換時間。雖然這種折中不斷地在改善,但是對于合理數(shù)量的存儲器所花費的時間通常仍然是貧乏(poor)的。由于現(xiàn)有方法存在的問題,供應商使用三態(tài)內(nèi)容可尋址存儲器(TCAM),其使用強力并行硬件來針對所有規(guī)則同時檢查包。TCAM相比于現(xiàn)有方法的主要優(yōu)勢是速度和確定性(TCAM為所有的數(shù)據(jù)庫工作)。
[0067]TCAM是充當完全關聯(lián)存儲器的硬件設備。TCAM單元存儲三個值:0、1或“X”,其表示無關位,并且作為每個單元的掩碼進行操作,其使得TCAM能夠匹配包含通配符(例如,無關位)的規(guī)則。在操作中,可以向TCAM提供整個包頭來確定它匹配哪個條目(規(guī)則)。但是,TCAM的復雜度僅許可小的、非靈活的并且相對慢的實施,這種實施消耗了大量的功率。因此,繼續(xù)需要在專用的數(shù)據(jù)結構上進行操作的有效方法。
[0068]目前的方法保留在數(shù)學分析和/或軟件仿真(基于觀察的方案)的階段。提出的數(shù)學方案被報告有很好的時間/空間復雜度。但是,這種類型的方案沒有被發(fā)現(xiàn)在現(xiàn)實網(wǎng)絡設備中有任何實施,因為數(shù)學方案經(jīng)常加入特殊的條件來簡化問題和/或忽略大的常數(shù)因子,這可能掩蓋了明顯的最差情況的約束。
[0069]提出的基于觀察的方案采用在規(guī)則中觀察的統(tǒng)計特征來實現(xiàn)針對現(xiàn)實應用的有效的方案。但是,這些基于觀察的方法通常只對特定類型的規(guī)則組有效。由于針對不同應用的包分類規(guī)則具有各種特征,很少基于觀察的方法能夠充分地挖掘不同類型的規(guī)則組中的冗余以在各種條件下獲得穩(wěn)定的性能。
[0070]包分類使用包分類器來執(zhí)行,包分類器也被稱作策略數(shù)據(jù)庫、流分類器、或簡單地稱作分類器。分類器是一批規(guī)則或策略。所接收的包和規(guī)則相匹配,規(guī)則確定了對所匹配的包采取的動作。一般的包分類要求路由器基于包頭中多個字段對包進行分類。分類器的每個規(guī)則根據(jù)在包頭的“F”字段上的準則來指定包可以屬于的類別,并且將標識符(例如,類別ID)與每個類別相關聯(lián)。例如,在流分類器中的每個規(guī)則是流的說明,其中每個流是處于單獨的類別。標識符唯一地指定與每個規(guī)則相關聯(lián)的動作。每個規(guī)則有“F”字段。在規(guī)則R的第i字段,被稱作R[i],是在包頭的第i字段上的正則表達式(regular expression)。如果對于每個i,P的頭的第i字段滿足該正則表達式R[i],那么包P匹配具體的規(guī)則R。
[0071]由規(guī)則指定的類別可以重疊。例如,一個包可以匹配多個規(guī)則。在這種情況下,當多個規(guī)則重疊時,規(guī)則在分類器中出現(xiàn)的順序可以確定規(guī)則的相對的優(yōu)先級。換句話說,匹配多個規(guī)則的包屬于在它們中首先在分類器中出現(xiàn)的規(guī)則標識符(類別ID)所識別的類另O。備選地,與規(guī)則相關聯(lián)的唯一的優(yōu)先級可以確定它的優(yōu)先級,例如,具有最高優(yōu)先級的規(guī)則。
[0072]包分類器可以對分類器表中的規(guī)則進行分析和分類,并且創(chuàng)建決策樹用于將所接收的包和來自分類器表中的規(guī)則相匹配。決策樹是決策支持工具,其使用決策的樹狀圖或模型以及它們的可能的結果,包括機會事件結果、資源成本和實用性。決策樹常用于操作研究中,特別地在決策分析中,以幫助識別最可能達到目標的策略。決策樹的另一個用途是作為描述性方法用于計算條件概率。本文中所描述的實施例利用決策樹來有選擇地將所接收的包和分類器表中的規(guī)則相匹配,以確定如何處理所接收的包。
[0073]規(guī)則的決策樹或樹表示一組規(guī)則。決策樹還可以被稱作規(guī)則編譯的數(shù)據(jù)結構(RCDS)或者性能樹。樹是具有節(jié)點和葉子的二進制數(shù)據(jù)結構。樹的每個葉子指向規(guī)則的子組,被稱作規(guī)則桶,或桶。每個桶表示規(guī)則的子組。每個桶是包含指向規(guī)則的指針的數(shù)據(jù)結構(例如,數(shù)組),其被存儲在規(guī)則表中。桶內(nèi)的規(guī)則(或指向規(guī)則的指針)通過優(yōu)先級來排序(例如,按優(yōu)先級的增序或降序)。規(guī)則表是包含規(guī)則的數(shù)據(jù)結構(例如,數(shù)組)。規(guī)則表內(nèi)的規(guī)則可以是有序的或者無序的。
[0074]圖1圖示用于對包進行分類的包括規(guī)則的分類器表100。如所圖示的,分類器表包含七個規(guī)則(R1-R7),每個包含兩個字段,字段-1110和字段-2115。雖然表圖示規(guī)則是二元組(2-tuple)的(例如,僅包含兩個字段),但是應當注意,規(guī)則可以包含η個字段,并且是η元組的。每個規(guī)則在每個維度(字段)中指定一系列的值(例如,互聯(lián)網(wǎng)協(xié)議(IP)地址或?qū)?端口或協(xié)議)。例如,字段-1可以在x/y圖的X維度中被表示,而字段2可以在x/y圖的y維度中被表示。
[0075]圖2圖示分類器表100的規(guī)則的幾何表示。規(guī)則在X維度205和y維度210中數(shù)值范圍為0-255。如所圖不的,圖的每個維度基于來自分類器表100的每個規(guī)則的每個字段的范圍被細分。
[0076]圖3A圖示從分類器表100編譯的決策樹數(shù)據(jù)結構300。決策樹300包含一組單元,被稱作節(jié)點(301、305、310、315、320、325、330),其是空的,或者滿足下面的條件之一:i)存在辨別的節(jié)點r,被稱作根節(jié)點,以及ii)剩余的節(jié)點被分成不相交的子組,每個子組是子樹。如所圖示的,節(jié)點301是決策樹的根節(jié)點和305、310、325和330的母節(jié)點,它們被認為是根節(jié)點301的子節(jié)點。節(jié)點的度(degree)是節(jié)點包含的非空子樹的個數(shù)。具有零度的節(jié)點被認為是葉節(jié)點。因此,節(jié)點305、315、320、325和330被認為是葉節(jié)點。具有正度(positive degree)的節(jié)點是內(nèi)部節(jié)點(例如,節(jié)點310)。
[0077]決策樹300的每個節(jié)點包含分類器表的規(guī)則的子組。如上面所陳述的,每個規(guī)則具有“F”字段,并且規(guī)則R的第i字段(被稱作R[i])是在所接收的包頭的第i字段上的正則表達式。如果對于每個i,P的頭的第i字段滿足正則表達式R[i],那么包P匹配具體的規(guī)則R。因此,在包被接收時,決策樹被遍歷(例如,通過運行時間遍歷器)來確定匹配規(guī)則,該匹配規(guī)則被用于確定對所接收的包采取的動作。
[0078]例如,如果包被接收,這個包包含了頭匹配規(guī)則R7 (見圖1 ),那么決策樹300被遍歷(例如,被穿越)以發(fā)現(xiàn)匹配規(guī)則R7。因此,包首先經(jīng)過根節(jié)點301,其包含了包分類表中所有的規(guī)則,其被剪切成四個子節(jié)點。剪切節(jié)點指代將節(jié)點細分成η個子節(jié)點。所創(chuàng)建的η個子節(jié)點對應于所進行的節(jié)點的剪切(細分)的個數(shù)。在這個示例中,在根節(jié)點301中的規(guī)則被細分成四個不同的范圍(對應于每個子節(jié)點305、310、325和330)。因此,確定包應該被傳給包含規(guī)則的子組的子節(jié)點330,該子組具有在所接收包的每個頭的范圍內(nèi)的字段。在包被傳給節(jié)點330之后,包與規(guī)則R7相匹配。
[0079]本文中所描述的示例實施例通過仔細地預處理分類器來建立決策樹數(shù)據(jù)結構。每次包到達,運行時間遍歷器穿過決策樹以發(fā)現(xiàn)存儲少量規(guī)則的葉節(jié)點。一旦到達葉節(jié)點,在葉節(jié)點內(nèi)的規(guī)則的線性搜索發(fā)生,以發(fā)現(xiàn)匹配規(guī)則。
[0080]在建立決策樹期間,本文中所描述的實施例確定決策樹的形狀和深度。
[0081]圖3Β圖示決策樹數(shù)據(jù)結構350,其包括根節(jié)點352和葉節(jié)點354a_e,并且具有深度 356。
[0082]圖3C圖示決策樹數(shù)據(jù)結構(360)的深度和形狀。例如,樹數(shù)據(jù)結構362具有深度366,其相比于決策樹數(shù)據(jù)結構364的深度368是淺的。在決策樹數(shù)據(jù)結構中的子樹的個數(shù)可以改變決策樹數(shù)據(jù)結構的形狀,例如單個子樹370相比一組子樹372。
[0083]此外,本文中所描述的實施例確定在決策樹的節(jié)點處哪個字段被剪切,以及在字段上進行剪切的個數(shù),以基于剪切的字段和在字段上進行剪切的個數(shù)來創(chuàng)建子節(jié)點。
[0084]圖4是用于建立決策樹的方法400的流程圖。方法開始(405)。該方法對包括規(guī)則的分類器表進行分析以用于對包進行分類(410)。如上面所陳述的,在分類器表中的每個規(guī)則具有‘F’字段。該方法分析分類器表來確定多個規(guī)則和與每個規(guī)則相關聯(lián)的多個字段?;谠摲治觯?15,該方法確定能夠在規(guī)則的每個字段“F”上進行的最大個數(shù)的剪切。例如,剪切的最大個數(shù)可以基于給定的存儲容量。該方法可以針對決策樹的每個節(jié)點確定在其上剪切節(jié)點的字段“F”,以創(chuàng)建子節(jié)點(420),然后方法結束(425)。確定能夠在每個字段“F”上進行剪切的個數(shù)可以平衡效率和存儲器的要求。在字段上大量的剪切可以減少決策樹的深度,加快查詢時間;但是,剪切的個數(shù)太大會增加存儲的需求。
[0085]圖5是用于確定在其上剪切節(jié)點的字段的方法500的流程圖。針對每個字段的剪切,通過計算在由那個剪切所產(chǎn)生的孩子中規(guī)則的平均個數(shù),可以計算每個孩子的規(guī)則的實際個數(shù)和平均之間的差異,并且然后這些差異可以被平均,以使得具有最小這種平均差異的字段可以被選擇。在平均上更淺的樹可以被建立,從而導致更短的搜索時間。
[0086]方法開始(505 ),并且基于所確定的在每個字段上進行的剪切的個數(shù)(方法400的415),確定通過剪切每個字段(510)所生成的子節(jié)點中規(guī)則的平均個數(shù)。該方法計算在每個子節(jié)點中規(guī)則的實際個數(shù)和在每個子節(jié)點中所確定的規(guī)則的平均個數(shù)之間的差異(515)。該方法計算所計算的差異的平均(520)。該方法在具有最小平均差異的字段上剪切決策樹的節(jié)點(525)。
[0087]方法400和500在決策樹的每個節(jié)點上被迭代,直到具有不多于給定個數(shù)的規(guī)則的葉節(jié)點被創(chuàng)建。給定個數(shù)是可調(diào)整的。方法400和500通過以表示完整的規(guī)則列表的根節(jié)點為開始來開始建立決策樹。使用方法400,確定在每個維度(字段)上進行剪切的個數(shù)。
[0088]一旦確定在每個維度(字段)上進行剪切的個數(shù),方法500被用于確定哪個維度來剪切決策樹的根節(jié)點。根節(jié)點上的剪切導致子節(jié)點被創(chuàng)建。
[0089]方法400和500在每個子節(jié)點上被重復,直到剩余的節(jié)點僅是葉節(jié)點(例如,基于在子節(jié)點中規(guī)則的個數(shù)和針對子節(jié)點的規(guī)則的給定可調(diào)整閾值個數(shù),而不能夠進行附加剪切的節(jié)點)。換句話說,本地決策在每個節(jié)點處進行,其導致了整個的決策樹。
[0090]圖6是圖示在分類表中對規(guī)則的字段進行剪切的圖。分類器表的字段-1601被剪切成4個孩子,而每個孩子分別包含6、4、8和2個規(guī)則。分類器表的字段-2605也被剪切成4個孩子,每個孩子分別包含4、6、4和6個規(guī)則。參照方法500的510,通過剪切每個字段,子節(jié)點中平均個數(shù)的規(guī)則被確定。如在圖6中所圖示的,每個子節(jié)點在字段-1和字段-2中的規(guī)則的平均個數(shù)都是5個規(guī)則。進一步,圖6圖示了在每個子節(jié)點中規(guī)則的實際個數(shù)和平均差異之間所計算的差異,對應于方法500的515。然后所計算的差異的平均被計算。對于字段_1601,平均差異是2,而對于字段-2605,平均差異是I。因此,參照方法500的525,在字段-2605上節(jié)點被剪切,這是由于平均差異少于針對字段-1601所計算的平均差異。
[0091]一旦針對節(jié)點的剪切被選擇,本文中所描述的實施例確定是否合并由節(jié)點的孩子所進行的剪切。合并導致將母節(jié)點和母節(jié)點的孩子組合成單個節(jié)點。例如,如果子節(jié)點在不同于母節(jié)點的字段上被剪切,那么結果將是母節(jié)點在多個字段上剪切。
[0092]此外,在與母節(jié)點相同的字段上剪切的子節(jié)點還可以通過放松空間限制來與母節(jié)點合并。從合并產(chǎn)生的節(jié)點可以有達到絕對最大個數(shù)的孩子;例如,不受啟發(fā)公式,諸如最大空間公式的約束。
[0093]例如,規(guī)則組(例如,分類器表)可以包含具有三元組或字段,即Fl、F2和F3的規(guī)貝U。在這個示例中,根節(jié)點(NO)可以在Fl上剪切,并且剪切的個數(shù)可以是四。例如,可以被采用Fl的2個比特來決定剪切標識符。結果可以是根節(jié)點具有4個孩子,例如,N1、N2、N3和N4。如果NI在Fl上被剪切并且具有4個剪切,例如Fl的2個比特可以被采用以決定剪切標識符,則NI將具有4個孩子,例如N11、N12、N13、N14。如果N2在F2上被剪切,并且具有4個剪切,例如,F(xiàn)2的2個比特被采用以決定剪切標識符,N2將有4個孩子,例如,N21、N22、N23、N24。如果N3在Fl上被剪切,并且具有4個剪切,例如,F(xiàn)l的2個比特被采用以決定剪切標識符,N3將有4個孩子,例如,N31、N32、N33、N34。如果N4在F3上被剪切,并且具有4個剪切,例如,F(xiàn)3的2個比特被采用以決定剪切標識符,N4將有4個孩子,例如,N41、N42、N43、N44。示例描述NO可以在3個字段,例如F1、F2和F3上被剪切,并且總的剪切將是256。Fl的4個比特、F2的2個比特和F3的2個比特可以被組合為8比特以剪切NO,從而產(chǎn)生256個孩子。更少個數(shù)的層次被提供,因為相比于之前的3個層次,只有2個層次。N1、N2、N3、N4的層被移除,而根節(jié)點NO以及具有它的256個孩子。在這個示例中的結果是在樹中的節(jié)點的總數(shù)是257,相比于合并之前在原始的樹中的21。在存儲和性能折中之間進行平衡。例如,樹的層次可以犧牲樹中更多節(jié)點而被減少。
[0094]圖7是用于合并決策樹的節(jié)點的方法700的流程圖。方法開始(705),并且確定針對原始節(jié)點(例如,母節(jié)點)所創(chuàng)建的子節(jié)點的字段和個數(shù)(710)。該方法針對每個子節(jié)點采用類似的確定。方法確定由合并所產(chǎn)生的子節(jié)點的個數(shù)(720)。方法確定所得到的子節(jié)點的個數(shù)是否在子節(jié)點的預先確定的最大個數(shù)之內(nèi)(725)。如果不是,方法結束(735)。如果是,方法合并節(jié)點(730)。方法700針對新的子節(jié)點組進行迭代,直到合并不再可能。預先確定的最大值可以在每次迭代時被調(diào)整。作為結果,樹可以被建立地更寬和更淺,導致更短的搜索時間。
[0095]圖8A-C示出合并節(jié)點的圖解示例。圖8A是在單個節(jié)點801上在分類器表中的規(guī)則的字段上所進行的剪切的圖解示例。例如,圖8A圖示單個節(jié)點801,其具有只有兩個字段(字段-1805和字段-2810)的規(guī)則。如字段-1805的細分所表示的,由節(jié)點801被細分(例如,剪切)成四個子節(jié)點815,820,825和830。
[0096]圖8B圖示在節(jié)點801的子節(jié)點815、820、825、830上所進行的剪切。例如,子節(jié)點815在字段-1805上被剪切,從而創(chuàng)建了子節(jié)點835和840。子節(jié)點820、825和830在字段-2810上被剪切,從而創(chuàng)建了子節(jié)點845-870。
[0097]圖8C圖示子節(jié)點815-830和845-870的合并。如所圖示的,現(xiàn)在根節(jié)點801在字段-1805和字段-2810上被剪切,從而創(chuàng)建了 16個子節(jié)點。
[0098]有時,甚至在節(jié)點被剪切成最大個數(shù)的孩子時,只有一個孩子具有任何規(guī)則,因為所有節(jié)點的規(guī)則被簇成搜索空間的一個小區(qū)域。
[0099]圖9A示出被剪切從而導致子節(jié)點915具有分類器表的所有規(guī)則920的節(jié)點901的圖解示例。即使在按因子8將字段-1905和字段-2910剪切成總共64個孩子之后,所有節(jié)點的原始規(guī)則也由單個子節(jié)點915來繼承。運行時間遍歷器可以被用于使得接收的包穿過決策樹數(shù)據(jù)結構以獲得匹配規(guī)則。在這種情況下,運行時間遍歷器可能必須花費時間穿過這個節(jié)點,但是沒有實現(xiàn)搜索空間的任何細分。鑰匙,諸如從包的頭元組中抽取的數(shù)據(jù),可以被運行時間遍歷器用于與規(guī)則進行匹配。在這種情況下,為了著手處理能夠用于在規(guī)則中進行選擇的比特,運行時間遍歷器實現(xiàn)的唯一事情是消耗鑰匙中的下面少數(shù)比特。這里的實施例可以在遍歷器穿過節(jié)點時,在每個節(jié)點處存儲運行時間遍歷器應當略過的多個比特以及其比特將被略過的字段的編號(標識符)。作為結果,運行時間遍歷器必須穿過的樹節(jié)點的個數(shù)可以被減少,導致更短的搜索時間。
[0100]本文中所描述的實施例包括至少三個數(shù)據(jù)結構,其包括:i)樹,ii)桶,以及ii)規(guī)則表。樹包括節(jié)點和葉節(jié)點。葉節(jié)點可以被鏈接至桶。葉節(jié)點可以指向桶,桶可以包含一組規(guī)則。本文中所描述的實施例可以在公共表中存儲規(guī)則,并且由葉節(jié)點指向的桶可以包含與規(guī)則表中的規(guī)則相對應的規(guī)則編號。桶可以以本領域技術人員所已知的任何合適的形式包括規(guī)則。每個桶可以是可以包括一個或多個桶條目的數(shù)據(jù)結構。桶條目可以是規(guī)則、規(guī)則的索弓丨、指向規(guī)則的指針、指向一組規(guī)則的指針或者指向另一個桶的指針。桶可以包括鏈接至規(guī)則的列表。桶可以包括包含它們的任何組合的條目。例如,桶可以具有作為指向規(guī)則的指針的一個條目,以及作為指向一組規(guī)則的指針的一個條目等。規(guī)則優(yōu)先級可以以任何合適的形式與規(guī)則一起被存儲或者鏈接至規(guī)則。
[0101]圖9B是樹950、指向(960)包含分類器規(guī)則表958的一組規(guī)則956的桶954的葉節(jié)點952的示例實施例的圖示。
[0102]圖9C是圖示將一組規(guī)則編譯進入決策樹數(shù)據(jù)結構的示例實施例的方框圖970。軟件編譯器972可以接收規(guī)則組974、最大樹深度976和多個子樹978。軟件編譯器972可以生成一組編譯的規(guī)則980。
[0103]圖9D圖示包括書、桶和規(guī)則的決策樹數(shù)據(jù)結構981。一組編譯的規(guī)則980可以生成決策樹數(shù)據(jù)結構981,其包括樹982、桶983a-d和規(guī)則985。樹982可以包括根節(jié)點984、節(jié)點984a-c和葉節(jié)點986a-b。樹982的每個葉節(jié)點986指向桶983。每個桶可以包括一個或多個桶條目987。葉節(jié)點可以包括桶信息,其可以被用于定位桶條目或者條目的桶列表。桶條目可以是指向規(guī)則的指針(988),或者指向一組規(guī)則(990)的指針(989)。一組規(guī)則990可以是連續(xù)的一組規(guī)則,或者遍及存儲器而分散的一組規(guī)則,其或者通過多個指針或者通過用來重新收集一組規(guī)則的方法來組織。一組規(guī)則990還可以被稱作塊,或者規(guī)則塊。指向一組規(guī)則990的桶條目可以被稱為塊指針。
[0104]本文中所描述的實施例識別i)桶復制,ii)規(guī)則復制,iii)節(jié)點復制和iv)優(yōu)先級復制。一旦決策樹被建立,可以確定一些葉節(jié)點指向包含相同規(guī)則的桶(例如,復制規(guī)則)或者一些可以指向包含部分復制的桶。本文中所描述的實施例識別數(shù)據(jù)的復制,并且確定如何重新使用或者共享所復制的數(shù)據(jù),以使得只有所復制的數(shù)據(jù)的單個實例。
[0105]本文中所描述的實施例可以去除復制桶,從而只保持單個復制。例如,在一些場景中,不同的葉節(jié)點可以具有包含相同規(guī)則的桶。在這種情形中,單個桶被存儲,并且所有葉節(jié)點指向相同的桶。因此,被要求來保持給定樹的存儲器可以被減少。
[0106]在一些場景中,當母節(jié)點被剪切以生成子節(jié)點時,一些子節(jié)點繼承相同的規(guī)則組。這被稱作節(jié)點復制。例如,如果母節(jié)點具有從規(guī)則Rl到規(guī)則RlOO的100個規(guī)則,并且母節(jié)點被剪切為64個孩子,那么64個子節(jié)點中的數(shù)個孩子可以繼承相同的規(guī)則。本文中所描述的實施例可以識別包含相同規(guī)則組的子節(jié)點,并且只處理具有相同規(guī)則的節(jié)點中的一個節(jié)點。
[0107]圖1OA是圖示識別包含相同規(guī)則組的子節(jié)點的方法(1080)的流程圖。方法開始(1082)并且比較由具有相同母節(jié)點(1084)的子節(jié)點所表示的規(guī)則子組。具有相同父母的子節(jié)點可以被稱作兄弟姐妹。相同父母的包含相同規(guī)則組的的子節(jié)點被識別為復制子節(jié)點(1086)。一組復制子節(jié)點的一個子節(jié)點可以被選擇(標記)為唯一的子節(jié)點(1088)。一組復制子節(jié)點的其他復制子節(jié)點可以被鏈接至與唯一的子節(jié)點相同的子樹(1090)。唯一的子節(jié)點可以被用于決策樹結構的后續(xù)構建,并且一組復制子節(jié)點的其他子節(jié)點可以不被用于決策樹結構的后續(xù)構建(1092),并且方法結束(1094)。
[0108]如上所陳述的,包分類可以導致從規(guī)則分類表中多于一個規(guī)則的匹配。具有最高優(yōu)先級的規(guī)則被選擇用于分類所接收的包。本文中所描述的實施例可以針對重疊的規(guī)則確定規(guī)則的優(yōu)先級。本文中所描述的實施例可以基于重疊準則對規(guī)則進行分類,而不是針對在規(guī)則分類表中的每個規(guī)則存儲唯一的優(yōu)先級,其是資源集中的,并且要求大量的存儲空間。規(guī)則可以被分類成優(yōu)先級組,并且在每個優(yōu)先級組內(nèi)的規(guī)則可以被分配唯一的優(yōu)先級。在優(yōu)先級組內(nèi)的規(guī)則競爭匹配。通過在優(yōu)先級組內(nèi)分配唯一的優(yōu)先級,競爭規(guī)則被優(yōu)先化。但是,優(yōu)先級只是在優(yōu)先級組內(nèi)唯一,因此相同的優(yōu)先級值可以與不競爭的規(guī)則共享,從而減少了所需要的優(yōu)先級值的總數(shù)。優(yōu)先級復制通過基于每個重疊準則而提供優(yōu)先級值,而不是要求對每個規(guī)則存儲唯一的優(yōu)先級值,來節(jié)省存儲空間。
[0109]圖1OB是用于優(yōu)先級復制(1020)的方法的流程圖。方法開始(1022),并且基于規(guī)則是否競爭來對規(guī)則進行分組(1024)。優(yōu)先級值可以被分配給多個規(guī)則。唯一的優(yōu)先級值可以在每組競爭的規(guī)則內(nèi)被分配(1026)。非競爭的規(guī)則可以被分配給優(yōu)先級,被分配給非競爭的規(guī)則的優(yōu)先級可以和競爭的規(guī)則組內(nèi)所分配的唯一的優(yōu)先級相重疊(1028)。存儲決策樹結構可以存儲多個規(guī)則和所分配的優(yōu)先級值(1030),并且方法結束(1032)。
[0110]圖1OC圖示在決策樹的節(jié)點中去除規(guī)則的復制桶的圖解示例(1000)。如所圖示的,節(jié)點1005具有4個葉節(jié)點1002、1004、1006和1008。節(jié)點1005示出包含一組規(guī)則的4個桶 1010a-d,桶 1010a-d 由葉節(jié)點 1002、1004、1006 和 1008 分別指向(1012、1014、1016、1018)。桶1010a、1010c和IOlOd都包含相同的規(guī)則。因為桶1010a、1010c和IOlOd被識別包含相同的規(guī)則,復制桶1010c和IOlOd可以從存儲器中去除,只保持唯一的桶1010a和IOlOb0
[0111]圖10D示出節(jié)點1005導致具有包含需要在存儲器中存儲的規(guī)則的兩個桶(1010a和1010b)。因此,節(jié)點1005的葉節(jié)點1002、1004、1006和1008只需要指向包含在桶1010a和1010b中的一組規(guī)則的存儲器位置。例如,葉節(jié)點1002、1006和1008都指向(1013)桶1010a,并且葉節(jié)點1004指向(1011)桶1010b。
[0112]圖10E是在決策樹的節(jié)點中去除規(guī)則的復制桶的方法(1040)的流程圖。方法1040開始1042,并且識別規(guī)則的復制桶(1044)。如果規(guī)則的復制桶不被識別,方法結束(1049)。如果規(guī)則的復制桶被識別,復制桶被去除(1046),并且葉節(jié)點被更新以指向唯一的桶(1048),并且方法結束(1049)。[0113]桶復制不限于具有相同父母的子節(jié)點(例如,兄弟姐妹)。
[0114]圖1OF是根據(jù)一個實施例的桶復制的圖解示例。樹(1070)的一部分被示出包括母節(jié)點1072,其具有子節(jié)點1078a和1078b (葉子)以及孫子節(jié)點1074。子節(jié)點1078b (葉子)和孫子節(jié)點1076 (葉子)分別指向桶1076和1073。桶1076和1073是復制桶,每個包括復制規(guī)則組(例如,Rl和R2)。桶1073可以通過將子節(jié)點1078b指向1071由孫子節(jié)點1074所指向的桶1076來去除。
[0115]圖1OG是在決策樹的節(jié)點中規(guī)則的部分復制桶的圖解示例。樹的一部分(1050)被示出包括母節(jié)點1052和分別指向桶1054a和1056a的兩個孩子(葉子)1054和1056。桶1054a和1056a具有規(guī)則Rl和R2的部分復制組。在每個桶中的一組規(guī)則可以被分成子組。例如,在桶1054a中的規(guī)則可以被分成包括Rl和R2的第一組1058a和包括R3和R4的第二組1058b。在桶1056a中的規(guī)則可以被分成包括Rl和R2的第一組1058c和包括R7的第二組1058d。桶條目可以由塊指針的鏈接的列表或者指向多組規(guī)則的指針來代替。桶1054a’圖示桶1054a具有桶條目由塊指針CO和Cl的鏈接的列表來代替。類似地,桶1056a’圖示桶1056a具有桶條目由塊指針CO和C2的鏈接的列表來代替。塊指針CO指向包括Rl和R2的一組規(guī)則,塊指針Cl指向包括R3和R4的一組規(guī)則,以及塊指針C2指向包括R7的一組規(guī)則。
[0116]圖1lA是針對在決策樹的節(jié)點中的規(guī)則的部分復制桶的方法(1150)的流程圖。方法開始(1152),并且識別一組部分復制桶(1154)。每個部分復制桶包括復制部分規(guī)則組。在每個桶中的規(guī)則被分成第一規(guī)則組和第二規(guī)則組。第一規(guī)則組包括復制部分規(guī)則組,并且第二規(guī)則組包括該桶的任何剩余規(guī)則(1156)。給第一規(guī)則組和第二規(guī)則組創(chuàng)建鏈接(塊指針),并且桶被鏈接至所創(chuàng)建的鏈接(1158),并且方法結束(1160)。每個部分復制桶可以被修改以存儲塊指針的鏈接的列表。所示出的組的個數(shù)是圖示,如果有多個部分復制,那么可以有多個組。
[0117]如上面所描述的,規(guī)則可以具有多個字段。規(guī)則的每個字段表示到來的包的頭中的字段。包頭通常包括至少兩個字段,一個字段包含源IP地址字段,以及第二字段包含目標IP地址字段。規(guī)則可以在表示到來的包中的源IP地址字段和目標IP地址字段中的一個字段或者兩個字段中包含IP通配符。
[0118]本文中所描述的實施例可以將規(guī)則分成多個分類。分類可以基于字段的功能。規(guī)則可以以任何合適的形式被分成分類。規(guī)則可以基于字段的功能。例如,規(guī)則可以基于它們在源和目標IP地址字段中是否具有通配符來分類。分類可以如下:1)在源或目標字段中都不具有通配符的規(guī)則,2)在源和目標字段中都有通配符的規(guī)則,3)在源字段中有通配符,而在目標字段中沒有通配符的規(guī)則,以及4)在目標字段中有通配符,而在源字段中沒有通配符的規(guī)則。字段可以是任何字段和任何個數(shù)的字段。例如,三個字段可以被用于分類,導致8個分類。此外,替代完整的通配符,分類可以基于字段是“大的”還是“小的”。大和小可以由字段值的范圍和它的總空間的比值來限定。
[0119]圖1lB圖示用于將分類器表解析為規(guī)則的分類并且針對每個分類建立決策樹的方法1100。方法1100在1105開始,并且然后方法1100分析分類器表,并且將表解析為規(guī)則的分類(1100 )。對于每個規(guī)則的分類,方法1100建立決策樹(1115),并且方法結束(1125)。
[0120]圖1lC圖示用于選擇匹配規(guī)則的方法1130。方法1130在1132開始。所接收的包由運行時間遍歷器經(jīng)過每個決策樹來進行遍歷(1134)。如果匹配規(guī)則被選擇,每個決策樹返回匹配規(guī)則(1136)。每個匹配規(guī)則的優(yōu)先級被比較(1138),并且具有最高優(yōu)先級的匹配規(guī)則被選擇(1140 ),并且方法結束(1142)。
[0121]互聯(lián)網(wǎng)路由器將包進行分類以實施多個高級的互聯(lián)網(wǎng)服務,諸如路由、速率限制、在防火墻中的接入控制、虛擬帶寬分配、基于策略的路由、服務區(qū)分、負載平衡、流量整形和流量付費。這些服務要求路由器將到來的包分類成不同的流,并且然后依據(jù)這種分類執(zhí)行適當?shù)牟僮鳌?br>
[0122]圖12是圖示系統(tǒng)1200的方框圖,其包括路由器/包分類器1210、所保護的網(wǎng)絡1215和公共網(wǎng)絡1205。公共網(wǎng)絡1205可以包括非保護的廣域網(wǎng)(WAN),諸如互聯(lián)網(wǎng)、無線網(wǎng)絡、局域網(wǎng)或其他類型的網(wǎng)絡。所保護的網(wǎng)絡1215可以包括安全的計算機網(wǎng)絡,諸如在辦公室或數(shù)據(jù)中心中的局域網(wǎng)(LAN)。如所圖示的,LAN可以是包括多個工作站1225的企業(yè)網(wǎng)絡1220。多個工作站1225可以操作上被耦合至數(shù)據(jù)庫1230、FTP (文件傳輸協(xié)議)服務器1235和內(nèi)部網(wǎng)服務器1250。
[0123]在系統(tǒng)1200中,路由器1210被連接至公共網(wǎng)絡1205和所保護的網(wǎng)絡1215,以使得從公共網(wǎng)絡1205流到所保護的網(wǎng)絡1215的網(wǎng)絡流量首先流向路由器1210。路由器1210可以是單獨的網(wǎng)絡設備、另一個網(wǎng)絡設備的部件(例如,防火墻設備)、在網(wǎng)絡設備上執(zhí)行的軟件模塊,或者另一個配置。路由器1210可以被連接至規(guī)則數(shù)據(jù)中心1240。通常,路由器1210檢查來自公共網(wǎng)絡1205的網(wǎng)絡流量,并且確定在網(wǎng)絡流量上執(zhí)行哪些動作。例如,路由器1210將包進行分類以實施多個高級的互聯(lián)網(wǎng)服務,諸如路由、速率限制、在防火墻中的接入控制、虛擬帶寬分配、基于策略的路由、服務區(qū)分、負載平衡、流量整形和流量付費。這些服務要求路由器1210將到來的包分類成不同的流,并且然后依據(jù)這種分類執(zhí)行適當?shù)牟僮鳌?br>
[0124]圖13是可以被用于本文中所描述的實施例的示例性路由器1300的高級方框圖。路由器1300包括經(jīng)由存儲器總線1345被耦合至處理器1325的存儲器1310,以及存儲器1330和經(jīng)由輸入/輸出(I/O)總線1350被耦合至處理器1325的網(wǎng)絡接口 1340。應注意,路由器1300可以包括其他設備,諸如鍵盤、顯示單元等。網(wǎng)絡接口 1340連接路由器1300和安全的網(wǎng)絡1215、公共網(wǎng)絡1205和規(guī)則數(shù)據(jù)中心1240,并且使得數(shù)據(jù)(例如,包)在路由器和系統(tǒng)1200中的其他節(jié)點之間被傳輸。為此,網(wǎng)絡接口 1340包括合并信號(電氣和機械特性)的傳統(tǒng)電路,以及被需要和系統(tǒng)1200的物理介質(zhì)以及在該介質(zhì)上運行的協(xié)議進行接口連接的交換電路。
[0125]存儲器1310是非瞬態(tài)計算機可讀介質(zhì),被作為包括RAM的RAM設備進行實施,諸如DRAM設備和/或閃存設備。存儲器1310包含被處理器1325所使用的各種軟件和數(shù)據(jù)結構,包括實施本文中所描述的實施例的各方面的軟件和數(shù)據(jù)結構。具體地,存儲器1310包括操作系統(tǒng)1315和包分類服務1320。操作系統(tǒng)1315功能上通過調(diào)用支持在路由器1300上執(zhí)行的軟件處理和服務(諸如包分類服務1320)的操作來組織路由器1300。如將在下面所描述的,包分類服務1320包括計算機可執(zhí)行指令來根據(jù)給定的規(guī)則編譯決策樹數(shù)據(jù)結構,并且通過所編譯的決策樹數(shù)據(jù)結構遍歷到來的數(shù)據(jù)包。
[0126]存儲設備1330是傳統(tǒng)的存儲設備(例如,磁盤),其包括作為數(shù)據(jù)結構的規(guī)則數(shù)據(jù)庫(DB) 1335,該數(shù)據(jù)結構被配置為保持被用于根據(jù)給定的一組規(guī)則編譯決策樹數(shù)據(jù)結構的各種信息。信息可以包括具有與到來的數(shù)據(jù)包的頭相對應的多個字段的規(guī)則。
[0127]應理解,方塊、流、網(wǎng)絡圖可以包括被不同布置或者被不同表示的更多或者更少的單元。應理解,實施方式可以規(guī)定圖示了本文中所描述的實施例的執(zhí)行的方塊、流、網(wǎng)絡圖以及方塊、流、網(wǎng)絡圖的個數(shù)。
[0128]應理解,上面所描述的塊、流、網(wǎng)絡圖的單元可以在軟件、硬件或固件中被實施。此夕卜,上面所描述的塊、流、網(wǎng)絡圖的單元可以在軟件、硬件或固件中以任何形式被組合或分解。如果在軟件中被實施,軟件可以用能夠支持本文中所公開的實施例的任何語言被寫入。軟件可以被存儲于任何形式的計算機可讀介質(zhì)上,諸如隨機訪問存儲器(RAM)、只讀存儲器(ROM)、光盤只讀存儲器(⑶-ROM)以及任何非瞬態(tài)形式的計算機可讀介質(zhì)。在操作中,通用或?qū)S玫奶幚砥饕员绢I域中容易理解的形式加載并且執(zhí)行軟件。
[0129]雖然本發(fā)明參照其中的示例實施例被具體地示出和描述,但是本領域的技術人員將理解,在不背離由所附權利要求所包含的本發(fā)明的范圍的前提下,可以在其中進行形式和細節(jié)上的各種改變。
【權利要求】
1.一種方法,包括: 使用具有多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段,建立包括多個節(jié)點的決策樹結構,每個節(jié)點表示所述多個規(guī)則的子組; 對于所述決策樹的每個節(jié)點,Ca)確定可以在至少一個字段的每個字段上進行的若干剪切,從而創(chuàng)建等于剪切的個數(shù)的子節(jié)點; (b)基于對所創(chuàng)建的每個子節(jié)點的規(guī)則的平均個數(shù)與在至少一個字段的每個字段所創(chuàng)建的每個子節(jié)點的規(guī)則的實際個數(shù)之間的平均差異的比較,選擇在其上剪切所述節(jié)點的字段; (c)在所選擇的字段上將所述節(jié)點剪切成若干子節(jié)點,以及 存儲所述決策樹結構。
2.根據(jù)權利要求1所述的方法,其中確定所述剪切的個數(shù)是基于針對給定的存儲容量的剪切的最大個數(shù)。
3.根據(jù)權利要求1所述的方法,其中選擇包括基于如下字段,即所述至少一個字段中的、具有在每個子節(jié)點的規(guī)則的平均個數(shù)和每個子節(jié)點的規(guī)則的實際個數(shù)之間的最小平均差異的字段,而選擇在其上將所述節(jié)點剪切成若干子節(jié)點的字段。
4.根據(jù)權利要求1所述的方法,其中剪切包括僅在所述節(jié)點具有比所述多個規(guī)則的所述子組的預定個數(shù)更多時,剪切所述節(jié)點。
5.根據(jù)權利要求4所述的方法,其中所述預定個數(shù)是可調(diào)整的個數(shù),所述方法進一步包括通過迭代地調(diào)整所述預定個數(shù)來控制所述決策樹結構的深度。
6.根據(jù)權利要求5所 述的方法,其中調(diào)整所述預定個數(shù)包括隨著所述樹的層次的增加而遞增所述預定個數(shù)。
7.根據(jù)權利要求1所述的方法,其中如果剪切創(chuàng)建了多個子節(jié)點,并且只有一個子節(jié)點具有所述多個規(guī)則的子組,那么在所述節(jié)點處存儲所述至少一個字段中的字段的標識符以及所述至少一個字段中的、在遍歷所述節(jié)點以獲得規(guī)則匹配時略過的所述字段中的若干比特。
8.根據(jù)權利要求7所述的方法,其中所述至少一個字段中的、略過的所述字段的比特的個數(shù)與用于剪切所述節(jié)點的若干比特的個數(shù)相同。
9.根據(jù)權利要求1所述的方法,進一步包括: 在建立所述決策樹結構時,對于所述決策樹的每個層次,比較由具有相同母節(jié)點的子節(jié)點所表示的規(guī)則子組; 識別復制子節(jié)點組,所述復制子節(jié)點組具有所述多個規(guī)則的復制的子組; 選擇被識別的所述復制子節(jié)點組的一個子節(jié)點作為唯一的子節(jié)點; 將被識別的所述復制子節(jié)點組的其他子節(jié)點鏈接至與所述唯一的子節(jié)點相同的子樹; 使用所述唯一的子節(jié)點用于所述決策樹結構的后續(xù)建立;以及 抑制使用將被識別的所述復制子節(jié)點組的所述其他子節(jié)點用于所述決策樹結構的后續(xù)建立。
10.根據(jù)權利要求1所述的方法,進一步包括將所述分類器表中的所述多個規(guī)則分組成多個規(guī)則分類,并且針對所述多個規(guī)則分類中的每個規(guī)則分類建立包括多個節(jié)點的決策樹結構。
11.根據(jù)權利要求10所述的方法,其中所述多個規(guī)則分類是基于應用于所述多個規(guī)則的一個或多個字段功能,或者所述一個或多個字段功能的組合。
12.根據(jù)權利要求11所述的方法,其中一個或多個字段功能包括應用非互聯(lián)網(wǎng)協(xié)議(IP)地址通配符、源IP但不是目標IP通配符、目標IP但不是源IP通配符、目標和源地址通配符、字段范圍比較以及與一個或多個所述至少一個字段相關聯(lián)的一個或多個掩碼。
13.根據(jù)權利要求10所述的方法,進一步包括將所接收的包遍歷所建立的每個決策樹,并且比較從每個樹得到的規(guī)則以選擇最終的匹配。
14.根據(jù)權利要求13所述的方法,其中所選擇的所述最終的匹配是具有最高優(yōu)先級的規(guī)則。
15.根據(jù)權利要求1所述的方法,進一步包括: 將具有以下若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,所述若干規(guī)則小于或等于規(guī)則的給定個數(shù); 針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,所述相應的桶包括所轉換的所述子節(jié)點的規(guī)則;` 將每個葉節(jié)點鏈接至所創(chuàng)建的所述相應的桶; 識別復制桶組,每個復制桶包括相同的規(guī)則組; 選擇所述復制桶組中的一個桶,并且去除所述復制桶組的其他桶;以及 將到所去除的桶的鏈接改變成到所選擇的所述一個桶的鏈接。
16.根據(jù)權利要求1所述的方法,進一步包括: 將具有以下若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,所述若干規(guī)則小于或等于規(guī)則的給定個數(shù); 針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,所述相應的桶包括所轉換的所述子節(jié)點的規(guī)則; 將每個葉節(jié)點鏈接至所創(chuàng)建的所述相應的桶; 識別部分復制桶組,每個部分復制桶包括復制部分規(guī)則組; 將在所述部分復制桶組中的每個桶中的規(guī)則分成針對每個桶的第一規(guī)則組和第二規(guī)則組,針對每個桶的所述第一規(guī)則組包括所述復制部分規(guī)則組,并且針對每個桶的所述第二規(guī)則組包括針對每個桶的任何剩余的規(guī)則;以及 在每個部分復制的桶中創(chuàng)建到所述第一規(guī)則組的鏈接,并且在每個部分復制桶中創(chuàng)建到所述第二規(guī)則組的鏈接。
17.根據(jù)權利要求16所述的方法,其中每個部分復制桶包括到所述第一規(guī)則組和所述第二規(guī)則組的指針的鏈接列表。
18.根據(jù)權利要求1所述的方法,其中所述決策樹結構是二進制數(shù)據(jù)結構。
19.根據(jù)權利要求1所述的方法,其中所述決策樹結構從所述分類器表被編譯。
20.根據(jù)權利要求1所述的方法,其中對應每個規(guī)則的優(yōu)先級被存儲于所述決策樹結構中。
21.根據(jù)權利要求1所述的方法,包括確定規(guī)則是否被一個或多個其他規(guī)則覆蓋,并且如果所述規(guī)則被覆蓋,則從所述決策樹結構中忽略所述規(guī)則。
22.根據(jù)權利要求21所述的方法,其中確定包括針對每個節(jié)點確定包括由更高級的節(jié)點所表示的所述多個規(guī)則的所述子組中的子組。
23.—種方法,包括: 使用具有多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段,建立包括多個節(jié)點的決策樹結構,每個節(jié)點表示所述多個規(guī)則的子組; 針對所述決策樹的每個層次,基于母節(jié)點的子節(jié)點的結果總數(shù)不大于給定的閾值,確定是否合并所述母節(jié)點的孫子和所述母節(jié)點的子節(jié)點;以及存儲所述決策樹結構。
24.根據(jù)權利要求23所述的方法,進一步包括將子節(jié)點的所述剪切合并到所述母節(jié)點的所述剪切中,從而產(chǎn)生所述母節(jié)點的新的子節(jié)點。
25.根據(jù)權利要求24所述的方法,其中所述子節(jié)點的所述剪切與所述母節(jié)點的剪切是在同一字段上,或者所述子節(jié)點的所述剪切與所述母節(jié)點的剪切是在不同的字段上。
26.根據(jù)權利要求23所述的方法,其中所述給定的閾值是可調(diào)整的,所述方法進一步包括迭代地調(diào)整所述給定的閾值,并且合并母節(jié)點的孫子和所述母節(jié)點的子節(jié)點,直到所述母節(jié)點的子節(jié)點的結果總數(shù)達到了子節(jié)點的給定的閾值的個數(shù)。
27.—種方法,包括: 使用具有多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段,建立包括多個節(jié)點的決策樹結構,每個節(jié)點表示所述多個規(guī)則的子組; 基于規(guī)則是否競爭來分組規(guī)則;` 向所述多個規(guī)則分配優(yōu)先級值,包括在每組競爭規(guī)則內(nèi)分配唯一的優(yōu)先級值,并且使得非競爭規(guī)則具有相同的優(yōu)先級值;以及 存儲所述決策樹結構,包括存儲所述多個規(guī)則和所分配的所述優(yōu)先級值。
28.一種裝置,包括: 存儲器; 處理器,耦合至所述存儲器,所述處理器被配置為使用具有存儲在所述存儲器中的多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段,所述處理器進一步被配置為建立包括多個節(jié)點的決策樹結構,所述多個節(jié)點表示所述多個規(guī)則的子組; 所述處理器進一步被配置為針對所述決策樹的每個節(jié)點,確定可以在至少一個字段的每個字段上進行的若干剪切,從而創(chuàng)建等于剪切的個數(shù)的子節(jié)點; 在確定可以在至少一個字段的每個字段上所進行的所述剪切的個數(shù)之后,所述處理器進一步被配置為基于對所創(chuàng)建的每個子節(jié)點的規(guī)則的平均個數(shù)與至少一個字段的每個字段所創(chuàng)建的每個子節(jié)點的規(guī)則的實際個數(shù)之間的平均差異的比較,選擇在其上剪切所述節(jié)點的字段;以及 所述處理器進一步被配置為在所選擇的字段上將所述節(jié)點剪切成若干子節(jié)點,并且在所述存儲器中存儲所述決策樹結構。
29.根據(jù)權利要求28所述的裝置,其中所述處理器進一步被配置為基于針對給定的存儲容量的剪切的最大個數(shù)來確定所述剪切的個數(shù)。
30.根據(jù)權利要求28所述的裝置,其中所述處理器進一步被配置為基于如下字段,即所述至少一個字段中的、具有在每個子節(jié)點的規(guī)則的平均個數(shù)和每個子節(jié)點的規(guī)則的實際個數(shù)之間的最小平均差異的字段,而選擇在其上將所述節(jié)點剪切成若干子節(jié)點的字段。
31.根據(jù)權利要求28所述的裝置,其中所述處理器進一步被配置為只有在所述節(jié)點具有比所述多個規(guī)則的所述子組的預定個數(shù)更多時,剪切所述節(jié)點。
32.根據(jù)權利要求31所述的裝置,其中所述預定個數(shù)是可調(diào)整的個數(shù),其中所述處理器進一步被配置為通過迭代地調(diào)整所述預定個數(shù)來控制所述決策樹結構的深度。
33.根據(jù)權利要求32所述的裝置,其中調(diào)整所述預定個數(shù)包括隨著所述樹的層次的增加而增加所述預定個數(shù)。
34.根據(jù)權利要求28所述的裝置,其中如果剪切創(chuàng)建了多個子節(jié)點,并且只有一個子節(jié)點具有所述多個規(guī)則的子組,所述處理器進一步被配置為在所述節(jié)點處存儲所述至少一個字段中的字段的標識符以及所述至少一個字段中的、在遍歷所述節(jié)點以獲得規(guī)則匹配時略過的所述字段的若干比特。
35.根據(jù)權利要求34所述的裝置,其中所述至少一個字段中的、略過的所述字段的比特的個數(shù)與用于剪切所述節(jié)點的若干比特的個數(shù)相同。
36.根據(jù)權利要求28所述的裝置,其中所述處理器進一步被配置為: 在建立所述決策樹結構時,對于所述決策樹的每個層次,比較由具有相同母節(jié)點的子節(jié)點所表示的規(guī)則子組; 識別復制子節(jié)點組,所述復制子節(jié)點組具有所述多個規(guī)則的復制的子組; 選擇被識別的所述復制子節(jié)點組的一個子節(jié)點作為唯一的子節(jié)點; 將被識別的所述復制子節(jié)點組`的其他子節(jié)點鏈接到與所述唯一的子節(jié)點相同的子樹; 使用所述唯一的子節(jié)點用于所述決策樹結構的后續(xù)建立;以及 抑制使用被識別的所述復制子節(jié)點組的所述其他子節(jié)點用于所述決策樹結構的后續(xù)建立。
37.根據(jù)權利要求28所述的裝置,其中所述處理器進一步被配置為將所述分類器表中的所述多個規(guī)則分組成多個規(guī)則分類,并且針對所述多個規(guī)則分類中的每個規(guī)則分類建立包括多個節(jié)點的決策樹結構。
38.根據(jù)權利要求37所述的裝置,其中所述多個規(guī)則分類是基于應用于所述多個規(guī)則的一個或多個字段功能,或者所述一個或多個字段功能的組合。
39.根據(jù)權利要求38所述的裝置,其中一個或多個字段功能包括應用非互聯(lián)網(wǎng)協(xié)議(IP)地址通配符、源IP但不是目標IP通配符、目標IP但不是源IP通配符、目標和源地址通配符、字段范圍比較以及與一個或多個所述至少一個字段相關聯(lián)的一個或多個掩碼。
40.根據(jù)權利要求28所述的裝置,其中所述處理器進一步被配置為: 將具有以下若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,所述若干規(guī)則小于或等于規(guī)則的給定個數(shù); 針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,所述相應的桶包括所轉換的所述子節(jié)點的規(guī)則; 將每個葉節(jié)點鏈接至所創(chuàng)建的所述相應的桶; 識別復制桶組,每個復制桶包括相同的規(guī)則組; 選擇所述復制桶組中的一個桶,并且去除所述復制桶組中的其他桶;以及將到所去除的桶的鏈接改變成到所選擇的所述一個桶的鏈接。
41.根據(jù)權利要求28所述的裝置,其中所述處理器進一步被配置為: 將具有以下若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,所述若干規(guī)則小于或等于規(guī)則的給定個數(shù); 針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,所述相應的桶包括所轉換的所述子節(jié)點的規(guī)則; 將每個葉節(jié)點鏈接至所創(chuàng)建的所述相應的桶; 識別部分復制桶組,每個部分復制桶包括復制部分規(guī)則組; 將在所述部分復制桶組中的每個桶分成針對每個桶的第一規(guī)則組和第二規(guī)則組;針對每個桶的所述第一規(guī)則組包括所述復制部分規(guī)則組,并且針對每個桶的所述第二規(guī)則組包括針對每個桶的任何剩余的規(guī)則;以及 在每個部分復制的桶中創(chuàng)建到所述第一規(guī)則組的鏈接,并且在每個部分復制桶中創(chuàng)建到所述第二規(guī)則組的鏈接。
42.根據(jù)權利要求41所述的裝置,其中每個部分復制桶包括到所述第一規(guī)則組和所述第二規(guī)則組的指針的鏈接列表。
43.根據(jù)權利要求28所述的裝置,其中所述決策樹結構是二進制數(shù)據(jù)結構。
44.根據(jù)權利要求28所述的裝置,其中所述決策樹結構從所述分類器表被編譯。
45.根據(jù)權利要求28所`述的裝置,其中對應于每個規(guī)則的優(yōu)先級被存儲于所述決策樹結構中。
46.根據(jù)權利要求28所述的裝置,包括確定規(guī)則是否被一個或多個其他規(guī)則覆蓋,并且如果所述規(guī)則被覆蓋,則從所述決策樹結構中忽略所述規(guī)則。
47.一種非瞬態(tài)計算機可讀介質(zhì),具有在其上被編碼的一系列指令,在由處理器執(zhí)行時,所述指令使得所述處理器: 使用具有多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段; 建立包括多個節(jié)點的決策樹結構,所述多個節(jié)點包括所述多個規(guī)則的子組; 針對所述決策樹的每個節(jié)點,確定可以在至少一個字段的每個字段上進行的若干剪切,從而創(chuàng)建等于剪切的個數(shù)的子節(jié)點; 在確定可以在至少一個字段的每個字段上所進行的所述剪切的個數(shù)之后,基于對所創(chuàng)建的每個子節(jié)點的規(guī)則的平均個數(shù)與至少一個字段的每個字段所創(chuàng)建的每個子節(jié)點的規(guī)則的實際個數(shù)之間的平均差異的比較,選擇在其上剪切所述節(jié)點的字段; 至少在所選擇的字段上將所述節(jié)點剪切成若干子節(jié)點,以及 存儲決策樹結構。
48.根據(jù)權利要求47所述的非瞬態(tài)計算機可讀介質(zhì),其中所述處理器基于具有每個子節(jié)點的規(guī)則的平均個數(shù)和每個子節(jié)點的規(guī)則的實際個數(shù)之間的最小平均差異的所述至少一個字段,而選擇在其上將所述節(jié)點剪切成若干子節(jié)點的字段。
49.一種裝置,包括: 存儲器; 處理器,耦合至所述存儲器,所述處理器被配置為: 使用具有多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段;建立包括多個節(jié)點的決策樹結構,每個節(jié)點表示所述多個規(guī)則的子組; 基于規(guī)則是否競爭來分組規(guī)則; 向所述多個規(guī)則分配優(yōu)先級值,包括在每組競爭規(guī)則內(nèi)分配唯一的優(yōu)先級值,并且使得非競爭規(guī)則具有相同的優(yōu)先級值;以及 在所述存儲器中存儲所述決策樹結構,包括存儲所述多個規(guī)則和所分配的所述優(yōu)先級值。
50.一種非瞬態(tài)計算機可讀介質(zhì),具有在其上被編碼的一系列指令,在由處理器執(zhí)行時,所述指令使得所述處理器: 使用具有多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段; 建立包括多個節(jié)點的決策樹結構,每個節(jié)點表示所述多個規(guī)則的子組; 基于規(guī)則是否競爭來分組規(guī)則; 向所述多個規(guī)則分配優(yōu)先級值,包括在每組競爭規(guī)則內(nèi)分配唯一的優(yōu)先級值,并且使得非競爭規(guī)則具有相同的優(yōu)先級值;以及 存儲所述決策樹結構,包括存儲所述多個規(guī)則和所分配的所述優(yōu)先級值。
51.一種裝置,包括: 存儲器; 處理器,耦合至所述存儲`器,所述處理器被配置為: 使用具有多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段,建立包括多個節(jié)點的決策樹結構,每個節(jié)點包括所述多個規(guī)則的子組; 針對所述決策樹的每個層次,基于所述母節(jié)點的子節(jié)點的結果總數(shù)不大于給定的閾值,確定是否合并母節(jié)點的孫子和所述母節(jié)點的子節(jié)點;以及在所述存儲器中存儲所述決策樹結構。
52.根據(jù)權利要求51所述的裝置,所述處理器被進一步配置為進一步將子節(jié)點的所述剪切合并到所述母節(jié)點的所述剪切中,從而產(chǎn)生所述母節(jié)點的新的子節(jié)點。
53.根據(jù)權利要求52所述的裝置,其中所述子節(jié)點的所述剪切與所述母節(jié)點的剪切是在同一字段上,或者所述子節(jié)點的所述剪切與所述母節(jié)點的剪切是在不同的字段上。
54.根據(jù)權利要求51所述的裝置,其中所述給定的閾值是可調(diào)整的,所述處理器被進一步配置為迭代地調(diào)整所述給定的閾值,并且合并母節(jié)點的孫子和所述母節(jié)點的子節(jié)點,直到所述母節(jié)點的子節(jié)點的結果總數(shù)達到了子節(jié)點的給定的閾值的個數(shù)。
55.一種非瞬態(tài)計算機可讀介質(zhì),具有在其上被編碼的一系列指令,在由處理器執(zhí)行時,所述指令使得所述處理器: 使用具有多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段,建立包括多個節(jié)點的決策樹結構,每個節(jié)點表示所述多個規(guī)則的子組; 針對所述決策樹的每個層次,基于所述母節(jié)點的子節(jié)點的結果總數(shù)不大于給定的閾值,確定是否合并母節(jié)點的孫子和所述母節(jié)點的子節(jié)點;以及存儲所述決策樹結構。
56.根據(jù)權利要求55所述的非瞬態(tài)計算機可讀介質(zhì),其中所述處理器被進一步使得將子節(jié)點的所述剪切合并到所述母節(jié)點的所述剪切中,從而產(chǎn)生所述母節(jié)點的新的子節(jié)點。
57.根據(jù)權利要求56所述的非瞬態(tài)計算機可讀介質(zhì),其中所述子節(jié)點的所述剪切與所述母節(jié)點的剪切是在同一字段上,或者所述子節(jié)點的所述剪切與所述母節(jié)點的剪切是在不同的字段上。
58.根據(jù)權利要求55所述的非瞬態(tài)計算機可讀介質(zhì),其中所述給定的閾值是可調(diào)整的,所述處理器被進一步配置為迭代地調(diào)整所述給定的閾值,并且合并母節(jié)點的孫子和所述母節(jié)點的子節(jié)點。
59.一種方法,包括: 使用具有多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段,建立包括多個節(jié)點的決策樹結構,每個節(jié)點表示所述多個規(guī)則的子組; 識別所述決策樹結構中的復制; 基于所識別的復制來修改所述決策樹結構;以及 存儲所修改的決策樹結構。
60.根據(jù)權利要求59所述的方法,其中所述多個節(jié)點包括母節(jié)點和子節(jié)點,其中識別包括: 針對所述決策樹的每個層次,比較由具有相同母節(jié)點的子節(jié)點所表示的規(guī)則子組,以及 識別復制子節(jié)點組,所述復制子節(jié)點組具有所述多個規(guī)則的復制子組;以及其中修改包括: 選擇被識別的所述復制子節(jié)點組的一個子節(jié)點作為唯一的子節(jié)點,以及 將被識別的所述復制子節(jié)`點組的其他子節(jié)點鏈接到與所述唯一的子節(jié)點相同的子樹。
61.根據(jù)權利要求59所述的方法,其中所述多個節(jié)點包括母節(jié)點和子節(jié)點,所述方法進一步包括: 將具有以下若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,所述若干規(guī)則小于或等于規(guī)則的給定個數(shù)葉節(jié)點; 針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,所述相應的桶包括所轉換的所述子節(jié)點的規(guī)則; 將每個葉節(jié)點鏈接至所創(chuàng)建的所述相應的桶; 識別復制桶組,每個復制桶包括相同的規(guī)則組; 選擇所述復制桶組中的一個桶,并且去除所述復制桶組中的其他桶;以及 將到所去除的桶的鏈接改變成到所選擇的所述一個桶的鏈接。
62.根據(jù)權利要求59所述的方法,其中所述多個節(jié)點包括母節(jié)點和子節(jié)點,所述方法進一步包括: 將具有以下若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,所述若干規(guī)則小于或等于規(guī)則的給定個數(shù); 針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,所述相應的桶包括所轉換的所述子節(jié)點的規(guī)則; 將每個葉節(jié)點鏈接至所創(chuàng)建的所述相應的桶; 識別部分復制桶組,每個部分復制桶包括復制部分的規(guī)則組; 將所述部分復制桶組中的每個桶中的規(guī)則分成針對每個桶的第一規(guī)則組和第二規(guī)則組,針對每個桶的所述第一規(guī)則組包括所述復制部分規(guī)則組,并且針對每個桶的所述第二規(guī)則組包括針對每個桶的任何剩余的規(guī)則;以及 在每個部分復制的桶中創(chuàng)建到所述第一規(guī)則組的鏈接,并且在每個部分復制的桶中創(chuàng)建到所述第二規(guī)則組的鏈接。
63.根據(jù)權利要求62所述的方法,其中每個部分復制的桶包括到所述第一規(guī)則組和所述第二規(guī)則組的指針的鏈接列表。
64.一種裝置,包括: 存儲器; 處理器,耦合至所述存儲器,所述處理器被配置為: 使用具有多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段,建立包括多個節(jié)點的決策樹結構,每個節(jié)點表示所述多個規(guī)則的子組; 識別所述決策樹結構中的復制; 基于所識別的復制來修改所述決策樹結構;以及 在所述存儲器中存儲所修改的決策樹結構。
65.根據(jù)權利要求64所述的裝置,其中所述多個節(jié)點包括母節(jié)點和子節(jié)點,其中為了識別復制,所述處理器被進一步配置為: 針對所述決策樹的每個層次,比較由具有相同母節(jié)點的子節(jié)點所表示的規(guī)則子組,以及 識別復制子節(jié)點組,所述`復制子節(jié)點組具有所述多個規(guī)則的復制子組;以及其中為了修改,所述處理器被進一步配置為: 選擇被識別的所述復制子節(jié)點組的一個子節(jié)點作為唯一的子節(jié)點,以及 將被識別的所述復制子節(jié)點組的其他子節(jié)點鏈接至與所述唯一的子節(jié)點相同的子樹。
66.根據(jù)權利要求64所述的裝置,其中所述多個節(jié)點包括母節(jié)點和子節(jié)點,其中所述處理器被進一步配置為: 將具有以下若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,所述若干規(guī)則小于或等于規(guī)則的給定個數(shù); 針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,所述相應的桶包括所轉換的所述子節(jié)點的規(guī)則; 將每個葉節(jié)點鏈接至所創(chuàng)建的所述相應的桶; 識別復制桶組,每個復制桶包括相同的規(guī)則組; 選擇所述復制桶組中的一個桶,并且去除所述復制桶組中的其他桶;以及 將到所去除的桶的鏈接改變成到所選擇的所述一個桶的鏈接。
67.根據(jù)權利要求64所述的裝置,其中所述多個節(jié)點包括母節(jié)點和子節(jié)點,其中所述處理器被進一步配置為: 將具有以下若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,所述若干規(guī)則小于或等于規(guī)則的給定個數(shù); 針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,所述相應的桶包括所轉換的所述子節(jié)點的規(guī)則; 將每個葉節(jié)點鏈接至所創(chuàng)建的所述相應的桶; 識別部分復制桶組,每個部分復制桶包括復制部分的規(guī)則組;將所述部分復制桶組中的每個桶中的規(guī)則分成針對每個桶的第一規(guī)則組和第二規(guī)則組,針對每個桶的所述第一規(guī)則組包括所述復制部分規(guī)則組,并且針對每個桶的所述第二規(guī)則組包括針對每個桶的任何剩余的規(guī)則;以及 在每個部分復制的桶中創(chuàng)建到所述第一規(guī)則組的鏈接,并且在每個部分復制的桶中創(chuàng)建到所述第二規(guī)則組的鏈接。
68.根據(jù)權利要求67所述的裝置,其中每個部分復制的桶包括到所述第一規(guī)則組和所述第二規(guī)則組的指針的鏈接列表。
69.一種非瞬態(tài)計算機可讀介質(zhì),具有在其上被編碼的一系列指令,在由處理器執(zhí)行時,所述指令使得所述處理器: 使用具有多個規(guī)則的分類器表,所述多個規(guī)則具有至少一個字段,建立包括多個節(jié)點的決策樹結構,每個節(jié)點表示所述多個規(guī)則的子組; 識別所述決策樹結構中的復制; 基于所識別的復制來修改所述決策樹結構;以及 在所述存儲器中存儲所修改的決策樹結構。
70.根據(jù)權利要求69所述的非瞬態(tài)計算機可讀介質(zhì),其中所述多個節(jié)點包括母節(jié)點和子節(jié)點,其中所述一系列指令在由處理器執(zhí)行時進一步使得所述處理器: 針對所述決策樹的每個層次,比較由針對所述決策樹的每個層次具有相同母節(jié)點的子節(jié)點所表示的規(guī)則子組,以及 識別復制子節(jié)點組,所述復制子節(jié)點組具有所述多個規(guī)則的復制子組;以及其中修改包括進一步使得所述處理器:` 選擇被識別的所述復制子節(jié)點組的一個子節(jié)點作為唯一的子節(jié)點,以及 將被識別的所述復制子節(jié)點組的其他子節(jié)點鏈接至與所述唯一的子節(jié)點相同的子樹。
71.根據(jù)權利要求69所述的非瞬態(tài)計算機可讀介質(zhì),其中所述多個節(jié)點包括母節(jié)點和子節(jié)點,其中所述一系列指令在由處理器執(zhí)行時進一步使得所述處理器: 將具有以下若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,所述若干規(guī)則小于或等于規(guī)則的給定個數(shù); 針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,所述相應的桶包括所轉換的所述子節(jié)點的規(guī)則; 將每個葉節(jié)點鏈接至所創(chuàng)建的所述相應的桶; 識別復制桶組,每個復制桶包括相同的規(guī)則組; 選擇所述復制桶組中的一個桶,并且去除所述復制桶組中的其他桶;以及 將到所去除的桶的鏈接改變成到所選擇的所述一個桶的鏈接。
72.根據(jù)權利要求69所述的非瞬態(tài)計算機可讀介質(zhì),其中所述多個節(jié)點包括母節(jié)點和子節(jié)點,其中所述一系列指令在由處理器執(zhí)行時進一步使得所述處理器: 將具有以下若干規(guī)則的每個子節(jié)點轉換成葉節(jié)點,所述若干規(guī)則小于或等于規(guī)則的給定個數(shù); 針對所轉換的每個子節(jié)點創(chuàng)建相應的桶,所述相應的桶包括所轉換的子節(jié)點的規(guī)則; 將每個葉節(jié)點鏈接至所創(chuàng)建的所述相應的桶; 識別部分復制桶組,每個部分復制桶包括復制部分的規(guī)則組;將所述部分復制桶組中的每個桶中的規(guī)則分成針對每個桶的第一規(guī)則組和第二規(guī)則組,針對每個桶的所述第一規(guī)則組包括所述復制部分規(guī)則組,并且針對每個桶的所述第二規(guī)則組包括針對每個桶的任何剩余的規(guī)則;以及 在每個部分復制的桶中創(chuàng)建到所述第一規(guī)則組的鏈接,并且在每個部分復制的桶中創(chuàng)建到所述第二規(guī)則組的鏈接。
73.根據(jù)權利要求72所述的非瞬態(tài)計算機可讀介質(zhì),其中每個部分復制的桶包括到所述第一規(guī)則組和所述第二規(guī)`則組的指針的鏈接列表。
【文檔編號】H04L12/851GK103858386SQ201280048417
【公開日】2014年6月11日 申請日期:2012年8月2日 優(yōu)先權日:2011年8月2日
【發(fā)明者】R·戈亞爾, K·A·布里斯, S·L·比拉 申請人:凱為公司