本申請(qǐng)涉及通訊
技術(shù)領(lǐng)域:
,尤其涉及一種基于通配符掩碼規(guī)則的數(shù)據(jù)包過(guò)濾方法及裝置。
背景技術(shù):
:在網(wǎng)絡(luò)安全領(lǐng)域中,包過(guò)濾算法根據(jù)用戶配置的規(guī)則對(duì)進(jìn)出網(wǎng)絡(luò)的數(shù)據(jù)包過(guò)濾,其中,根據(jù)匹配于數(shù)據(jù)包的規(guī)則對(duì)應(yīng)的過(guò)濾策略,對(duì)數(shù)據(jù)包進(jìn)行過(guò)濾處理。傳統(tǒng)的包過(guò)濾算法以范圍(例如IP地址范圍,端口范圍等)的形式來(lái)配置規(guī)則。隨著用戶需求的變化,規(guī)則中的一些或全部字段(通常是IP地址字段)需要配置為通配符掩碼的形式。在相關(guān)技術(shù)中,先根據(jù)規(guī)則中通配符的位置將其拆分成不相交的多個(gè)范圍,然后根據(jù)得到的范圍將原有規(guī)則拆分成多條基于范圍表示的規(guī)則,再根據(jù)這些基于范圍表示的規(guī)則來(lái)對(duì)進(jìn)出網(wǎng)絡(luò)的數(shù)據(jù)包進(jìn)行過(guò)濾處理。然而,由于通常情況下由采用通配符掩碼表示的規(guī)則拆分出的范圍的數(shù)量較多,使得拆分后規(guī)則數(shù)量急劇增長(zhǎng),導(dǎo)致降低了對(duì)規(guī)則的匹配效率,從而進(jìn)一步降低了對(duì)待過(guò)濾數(shù)據(jù)包的過(guò)濾效率。技術(shù)實(shí)現(xiàn)要素:有鑒于此,本申請(qǐng)?zhí)峁┮环N基于通配符掩碼規(guī)則的數(shù)據(jù)包過(guò)濾方法及裝置,可以不需要將通配符掩碼規(guī)則拆分成多個(gè)基于范圍表示的規(guī)則,避免拆分后規(guī)則數(shù)量急劇增長(zhǎng)的情況,從而提高匹配待過(guò)濾數(shù)據(jù)包對(duì)應(yīng)的規(guī)則的效率,進(jìn)一步提高對(duì)待過(guò)濾數(shù)據(jù)包的過(guò)濾效率。為實(shí)現(xiàn)上述目的,本申請(qǐng)?zhí)峁┘夹g(shù)方案如下:根據(jù)本申請(qǐng)的第一方面,提出了一種基于通配符掩碼規(guī)則的數(shù)據(jù)包過(guò)濾方法,包括:從接收到的待過(guò)濾數(shù)據(jù)包中提取預(yù)設(shè)bit位的數(shù)值,并按照預(yù)設(shè)算法將提取到的數(shù)值生成相應(yīng)的索引值;根據(jù)預(yù)定義的通配符掩碼規(guī)則對(duì)應(yīng)的規(guī)則索引表,確定對(duì)應(yīng)于所述索引值的所有通配符掩碼規(guī)則;其中,所述規(guī)則索引表中包含預(yù)定義的若干索引值與通配符掩碼規(guī)則的映射關(guān)系對(duì),且每一索引值由映射的通配符掩碼規(guī)則中對(duì)應(yīng)于所述預(yù)設(shè)bit位的數(shù)值按照所述預(yù)設(shè)算法計(jì)算得到;在對(duì)應(yīng)于所述索引值的所有通配符掩碼規(guī)則中,確定匹配于所述待過(guò)濾數(shù)據(jù)包的通配符掩碼規(guī)則;根據(jù)匹配于所述待過(guò)濾數(shù)據(jù)包的通配符掩碼規(guī)則對(duì)應(yīng)的過(guò)濾策略,對(duì)所述待過(guò)濾數(shù)據(jù)包進(jìn)行過(guò)濾處理。根據(jù)本申請(qǐng)的第二方面,提出了一種基于通配符掩碼規(guī)則的數(shù)據(jù)包過(guò)濾裝置,包括:提取單元,從接收到的待過(guò)濾數(shù)據(jù)包中提取預(yù)設(shè)bit位的數(shù)值,并按照預(yù)設(shè)算法將提取到的數(shù)值生成相應(yīng)的索引值;第一確定單元,根據(jù)預(yù)定義的通配符掩碼規(guī)則對(duì)應(yīng)的規(guī)則索引表,確定對(duì)應(yīng)于所述索引值的所有通配符掩碼規(guī)則;其中,所述規(guī)則索引表中包含預(yù)定義的若干索引值與通配符掩碼規(guī)則的映射關(guān)系對(duì),且每一索引值由映射的通配符掩碼規(guī)則中對(duì)應(yīng)于所述預(yù)設(shè)bit位的數(shù)值按照所述預(yù)設(shè)算法計(jì)算得到;第二確定單元,在對(duì)應(yīng)于所述索引值的所有通配符掩碼規(guī)則中,確定匹配于所述待過(guò)濾數(shù)據(jù)包的通配符掩碼規(guī)則;過(guò)濾單元,根據(jù)匹配于所述待過(guò)濾數(shù)據(jù)包的通配符掩碼規(guī)則對(duì)應(yīng)的過(guò)濾策略,對(duì)所述待過(guò)濾數(shù)據(jù)包進(jìn)行過(guò)濾處理。由以上技術(shù)方案可見(jiàn),在本申請(qǐng)的技術(shù)方案中,通過(guò)預(yù)設(shè)算法為所有的通配符掩碼規(guī)則創(chuàng)建相應(yīng)的規(guī)則索引表,只需要同樣通過(guò)該預(yù)設(shè)算法確定出待過(guò)濾數(shù)據(jù)包對(duì)應(yīng)的索引值,即可在匹配于該索引值的所有通配符掩碼規(guī)則中快速選取出該待過(guò)濾數(shù)據(jù)包對(duì)應(yīng)的通配符掩碼規(guī)則(相比于所有預(yù)定義通配符掩碼規(guī)則的數(shù)量,對(duì)應(yīng)于該索引值的通配符掩碼規(guī)則的數(shù)量已經(jīng)大大減少了),而無(wú)需將通配符掩碼規(guī)則拆分為數(shù)量龐大的范圍規(guī)則,一方面降低了對(duì)網(wǎng)絡(luò)設(shè)備的規(guī)則緩存空間的需求(該緩存空間用于存儲(chǔ)上述數(shù)量龐大的范圍規(guī)則),另一方面能夠提升對(duì)待過(guò)濾數(shù)據(jù)包的規(guī)則匹配效率,并有助于提升對(duì)待過(guò)濾數(shù)據(jù)包的過(guò)濾效率。附圖說(shuō)明圖1是本申請(qǐng)一示例性實(shí)施例示出的一種基于通配符掩碼規(guī)則的數(shù)據(jù)包過(guò)濾方法的流程圖。圖2A是本申請(qǐng)一示例性實(shí)施例示出的定義索引的流程圖。圖2B是本申請(qǐng)一示例性實(shí)施例示出的統(tǒng)計(jì)切分bit位使用次數(shù)的示意圖。圖3是本申請(qǐng)一示例性實(shí)施例示出的一種電子設(shè)備的結(jié)構(gòu)示意圖。圖4是本申請(qǐng)一示例性實(shí)施例示出的一種基于通配符掩碼規(guī)則的數(shù)據(jù)包過(guò)濾裝置的框圖。具體實(shí)施方式這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說(shuō)明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請(qǐng)相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書(shū)中所詳述的、本申請(qǐng)的一些方面相一致的裝置和方法的例子。在本申請(qǐng)使用的術(shù)語(yǔ)是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請(qǐng)。在本申請(qǐng)和所附權(quán)利要求書(shū)中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語(yǔ)“和/或”是指并包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。應(yīng)當(dāng)理解,盡管在本申請(qǐng)可能采用術(shù)語(yǔ)第一、第二、第三等來(lái)描述各種信息,但這些信息不應(yīng)限于這些術(shù)語(yǔ)。這些術(shù)語(yǔ)僅用來(lái)將同一類(lèi)型的信息彼此區(qū)分開(kāi)。例如,在不脫離本申請(qǐng)范圍的情況下,第一信息也可以被稱為第二信息,類(lèi)似地,第二信息也可以被稱為第一信息。取決于語(yǔ)境,如在此所使用的詞語(yǔ)“如果”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”。在相關(guān)技術(shù)中,當(dāng)規(guī)則中的一些或全部字段(通常是IP地址字段)被配置為通配符掩碼的形式時(shí),先根據(jù)規(guī)則中通配符的位置將其拆分成不相交的多個(gè)范圍,然后根據(jù)得到的范圍將原有規(guī)則拆分成多條基于范圍表示的規(guī)則,再根據(jù)這些基于范圍表示的規(guī)則來(lái)對(duì)進(jìn)出網(wǎng)絡(luò)的數(shù)據(jù)包進(jìn)行過(guò)濾處理。舉例而言,一個(gè)通配符掩碼規(guī)則由值(value)和掩碼(mask)兩部分組成,假定其具體形式如下所示:value:10011101010011101100111011010001mask:10100100101011100111110010010111其中,bit(比特)位的編號(hào)從左到右依次為1-32,mask中所有值為1的bit位表示該bit的值取決于value中對(duì)應(yīng)bit位的值,mask中所有值為0的bit位表示該bit位的值可以為任意值(0或1)。在上述這條規(guī)則中,如果一個(gè)待過(guò)濾數(shù)據(jù)包能夠匹配這條規(guī)則,就要求其第1、3、6、9、11、13、14、15、18、19、20、21、22、25、28、30、31、32bit位的值和value中對(duì)應(yīng)bit位的值相同。根據(jù)通配符掩碼的表示方式可以看出,若將該通配符掩碼規(guī)則拆分成不相交的多個(gè)范圍,則拆分后的范圍的數(shù)量是比較大的??梢?jiàn),在相關(guān)技術(shù)中,當(dāng)匹配與待過(guò)濾數(shù)據(jù)包對(duì)應(yīng)的規(guī)則時(shí),需要在數(shù)量龐大的規(guī)則中逐個(gè)匹配,導(dǎo)致降低了對(duì)規(guī)則的匹配效率,從而進(jìn)一步降低了對(duì)待過(guò)濾數(shù)據(jù)包的過(guò)濾效率。因此,本申請(qǐng)通過(guò)改進(jìn)匹配通配符掩碼規(guī)則的方式,以解決相關(guān)技術(shù)中存在的上述技術(shù)問(wèn)題。為對(duì)本申請(qǐng)進(jìn)行進(jìn)一步說(shuō)明,提供下列實(shí)施例:圖1是本申請(qǐng)一示例性實(shí)施例示出的一種基于通配符掩碼規(guī)則的數(shù)據(jù)包過(guò)濾方法的流程圖,該方法可以應(yīng)用于過(guò)濾設(shè)備。如圖1所示,該方法可以包括以下步驟:步驟101,從接收到的待過(guò)濾數(shù)據(jù)包中提取預(yù)設(shè)bit位的數(shù)值,并按照預(yù)設(shè)算法將提取到的數(shù)值生成相應(yīng)的索引值。步驟102,根據(jù)預(yù)定義的通配符掩碼規(guī)則對(duì)應(yīng)的規(guī)則索引表,確定對(duì)應(yīng)于所述索引值的所有通配符掩碼規(guī)則。在本實(shí)施例中,所述規(guī)則索引表中包含預(yù)定義的若干索引值與通配符掩碼規(guī)則的映射關(guān)系對(duì),且每一索引值由映射的通配符掩碼規(guī)則中對(duì)應(yīng)于所述預(yù)設(shè)bit位的數(shù)值按照所述預(yù)設(shè)算法計(jì)算得到。其中,所述預(yù)設(shè)算法可以為:將提取的數(shù)值按照預(yù)設(shè)順序排序;將排序后的數(shù)值生成為對(duì)應(yīng)的索引值。在本申請(qǐng)的技術(shù)方案中,可以將排序后的數(shù)值所代表的二進(jìn)制換算成十進(jìn)制,當(dāng)然,也可以采取其他算法,比如直接將對(duì)應(yīng)于預(yù)設(shè)bit位的二進(jìn)制數(shù)值作為索引值等,只需保證根據(jù)不同數(shù)值計(jì)算出的索引值也不同(即數(shù)值與索引值為一一對(duì)應(yīng))即可,本申請(qǐng)并不對(duì)此進(jìn)行限制。在本實(shí)施例中,所有預(yù)定義的通配符掩碼規(guī)則在所述預(yù)設(shè)bit位上的數(shù)值,使任意不具有包含關(guān)系的通配符掩碼規(guī)則之間相互區(qū)分。由于通配符掩碼規(guī)則是二進(jìn)制字符串,每個(gè)bit位上的數(shù)值為0或1,因而當(dāng)兩條通配符掩碼規(guī)則在同一bit位上的取值不同時(shí),即可對(duì)這兩條通配符掩碼規(guī)則進(jìn)行區(qū)分;而當(dāng)存在更多通配符掩碼規(guī)則時(shí),可以通過(guò)選取更多數(shù)量的bit位,從而通過(guò)這些通配符掩碼規(guī)則在這些被選取的bit位上的數(shù)值之間的差異,即可對(duì)這些通配符掩碼規(guī)則進(jìn)行相互區(qū)分,而這些通配符掩碼規(guī)則在這些被選取的bit位上的數(shù)值或基于這些數(shù)值計(jì)算出的其他相關(guān)數(shù)值,即可作為對(duì)應(yīng)于該通配符掩碼規(guī)則的索引值,以指向?qū)?yīng)的通配符掩碼規(guī)則。而對(duì)于這些bit位的選取方式,具體可以包括:判斷是否存在滿足下述條件的分組:所述分組中包含多個(gè)不具有包含關(guān)系的通配符掩碼規(guī)則;其中,所有預(yù)定義的通配符掩碼規(guī)則最初被劃分至同一分組;當(dāng)存在滿足所述條件的任一分組時(shí),選取所述任一分組對(duì)應(yīng)的切分bit位,并按照所述任一分組中的各個(gè)通配符掩碼規(guī)則在被選取的切分bit位的取值,將所述任一分組中的通配符掩碼規(guī)則劃分至兩個(gè)分組;當(dāng)不存在滿足所述條件的分組時(shí),分別統(tǒng)計(jì)每個(gè)被選取的切分bit位對(duì)應(yīng)的使用次數(shù),按照使用次數(shù)從大到小的順序依次選取k個(gè)切分bit位作為所述預(yù)設(shè)bit位,其中k為正整數(shù)。而對(duì)于使用次數(shù)的統(tǒng)計(jì),可以分別確定每個(gè)分組對(duì)應(yīng)的切分bit位,并進(jìn)一步統(tǒng)計(jì)每一切分bit位的對(duì)應(yīng)分組的數(shù)量,以作為該bit位的使用次數(shù);其中,每一分組對(duì)應(yīng)的切分bit位能夠?qū)⒃摲纸M中的通配符掩碼規(guī)則區(qū)別于其他所有通配符掩碼規(guī)則。在本申請(qǐng)的技術(shù)方案中,可以通過(guò)下述公式選取所述任一分組中的切分bit位:bit[i].zero表示所述任一分組中第i個(gè)bit位為0的規(guī)則數(shù)量;bit[i].one表示所述任一分組中第i個(gè)bit位為1的規(guī)則數(shù)量;bit[i].star表示所述任一分組中第i個(gè)bit位為通配符的規(guī)則數(shù)量。通過(guò)該公式選取出的切分bit位,可以使得分組結(jié)果趨向于平均分配,并減少選取的切分bit位的數(shù)量。步驟103,在對(duì)應(yīng)于所述索引值的所有通配符掩碼規(guī)則中,確定匹配于所述待過(guò)濾數(shù)據(jù)包的通配符掩碼規(guī)則。在本實(shí)施例中,在一種情況下,同一索引值可能只對(duì)應(yīng)一個(gè)通配符掩碼規(guī)則,當(dāng)根據(jù)從待過(guò)濾數(shù)據(jù)包提取的數(shù)值計(jì)算生成該索引值時(shí),需要進(jìn)一步確定該索引值對(duì)應(yīng)的這個(gè)通配符掩碼規(guī)則是否匹配于該待過(guò)濾數(shù)據(jù)包。在另一種情況下,同一索引值可能對(duì)應(yīng)多個(gè)通配符掩碼規(guī)則,因此需要在該多個(gè)通配符掩碼規(guī)則中確定匹配于待過(guò)濾數(shù)據(jù)包的通配符掩碼規(guī)則。但即使可能存在上述同一索引值對(duì)應(yīng)多個(gè)通配符掩碼規(guī)則的情況,在匹配對(duì)應(yīng)于待過(guò)濾數(shù)據(jù)包的通配符掩碼規(guī)則時(shí),也可以降低匹配的次數(shù)(因?yàn)橄啾扔谒蓄A(yù)定義的通配符掩碼規(guī)則的數(shù)量,對(duì)應(yīng)于該索引值的通配符掩碼規(guī)則的數(shù)量已經(jīng)大大減少了),從而提升了對(duì)待過(guò)濾數(shù)據(jù)包的規(guī)則匹配效率。在又一種情況下,當(dāng)索引值對(duì)應(yīng)的內(nèi)容為空時(shí),即不存在對(duì)應(yīng)的通配符掩碼規(guī)則,可以判定為待過(guò)濾數(shù)據(jù)包不存在相匹配的規(guī)則,可以不對(duì)該數(shù)據(jù)包進(jìn)行過(guò)濾處理。步驟104,根據(jù)匹配于所述待過(guò)濾數(shù)據(jù)包的通配符掩碼規(guī)則對(duì)應(yīng)的過(guò)濾策略,對(duì)所述待過(guò)濾數(shù)據(jù)包進(jìn)行過(guò)濾處理。由以上技術(shù)方案可見(jiàn),在本申請(qǐng)的技術(shù)方案中,通過(guò)預(yù)設(shè)算法為所有的通配符掩碼規(guī)則創(chuàng)建相應(yīng)的規(guī)則索引表,只需要同樣通過(guò)該預(yù)設(shè)算法確定出待過(guò)濾數(shù)據(jù)包對(duì)應(yīng)的索引值,即可在匹配于該索引值的所有通配符掩碼規(guī)則中快速選取出該待過(guò)濾數(shù)據(jù)包對(duì)應(yīng)的通配符掩碼規(guī)則(相比于所有預(yù)定義通配符掩碼規(guī)則的數(shù)量,對(duì)應(yīng)于該索引值的通配符掩碼規(guī)則的數(shù)量已經(jīng)大大減少了),而無(wú)需將通配符掩碼規(guī)則拆分為數(shù)量龐大的范圍規(guī)則,一方面降低了對(duì)網(wǎng)絡(luò)設(shè)備的規(guī)則緩存空間的需求(該緩存空間用于存儲(chǔ)上述數(shù)量龐大的范圍規(guī)則),另一方面能夠提升對(duì)待過(guò)濾數(shù)據(jù)包的規(guī)則匹配效率,并有助于提升對(duì)待過(guò)濾數(shù)據(jù)包的過(guò)濾效率。在實(shí)現(xiàn)基于本申請(qǐng)的技術(shù)方案時(shí),其處理過(guò)程可以分為兩個(gè)階段:1)第一階段:創(chuàng)建規(guī)則索引表;2)第二階段:匹配規(guī)則。下面分別對(duì)這兩個(gè)階段進(jìn)行詳細(xì)描述。1)創(chuàng)建規(guī)則索引表請(qǐng)參見(jiàn)圖2A,圖2A是本申請(qǐng)一示例性實(shí)施例示出的創(chuàng)建規(guī)則索引表的流程圖,如圖2A所示,該定義過(guò)程可以包括以下步驟:步驟201,選取切分bit位。步驟202,判斷是否可以繼續(xù)選取切分bit位,若可以繼續(xù)選取,則轉(zhuǎn)入步驟201,否則轉(zhuǎn)入步驟203。步驟203,統(tǒng)計(jì)切分bit位。在本實(shí)施例中,先對(duì)所有的通配符掩碼規(guī)則進(jìn)行統(tǒng)計(jì),統(tǒng)計(jì)所有通配符掩碼規(guī)則在各個(gè)bit位上的數(shù)值的取值情況,然后再根據(jù)公式選取切分bit位。在選取完一次切分bit位后,判斷是否存在滿足下述條件的分組:分組中包含多個(gè)不具有包含關(guān)系的通配符掩碼規(guī)則(所有預(yù)定義的通配符掩碼規(guī)則最初被劃分至同一分組);當(dāng)存在滿足條件的任一分組時(shí),繼續(xù)選取該任一分組對(duì)應(yīng)的切分bit位,并按照該任一分組中的各個(gè)通配符掩碼規(guī)則在被選取的切分bit位上的取值,將該任一分組中的通配符掩碼規(guī)則劃分至兩個(gè)分組;當(dāng)不存在滿足所述條件的分組時(shí),分別統(tǒng)計(jì)每個(gè)被選取的切分bit位對(duì)應(yīng)的使用次數(shù),按照使用次數(shù)從大到小的順序依次選取k個(gè)切分bit位作為所述預(yù)設(shè)bit位,其中k為正整數(shù)。而對(duì)于使用次數(shù)的統(tǒng)計(jì),可以分別確定每個(gè)分組對(duì)應(yīng)的切分bit位,并進(jìn)一步統(tǒng)計(jì)每一切分bit位的對(duì)應(yīng)分組的數(shù)量,以作為該bit位的使用次數(shù);其中,每一分組對(duì)應(yīng)的切分bit位能夠?qū)⒃摲纸M中的通配符掩碼規(guī)則區(qū)別于其他所有通配符掩碼規(guī)則。選取切分bit位的公式如下:bit[i].zero表示所述任一分組中第i個(gè)bit位為0的規(guī)則數(shù)量;bit[i].one表示所述任一分組中第i個(gè)bit位為1的規(guī)則數(shù)量;bit[i].star表示所述任一分組中第i個(gè)bit位為通配符的規(guī)則數(shù)量;當(dāng)計(jì)算結(jié)果中最小值對(duì)應(yīng)多個(gè)bit位時(shí),選取其中任一bit位作為切分bit位。通過(guò)該公式選取出的切分bit位,可以使得分組結(jié)果趨向于平均分配(切分后的兩個(gè)分組中包含的規(guī)則數(shù)量盡可能相近),并減少選取的切分bit位的數(shù)量。舉例而言,假定共有a、b、c、d、e5條通配符掩碼規(guī)則,具體如表1所示:表1統(tǒng)計(jì)所有通配符掩碼規(guī)則在各個(gè)bit位上的數(shù)值的取值情況,統(tǒng)計(jì)結(jié)果如表2所示:bit_stat[1].zero2bit_stat[1].one3bit_stat[1].star0bit_stat[2].zero3bit_stat[2].one0bit_stat[2].star2bit_stat[3].zero0bit_stat[3].one3bit_stat[3].star2bit_stat[4].zero0bit_stat[4].one0bit_stat[4].star5bit_stat[5].zero3bit_stat[5].one1bit_stat[5].star1bit_stat[6].zero2bit_stat[6].one3bit_stat[6].star0bit_stat[7].zero2bit_stat[7].one2bit_stat[7].star1bit_stat[8].zero0bit_stat[8].one4bit_stat[8].star1表2其中,bit位的編號(hào)從左到右依次為1-8,bit-i表示第i個(gè)bit位;bit_stat[i].zero表示bit-i值為0的規(guī)則個(gè)數(shù);bit_stat[i].one表示bit-i值為1的規(guī)則個(gè)數(shù);bit_stat[i].star表示bit-i為通配符的規(guī)則個(gè)數(shù)。所有通配符掩碼規(guī)則最初被劃分至同一分組,比如為group0(分組0)={a,b,c,d,e}。根據(jù)上述公式,選取切分bit位。其中,各個(gè)bit位根據(jù)|bit[i].zero-bit[i].one|+2bit[i].star計(jì)算分別得到:1、7、7、10、4、1、2、6??梢?jiàn),第1、6個(gè)bit位的值1是最小值,此處可以選擇第1個(gè)bit位,也可以選擇第6個(gè)bit位,本申請(qǐng)并不對(duì)此進(jìn)行限制。比如選取第1個(gè)bit位,由于規(guī)則b、d在第1個(gè)bit位上的數(shù)值為0,而規(guī)則a、c、e在第1個(gè)bit位上的數(shù)值為1,所以第1個(gè)bit位可以將group0切分為兩個(gè)分組group1(分組1)={b,d},group2(分組2)={a,c,e}。然后對(duì)group1和group2進(jìn)行切分,其切分過(guò)程與上述切分group0的過(guò)程類(lèi)似,在此不再贅述。最終通過(guò)第5、6、7個(gè)bit位中任一bit位(假定選取的是第5個(gè)bit位),可以把group1切分為group3(分組3)=和group4(分組4)=dn8uhelbkzum;通過(guò)第6個(gè)bit位可以把group2切分為group5(分組5)={c}和group6(分組6)={a,e}。因?yàn)槭O碌姆纸Mgroup3,group4,group5中都僅包含一條通配符掩碼規(guī)則,同時(shí)group6中的規(guī)則e包含規(guī)則a,所以不需要再繼續(xù)切分了。此時(shí),統(tǒng)計(jì)所有被選取的切分bit位,即第1、5、6個(gè)bit位。在選取預(yù)設(shè)bit位時(shí),分別統(tǒng)計(jì)每個(gè)被選取的切分bit位對(duì)應(yīng)的使用次數(shù),按照使用次數(shù)從大到小的順序依次選取k個(gè)切分bit位作為所述預(yù)設(shè)bit位,其中k為正整數(shù)。在本申請(qǐng)的技術(shù)方案中,可以將k個(gè)使用次數(shù)最多的切分bit位作為預(yù)設(shè)bit位(因?yàn)橥磺蟹謆it位使用的次數(shù)越多,說(shuō)明該切分bit位可以將越多的通配符掩碼規(guī)則盡可能平均分配),數(shù)量“k”是一個(gè)可配置的數(shù)值,在實(shí)際網(wǎng)絡(luò)環(huán)境中,可以根據(jù)過(guò)濾設(shè)備的內(nèi)存大小和通配符掩碼規(guī)則的個(gè)數(shù)進(jìn)行動(dòng)態(tài)調(diào)整,通常情況下,“k”的值越大,占用的內(nèi)存空間越大,但是對(duì)通配符掩碼規(guī)則的匹配效率會(huì)越高。假定k=3,如圖2B所示:group3和group4都對(duì)應(yīng)第1、5個(gè)bit位;group5和group6都對(duì)應(yīng)第1、6個(gè)bit位。因此確定第1個(gè)bit位的使用次數(shù)為4;第5個(gè)bit位的使用次數(shù)為2;第6個(gè)bit位的使用次數(shù)為2,即將第1、5、6個(gè)bit位作為預(yù)設(shè)bit位。步驟204,提取預(yù)設(shè)bit位上的數(shù)值并按照預(yù)設(shè)算法計(jì)算索引值。步驟205,根據(jù)計(jì)算得到的索引值創(chuàng)建規(guī)則索引表。在本實(shí)施例中,預(yù)設(shè)算法可以為:將提取的數(shù)值按照預(yù)設(shè)順序排序,并將排序后的數(shù)值所代表的二進(jìn)制換算成十進(jìn)制。當(dāng)然,也可以采取其他算法,比如直接將對(duì)應(yīng)于預(yù)設(shè)bit位的二進(jìn)制數(shù)值作為索引值等,只需保證根據(jù)不同數(shù)值計(jì)算出的索引值也不同(即數(shù)值與索引值為一一對(duì)應(yīng))即可,本申請(qǐng)并不對(duì)此進(jìn)行限制。具體的,用選取的k個(gè)bit位相對(duì)應(yīng)的bit值來(lái)計(jì)算索引值。假設(shè)選擇的k個(gè)bit位為:bit-x1、bit-x2...bit-xi...bit-xk,其中x1<xi<xk。通配符掩碼規(guī)則中對(duì)應(yīng)bit位的value值為:mask值為:表示value中bit-xi的值,表示mask中bit-xi的值。當(dāng)M中的值全為1(即沒(méi)有通配符)時(shí),對(duì)應(yīng)的索引值為:其中,index表示索引值。當(dāng)M中有r個(gè)值為0(即有r個(gè)通配符)時(shí),對(duì)應(yīng)2r個(gè)索引值。當(dāng)r=1,且時(shí),對(duì)應(yīng)的2個(gè)索引值分別為:類(lèi)似的,當(dāng)r=2,且時(shí),對(duì)應(yīng)的4個(gè)索引值分別為:舉例而言,假定預(yù)設(shè)順序?yàn)榘凑站幪?hào)從小到大排列,當(dāng)然,也可以是其他任意順序,本申請(qǐng)并不對(duì)此進(jìn)行限制。承接于上述舉例,預(yù)設(shè)順序?yàn)?、5、6。規(guī)則a中的第1、5、6個(gè)bit位的mask值都為1,且第1、5、6個(gè)bit位對(duì)應(yīng)的value值分別為1、0、1,因此索引值為:1×22+0×21+1×20=5;規(guī)則b中的第1、5、6個(gè)bit位的mask值都為1,且第1、5、6個(gè)bit位對(duì)應(yīng)的value值分別為0、0、0,因此索引值為:0×22+0×21+0×20=0;規(guī)則c中的第1、5、6個(gè)bit位的mask值都為1,且第1、5、6個(gè)bit位對(duì)應(yīng)的value值分別為1、0、0,因此索引值為:1×22+0×21+0×20=4;規(guī)則d中的第1、5、6個(gè)bit位的mask值都為1,且第1、5、6個(gè)bit位對(duì)應(yīng)的value值分別為0、1、1,因此索引值為:0×22+1×21+1×20=3;規(guī)則e中的第1、6個(gè)bit位的mask值為1,第5個(gè)bit位的mask值為0(即第5個(gè)bit位的值可以是0或1,所以對(duì)應(yīng)兩個(gè)索引值),且第1、5、6個(gè)bit位對(duì)應(yīng)的value值分別為1、1、1,因此索引值分別為:1×22+0×21+1×20=5;1×22+1×21+1×20=7。待計(jì)算完索引值后,根據(jù)計(jì)算得到的索引值創(chuàng)建規(guī)則索引表,即建立索引值與通配符掩碼規(guī)則之間的映射關(guān)系,如表3所示:索引值01234567規(guī)則b--dca、e-e表3至此,創(chuàng)建規(guī)則索引表的階段完成。2)匹配規(guī)則在本申請(qǐng)的技術(shù)方案中,當(dāng)接收到待過(guò)濾數(shù)據(jù)包時(shí),提取該待過(guò)濾數(shù)據(jù)包中預(yù)設(shè)bit位的數(shù)值,并按照預(yù)設(shè)算法將提取到的數(shù)值計(jì)算生成相應(yīng)的索引值,再根據(jù)上述階段中創(chuàng)建的規(guī)則索引表,確定對(duì)應(yīng)于該索引值的所有通配符掩碼規(guī)則。舉例而言,假定接收到的待過(guò)濾數(shù)據(jù)包為:10110011。承接于上述舉例,預(yù)設(shè)bit位為第1、5、6個(gè)bit位,因此提取該待過(guò)濾數(shù)據(jù)包第1、5、6個(gè)bit位的數(shù)值,分別為1、0、0。那么計(jì)算對(duì)應(yīng)于該待過(guò)濾數(shù)據(jù)包的索引值為:1×22+0×21+0×20=4。根據(jù)表3中記錄的映射關(guān)系,確定索引值4對(duì)應(yīng)于規(guī)則c,因此將該待過(guò)濾數(shù)據(jù)包和規(guī)則c進(jìn)行匹配??梢?jiàn),該待過(guò)濾數(shù)據(jù)包除了第4個(gè)bit位之外,其他bit位都和規(guī)則c對(duì)應(yīng)的value值相等(規(guī)則c中除第4個(gè)bit位之外,其他bit位的mask值都為1,即其他bit位的值取決于value值),但由于規(guī)則c的第4個(gè)bit位的mask值為0,即第4個(gè)bit位的值可以是0或1,所以該待過(guò)濾數(shù)據(jù)包最終匹配到了規(guī)則c。在根據(jù)規(guī)則索引表確定匹配于索引值的所有通配符掩碼規(guī)則后,在對(duì)應(yīng)于索引值的所有通配符掩碼規(guī)則中確定對(duì)應(yīng)于待過(guò)濾數(shù)據(jù)包的通配符掩碼規(guī)則,再根據(jù)匹配到的通配符掩碼規(guī)則對(duì)應(yīng)的過(guò)濾策略對(duì)該待過(guò)濾數(shù)據(jù)包進(jìn)行過(guò)濾處理。在本申請(qǐng)的技術(shù)方案中,通過(guò)預(yù)設(shè)算法為所有的通配符掩碼規(guī)則創(chuàng)建相應(yīng)的規(guī)則索引表,只需要同樣通過(guò)該預(yù)設(shè)算法確定出待過(guò)濾數(shù)據(jù)包對(duì)應(yīng)的索引值,即可在匹配于該索引值的所有通配符掩碼規(guī)則中快速選取出該待過(guò)濾數(shù)據(jù)包對(duì)應(yīng)的通配符掩碼規(guī)則(相比于所有預(yù)定義通配符掩碼規(guī)則的數(shù)量,對(duì)應(yīng)于該索引值的通配符掩碼規(guī)則的數(shù)量已經(jīng)大大減少了,比如索引值5對(duì)應(yīng)規(guī)則a、e),而無(wú)需將通配符掩碼規(guī)則拆分為數(shù)量龐大的范圍規(guī)則,一方面降低了對(duì)網(wǎng)絡(luò)設(shè)備的規(guī)則緩存空間的需求(該緩存空間用于存儲(chǔ)上述數(shù)量龐大的范圍規(guī)則),另一方面能夠提升對(duì)待過(guò)濾數(shù)據(jù)包的規(guī)則匹配效率,并有助于提升對(duì)待過(guò)濾數(shù)據(jù)包的過(guò)濾效率。圖3示出了根據(jù)本申請(qǐng)的一示例性實(shí)施例的電子設(shè)備的結(jié)構(gòu)示意圖。請(qǐng)參考圖3,在硬件層面,該電子設(shè)備包括處理器302、內(nèi)部總線304、網(wǎng)絡(luò)接口306、內(nèi)存308以及非易失性存儲(chǔ)器310,當(dāng)然還可能包括其他業(yè)務(wù)所需要的硬件。處理器302從非易失性存儲(chǔ)器310中讀取對(duì)應(yīng)的計(jì)算機(jī)程序到內(nèi)存302中然后運(yùn)行,在邏輯層面上形成基于通配符掩碼規(guī)則的數(shù)據(jù)包過(guò)濾裝置。當(dāng)然,除了軟件實(shí)現(xiàn)方式之外,本申請(qǐng)并不排除其他實(shí)現(xiàn)方式,比如邏輯器件抑或軟硬件結(jié)合的方式等等,也就是說(shuō)以下處理流程的執(zhí)行主體并不限定于各個(gè)邏輯單元,也可以是硬件或邏輯器件。請(qǐng)參考圖4,在軟件實(shí)施方式中,該基于通配符掩碼規(guī)則的數(shù)據(jù)包過(guò)濾裝置可以包括提取單元401、第一確定單元402、第二確定單元403和過(guò)濾單元404。其中:提取單元401,從接收到的待過(guò)濾數(shù)據(jù)包中提取預(yù)設(shè)bit位的數(shù)值,并按照預(yù)設(shè)算法將提取到的數(shù)值生成相應(yīng)的索引值;第一確定單元402,根據(jù)預(yù)定義的通配符掩碼規(guī)則對(duì)應(yīng)的規(guī)則索引表,確定對(duì)應(yīng)于所述索引值的所有通配符掩碼規(guī)則;其中,所述規(guī)則索引表中包含預(yù)定義的若干索引值與通配符掩碼規(guī)則的映射關(guān)系對(duì),且每一索引值由映射的通配符掩碼規(guī)則中對(duì)應(yīng)于所述預(yù)設(shè)bit位的數(shù)值按照所述預(yù)設(shè)算法計(jì)算得到;第二確定單元403,在對(duì)應(yīng)于所述索引值的所有通配符掩碼規(guī)則中,確定匹配于所述待過(guò)濾數(shù)據(jù)包的通配符掩碼規(guī)則;過(guò)濾單元404,根據(jù)匹配于所述待過(guò)濾數(shù)據(jù)包的通配符掩碼規(guī)則對(duì)應(yīng)的過(guò)濾策略,對(duì)所述待過(guò)濾數(shù)據(jù)包進(jìn)行過(guò)濾處理。可選的,所有預(yù)定義的通配符掩碼規(guī)則在所述預(yù)設(shè)bit位上的數(shù)值,使任意不具有包含關(guān)系的通配符掩碼規(guī)則之間相互區(qū)分。可選的,通過(guò)以下方式選取所述預(yù)設(shè)bit位:判斷是否存在滿足下述條件的分組:所述分組中包含多個(gè)不具有包含關(guān)系的通配符掩碼規(guī)則;其中,所有預(yù)定義的通配符掩碼規(guī)則最初被劃分至同一分組;當(dāng)存在滿足所述條件的任一分組時(shí),選取所述任一分組對(duì)應(yīng)的切分bit位,并按照所述任一分組中的各個(gè)通配符掩碼規(guī)則在被選取的切分bit位的取值,將所述任一分組中的通配符掩碼規(guī)則劃分至兩個(gè)分組;當(dāng)不存在滿足所述條件的分組時(shí),分別統(tǒng)計(jì)每個(gè)被選取的切分bit位對(duì)應(yīng)的使用次數(shù),按照使用次數(shù)從大到小的順序依次選取k個(gè)切分bit位作為所述預(yù)設(shè)bit位,其中k為正整數(shù)??蛇x的,可以通過(guò)下述公式選取所述任一分組中的切分bit位:其中,bit[i].zero表示所述任一分組中第i個(gè)bit位為0的規(guī)則數(shù)量;bit[i].one表示所述任一分組中第i個(gè)bit位為1的規(guī)則數(shù)量;bit[i].star表示所述任一分組中第i個(gè)bit位為通配符的規(guī)則數(shù)量??蛇x的,所述預(yù)設(shè)算法為:將提取的數(shù)值按照預(yù)設(shè)順序排序;將排序后的數(shù)值生成為對(duì)應(yīng)的索引值。上述裝置中各個(gè)單元的功能和作用的實(shí)現(xiàn)過(guò)程具體詳見(jiàn)上述方法中對(duì)應(yīng)步驟的實(shí)現(xiàn)過(guò)程,在此不再贅述。對(duì)于裝置實(shí)施例而言,由于其基本對(duì)應(yīng)于方法實(shí)施例,所以相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本申請(qǐng)方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。以上所述僅為本申請(qǐng)的較佳實(shí)施例而已,并不用以限制本申請(qǐng),凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)保護(hù)的范圍之內(nèi)。當(dāng)前第1頁(yè)1 2 3