一種數(shù)據(jù)包的規(guī)則匹配方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)包的規(guī)則匹配方法及裝置,該方法包括:利用在多個(gè)包獲取線程中確定的一個(gè)包獲取線程捕獲接收的數(shù)據(jù)包;利用在確定的包獲取線程綁定的多個(gè)協(xié)議處理線程中確定的一個(gè)協(xié)議處理線程獲取數(shù)據(jù)包的協(xié)議信息;將協(xié)議信息分別發(fā)送至確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中;每個(gè)數(shù)據(jù)包處理線程分別利用協(xié)議信息與對(duì)應(yīng)加載的至少一個(gè)規(guī)則條目進(jìn)行匹配,如果匹配出規(guī)則條目,則判斷是否有至少兩個(gè)數(shù)據(jù)包處理線程分別匹配出優(yōu)先級(jí)最高的第一規(guī)則條目,如果是,則從至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將第二規(guī)則條目作為與數(shù)據(jù)包匹配的規(guī)則條目,如果否,則將第一規(guī)則條目作為與數(shù)據(jù)包匹配的規(guī)則條目。
【專利說明】一種數(shù)據(jù)包的規(guī)則匹配方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信【技術(shù)領(lǐng)域】,尤其涉及一種數(shù)據(jù)包的規(guī)則匹配方法及裝置。
【背景技術(shù)】
[0002]隨著網(wǎng)絡(luò)設(shè)備新技術(shù)的不斷發(fā)展及網(wǎng)絡(luò)流量的快速增長(zhǎng),需要網(wǎng)絡(luò)設(shè)備具有處理高速網(wǎng)絡(luò)流量的能力。例如,對(duì)于運(yùn)行在實(shí)際網(wǎng)絡(luò)中的O P e n F I ο w交換機(jī),就需要具有處理高速網(wǎng)絡(luò)流量的能力,在O P e n F I ο w交換機(jī)的處理流程中,需要對(duì)到來的每一個(gè)數(shù)據(jù)包進(jìn)行協(xié)議處理、流表查詢等非常耗時(shí)的操作,目前,主要采用以下數(shù)據(jù)處理方式:
[0003]一種是軟硬件結(jié)合的方式:基于硬件所具有的處理速度快的優(yōu)點(diǎn),利用F P G A、T C A M等硬件進(jìn)行大部分的數(shù)據(jù)包處理,但在O P e n F I ο w交換機(jī)中,由于流表中的規(guī)則條目多而復(fù)雜,一些復(fù)雜規(guī)則不能在硬件上實(shí)現(xiàn),所以,部分的數(shù)據(jù)包處理還需要送入軟件模塊進(jìn)行數(shù)據(jù)包的規(guī)則匹配。但是,這種方式有以下缺點(diǎn):一是軟硬件協(xié)作需要占用一定的網(wǎng)絡(luò)資源;二是在硬件上完成流表查詢的功能,規(guī)則定期更新不夠靈活;三是硬件本身的價(jià)格較高。
[0004]為了克服上述軟硬件結(jié)合的數(shù)據(jù)處理方式所帶來的缺陷,采用數(shù)據(jù)并行這種全軟件的工作方式,在數(shù)據(jù)并行方式中,利用多個(gè)O penFlo w進(jìn)程同時(shí)運(yùn)行多個(gè)O p en F I ο w實(shí)例,即利用多個(gè)O P e n F I ο w進(jìn)程同時(shí)處理多個(gè)數(shù)據(jù)包。具體地,由于任一個(gè)數(shù)據(jù)包都屬于一個(gè)流,這些流分布于流空間中,把流空間劃分為N份,每一份綁定一個(gè)OpenFl O w的進(jìn)程;當(dāng)有數(shù)據(jù)包到來時(shí),檢查預(yù)先保存的一張用來記錄流和進(jìn)程間對(duì)應(yīng)關(guān)系的表,如果該數(shù)據(jù)包是表中的已有流,則根據(jù)表中記錄的對(duì)應(yīng)關(guān)系,把數(shù)據(jù)包分配給相應(yīng)的進(jìn)程進(jìn)行處理;如果是新來流,則查看這個(gè)流所屬的流空間所對(duì)應(yīng)的進(jìn)程,再把當(dāng)前流和進(jìn)程的對(duì)應(yīng)關(guān)系保存在表中,以后屬于這個(gè)流的數(shù)據(jù)包都會(huì)由這個(gè)進(jìn)程處理。
[0005]基于上述流空間的劃分,根據(jù)劃分是否可變,可分為靜態(tài)劃分和動(dòng)態(tài)劃分兩種。對(duì)于靜態(tài)的流空間劃分方法,流空間的劃分和進(jìn)程之間的對(duì)應(yīng)關(guān)系是不變的,但互聯(lián)網(wǎng)中的流量存在Z i P f分布的特性,會(huì)導(dǎo)致某些進(jìn)程分配的流量很大,負(fù)載很重,但是另一些進(jìn)程的負(fù)載卻很輕,由于這些局部性的存在,對(duì)流的劃分很難使并行的進(jìn)程達(dá)到負(fù)載均衡。而采用動(dòng)態(tài)的流空間劃分方法可緩解靜態(tài)劃分方法所帶來的缺陷,采用動(dòng)態(tài)的劃分方法,需要系統(tǒng)實(shí)時(shí)的監(jiān)測(cè)每一個(gè)進(jìn)程的負(fù)載情況,如果某個(gè)進(jìn)程的負(fù)載過大,新來的流就不會(huì)再分配給這個(gè)進(jìn)程,已分配給這個(gè)進(jìn)程的流也可以交給別的進(jìn)程處理,但是,動(dòng)態(tài)的劃分方法也存在缺陷:一方面,對(duì)進(jìn)程負(fù)載情況的監(jiān)控,增加了系統(tǒng)的開銷,另一方面,系統(tǒng)監(jiān)測(cè)負(fù)載均衡情況和進(jìn)行負(fù)載調(diào)整的過程是周期運(yùn)行的,周期性的處理方式會(huì)出現(xiàn)突發(fā)流量的現(xiàn)象而造成嚴(yán)重的負(fù)載不均衡,此外,由于無法預(yù)測(cè)一個(gè)流所對(duì)應(yīng)的負(fù)載情況,這種調(diào)整無法從根本上解決流量的不均衡問題。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明實(shí)施例的主要目的在于提供一種數(shù)據(jù)包的規(guī)則匹配方法及裝置,以通過實(shí)現(xiàn)負(fù)載均衡來加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力的目的。
[0007]為了解決以上技術(shù)問題,本發(fā)明采取的技術(shù)方案是:
[0008]第一方面,本發(fā)明提供了一種數(shù)據(jù)包的規(guī)則匹配方法,包括:
[0009]在接收到數(shù)據(jù)包后,利用確定的包獲取線程捕獲數(shù)據(jù)包,所述確定的包獲取線程為根據(jù)第一負(fù)載均衡算法在至少兩個(gè)包獲取線程中確定的一個(gè)包獲取線程;
[0010]利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息,所述確定的協(xié)議處理線程為根據(jù)第二負(fù)載均衡算法在所述確定的包獲取線程綁定的至少兩個(gè)協(xié)議處理線程中確定的一個(gè)協(xié)議處理線程;
[0011]將所述協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中;
[0012]每個(gè)數(shù)據(jù)包處理線程分別利用所述協(xié)議信息與對(duì)應(yīng)加載的至少一個(gè)規(guī)則條目進(jìn)行匹配;
[0013]如果有數(shù)據(jù)包處理線程匹配出規(guī)則條目,則判斷是否有至少兩個(gè)數(shù)據(jù)包處理線程分別匹配出優(yōu)先級(jí)最高的第一規(guī)則條目,如果是,則從至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目,如果否,則將所述第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目。
[0014]在第一方面的第一種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0015]確定分配給每個(gè)數(shù)據(jù)包處理線程使用的至少一個(gè)規(guī)則條目,以使每個(gè)數(shù)據(jù)包處理線程分別加載分配給自己的至少一個(gè)規(guī)則條目;
[0016]所述確定分配給每個(gè)數(shù)據(jù)包處理線程使用的至少一個(gè)規(guī)則條目,具體包括:
[0017]從所有規(guī)則條目中提取至少一個(gè)規(guī)則子組,每個(gè)規(guī)則子組中包含了匹配信息均相同的所有規(guī)則條目,所述協(xié)議信息中包含有所述匹配信息;
[0018]將每個(gè)規(guī)則子組中的規(guī)則條目均衡分配給每個(gè)數(shù)據(jù)包處理線程。
[0019]結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述從所有規(guī)則條目中提取至少一個(gè)規(guī)則子組,具體包括:
[0020]確定對(duì)數(shù)據(jù)包進(jìn)行規(guī)則匹配的匹配項(xiàng),當(dāng)所述匹配項(xiàng)有兩個(gè)以上時(shí),對(duì)所述兩個(gè)以上的匹配項(xiàng)進(jìn)行排序;
[0021]按照排序結(jié)果選取排序最前的匹配項(xiàng),將所述排序最前的匹配項(xiàng)作為當(dāng)前匹配項(xiàng),并獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第一匹配信息;
[0022]對(duì)于每個(gè)第一匹配信息,分別從所有規(guī)則條目中獲取包含所述第一匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第一規(guī)則子組;
[0023]判斷是否存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng),如果存在,則將所述下一匹配項(xiàng)作為當(dāng)前匹配項(xiàng);
[0024]獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第二匹配信息,對(duì)于每個(gè)第二匹配信息,分別從每個(gè)第一規(guī)則子組中獲取包含所述第二匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第二規(guī)則子組,并將所述第二規(guī)則子組作為第一規(guī)則子組,繼續(xù)執(zhí)行所述判斷是否存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng)的步驟,直到不存在所述下一匹配項(xiàng)為止。
[0025]在第一方面的第三種可能的實(shí)現(xiàn)方式中,所述第一負(fù)載均衡算法為哈希算法,在所述利用確定的包獲取線程捕獲數(shù)據(jù)包前,還包括:
[0026]利用哈希算法確定用于捕獲所述數(shù)據(jù)包的包獲取線程。
[0027]結(jié)合第一方面的第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述第二負(fù)載均衡算法為哈希算法,在所述利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息前,還包括:
[0028]利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程。
[0029]結(jié)合第一方面的第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,在利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程后,還包括:
[0030]從M S G池中調(diào)取一個(gè)M S G數(shù)據(jù)結(jié)構(gòu),并利用所述M S G數(shù)據(jù)結(jié)構(gòu)將所述數(shù)據(jù)包的指針信息發(fā)送至所述確定的協(xié)議處理線程;
[0031]所述利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息,具體為:
[0032]所述確定的協(xié)議處理線程根據(jù)所述指針信息獲取所述數(shù)據(jù)包的協(xié)議信息。
[0033]結(jié)合第一方面的第五種可能的實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,所述確定的協(xié)議處理線程根據(jù)所述指針信息獲取所述數(shù)據(jù)包的協(xié)議信息后,還包括:
[0034]所述確定的協(xié)議處理線程將所述協(xié)議信息保存在所述M S G數(shù)據(jù)結(jié)構(gòu)中;
[0035]所述將所述協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中,具體為:
[0036]所述M S G數(shù)據(jù)結(jié)構(gòu)將保存的協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中。
[0037]結(jié)合第一方面的第五種或第六種可能的實(shí)現(xiàn)方式,在第七種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0038]當(dāng)每個(gè)數(shù)據(jù)包處理線程的匹配操作結(jié)束后,在所述M S G數(shù)據(jù)結(jié)構(gòu)中設(shè)置標(biāo)識(shí)位,以標(biāo)識(shí)所述數(shù)據(jù)包處理線程對(duì)所述數(shù)據(jù)包的規(guī)則匹配結(jié)束,并將匹配出的優(yōu)先級(jí)最高的第一規(guī)則條目的規(guī)則標(biāo)識(shí)保存在所述M SG數(shù)據(jù)結(jié)構(gòu)中。
[0039]結(jié)合第一方面的第八種可能的實(shí)現(xiàn)方式,在第九種可能的實(shí)現(xiàn)方式中,所述判斷是否有至少兩個(gè)數(shù)據(jù)包處理線程分別匹配出優(yōu)先級(jí)最高的第一規(guī)則條目,如果是,則從至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目,如果否,則將所述第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目,具體包括:
[0040]當(dāng)所述M S G數(shù)據(jù)結(jié)構(gòu)中存有與每個(gè)數(shù)據(jù)包處理線程分別對(duì)應(yīng)的標(biāo)識(shí)位時(shí),判斷所述M SG數(shù)據(jù)結(jié)構(gòu)中是否存儲(chǔ)了至少兩個(gè)規(guī)則標(biāo)識(shí);
[0041]如果是,則從所述至少兩個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目;
[0042]如果否,則當(dāng)所述M S G數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)了一個(gè)規(guī)則標(biāo)識(shí)時(shí),將所述一個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目;
[0043]將所述M S G數(shù)據(jù)結(jié)構(gòu)放回所述M S G池中。
[0044]第二方面,本發(fā)明提供了一種數(shù)據(jù)包的規(guī)則匹配裝置,包括:
[0045]數(shù)據(jù)包捕獲模塊,用于在接收到數(shù)據(jù)包后,利用確定的包獲取線程捕獲數(shù)據(jù)包,所述確定的包獲取線程為根據(jù)第一負(fù)載均衡算法在至少兩個(gè)包獲取線程中確定的一個(gè)包獲取線程;
[0046]協(xié)議信息獲取模塊,用于利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息,所述確定的協(xié)議處理線程為根據(jù)第二負(fù)載均衡算法在所述確定的包獲取線程綁定的至少兩個(gè)協(xié)議處理線程中確定的一個(gè)協(xié)議處理線程;
[0047]協(xié)議信息分發(fā)模塊,用于將所述協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中;
[0048]匹配進(jìn)行模塊,用于每個(gè)數(shù)據(jù)包處理線程分別利用所述協(xié)議信息與對(duì)應(yīng)加載的至少一個(gè)規(guī)則條目進(jìn)行匹配;
[0049]成功匹配模塊,用于當(dāng)有數(shù)據(jù)包處理線程匹配出規(guī)則條目時(shí),判斷是否有至少兩個(gè)數(shù)據(jù)包處理線程分別匹配出優(yōu)先級(jí)最高的第一規(guī)則條目,如果是,則從至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目,如果否,則將所述第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目。
[0050]在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述裝置還包括:
[0051]規(guī)則分配模塊,用于確定分配給每個(gè)數(shù)據(jù)包處理線程使用的至少一個(gè)規(guī)則條目,以使每個(gè)數(shù)據(jù)包處理線程分別加載分配給自己的至少一個(gè)規(guī)則條目;
[0052]所述規(guī)則分配模塊,具體包括:
[0053]規(guī)則子組提取單元,用于從所有規(guī)則條目中提取至少一個(gè)規(guī)則子組,每個(gè)規(guī)則子組中包含了匹配信息均相同的所有規(guī)則條目,所述協(xié)議信息中包含有所述匹配信息;
[0054]規(guī)則條目分配單元,用于將每個(gè)規(guī)則子組中的規(guī)則條目均衡分配給每個(gè)數(shù)據(jù)包處
理線程。
[0055]結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述規(guī)則子組提取單元,具體包括:
[0056]匹配項(xiàng)排序子單元,用于確定對(duì)數(shù)據(jù)包進(jìn)行規(guī)則匹配的匹配項(xiàng),當(dāng)所述匹配項(xiàng)有兩個(gè)以上時(shí),對(duì)所述兩個(gè)以上的匹配項(xiàng)進(jìn)行排序;
[0057]第一規(guī)則子組形成子單元,用于按照排序結(jié)果選取排序最前的匹配項(xiàng),將所述排序最前的匹配項(xiàng)作為當(dāng)前匹配項(xiàng),并獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第一匹配信息,對(duì)于每個(gè)第一匹配信息,分別從所有規(guī)則條目中獲取包含所述第一匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第一規(guī)則子組;
[0058]下一匹配項(xiàng)判斷子單元,用于判斷是否存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng);
[0059]當(dāng)前匹配項(xiàng)替換子單元,用于在所述下一匹配項(xiàng)判斷子單元判斷得到的存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng)時(shí),將所述下一匹配項(xiàng)作為當(dāng)前匹配項(xiàng);
[0060]第二規(guī)則子組形成子單元,用于獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第二匹配信息,對(duì)于每個(gè)第二匹配信息,分別從每個(gè)第一規(guī)則子組中獲取包含所述第二匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第二規(guī)則子組,并將所述第二規(guī)則子組作為第一規(guī)則子組,繼續(xù)利用所述下一匹配項(xiàng)判斷子單元執(zhí)行所述判斷是否存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng)的步驟,直到不存在所述下一匹配項(xiàng)為止。
[0061]在第二方面的第三種可能的實(shí)現(xiàn)方式中,所述第一負(fù)載均衡算法為哈希算法,所述裝置還包括:
[0062]包獲取線程確定模塊,用于在利用確定的包獲取線程捕獲數(shù)據(jù)包前,利用哈希算法確定用于捕獲所述數(shù)據(jù)包的包獲取線程。
[0063]結(jié)合第二方面的第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述第二負(fù)載均衡算法為哈希算法,所述裝置還包括:
[0064]協(xié)議處理線程確定模塊,用于在利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息前,利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程。
[0065]結(jié)合第二方面的第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述裝置還包括:
[0066]協(xié)議信息發(fā)送模塊,用于在利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程后,從M S G池中調(diào)取一個(gè)M S G數(shù)據(jù)結(jié)構(gòu),并利用所述M S G數(shù)據(jù)結(jié)構(gòu)將所述數(shù)據(jù)包的指針信息發(fā)送至所述確定的協(xié)議處理線程;
[0067]所述協(xié)議信息獲取模塊,具體用于利用所述確定的協(xié)議處理線程根據(jù)所述指針信息獲取所述數(shù)據(jù)包的協(xié)議信息。
[0068]結(jié)合第二方面的第五種可能的實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,所述裝置還包括:
[0069]協(xié)議信息保存模塊,用于在所述確定的協(xié)議處理線程根據(jù)所述指針信息獲取所述數(shù)據(jù)包的協(xié)議信息后,將所述協(xié)議信息保存在所述M S G數(shù)據(jù)結(jié)構(gòu)中;
[0070]所述協(xié)議信息分發(fā)模塊,具體用于利用所述M S G數(shù)據(jù)結(jié)構(gòu)將保存的協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中。
[0071]結(jié)合第二方面的第五種或第六種可能的實(shí)現(xiàn)方式,在第七種可能的實(shí)現(xiàn)方式中,所述裝置還包括:
[0072]匹配規(guī)則保存模塊,用于當(dāng)所述匹配進(jìn)行模塊利用每個(gè)數(shù)據(jù)包處理線程的匹配操作結(jié)束后,在所述M S G數(shù)據(jù)結(jié)構(gòu)中設(shè)置標(biāo)識(shí)位,以標(biāo)識(shí)所述數(shù)據(jù)包處理線程對(duì)所述數(shù)據(jù)包的規(guī)則匹配結(jié)束,并將匹配出的優(yōu)先級(jí)最高的第一規(guī)則條目的規(guī)則標(biāo)識(shí)保存在所述M SG數(shù)據(jù)結(jié)構(gòu)中;
[0073]結(jié)合第二方面的第八種可能的實(shí)現(xiàn)方式,在第九種可能的實(shí)現(xiàn)方式中,所述成功匹配模塊,具體包括:
[0074]規(guī)則標(biāo)識(shí)判斷單元,用于當(dāng)所述M S G數(shù)據(jù)結(jié)構(gòu)中存有與每個(gè)數(shù)據(jù)包處理線程分別對(duì)應(yīng)的標(biāo)識(shí)位時(shí),判斷所述M S G數(shù)據(jù)結(jié)構(gòu)中是否存儲(chǔ)了至少兩個(gè)規(guī)則標(biāo)識(shí);
[0075]第一規(guī)則匹配單元,用于當(dāng)所述規(guī)則標(biāo)識(shí)判斷單元判斷得到的所述M S G數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)了至少兩個(gè)規(guī)則標(biāo)識(shí)時(shí),從所述至少兩個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目;
[0076]第二規(guī)則匹配單元,用于當(dāng)所述規(guī)則標(biāo)識(shí)判斷單元判斷得到的所述M S G數(shù)據(jù)結(jié)構(gòu)中未存儲(chǔ)至少兩個(gè)規(guī)則標(biāo)識(shí)時(shí),若所述M S G數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)了一個(gè)規(guī)則標(biāo)識(shí)時(shí),則將所述一個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目;
[0077]數(shù)據(jù)結(jié)構(gòu)回放單元,將所述M S G數(shù)據(jù)結(jié)構(gòu)放回所述M S G池中。
[0078]
[0079]本發(fā)明實(shí)施例提供的數(shù)據(jù)包的規(guī)則匹配方法及裝置,首先將接收的各個(gè)數(shù)據(jù)包進(jìn)行二次分流,以將數(shù)據(jù)包分擔(dān)到不同的協(xié)議處理線程上進(jìn)行分別處理,從而減少了數(shù)據(jù)包等待響應(yīng)的時(shí)間,這在一定程度上實(shí)現(xiàn)了負(fù)載均衡;進(jìn)一步地,在協(xié)議處理線程對(duì)一個(gè)數(shù)據(jù)包進(jìn)行協(xié)議解析后,需要對(duì)該數(shù)據(jù)包進(jìn)行規(guī)則匹配這種非常耗時(shí)的工作,通過利用加載了部分規(guī)則的多個(gè)數(shù)據(jù)包處理線程對(duì)數(shù)據(jù)包進(jìn)行規(guī)則匹配,從而將該數(shù)據(jù)包的規(guī)則匹配任務(wù)分擔(dān)到了多個(gè)數(shù)據(jù)包處理線程上做并行處理,這使得數(shù)據(jù)處理能力得到了大幅度提高,進(jìn)一步實(shí)現(xiàn)了負(fù)載均衡??梢姡捎诒景l(fā)明實(shí)施例沒有采用現(xiàn)有技術(shù)中的基于流空間劃分的負(fù)載均衡方式,克服了現(xiàn)有技術(shù)中負(fù)載均衡受流量的不均衡性和突發(fā)性的影響的缺陷,采用本發(fā)明技術(shù)方案,實(shí)現(xiàn)了各個(gè)同類線程間的負(fù)載均衡,加強(qiáng)了網(wǎng)絡(luò)數(shù)據(jù)處理能力。
【專利附圖】
【附圖說明】
[0080]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0081]圖1為本發(fā)明實(shí)施例數(shù)據(jù)包規(guī)則匹配的網(wǎng)絡(luò)結(jié)構(gòu)示意圖;
[0082]圖2為本發(fā)明實(shí)施例數(shù)據(jù)包的規(guī)則匹配方法的流程示意圖之一;
[0083]圖3為本發(fā)明實(shí)施例規(guī)則劃分流程示意圖;
[0084]圖4為本發(fā)明實(shí)施例規(guī)則劃分樹狀結(jié)構(gòu)圖;
[0085]圖5為本發(fā)明實(shí)施例數(shù)據(jù)包的規(guī)則匹配方法的流程示意圖之二 ;
[0086]圖6為本發(fā)明實(shí)施例數(shù)據(jù)包的規(guī)則匹配方法的流程示意圖之三;
[0087]圖7為本發(fā)明實(shí)施例基于O P e n F I O w交換機(jī)的數(shù)據(jù)包規(guī)則匹配的網(wǎng)絡(luò)結(jié)構(gòu)示意圖;
[0088]圖8為本發(fā)明實(shí)施例基于I D S的數(shù)據(jù)包規(guī)則匹配的網(wǎng)絡(luò)結(jié)構(gòu)示意圖;
[0089]圖9為本發(fā)明實(shí)施例數(shù)據(jù)包的規(guī)則匹配裝置的結(jié)構(gòu)示意圖之一;
[0090]圖10為本發(fā)明實(shí)施例數(shù)據(jù)包的規(guī)則匹配裝置的結(jié)構(gòu)示意圖之二 ;
[0091]圖11為本發(fā)明實(shí)施例數(shù)據(jù)包的規(guī)則匹配裝置的結(jié)構(gòu)示意圖之三;
[0092]圖12為本發(fā)明實(shí)施例數(shù)據(jù)包的規(guī)則匹配裝置的構(gòu)成示意圖。
【具體實(shí)施方式】
[0093]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0094]
[0095]本發(fā)明實(shí)施例提供的數(shù)據(jù)包的規(guī)則匹配方法及裝置,適用于由O P e n F I O w交換機(jī)和O P e n F I ο w控制器組成的O p e n F I o w網(wǎng)絡(luò),其主要適用于所述O pe n F I ο w交換機(jī)的流表查詢功能。為了更方便的了解本發(fā)明實(shí)施例,下面就O p e ηF I οw交換機(jī)的流表查詢功能進(jìn)行簡(jiǎn)單介紹:由于OpenF I ο w交換機(jī)會(huì)在本地維護(hù)一個(gè)或多個(gè)轉(zhuǎn)發(fā)表,轉(zhuǎn)發(fā)表包括流表和群組表,每個(gè)流表中包括一個(gè)或多個(gè)流條目,每個(gè)流條目包括匹配域和操作域;當(dāng)0 P e n F I ο w交換機(jī)接收到數(shù)據(jù)包后,OpenFlOW交換機(jī)會(huì)將數(shù)據(jù)包與所述流條目的匹配域進(jìn)行匹配,當(dāng)流表內(nèi)有與接收的數(shù)據(jù)包匹配的流條目時(shí),則根據(jù)該流條目的操作域內(nèi)容進(jìn)行數(shù)據(jù)流的轉(zhuǎn)發(fā)操作;若沒有匹配的流條目,數(shù)據(jù)包會(huì)被丟棄,或被上傳到O P e n F I ο w控制器以由O p e n F I o w控制器對(duì)數(shù)
據(jù)包做進(jìn)一步處理。
[0096]本發(fā)明實(shí)施例除了適用于O P e n F I ow網(wǎng)絡(luò)中的Op e n F I o w交換機(jī)外,本發(fā)明實(shí)施例還適用于入侵檢測(cè)系統(tǒng)(IDS, Intrusion Detectiο n Systems ),在I D S中,I D S中的每一條規(guī)則中都描述了一個(gè)已知攻擊的特征,在I D S接收到數(shù)據(jù)包后,會(huì)將到來的數(shù)據(jù)包和這些規(guī)則進(jìn)行比對(duì),以確定該數(shù)據(jù)包是否受到攻擊以及受到哪類攻擊等。現(xiàn)有的I D S的規(guī)則庫(kù)中包含上萬條規(guī)則條目,在這種情況下,將每一個(gè)數(shù)據(jù)包與每一規(guī)則條目進(jìn)行比對(duì)是一個(gè)非常耗時(shí)的工作,與O P e ηF I O w交換機(jī)類似,I D S也需要高速的數(shù)據(jù)處理能力。
[0097]此外,本發(fā)明實(shí)施例不僅適用于O P e n F I O w交換機(jī)和I D S,也適用于其它的根據(jù)大量的表項(xiàng)來處理數(shù)據(jù)的應(yīng)用,比如病毒檢測(cè)程序C I a mA V,應(yīng)用層程序檢測(cè)模塊L 7 f i I t e r等。
[0098]參見圖1,為本發(fā)明實(shí)施例提供的用于數(shù)據(jù)包規(guī)則匹配的網(wǎng)絡(luò)結(jié)構(gòu)示意圖,該網(wǎng)絡(luò)采用一個(gè)進(jìn)程來運(yùn)行多個(gè)包處理模塊,所述包處理模塊之間并行工作,相互之間沒有信息交互;每個(gè)包處理模塊包括 一個(gè)包獲取線程、與每個(gè)包獲取線程分別綁定的至少兩個(gè)協(xié)議處理線程、以及與每個(gè)協(xié)議處理線程分別綁定的至少兩個(gè)數(shù)據(jù)包處理線程。其中,可按照所要處理的數(shù)據(jù)量適應(yīng)性的增加或減少所述包處理模塊的數(shù)量、以及所述包處理模塊中協(xié)議處理線程和數(shù)據(jù)包處理線程的數(shù)量。此外,圖1右下角顯示了整個(gè)進(jìn)程中共享的全局變量:
[0099](I) M S G (m a s s a g e )池:程序初始化時(shí)分配N M S G 個(gè)M S G數(shù)據(jù)結(jié)構(gòu)并保存在M S G池中,其中,Nmscj≥I。
[0100](2)原數(shù)據(jù)包:用來保存接收到的原始數(shù)據(jù)包的內(nèi)存;
[0101](3)數(shù)據(jù)包處理引擎:用于對(duì)數(shù)據(jù)包進(jìn)行規(guī)則匹配等處理。
[0102]下面基于圖1所示的網(wǎng)絡(luò)結(jié)構(gòu)示意圖,分別詳細(xì)介紹本發(fā)明的各個(gè)實(shí)施例。
[0103]實(shí)施例一
[0104]參見圖2,為本發(fā)明實(shí)施例一提供的數(shù)據(jù)包的規(guī)則匹配方法的流程示意圖,具體包括以下步驟:
[0105]步驟101:在接收到數(shù)據(jù)包后,利用確定的包獲取線程捕獲數(shù)據(jù)包,所述確定的包獲取線程為根據(jù)第一負(fù)載均衡算法在至少兩個(gè)包獲取線程中確定的一個(gè)包獲取線程。
[0106]由于系統(tǒng)會(huì)不斷的接收到待處理的數(shù)據(jù)包,為了實(shí)現(xiàn)負(fù)載均衡,首先要將這大量的數(shù)據(jù)流量進(jìn)行一次分流,以將這些數(shù)據(jù)流分?jǐn)偟蕉鄠€(gè)包處理模塊進(jìn)行分別處理,對(duì)于每個(gè)數(shù)據(jù)包,在確定分配給哪個(gè)包處理模塊處理后,利用該包處理模塊的包獲取線程捕獲數(shù)據(jù)包。
[0107]步驟102:利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息,所述確定的協(xié)議處理線程為根據(jù)第二負(fù)載均衡算法在所述確定的包獲取線程綁定的至少兩個(gè)協(xié)議處理線程中確定的一個(gè)協(xié)議處理線程。
[0108]每個(gè)包獲取線程會(huì)不斷的捕獲數(shù)據(jù)包,為了進(jìn)一步實(shí)現(xiàn)負(fù)載均衡,需要將每個(gè)包獲取線程捕獲的這些數(shù)據(jù)包進(jìn)行二次分流,以將這些數(shù)據(jù)流分?jǐn)偟蕉鄠€(gè)協(xié)議處理線程進(jìn)行分別處理,對(duì)于每個(gè)數(shù)據(jù)包,在確定分配給哪個(gè)協(xié)議處理線程處理后,利用該協(xié)議處理線程的對(duì)數(shù)據(jù)包作進(jìn)一步處理。
[0109]需要說明的是,所述第一負(fù)載均衡算法和所述第二負(fù)載均衡算法可以為相同的負(fù)載均衡算法,也可以是不同的負(fù)載均衡算法。
[0110]步驟103:將所述協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中。
[0111]步驟104:每個(gè)數(shù)據(jù)包處理線程分別利用所述協(xié)議信息與對(duì)應(yīng)加載的至少一個(gè)規(guī)則條目進(jìn)行匹配。
[0112]步驟105:如果有數(shù)據(jù)包處理線程匹配出規(guī)則條目,則判斷是否有至少兩個(gè)數(shù)據(jù)包處理線程分別匹配出優(yōu)先級(jí)最高的第一規(guī)則條目,如果是,則執(zhí)行步驟106,如果否,則執(zhí)行步驟107。
[0113]步驟106:從至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目。
[0114]步驟107:將所述第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目。
[0115]在步驟104至步驟107中,當(dāng)協(xié)議處理線程對(duì)一個(gè)數(shù)據(jù)包進(jìn)行協(xié)議解析后,需要對(duì)該數(shù)據(jù)包進(jìn)行規(guī)則匹配這種非常耗時(shí)的工作,通過利用加載了部分規(guī)則的多個(gè)數(shù)據(jù)包處理線程同時(shí)對(duì)一個(gè)數(shù)據(jù)包進(jìn)行規(guī)則匹配,從而將該數(shù)據(jù)包的規(guī)則匹配任務(wù)分擔(dān)到了多個(gè)數(shù)據(jù)包處理線程上做并行處理,這使得數(shù)據(jù)處理能力得到了大幅度提高,進(jìn)一步加強(qiáng)了負(fù)載均衡。
[0116]為了采用步驟104至步驟107進(jìn)行規(guī)則匹配,需要預(yù)先確定分配給每個(gè)數(shù)據(jù)包處理線程使用的至少一個(gè)規(guī)則條目,以使每個(gè)數(shù)據(jù)包處理線程分別加載分配給自己的至少一個(gè)規(guī)則條目。具體地,采用下述方式確定分配給每個(gè)數(shù)據(jù)包處理線程使用的至少一個(gè)規(guī)則條目:
[0117]首先,從所有規(guī)則條目中提取至少一個(gè)規(guī)則子組,所述規(guī)則子組中包含了匹配信息均相同的所有規(guī)則條目,其中,所述協(xié)議信息中包含有所述匹配信息;
[0118]然后,將每個(gè)規(guī)則子組中的規(guī)則條目均衡分配給每個(gè)數(shù)據(jù)包處理線程。
[0119]可見,為保證數(shù)據(jù)包處理線程間的負(fù)載均衡,將匹配信息均相同的多個(gè)規(guī)則條目均衡分配給每個(gè)數(shù)據(jù)包處理線程,使得各個(gè)線程在各自加載的多個(gè)規(guī)則內(nèi)進(jìn)行規(guī)則匹配的開銷是均衡的,即,當(dāng)利用每個(gè)數(shù)據(jù)包處理線程對(duì)數(shù)據(jù)包進(jìn)行匹配時(shí),利用數(shù)據(jù)包的全部或部分協(xié)議信息作為匹配信息,當(dāng)匹配成功時(shí),可從數(shù)據(jù)包處理線程加載的規(guī)則條目中同時(shí)獲取到匹配信息相同的各個(gè)規(guī)則條目;進(jìn)一步地,當(dāng)利用多個(gè)數(shù)據(jù)包處理線程同時(shí)進(jìn)行規(guī)則匹配時(shí),可迅速的獲取所有匹配信息相同的規(guī)則條目,以便從這些規(guī)則條目中選取優(yōu)先級(jí)最高的規(guī)則條目作為當(dāng)前數(shù)據(jù)包的匹配規(guī)則。與現(xiàn)有技術(shù)相比,不必通過一一匹配來獲取數(shù)據(jù)包的匹配規(guī)則,加快了規(guī)則匹配的處理速率;此外,如果對(duì)規(guī)則進(jìn)行隨機(jī)的劃分,會(huì)使得具有相同匹配信息的規(guī)則條目不能均衡的分配給不同的數(shù)據(jù)包處理線程,會(huì)在一定程度上影響系統(tǒng)的負(fù)載均衡。
[0120]參見圖3,為本發(fā)明實(shí)施例提供的規(guī)則劃分流程示意圖,實(shí)現(xiàn)所述“從所有規(guī)則條目中提取至少一個(gè)規(guī)則子組,所述規(guī)則子組中包含了匹配信息均相同的所有規(guī)則條目”的具體步驟包括:
[0121]步驟201:確定對(duì)數(shù)據(jù)包進(jìn)行規(guī)則匹配的匹配項(xiàng),當(dāng)所述匹配項(xiàng)有兩個(gè)以上時(shí),對(duì)所述兩個(gè)以上的匹配項(xiàng)進(jìn)行排序。
[0122]步驟202:按照排序結(jié)果選取排序最前的匹配項(xiàng),將所述排序最前的匹配項(xiàng)作為當(dāng)前匹配項(xiàng),并獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第一匹配信息。
[0123]步驟203:對(duì)于每個(gè)第一匹配信息,分別從所有規(guī)則條目中獲取包含所述第一匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第一規(guī)則子組。 [0124]步驟204:判斷是否存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng),如果存在,則將所述下一匹配項(xiàng)作為當(dāng)前匹配項(xiàng),執(zhí)行步驟205 ;如果不存在,則執(zhí)行步驟206。
[0125]步驟205:獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第二匹配信息,對(duì)于每個(gè)第二匹配信息,分別從每個(gè)第一規(guī)則子組中獲取包含所述第二匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第二規(guī)則子組,并將所述第二規(guī)則子組作為第一規(guī)則子組,繼續(xù)執(zhí)行所述步驟204。
[0126]步驟206:結(jié)束流程。
[0127]為了更方便的了解圖3所述的方法,下面舉例說明:
[0128]例1:參見圖4,為本發(fā)明實(shí)施例提供的規(guī)則劃分樹狀結(jié)構(gòu)圖。WOpenFl Ow交換機(jī)維護(hù)的流表為例,每個(gè)流表中包含一組流表項(xiàng)(流表項(xiàng)即為規(guī)則條目),每個(gè)流表項(xiàng)包含用于匹配數(shù)據(jù)包的匹配域,其中,每個(gè)流表項(xiàng)的匹配域中包括N個(gè)域(這N個(gè)域分別為N個(gè)匹配項(xiàng))。為了方便說明,假設(shè)每個(gè)流表項(xiàng)的匹配域包括N= 5個(gè)域,這5個(gè)域分別為:域1:1 P源地址、域2:1 P目的地址、域3:源端口、域4:目的端口、域5:協(xié)議類型,域I至域5即為對(duì)數(shù)據(jù)包進(jìn)行規(guī)則匹配的匹配項(xiàng);每個(gè)域?qū)?yīng)有多個(gè)域值,例如,域I的m個(gè)域值為m個(gè)不同的I P源地址,圖3中每個(gè)方塊中的數(shù)字代表域值編碼,這些域值即為匹配信息。
[0129]在確定了各個(gè)域后,再對(duì)這些域進(jìn)行排序,可以對(duì)匹配域中的各個(gè)域進(jìn)行排序,也可以選擇匹配域中的部分域進(jìn)行排序,假設(shè)排序結(jié)果為域1、域2、域3、域4、域5,可見,域I為排序最前的域,假設(shè)域I包含有m+ I個(gè)不同域值(譬如:I P I = O、I P I = I……IP I =m),對(duì)于域I中的每個(gè)域值,分別從所有流表項(xiàng)中獲取包含該域值的各個(gè)流表項(xiàng),此時(shí)將所有規(guī)則條目分割成了m+ I個(gè)規(guī)則子組,并將這m+ I個(gè)規(guī)則子組分別構(gòu)成第一規(guī)則子組,即,第I個(gè)第一規(guī)則子組為:包含域I中域值為O的所有流表項(xiàng),第2個(gè)第一規(guī)則子組為:包含域I中域值為I的所有流表項(xiàng)、……第m+ I個(gè)第一規(guī)則子組為:包含域I中域值為m的所有流表項(xiàng)。
[0130]在將所有規(guī)則劃分為m+ I個(gè)第一規(guī)則子組后,繼續(xù)根據(jù)下一匹配項(xiàng)(域2)進(jìn)行規(guī)則劃分,假設(shè)域2包含有η + I個(gè)域值(譬如:I P 2 = O、I P I = 2……I P 2 = η ),
分別對(duì)每個(gè)第一規(guī)則子組進(jìn)行以下劃分:對(duì)于域2中的每個(gè)域值,分別從第一規(guī)則子組中獲取包含該域值的各個(gè)流表項(xiàng),此時(shí)將第一規(guī)則子組分割成了 η + I個(gè)規(guī)則子組,并將這η + I個(gè)規(guī)則子組分別構(gòu)成第二規(guī)則子組,即,第I個(gè)第二規(guī)則子組為:包含域2中域值為O的所有流表項(xiàng),第2個(gè)第二規(guī)則子組為:包含域2中域值為I的所有流表項(xiàng),……第η + 1個(gè)第二規(guī)則子組為:包含域2中域值為η的所有流表項(xiàng);由于存在m+1個(gè)第一規(guī)則子組,且每個(gè)第一規(guī)則子組被分割成了 η + I個(gè)第二規(guī)則子組,則經(jīng)過兩級(jí)規(guī)則劃分后,所有規(guī)則條目被分割成了(m+ I) * (η + I)個(gè)規(guī)則子組。
[0131]繼續(xù)根據(jù)下一匹配項(xiàng)(域3)進(jìn)行規(guī)則劃分,按照上述方法,繼續(xù)對(duì)每個(gè)第二規(guī)則子組進(jìn)行規(guī)則劃分,直到根據(jù)最后一個(gè)匹配項(xiàng)(域5)進(jìn)行規(guī)則劃分完為止,最后得到的各個(gè)規(guī)則子組分別由具有相同域值(匹配信息)的各個(gè)流表項(xiàng)(規(guī)則條目)組成。
[0132]在I D S中,同樣可以按照上述例I所述的方法對(duì)I D S規(guī)則庫(kù)中的所有規(guī)則進(jìn)行劃分。需要說明的是,這種規(guī)則劃分是離線操作的,從而不需考慮規(guī)則劃分對(duì)系統(tǒng)資源的占用,減小了系統(tǒng)的負(fù)載均衡開銷。
[0133]此外,在現(xiàn)有技術(shù)中的數(shù)據(jù)并行方式中,利用多個(gè)O P e n F I O w進(jìn)程同時(shí)運(yùn)行多個(gè)O penFlo w實(shí)例,但是,由于不同的進(jìn)程采用了相同的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)資源被重復(fù)分配給不同的數(shù)據(jù)結(jié)構(gòu)(例如,OpenFlo w中的流表被重復(fù)分配給每個(gè)數(shù)據(jù)結(jié)構(gòu)使用),導(dǎo)致內(nèi)存消耗很大。而本發(fā)明實(shí)施例只采用了一個(gè)進(jìn)程,數(shù)據(jù)資源不必重復(fù)分配,節(jié)省了內(nèi)存消耗。
[0134]實(shí)施例二
[0135]參見圖5,為本發(fā)明實(shí)施例二提供的數(shù)據(jù)包的規(guī)則匹配方法的流程示意圖,具體包括以下步驟:
[0136]步驟301:在接收到數(shù)據(jù)包后,利用哈希算法確定用于捕獲所述數(shù)據(jù)包的包獲取線程,并利用所述確定的包獲取線程捕獲所述數(shù)據(jù)包;
[0137]其中,所述確定的包獲取線程為根據(jù)第一負(fù)載均衡算法在至少兩個(gè)包獲取線程中確定的一個(gè)包獲取線程,所述第一負(fù)載均衡算法為哈希算法。
[0138]下面舉例說明如何利用哈希算法確定用于捕獲所述數(shù)據(jù)包的包獲取線程:
[0139]例2:在現(xiàn)有的哈希算法中,I P S X具有很好的均衡性,故可采用I P S X ( IP移位異或哈希函數(shù),I P Shi f t -X O R)算法確定將數(shù)據(jù)包分配給哪個(gè)包獲取線程進(jìn)行處理。舉例說明:
[0140]假設(shè)O penFlo w交換機(jī)接收到一個(gè)數(shù)據(jù)包,數(shù)據(jù)包的五元組信息為:I P協(xié)議的源地址是192.168.0.1;目的地址是192.168.0.2 ;T C P協(xié)議的源端口是80 ;目的端口是21 ;傳輸層協(xié)議號(hào)是6 ;在I P S X方法的h a s h函數(shù)中,不必考慮協(xié)議
號(hào)。設(shè):
[0141]f I =I P源地址比特串,為 OxcOa 80001 ;
[0142]f 2 =IP目的地址比特串,為O X c O a 80002 ;
[0143]f 3為報(bào)文所含的源端口和目的端口組成的位串,為O X 00500015 ;
[0144]h 1、V I和V 2是中間變量,均為32比特串;
[0145]通過以下運(yùn)算得到h I和h I的后16 b i t (V a I u e值):
[0146]vl=fl"f2;
[0147]V 2 = f 3 ;
[0148]h I = V I << 8 ;
[0149]h I a = v I >> 4 ;
[0150]hi a = v1 >> 12 ;
[0151]h I a = V I >> 16 ;
[0152]hi a = V 2 << 6 ;[0153]hi " = V 2 << 10 ;
[0154]hi " = V 2 << 14 ;
[0155]hi " = V 2 >> 7
[0156]Value = h I & 0 x 00001111 ;
[0157]最后得到h I = 0 X 5405 b 270 ; Value 的值為 0 x b 270 (對(duì)應(yīng)的十進(jìn)制數(shù)為45680)。
[0158]假設(shè)有N個(gè)包獲取線程,且每個(gè)包獲取線程具有對(duì)應(yīng)的編碼,當(dāng)需要在N個(gè)包獲取線程間負(fù)載均衡時(shí),利用V a I u e對(duì)N取模,得到的模值即為確定的包獲取線程的編號(hào)。假設(shè)存在7個(gè)包獲取線程,V a I u e對(duì)7取模后得5,即第5個(gè)包獲取線程即為確定的包獲取線程。
[0159]步驟302:利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程,并利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息。
[0160]其中,所述確定的協(xié)議處理線程為根據(jù)第二負(fù)載均衡算法在所述確定的包獲取線程綁定的至少兩個(gè)協(xié)議處理線程中確定的一個(gè)協(xié)議處理線程,所述第二負(fù)載均衡算法為哈希算法。
[0161]每個(gè)包獲取線程會(huì)不斷的捕獲到數(shù)據(jù)包,為了進(jìn)一步加強(qiáng)負(fù)載均衡,就要對(duì)捕獲的數(shù)據(jù)包進(jìn)行分流,同樣可根據(jù)五元組信息(源I P、目的I P、源端口、目的端口、協(xié)議類型)并結(jié)合哈希算法確定將數(shù)據(jù)包分配給哪個(gè)協(xié)議處理線程。舉例說明:
[0162]例3:假設(shè)與確定的包獲取線程綁定的協(xié)議處理線程有M個(gè),且每個(gè)協(xié)議處理線程具有對(duì)應(yīng)的編碼,當(dāng)需要在M個(gè)協(xié)議處理線程間負(fù)載均衡時(shí),對(duì)于同一個(gè)數(shù)據(jù)包,在利用例2中的方法得到V a I u e值后,利用V a I u e對(duì)M取模,得到的模值即為確定的協(xié)議處理線程對(duì)應(yīng)的編號(hào)。假設(shè)與確定的包獲取線程綁定的協(xié)議處理線程有6個(gè),V a I ue對(duì)6取模后得2,即第2個(gè)協(xié)議處理線程即為確定的協(xié)議處理線程。
[0163]步驟303:將所述協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中。
[0164]步驟304:每個(gè)數(shù)據(jù)包處理線程分別利用所述協(xié)議信息與對(duì)應(yīng)加載的至少一個(gè)規(guī)則條目進(jìn)行匹配。
[0165]步驟305:如果有數(shù)據(jù)包處理線程匹配出規(guī)則條目,則判斷是否有至少兩個(gè)數(shù)據(jù)包處理線程分別匹配出優(yōu)先級(jí)最高的第一規(guī)則條目,如果是,則執(zhí)行步驟306,如果否,則執(zhí)行步驟307。
[0166]步驟306:從至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目。
[0167]步驟307:將所述第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目。
[0168]實(shí)施例三
[0169]參見圖6,為本發(fā)明實(shí)施例三提供的數(shù)據(jù)包的規(guī)則匹配方法的流程示意圖,具體包括以下步驟:
[0170]步驟401:在接收到數(shù)據(jù)包后,利用哈希算法確定用于捕獲所述數(shù)據(jù)包的包獲取線程,并利用所述確定的包獲取線程捕獲所述數(shù)據(jù)包,所述確定的包獲取線程為至少兩個(gè)包獲取線程中的一個(gè)。[0171]步驟402:利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程,并利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息,所述確定的協(xié)議處理線程為所述確定的包獲取線程綁定的至少兩個(gè)協(xié)議處理線程中的一個(gè)。
[0172]步驟403:從M S G池中調(diào)取一個(gè)M S G數(shù)據(jù)結(jié)構(gòu),并利用所述M S G數(shù)據(jù)結(jié)構(gòu)將所述數(shù)據(jù)包的指針信息發(fā)送至所述確定的協(xié)議處理線程。
[0173]系統(tǒng)每捕獲一個(gè)數(shù)據(jù)包,從池中拿出一個(gè)M S G數(shù)據(jù)結(jié)構(gòu),每一個(gè)線程處理完這個(gè)數(shù)據(jù)包后,把處理結(jié)果保存在這個(gè)數(shù)據(jù)結(jié)構(gòu)中,通過消息隊(duì)列傳遞給下一線程,數(shù)據(jù)包處理完畢后,相應(yīng)的M S G數(shù)據(jù)結(jié)構(gòu)又被放入池中即可。
[0174]步驟404:所述確定的協(xié)議處理線程根據(jù)所述指針信息獲取所述數(shù)據(jù)包的協(xié)議信息,之后,所述確定的協(xié)議處理線程將所述協(xié)議信息保存在所述M SG數(shù)據(jù)結(jié)構(gòu)中。
[0175]步驟405:所述M S G數(shù)據(jù)結(jié)構(gòu)將保存的協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中。
[0176]步驟406:每個(gè)數(shù)據(jù)包處理線程分別利用所述協(xié)議信息與對(duì)應(yīng)加載的至少一個(gè)規(guī)則條目進(jìn)行匹配。
[0177]步驟407:當(dāng)每個(gè)數(shù)據(jù)包處理線程的匹配操作結(jié)束后,在所述M S G數(shù)據(jù)結(jié)構(gòu)中設(shè)置標(biāo)識(shí)位,以標(biāo)識(shí)所述數(shù)據(jù)包處理線程對(duì)所述數(shù)據(jù)包的規(guī)則匹配結(jié)束,并當(dāng)匹配出規(guī)則條目時(shí),將匹配出的優(yōu)先級(jí)最高的第一規(guī)則條目的規(guī)則標(biāo)識(shí)保存在所述M S G數(shù)據(jù)結(jié)構(gòu)中。
[0178]步驟408:當(dāng)所述M S G數(shù)據(jù)結(jié)構(gòu)中存有與每個(gè)數(shù)據(jù)包處理線程分別對(duì)應(yīng)的標(biāo)識(shí)位時(shí),判斷所述M S G數(shù)據(jù)結(jié)構(gòu)中是否存儲(chǔ)了至少兩個(gè)規(guī)則標(biāo)識(shí);如果是,則執(zhí)行步驟409,如果否,則執(zhí)行步驟410。
[0179]步驟409:從所述M S G數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)的至少兩個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目;執(zhí)行步驟411。
[0180]步驟410:如果所述M S G數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)了一個(gè)規(guī)則標(biāo)識(shí),則將所述M S G數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)的一個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目;執(zhí)行步驟411。
[0181]步驟411:將所述M S G數(shù)據(jù)結(jié)構(gòu)放回所述M S G池中。
[0182]需要說明的是,將圖1所示的網(wǎng)絡(luò)結(jié)構(gòu)應(yīng)用于不同的網(wǎng)絡(luò)設(shè)備時(shí),數(shù)據(jù)包處理線程可對(duì)應(yīng)不同的線程。參見圖7,為基于O penFlo w交換機(jī)的數(shù)據(jù)包規(guī)則匹配的網(wǎng)絡(luò)結(jié)構(gòu)示意圖,數(shù)據(jù)包處理線程可以包括流表查找線程和動(dòng)作執(zhí)行線程,利用所述流表查找線程進(jìn)行規(guī)則匹配,根據(jù)匹配出的規(guī)則條目中的操作域,利用動(dòng)作執(zhí)行線程根據(jù)操作域?qū)?shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)處理等。參見圖8,為基于I D S的數(shù)據(jù)包規(guī)則匹配的網(wǎng)絡(luò)結(jié)構(gòu)示意圖,數(shù)據(jù)包處理線程即為深度包檢測(cè)線程,該線程用于通過規(guī)則對(duì)比對(duì)數(shù)據(jù)包是否受到攻擊進(jìn)行檢測(cè)。
[0183]本發(fā)明實(shí)施例提供的數(shù)據(jù)包的規(guī)則匹配方法,首先將接收的各個(gè)數(shù)據(jù)包進(jìn)行二次分流,以將數(shù)據(jù)包分擔(dān)到不同的協(xié)議處理線程上進(jìn)行分別處理,從而減少了數(shù)據(jù)包等待響應(yīng)的時(shí)間,這在一定程度上實(shí)現(xiàn)了負(fù)載均衡;進(jìn)一步地,在協(xié)議處理線程對(duì)一個(gè)數(shù)據(jù)包進(jìn)行協(xié)議解析后,需要對(duì)該數(shù)據(jù)包進(jìn)行規(guī)則匹配這種非常耗時(shí)的工作,通過利用加載了部分規(guī)則的多個(gè)數(shù)據(jù)包處理線程對(duì)數(shù)據(jù)包進(jìn)行規(guī)則匹配,從而將該數(shù)據(jù)包的規(guī)則匹配任務(wù)分擔(dān)到了多個(gè)數(shù)據(jù)包處理線程上做并行處理,這使得數(shù)據(jù)處理能力得到了大幅度提高,進(jìn)一步實(shí)現(xiàn)了負(fù)載均衡。可見,由于本發(fā)明實(shí)施例沒有采用現(xiàn)有技術(shù)中的基于流空間劃分的負(fù)載均衡方式,克服了現(xiàn)有技術(shù)中負(fù)載均衡受流量的不均衡性和突發(fā)性的影響的缺陷,采用本發(fā)明技術(shù)方案,實(shí)現(xiàn)了各個(gè)同類線程間的負(fù)載均衡,加強(qiáng)了網(wǎng)絡(luò)數(shù)據(jù)處理能力。此外,本發(fā)明實(shí)施例的規(guī)則劃分處理使每一個(gè)數(shù)據(jù)包處理線程加載的規(guī)則數(shù)目少,適合眾核處理器單個(gè)核內(nèi)Cache (高速緩沖存儲(chǔ)器)資源稀缺的特點(diǎn)。
[0184]實(shí)施例四
[0185]參見圖9,為本發(fā)明實(shí)施例四提供的數(shù)據(jù)包的規(guī)則匹配裝置的結(jié)構(gòu)示意圖,該裝置包括:
[0186]數(shù)據(jù)包捕獲模塊1,用于在接收到數(shù)據(jù)包后,利用確定的包獲取線程捕獲數(shù)據(jù)包,所述確定的包獲取線程為根據(jù)第一負(fù)載均衡算法在至少兩個(gè)包獲取線程中確定的一個(gè)包獲取線程;
[0187]協(xié)議信息獲取模塊2,用于利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息,所述確定的協(xié)議處理線程為根據(jù)第二負(fù)載均衡算法在所述確定的包獲取線程綁定的至少兩個(gè)協(xié)議處理線程中確定的一個(gè)協(xié)議處理線程;
[0188]協(xié)議信息分發(fā)模塊3,用于將所述協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中;
[0189]匹配進(jìn)行模塊4,用于每個(gè)數(shù)據(jù)包處理線程分別利用所述協(xié)議信息與對(duì)應(yīng)加載的至少一個(gè)規(guī)則條目進(jìn)行匹配;
[0190]成功匹配模塊5,用于當(dāng)有數(shù)據(jù)包處理線程匹配出規(guī)則條目時(shí),判斷是否有至少兩個(gè)數(shù)據(jù)包處理線程分別匹配出優(yōu)先級(jí)最高的第一規(guī)則條目,如果是,則從至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目,如果否,則將所述第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目。
[0191]所述裝置還應(yīng)包括:規(guī)則分配模塊,用于確定分配給每個(gè)數(shù)據(jù)包處理線程使用的至少一個(gè)規(guī)則條目,以使每個(gè)數(shù)據(jù)包處理線程分別加載分配給自己的至少一個(gè)規(guī)則條目;
[0192]所述規(guī)則分配模塊,具體包括:
[0193]規(guī)則子組提取單元,用于從所有規(guī)則條目中提取至少一個(gè)規(guī)則子組,每個(gè)規(guī)則子組中包含了匹配信息均相同的所有規(guī)則條目,所述協(xié)議信息中包含有所述匹配信息;
[0194]規(guī)則條目分配單元,用于將每個(gè)規(guī)則子組中的規(guī)則條目均衡分配給每個(gè)數(shù)據(jù)包處
理線程。
[0195]其中,所述規(guī)則子組提取單元,具體包括:
[0196]匹配項(xiàng)排序子單元,用于確定對(duì)數(shù)據(jù)包進(jìn)行規(guī)則匹配的匹配項(xiàng),當(dāng)所述匹配項(xiàng)有兩個(gè)以上時(shí),對(duì)所述兩個(gè)以上的匹配項(xiàng)進(jìn)行排序;
[0197]第一規(guī)則子組形成子單元,用于按照排序結(jié)果選取排序最前的匹配項(xiàng),將所述排序最前的匹配項(xiàng)作為當(dāng)前匹配項(xiàng),并獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第一匹配信息,對(duì)于每個(gè)第一匹配信息,分別從所有規(guī)則條目中獲取包含所述第一匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第一規(guī)則子組;[0198]下一匹配項(xiàng)判斷子單元,用于判斷是否存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng);
[0199]當(dāng)前匹配項(xiàng)替換子單元,用于在所述下一匹配項(xiàng)判斷子單元判斷得到的存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng)時(shí),將所述下一匹配項(xiàng)作為當(dāng)前匹配項(xiàng);
[0200]第二規(guī)則子組形成子單元,用于獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第二匹配信息,對(duì)于每個(gè)第二匹配信息,分別從每個(gè)第一規(guī)則子組中獲取包含所述第二匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第二規(guī)則子組,并將所述第二規(guī)則子組作為第一規(guī)則子組,繼續(xù)利用所述下一匹配項(xiàng)判斷子單元執(zhí)行所述判斷是否存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng)的步驟,直到不存在所述下一匹配項(xiàng)為止。
[0201]需要說明的是,可以在利用匹配進(jìn)行模塊4執(zhí)行相關(guān)操作前的任意時(shí)刻,利用規(guī)則分配模塊實(shí)現(xiàn)上述操作;也可以離線利用規(guī)則分配模塊實(shí)現(xiàn)上述操作。
[0202]實(shí)施例五
[0203]參見圖10,為本發(fā)明實(shí)施例五提供的數(shù)據(jù)包的規(guī)則匹配裝置的結(jié)構(gòu)示意圖。上述實(shí)施例四中的所述第一負(fù)載均衡算法為哈希算法,所述第二負(fù)載均衡算法也為哈希算法,本實(shí)施例五除了包括上述實(shí)施例四中的各個(gè)模塊外,該裝置還包括:
[0204]包獲取線程確定模塊6,用于在利用確定的包獲取線程捕獲數(shù)據(jù)包前,利用哈希算法確定用于捕獲所述數(shù)據(jù)包的包獲取線程。
[0205]協(xié)議處理線程確定模塊7,用于在利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息前,利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程。
[0206]實(shí)施例六
[0207]參見圖11,為本發(fā)明實(shí)施例六提供的數(shù)據(jù)包的規(guī)則匹配裝置的結(jié)構(gòu)示意圖。本實(shí)施例六除了包括上述實(shí)施例五中的各個(gè)模塊外,該裝置還包括:
[0208]協(xié)議信息發(fā)送模塊8,用于在所述協(xié)議處理線程確定模塊7利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程后,從M S G池中調(diào)取一個(gè)M S G數(shù)據(jù)結(jié)構(gòu),并利用所述M S G數(shù)據(jù)結(jié)構(gòu)將所述數(shù)據(jù)包的指針信息發(fā)送至所述確定的協(xié)議處理線程;
[0209]所述協(xié)議信息獲取模塊2,具體用于利用所述確定的協(xié)議處理線程根據(jù)所述指針信息獲取所述數(shù)據(jù)包的協(xié)議信息。
[0210]該裝置還包括:
[0211]協(xié)議信息保存模塊9,用于在所述協(xié)議信息獲取模塊2利用確定的協(xié)議處理線程根據(jù)所述指針信息獲取所述數(shù)據(jù)包的協(xié)議信息后,將所述協(xié)議信息保存在所述M S G數(shù)據(jù)結(jié)構(gòu)中;
[0212]所述協(xié)議信息分發(fā)模塊3,具體用于利用所述M S G數(shù)據(jù)結(jié)構(gòu)將保存的協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中。
[0213]該裝置還包括:
[0214]匹配規(guī)則保存模塊10,用于當(dāng)所述匹配進(jìn)行模塊4利用每個(gè)數(shù)據(jù)包處理線程的匹配操作結(jié)束后,在所述M S G數(shù)據(jù)結(jié)構(gòu)中設(shè)置標(biāo)識(shí)位,以標(biāo)識(shí)所述數(shù)據(jù)包處理線程對(duì)所述數(shù)據(jù)包的規(guī)則匹配結(jié)束,并將匹配出的優(yōu)先級(jí)最高的第一規(guī)則條目的規(guī)則標(biāo)識(shí)保存在所述MSG數(shù)據(jù)結(jié)構(gòu)中;
[0215]所述成功匹配模塊5,具體包括:[0216]規(guī)則標(biāo)識(shí)判斷單元,用于當(dāng)所述M S G數(shù)據(jù)結(jié)構(gòu)中存有與每個(gè)數(shù)據(jù)包處理線程分別對(duì)應(yīng)的標(biāo)識(shí)位時(shí),判斷所述M S G數(shù)據(jù)結(jié)構(gòu)中是否存儲(chǔ)了至少兩個(gè)規(guī)則標(biāo)識(shí);
[0217]第一規(guī)則匹配單元,用于當(dāng)所述規(guī)則標(biāo)識(shí)判斷單元判斷得到的所述M S G數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)了至少兩個(gè)規(guī)則標(biāo)識(shí)時(shí),從所述至少兩個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目;
[0218]第二規(guī)則匹配單元,用于當(dāng)所述規(guī)則標(biāo)識(shí)判斷單元判斷得到的所述M S G數(shù)據(jù)結(jié)構(gòu)中未存儲(chǔ)至少兩個(gè)規(guī)則標(biāo)識(shí)時(shí),若所述M S G數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)了一個(gè)規(guī)則標(biāo)識(shí)時(shí),則將所述一個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目;
[0219]數(shù)據(jù)結(jié)構(gòu)回放單元,將所述M S G數(shù)據(jù)結(jié)構(gòu)放回所述M S G池中。
[0220]在硬件實(shí)現(xiàn)上,以上模塊可以以硬件形式內(nèi)嵌于或獨(dú)立于數(shù)據(jù)包的規(guī)則匹配裝置的處理器中,也可以以軟件形式存儲(chǔ)于數(shù)據(jù)包的規(guī)則匹配裝置中,如規(guī)則匹配裝置的存儲(chǔ)器中,以便于處理器調(diào)用執(zhí)行以上各個(gè)模塊對(duì)應(yīng)的操作。該處理器可以為中央處理單元(CPU)、微處理器、單片機(jī)等。圖9、10、11所示的裝置能夠執(zhí)行上述實(shí)施例中的相應(yīng)步驟,具體可參見上述實(shí)施例的描述。其所達(dá)到的效果也可參見上述實(shí)施例所述。
[0221]進(jìn)一步地,本發(fā)明實(shí)施例還提供了數(shù)據(jù)包的規(guī)則匹配裝置100的構(gòu)成??砂ㄖ辽僖粋€(gè)處理器(例如CPU),至少一個(gè)網(wǎng)絡(luò)接口或者其他通信接口,存儲(chǔ)器,和至少一個(gè)通信總線,用于實(shí)現(xiàn)這些裝置之間的連接通信。處理器用于執(zhí)行存儲(chǔ)器中存儲(chǔ)的可執(zhí)行模塊,例如計(jì)算機(jī)程序。存儲(chǔ)器可能包含高速隨機(jī)存取存儲(chǔ)器(RA M =Random Access Memor y ),也可能還包括非不穩(wěn)定的存儲(chǔ)器(n on —volatile memo r y ),例如至少一個(gè)磁盤存儲(chǔ)器。通過至少一個(gè)網(wǎng)絡(luò)接口(可以是有線或者無線)實(shí)現(xiàn)該系統(tǒng)網(wǎng)關(guān)與至少一個(gè)其他網(wǎng)元之間的通信連接,可以使用互聯(lián)網(wǎng),廣域網(wǎng),本地網(wǎng),城域網(wǎng)等。
[0222]參見圖7所示,在一些實(shí)施方式中,存儲(chǔ)器中存儲(chǔ)了程序指令,程序指令可以被處理器執(zhí)行,其中,處理器調(diào)取程序指令,執(zhí)行如下步驟:“在接收到數(shù)據(jù)包后,利用確定的包獲取線程捕獲數(shù)據(jù)包,所述確定的包獲取線程為根據(jù)第一負(fù)載均衡算法在至少兩個(gè)包獲取線程中確定的一個(gè)包獲取線程;利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息,所述確定的協(xié)議處理線程為根據(jù)第二負(fù)載均衡算法在所述確定的包獲取線程綁定的至少兩個(gè)協(xié)議處理線程中確定的一個(gè)協(xié)議處理線程;將所述協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中;每個(gè)數(shù)據(jù)包處理線程分別利用所述協(xié)議信息與對(duì)應(yīng)加載的至少一個(gè)規(guī)則條目進(jìn)行匹配;如果有數(shù)據(jù)包處理線程匹配出規(guī)則條目,則判斷是否有至少兩個(gè)數(shù)據(jù)包處理線程分別匹配出優(yōu)先級(jí)最高的第一規(guī)則條目,如果是,則從至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目,如果否,則將所述第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目”。
[0223]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,僅以上述各功能模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的模塊和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。
[0224]在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
[0225]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
[0226]另外,在本申請(qǐng)各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
[0227]所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。基于這樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM, Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0228]以上所述,以上實(shí)施例僅用以說明本申請(qǐng)的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本申請(qǐng)進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本申請(qǐng)各實(shí)施例技術(shù)方案的精神和范圍。
【權(quán)利要求】
1.一種數(shù)據(jù)包的規(guī)則匹配方法,其特征在于,包括: 在接收到數(shù)據(jù)包后,利用確定的包獲取線程捕獲數(shù)據(jù)包,所述確定的包獲取線程為根據(jù)第一負(fù)載均衡算法在至少兩個(gè)包獲取線程中確定的一個(gè)包獲取線程; 利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息,所述確定的協(xié)議處理線程為根據(jù)第二負(fù)載均衡算法在所述確定的包獲取線程綁定的至少兩個(gè)協(xié)議處理線程中確定的一個(gè)協(xié)議處理線程; 將所述協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中; 每個(gè)數(shù)據(jù)包處理線程分別利用所述協(xié)議信息與對(duì)應(yīng)加載的至少一個(gè)規(guī)則條目進(jìn)行匹配; 如果有數(shù)據(jù)包處理線程匹配出規(guī)則條目,則判斷是否有至少兩個(gè)數(shù)據(jù)包處理線程分別匹配出優(yōu)先級(jí)最高的第一規(guī)則條目,如果是,則從至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目,如果否,則將所述第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 確定分配給每個(gè)數(shù)據(jù)包處理線程使用的至少一個(gè)規(guī)則條目,以使每個(gè)數(shù)據(jù)包處理線程分別加載分配給自己的至少一個(gè)規(guī)則條目; 所述確定分配給每個(gè)數(shù)據(jù)包處理線程使用的至少一個(gè)規(guī)則條目,具體包括: 從所有規(guī)則條目中提取至少一個(gè)規(guī)則子組,每個(gè)規(guī)則子組中包含了匹配信息均相同的所有規(guī)則條目,所述協(xié)議信息中包含有所述匹配信息; 將每個(gè)規(guī)則子組中的規(guī)則條目均衡分配給每個(gè)數(shù)據(jù)包處理線程。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述從所有規(guī)則條目中提取至少一個(gè)規(guī)則子組,具體包括: 確定對(duì)數(shù)據(jù)包進(jìn)行規(guī)則匹配的匹配項(xiàng),當(dāng)所述匹配項(xiàng)有兩個(gè)以上時(shí),對(duì)所述兩個(gè)以上的匹配項(xiàng)進(jìn)行排序; 按照排序結(jié)果選取排序最前的匹配項(xiàng),將所述排序最前的匹配項(xiàng)作為當(dāng)前匹配項(xiàng),并獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第一匹配信息; 對(duì)于每個(gè)第一匹配信息,分別從所有規(guī)則條目中獲取包含所述第一匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第一規(guī)則子組; 判斷是否存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng),如果存在,則將所述下一匹配項(xiàng)作為當(dāng)前匹配項(xiàng); 獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第二匹配信息,對(duì)于每個(gè)第二匹配信息,分別從每個(gè)第一規(guī)則子組中獲取包含所述第二匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第二規(guī)則子組,并將所述第二規(guī)則子組作為第一規(guī)則子組,繼續(xù)執(zhí)行所述判斷是否存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng)的步驟,直到不存在所述下一匹配項(xiàng)為止。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一負(fù)載均衡算法為哈希算法,在所述利用確定的包獲取線程捕獲數(shù)據(jù)包前,還包括: 利用哈希算法確定用于捕獲所述數(shù)據(jù)包的包獲取線程。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述第二負(fù)載均衡算法為哈希算法,在所述利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息前,還包括: 利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,在利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程后,還包括: 從M S G池中調(diào)取一個(gè)M S G數(shù)據(jù)結(jié)構(gòu),并利用所述M S G數(shù)據(jù)結(jié)構(gòu)將所述數(shù)據(jù)包的指針信息發(fā)送至所述確定的協(xié)議處理線程; 所述利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息,具體為: 所述確定的協(xié)議處理線程根據(jù)所述指針信息獲取所述數(shù)據(jù)包的協(xié)議信息。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述確定的協(xié)議處理線程根據(jù)所述指針信息獲取所述數(shù)據(jù)包的協(xié)議信息后,還包括: 所述確定的協(xié)議處理線程將所述協(xié)議信息保存在所述M SG數(shù)據(jù)結(jié)構(gòu)中; 所述將所述協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中,具體為: 所述M SG數(shù)據(jù)結(jié)構(gòu)將保存的協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中。
8.根據(jù)權(quán)利要求6或7所述的方法,其特征在于,所述方法還包括: 當(dāng)每個(gè)數(shù)據(jù)包處理線程的匹配操作結(jié)束后,在所述M S G數(shù)據(jù)結(jié)構(gòu)中設(shè)置標(biāo)識(shí)位,以標(biāo)識(shí)所述數(shù)據(jù)包處理線程對(duì)所述數(shù)據(jù)包的規(guī)則匹配結(jié)束,并將匹配出的優(yōu)先級(jí)最高的第一規(guī)則條目的規(guī)則標(biāo)識(shí)保存在所述M SG數(shù)據(jù)結(jié)構(gòu)中。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述判斷是否有至少兩個(gè)數(shù)據(jù)包處理線程分別匹配出優(yōu)先級(jí)最高的第一規(guī)則條目,如果是,則從至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目,如果否,則將所述第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目,具體包括: 當(dāng)所述M SG數(shù)據(jù)結(jié)構(gòu)中存有與每個(gè)數(shù)據(jù)包處理線程分別對(duì)應(yīng)的標(biāo)識(shí)位時(shí),判斷所述MSG數(shù)據(jù)結(jié)構(gòu)中是否存儲(chǔ)了至少兩個(gè)規(guī)則標(biāo)識(shí); 如果是,則從所述至少兩個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目; 如果否,則當(dāng)所述M S G數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)了一個(gè)規(guī)則標(biāo)識(shí)時(shí),將所述一個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目; 將所述M SG數(shù)據(jù)結(jié)構(gòu)放回所述M S G池中。
10.一種數(shù)據(jù)包的規(guī)則匹配裝置,其特征在于,包括: 數(shù)據(jù)包捕獲模塊,用于在接收到數(shù)據(jù)包后,利用確定的包獲取線程捕獲數(shù)據(jù)包,所述確定的包獲取線程為根據(jù)第一負(fù)載均衡算法在至少兩個(gè)包獲取線程中確定的一個(gè)包獲取線程; 協(xié)議信息獲取模塊,用于利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息,所述確定的協(xié)議處理線程為根據(jù)第二負(fù)載均衡算法在所述確定的包獲取線程綁定的至少兩個(gè)協(xié)議處理線程中確定的一個(gè)協(xié)議處理線程; 協(xié)議信息分發(fā)模塊,用于將所述協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中;匹配進(jìn)行模塊,用于每個(gè)數(shù)據(jù)包處理線程分別利用所述協(xié)議信息與對(duì)應(yīng)加載的至少一個(gè)規(guī)則條目進(jìn)行匹配; 成功匹配模塊,用于當(dāng)有數(shù)據(jù)包處理線程匹配出規(guī)則條目時(shí),判斷是否有至少兩個(gè)數(shù)據(jù)包處理線程分別匹配出優(yōu)先級(jí)最高的第一規(guī)則條目,如果是,則從至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目,如果否,則將所述第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述裝置還包括: 規(guī)則分配模塊,用于確定分配給每個(gè)數(shù)據(jù)包處理線程使用的至少一個(gè)規(guī)則條目,以使每個(gè)數(shù)據(jù)包處理線程分別加載分配給自己的至少一個(gè)規(guī)則條目; 所述規(guī)則分配模塊,具體包括: 規(guī)則子組提取單元,用于從所有規(guī)則條目中提取至少一個(gè)規(guī)則子組,每個(gè)規(guī)則子組中包含了匹配信息均相同的所有規(guī)則條目,所述協(xié)議信息中包含有所述匹配信息; 規(guī)則條目分配單元,用于將每個(gè)規(guī)則子組中的規(guī)則條目均衡分配給每個(gè)數(shù)據(jù)包處理線程。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述規(guī)則子組提取單元,具體包括: 匹配項(xiàng)排序子單元,用于確定對(duì)數(shù)據(jù)包進(jìn)行規(guī)則匹配的匹配項(xiàng),當(dāng)所述匹配項(xiàng)有兩個(gè)以上時(shí),對(duì)所述兩個(gè)以上的匹配項(xiàng)進(jìn)行排序; 第一規(guī)則子組形成子單元,用于按照排序結(jié)果選取排序最前的匹配項(xiàng),將所述排序最前的匹配項(xiàng)作為當(dāng)前匹配項(xiàng),并`獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第一匹配信息,對(duì)于每個(gè)第一匹配信息,分別從所有規(guī)則條目中獲取包含所述第一匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第一規(guī)則子組; 下一匹配項(xiàng)判斷子單元,用于判斷是否存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng); 當(dāng)前匹配項(xiàng)替換子單元,用于在所述下一匹配項(xiàng)判斷子單元判斷得到的存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng)時(shí),將所述下一匹配項(xiàng)作為當(dāng)前匹配項(xiàng); 第二規(guī)則子組形成子單元,用于獲取屬于所述當(dāng)前匹配項(xiàng)的各個(gè)第二匹配信息,對(duì)于每個(gè)第二匹配信息,分別從每個(gè)第一規(guī)則子組中獲取包含所述第二匹配信息的各個(gè)規(guī)則條目,并將分別獲取的這些規(guī)則條目分別構(gòu)成第二規(guī)則子組,并將所述第二規(guī)則子組作為第一規(guī)則子組,繼續(xù)利用所述下一匹配項(xiàng)判斷子單元執(zhí)行所述判斷是否存在所述當(dāng)前匹配項(xiàng)的下一匹配項(xiàng)的步驟,直到不存在所述下一匹配項(xiàng)為止。
13.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述第一負(fù)載均衡算法為哈希算法,所述裝置還包括: 包獲取線程確定模塊,用于在利用確定的包獲取線程捕獲數(shù)據(jù)包前,利用哈希算法確定用于捕獲所述數(shù)據(jù)包的包獲取線程。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述第二負(fù)載均衡算法為哈希算法,所述裝置還包括: 協(xié)議處理線程確定模塊,用于在利用確定的協(xié)議處理線程獲取所述數(shù)據(jù)包的協(xié)議信息前,利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程。
15.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述裝置還包括: 協(xié)議信息發(fā)送模塊,用于在利用哈希算法確定用于獲取所述數(shù)據(jù)包的協(xié)議信息的協(xié)議處理線程后,從M S G池中調(diào)取一個(gè)M S G數(shù)據(jù)結(jié)構(gòu),并利用所述M S G數(shù)據(jù)結(jié)構(gòu)將所述數(shù)據(jù)包的指針信息發(fā)送至所述確定的協(xié)議處理線程; 所述協(xié)議信息獲取模塊,具體用于利用所述確定的協(xié)議處理線程根據(jù)所述指針信息獲取所述數(shù)據(jù)包的協(xié)議信息。
16.根據(jù)權(quán)利要求15所述的裝置,其特征在于,所述裝置還包括: 協(xié)議信息保存模塊,用于在所述確定的協(xié)議處理線程根據(jù)所述指針信息獲取所述數(shù)據(jù)包的協(xié)議信息后,將所述協(xié)議信息保存在所述M S G數(shù)據(jù)結(jié)構(gòu)中; 所述協(xié)議信息分發(fā)模塊,具體用于利用所述M S G數(shù)據(jù)結(jié)構(gòu)將保存的協(xié)議信息分別發(fā)送至所述確定的協(xié)議處理線程綁定的至少兩個(gè)數(shù)據(jù)包處理線程中。
17.根據(jù)權(quán)利要求15或16所述的裝置,其特征在于,所述裝置還包括: 匹配規(guī)則保存模塊,用于當(dāng)所述匹配進(jìn)行模塊利用每個(gè)數(shù)據(jù)包處理線程的匹配操作結(jié)束后,在所述M S G數(shù)據(jù)結(jié)構(gòu)中設(shè)置標(biāo)識(shí)位,以標(biāo)識(shí)所述數(shù)據(jù)包處理線程對(duì)所述數(shù)據(jù)包的規(guī)則匹配結(jié)束,并將匹配出的優(yōu)先級(jí)最高的第一規(guī)則條目的規(guī)則標(biāo)識(shí)保存在所述M S G數(shù)據(jù)結(jié)構(gòu)中。
18.根據(jù)權(quán)利要求17所述的裝置,其特征在于,所述成功匹配模塊,具體包括: 規(guī)則標(biāo)識(shí)判斷單元,用于當(dāng)所述M S G數(shù)據(jù)結(jié)構(gòu)中存有與每個(gè)數(shù)據(jù)包處理線程分別對(duì)應(yīng)的標(biāo)識(shí)位時(shí),判斷所述M S G數(shù)據(jù)結(jié)構(gòu)中是否存儲(chǔ)了至少兩個(gè)規(guī)則標(biāo)識(shí); 第一規(guī)則匹配單元,用于當(dāng)所述規(guī)則標(biāo)識(shí)判斷單元判斷得到的所述M S G數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)了至少兩個(gè)規(guī)則標(biāo)識(shí)時(shí),`從所述至少兩個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的至少兩個(gè)第一規(guī)則條目中選取優(yōu)先級(jí)最高的第二規(guī)則條目,以將所述第二規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目; 第二規(guī)則匹配單元,用于當(dāng)所述規(guī)則標(biāo)識(shí)判斷單元判斷得到的所述M S G數(shù)據(jù)結(jié)構(gòu)中未存儲(chǔ)至少兩個(gè)規(guī)則標(biāo)識(shí)時(shí),若所述M S G數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)了一個(gè)規(guī)則標(biāo)識(shí)時(shí),則將所述一個(gè)規(guī)則標(biāo)識(shí)對(duì)應(yīng)的第一規(guī)則條目作為與所述數(shù)據(jù)包匹配的規(guī)則條目; 數(shù)據(jù)結(jié)構(gòu)回放單元,將所述M S G數(shù)據(jù)結(jié)構(gòu)放回所述M S G池中。
【文檔編號(hào)】H04L12/741GK103560958SQ201310493721
【公開日】2014年2月5日 申請(qǐng)日期:2013年10月18日 優(yōu)先權(quán)日:2013年10月18日
【發(fā)明者】姜海洋, 丁萬夫, 林程勇, 謝高崗, 關(guān)洪濤, 劉俊杰 申請(qǐng)人:華為技術(shù)有限公司