本發(fā)明涉及軟件定義網(wǎng)絡領域,尤其涉及一種基于子流表分割的流表存儲優(yōu)化方法及裝置。
背景技術(shù):
:軟件定義網(wǎng)絡定義了一種控制平面與數(shù)據(jù)平面解耦合的新型網(wǎng)絡架構(gòu),網(wǎng)絡轉(zhuǎn)發(fā)設備中的控制功能被移除出來,成為簡單的轉(zhuǎn)發(fā)單元。控制平面和數(shù)據(jù)平面之間通過標準化的接口進行交互,通常,將該接口稱為南向接口。openflow協(xié)議就是一種在軟件定義網(wǎng)絡中被廣泛接受的南向接口??刂破骱途W(wǎng)絡轉(zhuǎn)發(fā)設備之間采用openflow協(xié)議進行交互,控制器將規(guī)則下發(fā)到轉(zhuǎn)發(fā)設備中,轉(zhuǎn)發(fā)設備將其存儲到流表中,一條規(guī)則對應流表中的一個表項,然后轉(zhuǎn)發(fā)設備通過查詢流表匹配字段,根據(jù)指令完成對數(shù)據(jù)包的動作,包括丟棄、轉(zhuǎn)發(fā)和將數(shù)據(jù)包發(fā)送到控制器等。如圖1所示,openflow流表存儲在內(nèi)存中。由于功能擴展,隨著openflow版本的演進,openflow流表中的匹配字段不斷增加,同時也增加了流表的復雜度。流表大小急劇增加,流表的存儲成為一個亟需解決的問題?,F(xiàn)有方案中,將流表根據(jù)匹配字段的共存關系和沖突關系分割成數(shù)張子流表。設d={fi|1≤i≤d}表示流表t中的一條流表項ri的d個匹配字段。那么,共存關系定義如下:coe={(fi,fj)|fi∈d,fj∈d,如果fi存在,則fj必然存在,如果fi不存在則fj也不存在}例如openflow定義的匹配字段ip_src和ip_dst,tcp_src和tcp_dst都是共存關系。沖突關系定義為:col={(fi,fj)|fi∈d,fj∈d,fi與fj不能同時存在}例如tcp_src和udp_src就是互斥關系。根據(jù)沖突關系與共存關系,對流表進行初始分割,直至子流表數(shù)大于等于限定閾值k,并將初始流表中的表項添加到子流表中存儲。在流表更新的過程中,如果子流表中的表項條數(shù)超出限定閾值n,則對子流表進行分割操作。如果子流表的個數(shù)超過限定閾值k,則對子流表進行合并操作。在整個過程中,沒有考慮表項之間的優(yōu)先級與依賴關系,盡管節(jié)省了存儲空間,但增加了查找匹配的時間開銷。技術(shù)實現(xiàn)要素:為解決上述技術(shù)問題,本發(fā)明實施例提供了一種基于子流表分割的流表存儲優(yōu)化方法及裝置。本發(fā)明實施例提供的基于子流表分割的流表存儲優(yōu)化方法,包括:根據(jù)流表中的匹配字段是否為空,確定所述流表中各個表項的流類別向量;合并相同的流類別向量,并統(tǒng)計出各個流類別向量對應的權(quán)重;根據(jù)各個流類別向量對應的權(quán)重,從所有流類別向量中選擇一組最優(yōu)流類別向量集合,所述最優(yōu)流類別向量集合覆蓋所述流表中的所有匹配字段;根據(jù)所述最優(yōu)流類別向量集合以及表項依賴圖譜進行子流表分割,將所述表項劃分到所述子流表中進行存儲。本發(fā)明實施例中,所述根據(jù)流表中的匹配字段是否為空,確定所述流表中各個表項的流類別向量,包括:建立流類別向量,所述流類別向量包括所述流表中的所有匹配字段;針對每一個表項,當所述表項中的匹配字段為空,則將所述流類別向量中對應的匹配字段設置為第一值;當所述表項中的匹配字段不為空,則將所述流類別向量中對應的匹配字段設置為第二值,所述第一值與所述第二值不同。本發(fā)明實施例中,所述合并相同的流類別向量,并統(tǒng)計出各個流類別向量對應的權(quán)重,包括:合并相同的流類別向量,將合并成同一流類別向量的數(shù)目作為該流類別向量對應的權(quán)重。本發(fā)明實施例中,所述根據(jù)各個流類別向量對應的權(quán)重,從所有流類別向量中選擇一組最優(yōu)流類別向量集合,包括:合并相同的流類別向量,建立流類別向量矩陣建立流類別矩陣;從所述流類別矩陣中提取任意k個流類別向量,得到多組流類別向量集合;所述流類別向量集合能夠覆蓋流表中的所有匹配字段;k小于等于所有的流類別向量數(shù)目;從所述多組流類別向量集合中,選擇權(quán)重最大的一組流類別向量集合作為最優(yōu)流類別向量集合。本發(fā)明實施例中,所述表項依賴圖譜包括如下信息:表項的優(yōu)先級信息和表項之間的依賴關系。本發(fā)明實施例中,所述方法還包括:計算得到表項依賴圖譜;根據(jù)所述表項依賴圖譜,將具有依賴關系的表項存儲到同一子流表中;或者,對所述表項依賴圖譜進行更新,將新下發(fā)的表項存儲到對應的子流表中。本發(fā)明實施例提供的基于子流表分割的流表存儲優(yōu)化裝置,包括:確定單元,用于根據(jù)流表中的匹配字段是否為空,確定所述流表中各個表項的流類別向量;合并單元,用于合并相同的流類別向量,并統(tǒng)計出各個流類別向量對應的權(quán)重;選擇單元,用于根據(jù)各個流類別向量對應的權(quán)重,從所有流類別向量中選擇一組最優(yōu)流類別向量集合,所述最優(yōu)流類別向量集合覆蓋所述流表中的所有匹配字段;分割存儲單元,用于根據(jù)所述最優(yōu)流類別向量集合以及表項依賴圖譜進行子流表分割,將所述表項劃分到所述子流表中進行存儲。本發(fā)明實施例中,所述確定單元,還用于建立流類別向量,所述流類別向量包括所述流表中的所有匹配字段;針對每一個表項,當所述表項中的匹配字段為空,則將所述流類別向量中對應的匹配字段設置為第一值;當所述表項中的匹配字段不為空,則將所述流類別向量中對應的匹配字段設置為第二值,所述第一值與所述第二值不同。本發(fā)明實施例中,所述合并單元,還用于合并相同的流類別向量,將合并成同一流類別向量的數(shù)目作為該流類別向量對應的權(quán)重。本發(fā)明實施例中,所述選擇單元,還用于根據(jù)所有的流類別向量,合并相同的流類別向量,建立流類別向量矩陣;從所述流類別矩陣中提取任意k個流類別向量,得到多組流類別向量集合;所述流類別向量集合能夠覆蓋流表中的所有匹配字段;k小于等于所有的流類別向量數(shù)目;從所述多組流類別向量集合中,選擇權(quán)重最大的一組流類別向量集合作為最優(yōu)流類別向量集合。本發(fā)明實施例中,所述表項依賴圖譜包括如下信息:表項的優(yōu)先級信息和表項之間的依賴關系。本發(fā)明實施例中,所述裝置還包括:更新單元,用于計算得到表項依賴圖譜;根據(jù)所述表項依賴圖譜,將具有依賴關系的表項存儲到同一子流表中;或者,對所述表項依賴圖譜進行更新,將新下發(fā)的表項存儲到對應的子流表中。本發(fā)明實施例的技術(shù)方案中,根據(jù)流表中的匹配字段是否為空,確定所述流表中各個表項的流類別向量;合并相同的流類別向量,并統(tǒng)計出各個流類別向量對應的權(quán)重;根據(jù)各個流類別向量對應的權(quán)重,從所有流類別向量中選擇一組最優(yōu)流類別向量集合,所述最優(yōu)流類別向量集合覆蓋所述流表中的所有匹配字段;根據(jù)所述最優(yōu)流類別向量集合以及表項依賴圖譜進行子流表分割,將所述表項劃分到所述子流表中進行存儲。此外,流表更新時,計算得到表項依賴圖譜;根據(jù)所述表項依賴圖譜,將具有依賴關系的表項存儲到同一子流表中;或者,對所述表項依賴圖譜進行更新,將新下發(fā)的表項存儲到對應的子流表中??梢姡景l(fā)明實施例引入流表表項的流類別向量,然后將一張流表分割成數(shù)張子流表,從而降低各個流表的維度,達到壓縮流表存儲空間的目的。本發(fā)明實施例還充分考慮了流表分割及表項更新所要考慮的流表表項的優(yōu)先級及依賴性關系問題。通過本發(fā)明實施例的方案,可以有效地壓縮流表存儲空間,并提高流表的查找匹配效率。附圖說明圖1為軟件定義網(wǎng)絡中網(wǎng)絡轉(zhuǎn)發(fā)設備架構(gòu);圖2為本發(fā)明實施例的基于子流表分割的流表存儲優(yōu)化方法的流程示意圖;圖3為流表t及其流類別矩;圖4為流類別權(quán)重表;圖5為表1流表的流規(guī)則間的依賴關系;圖6為本發(fā)明實施例提供的基于子流表分割的流表存儲優(yōu)化裝置的結(jié)構(gòu)組成示意圖。具體實施方式為了能夠更加詳盡地了解本發(fā)明實施例的特點與技術(shù)內(nèi)容,下面結(jié)合附圖對本發(fā)明實施例的實現(xiàn)進行詳細闡述,所附附圖僅供參考說明之用,并非用來限定本發(fā)明實施例。本發(fā)明實施例中,引入流類別向量α={f1,f2,...,fk},其中,f1到fk為流表t中的所有匹配字段。對于一條流表項ri,如果fi不為空,那么將fi置為1,反之置為0。例如一張流表的匹配字段為{eth_src,eth_src,ip_src,ip_dst,tcp_src,tcp_dst}。那么二層交換的以太網(wǎng)分組的匹配字段只需包含二層的信息,其流類別向量可以表示為{1,1,0,0,0,0},三層路由的流類別向量表示為{0,0,1,1,0,0}。合并相同的流類別向量,生成流類別向量矩陣g,并引入流類別權(quán)重的概念,根據(jù)權(quán)重,選取一個最優(yōu)的包含k個流類別向量的集合set,該集合能夠覆蓋流表中的所有匹配字段。以set為依據(jù)將分割為k個子流表。在流表分割過程中,由于表項之間優(yōu)先級不同,且每條表項之間存在一定的關聯(lián)性,即流表是許多規(guī)則集合的集合,一個規(guī)則集合是一些相互依賴的流表項的集合。引入表項的依賴圖譜,將相互依賴的表項存儲到同一子流表中。當新增表項時,首先更新依賴圖譜,再將新的表項存儲到對應的子流表。這樣做可以提高表項匹配的速度,提高執(zhí)行效率。此外,在流表表項更新過程中,當子流表中的表項條數(shù)超出限定閾值n,則對子流表進行分割。本發(fā)明實施例提出了一種基于子流表分割的流表存儲優(yōu)化方法,即引入流表表項的流類別向量,將一張流表分割成數(shù)張子流表,從而降低各個流表的維度,達到壓縮流表存儲空間的目的。本發(fā)明實施例還充分考慮了流表分割及表項更新所要考慮的流表表項的優(yōu)先級及依賴性關系問題。通過對本發(fā)明實施例的實施,可以有效地壓縮流表存儲空間,并提高流表的查找匹配效率。本發(fā)明實施例的方案以openflow1.3為基準。圖2為本發(fā)明實施例的基于子流表分割的流表存儲優(yōu)化方法的流程示意圖,如圖2所示,所述基于子流表分割的流表存儲優(yōu)化方法包括以下步驟:步驟201:根據(jù)流表中的匹配字段是否為空,確定所述流表中各個表項的流類別向量。本發(fā)明實施例中,所述根據(jù)流表中的匹配字段是否為空,確定所述流表中各個表項的流類別向量,包括:建立流類別向量,所述流類別向量包括所述流表中的所有匹配字段;針對每一個表項,當所述表項中的匹配字段為空,則將所述流類別向量中對應的匹配字段設置為第一值;當所述表項中的匹配字段不為空,則將所述流類別向量中對應的匹配字段設置為第二值,所述第一值與所述第二值不同。具體地,設流表t={ri|1≤i≤n},引入表項的流類別向量α={f1,f2,…,fk}(k≤40,openflow1.3中包含40個匹配字段,其中,13個為必選字段,27個為可選字段),其中f1到fk為t中所包含的匹配字段。那么對于一條流而言,若其某個匹配字段fi不為空,那么將fi置為1,反之將fi置為0。例如假設流表所有匹配字段為{eth_src,eth_src,ip_src,ip_dst,tcp_src,tcp_dst}。那么二層交換的以太網(wǎng)分組的匹配字段只需包含二層的信息,其流類別向量可以表示為{1,1,0,0,0,0},三層路由的流類別向量表示為{0,0,1,1,0,0}。而對于acl而言,若其要過濾掉所有的http請求,那么四層的流規(guī)則設置為{tcp_dst=80,action:drop}即可,其流類別向量為{0,0,0,0,0,1}。由于只有f=1的匹配字段才攜帶有效的信息。因此,可以利用流表分割的方式,將不同流類別的表項劃分到不同的子流表中存儲。步驟202:合并相同的流類別向量,并統(tǒng)計出各個流類別向量對應的權(quán)重;根據(jù)各個流類別向量對應的權(quán)重,從所有流類別向量中選擇一組最優(yōu)流類別向量集合,所述最優(yōu)流類別向量集合覆蓋所述流表中的所有匹配字段。本發(fā)明實施例中,所述合并相同的流類別向量,并統(tǒng)計出各個流類別向量對應的權(quán)重,包括:合并相同的流類別向量,將合并成同一流類別向量的數(shù)目作為該流類別向量對應的權(quán)重。本發(fā)明實施例中,所述根據(jù)各個流類別向量對應的權(quán)重,從所有流類別向量中選擇一組最優(yōu)流類別向量集合,包括:根據(jù)所有的流類別向量,合并相同的流類別向量,建立流類別向量矩陣;從所述流類別矩陣中提取任意k個流類別向量,得到多組流類別向量集合;所述流類別向量集合能夠覆蓋流表中的所有匹配字段;k小于等于所有的流類別向量數(shù)目;從所述多組流類別向量集合中,選擇權(quán)重最大的一組流類別向量集合作為最優(yōu)流類別向量集合。具體地,如圖3所示,流表中的序號index=1的表項r的流類別向量為α1={1,1,0,0,0}。遍歷流表t的n個表項,獲取流表的類型矩陣g,那么流表t的所有流類別可以表示為:g=[α1,α2,...,αm]t(其中m≤n)那么對于圖3中的流表t而言,可以看到index=1的流和index=3的流的流類別相同,它們均可以用α1來表示,其流類別矩陣g=[α1,α2,α3,α4]t,如圖3所示。設每個流類別向量的權(quán)重w的初始值均為0,然后遍歷流表t,每遇到一個流類別向量為αi的流,那么αi的權(quán)重就加1,當遍歷流表t結(jié)束時就可以得到一個流類別向量所對應的權(quán)重表,例如圖4所示。從流類別矩陣g中取出k個流類別向量的所有set,并從中選取權(quán)重最大的set作為最優(yōu)set。set={α1,α2,...,αk}(其中k≤m)集合set中的所有的流類別需要能夠覆蓋流表t的所有的匹配字段并滿足以下條件:流類別矩陣g中除了set所包含的流類別向量外,剩余的流類別向量都可以被set中的流表類型包含。其數(shù)學表示為:步驟203:根據(jù)所述最優(yōu)流類別向量集合以及表項依賴圖譜進行子流表分割,將所述表項劃分到所述子流表中進行存儲。本發(fā)明實施例中,所述表項依賴圖譜包括如下信息:表項的優(yōu)先級信息和表項之間的依賴關系。本發(fā)明實施例中,所述方法還包括:計算得到表項依賴圖譜;根據(jù)所述表項依賴圖譜,將具有依賴關系的表項存儲到同一子流表中;或者,對所述表項依賴圖譜進行更新,將新下發(fā)的表項存儲到對應的子流表中。具體地,為了方便討論,本提案中把表項的更新分為兩個階段,第一個階段是網(wǎng)絡設備初始化時,openflow控制器為了減少和交換機交互的流量而預先將一張流表下發(fā)到openflow交換機中。本提案討論如何將流表中的表項添加到各個已經(jīng)分割好的子流表中。第二個階段是交換機收到新的流請求而查詢不到匹配表項時與控制器交互,然后控制器將新的表項下發(fā)到openflow交換機。由于流表的組織結(jié)構(gòu)對控制器是透明的,控制器下發(fā)的無疑是符合流表存儲結(jié)構(gòu)的表項,如何將該流表項更新到子流表中也是要討論的問題。openflow流表的表項ra和rb間的依賴關系d(ra,rb)定義為:即存在一個分組被ra,rb匹配,但優(yōu)先級在priority(ra)和priority(rb)之間的表項均不匹配該分組。那么表項ra的依賴集合d(ra),即為對d(ra)中的任意表項r而言,d(ra,r)均成立。d(ra)={r|(r∈t)∧d(ra,r)}因此,一張流表可以用依賴集合圖來表示。以表1的流表為例。rulematchactionr10000forwardport1r211**forwardport2r3000*forwardport3r41*1*forwardport4r50**0forwardport5r610*1droppacket表1由上述依賴關系的定義可知,表1中,r1,r3和r5組成相互依賴的規(guī)則集合,而r2,r4和r6組成另外一個規(guī)則集合。表項依賴圖可以表示為圖5所示。由圖5可知,依賴圖譜是個無環(huán)圖。采用這個方法,表項的更新就變得很簡明,在第一階段openflow交換機初始化預裝流表時,可以計算得到流表的依賴關系圖譜。然后將相互依賴的表項存儲到同一子流表中。而第二階段的表項的實時更新,首先對依賴圖譜進行更新,然后再將新下發(fā)的表項存儲到對應的子流表。此外,當某個子流表的表項個數(shù)大于其門限值n,則對其進行分割,以進一步壓縮存儲空間。如果子流表的流類別向量只有一種,那么構(gòu)造一個匹配字段一致的新子流表,然后從此往后將新更新的此類流表項都添加到其中。但是,如果子流表包含多種類型的流表項,那么就按照前述的思路分割子流表。圖6為本發(fā)明實施例提供的基于子流表分割的流表存儲優(yōu)化裝置的結(jié)構(gòu)組成示意圖,如圖6所示,所述裝置包括:確定單元61,用于根據(jù)流表中的匹配字段是否為空,確定所述流表中各個表項的流類別向量;合并單元62,用于合并相同的流類別向量,并統(tǒng)計出各個流類別向量對應的權(quán)重;選擇單元63,用于根據(jù)各個流類別向量對應的權(quán)重,從所有流類別向量中選擇一組最優(yōu)流類別向量集合,所述最優(yōu)流類別向量集合覆蓋所述流表中的所有匹配字段;分割存儲單元64,用于根據(jù)所述最優(yōu)流類別向量集合以及表項依賴圖譜進行子流表分割,將所述表項劃分到所述子流表中進行存儲。本發(fā)明實施例中,所述確定單元61,還用于建立流類別向量,所述流類別向量包括所述流表中的所有匹配字段;針對每一個表項,當所述表項中的匹配字段為空,則將所述流類別向量中對應的匹配字段設置為第一值;當所述表項中的匹配字段不為空,則將所述流類別向量中對應的匹配字段設置為第二值,所述第一值與所述第二值不同。本發(fā)明實施例中,所述合并單元62,還用于合并相同的流類別向量,將合并成同一流類別向量的數(shù)目作為該流類別向量對應的權(quán)重。本發(fā)明實施例中,所述選擇單元63,還用于根據(jù)所有的流類別向量,合并相同的流類別向量,建立流類別向量矩陣;從所述流類別矩陣中提取任意k個流類別向量,得到多組流類別向量集合;所述流類別向量集合能夠覆蓋流表中的所有匹配字段;k小于等于所有的流類別向量數(shù)目;從所述多組流類別向量集合中,選擇權(quán)重最大的一組流類別向量集合作為最優(yōu)流類別向量集合。本發(fā)明實施例中,所述表項依賴圖譜包括如下信息:表項的優(yōu)先級信息和表項之間的依賴關系。本發(fā)明實施例中,所述裝置還包括:更新單元65,用于計算得到表項依賴圖譜;根據(jù)所述表項依賴圖譜,將具有依賴關系的表項存儲到同一子流表中;或者,對所述表項依賴圖譜進行更新,將新下發(fā)的表項存儲到對應的子流表中。本發(fā)明實施例所記載的技術(shù)方案之間,在不沖突的情況下,可以任意組合。在本發(fā)明所提供的幾個實施例中,應該理解到,所揭露的方法和智能設備,可以通過其它的方式實現(xiàn)。以上所描述的設備實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,如:多個單元或組件可以結(jié)合,或可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另外,所顯示或討論的各組成部分相互之間的耦合、或直接耦合、或通信連接可以是通過一些接口,設備或單元的間接耦合或通信連接,可以是電性的、機械的或其它形式的。上述作為分離部件說明的單元可以是、或也可以不是物理上分開的,作為單元顯示的部件可以是、或也可以不是物理單元,即可以位于一個地方,也可以分布到多個網(wǎng)絡單元上;可以根據(jù)實際的需要選擇其中的部分或全部單元來實現(xiàn)本實施例方案的目的。另外,在本發(fā)明各實施例中的各功能單元可以全部集成在一個第二處理單元中,也可以是各單元分別單獨作為一個單元,也可以兩個或兩個以上單元集成在一個單元中;上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用硬件加軟件功能單元的形式實現(xiàn)。以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本
技術(shù)領域:
的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。當前第1頁12