一種OpenFlow交換機(jī)中的報(bào)文分類方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于一種OpenFlow交換機(jī)中的報(bào)文分類方法,涉及計(jì)算機(jī)下一代網(wǎng)絡(luò)技 術(shù)領(lǐng)域。
【背景技術(shù)】
[0002] 目前,傳統(tǒng)的IP包流量識(shí)別和QoS控制技術(shù),僅對(duì)IP包頭中的五元組信息進(jìn)行分 析,確定流量的基本信息,五元組信息包括:源地址、目的地址、源端口、目的端口以及協(xié)議 類型。
[0003] 傳統(tǒng)IP路由器也只是通過(guò)五元組獲得的信息來(lái)實(shí)現(xiàn)一定程度的流量識(shí)別和OoS 保證的,但是隨著網(wǎng)絡(luò)上應(yīng)用類型的不斷豐富,僅僅分析IP包的四層以下的內(nèi)容,已經(jīng)不 能真正判斷流量中的業(yè)務(wù)類型,更不能判斷基于開(kāi)放端口、隨機(jī)端口等方式進(jìn)行傳輸?shù)膽?yīng) 用類型,甚至應(yīng)用的具體內(nèi)容特征。
[0004] OpenFlow交換機(jī),維護(hù)一個(gè)FlowTable并且只按照FlowTable進(jìn)行轉(zhuǎn)發(fā), FlowTable并非指IP五元組,在OpenFlowL 0中,定義了包括端口號(hào)、VLAN、L2/L3/L4信息 的12個(gè)關(guān)鍵字,在OpenFlowl. 3中,更是定義了 39個(gè)關(guān)鍵字。每個(gè)字段都是可以通配的,網(wǎng) 絡(luò)的運(yùn)行商可以決定使用何種力度的流,比如運(yùn)營(yíng)商只需要根據(jù)目的IP進(jìn)行路由,那么流 表中就可以只有目的IP字段是有效的,其它全為通配。OpenFlow交換機(jī)中的數(shù)據(jù)包分類, 通過(guò)將數(shù)據(jù)包中的各個(gè)字段和FlowTable中的規(guī)則的匹配結(jié)果,確定對(duì)該數(shù)據(jù)包的執(zhí)行動(dòng) 作。
[0005] 其中,OpenFlow vl. 0在實(shí)際部署和應(yīng)用中面臨的問(wèn)題之一就是TCAM存儲(chǔ)器成本 問(wèn)題。在傳統(tǒng)網(wǎng)絡(luò)設(shè)備中,TCAM主要用于FIB、MAC、MPLS Lable和ACL表,因?yàn)槊總€(gè)表的 匹配字段長(zhǎng)度不一,所以可以分別設(shè)計(jì),并且具有最大容量限制以期達(dá)到最小的開(kāi)銷。而在 OpenFlow交換中,不再區(qū)分匹配長(zhǎng)度較短的FIB、MAC、MPLS Lable表以及較長(zhǎng)的ACL表,而 一律采用具有最大長(zhǎng)度的流表項(xiàng)記錄代替。對(duì)OpenFlow vl. 0而言,流表的匹配字段長(zhǎng)度 長(zhǎng)達(dá)252位,而一般的IPv4RIB TCAM匹配字段長(zhǎng)度只有60至80位,其開(kāi)銷增加了三倍以 上。因此如何減少流表的尺寸是OpenFlow面臨的一個(gè)難題。
[0006] 為了解決上述問(wèn)題,OpenFlow vl. 1設(shè)計(jì)了多級(jí)流表來(lái)減少流表的開(kāi)銷,將流表進(jìn) 行特征提取,進(jìn)而將匹配過(guò)程分解成多個(gè)步驟,形成流水線的處理形式,從而降低總的流表 記錄條數(shù)。例如:原始流表共有10000條,如果將其分解成先匹配VLAN和MAC地址,再匹配 IP地址和傳輸層頭部等兩個(gè)獨(dú)立的流表,那么每個(gè)流表的數(shù)量可能均小于1000條,使得流 表總數(shù)小于2000條。
[0007] 傳統(tǒng)的包分類算法技術(shù),針對(duì)傳統(tǒng)的五元組,從各種不同的角度進(jìn)行算法的設(shè)計(jì), 如利用前綴構(gòu)建字典樹(shù)、利用范圍構(gòu)建決策樹(shù)、基于維度分解的合并策略,然而這些傳統(tǒng)的 算法并不適合這種多維字段的匹配,但是目前并沒(méi)有針對(duì)超過(guò)五元組的多域進(jìn)行數(shù)據(jù)包分 類的算法。
[0008] 網(wǎng)絡(luò)流量的不斷增長(zhǎng)和流量控制粒度不斷精細(xì),使得OpenFlow交換機(jī)中的關(guān)鍵 字個(gè)數(shù)不斷地增加,現(xiàn)有的OpenFlow比較成熟而內(nèi)容較為新穎的標(biāo)準(zhǔn)是vl. 3,它的關(guān)鍵字 達(dá)到了 39個(gè),這就使得一個(gè)大的流表不能滿足查找時(shí)間的要求,而多級(jí)流標(biāo)目前也只是停 留在設(shè)想階段,目前也沒(méi)有任何組織提出針對(duì)它的具體的實(shí)現(xiàn)方式。因此,如何劃分多級(jí)流 表,劃分之后使用什么算法實(shí)現(xiàn)數(shù)據(jù)包與規(guī)則特征庫(kù)的匹配,以滿足數(shù)據(jù)包的查找速度,同 時(shí)能較好的實(shí)現(xiàn)規(guī)則的動(dòng)態(tài)更新,提出一種切實(shí)可行的符合OpenFlow交換機(jī)的報(bào)文分類 算法,成為當(dāng)前需要解決的重要問(wèn)題。
【發(fā)明內(nèi)容】
[0009] 本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種報(bào)文分類方法,通過(guò)對(duì)關(guān)鍵字進(jìn)行不同的 分類,劃分出三種類型的流表,針對(duì)每一級(jí)流表,提出一種符合其特性的數(shù)據(jù)包分類算法, 最終將三種不同的算法進(jìn)行級(jí)聯(lián),以實(shí)現(xiàn)整個(gè)交換機(jī)的報(bào)文分類。
[0010] 本發(fā)明解決上述技術(shù)問(wèn)題所采取的技術(shù)方案如下:
[0011] -種OpenFlow交換機(jī)中的報(bào)文分類方法,包括:
[0012] 步驟1)預(yù)先根據(jù)交換機(jī)中所采取的規(guī)則集中各個(gè)規(guī)則中的關(guān)鍵詞,分別按照精 準(zhǔn)值、前綴值、范圍值進(jìn)行分類;
[0013] 步驟2)根據(jù)分類后的關(guān)鍵詞對(duì)規(guī)則集中的規(guī)則構(gòu)建一個(gè)三級(jí)級(jí)聯(lián)的流表,用以 作為交換機(jī)對(duì)報(bào)文分類的分類依據(jù),包括:
[0014] 根據(jù)精準(zhǔn)值形成的第一流表TableO、根據(jù)前綴值形成的第二流表Tablel和根據(jù) 范圍值形成的第二流表Tab I e2,其中,每一級(jí)流表的輸入是上級(jí)流表的輸出;
[0015] 步驟3)從交換機(jī)源端口接收數(shù)據(jù)流中的IP包,分別按照精確值、前綴值、范圍值 提取相應(yīng)的字段;
[0016] 步驟4)對(duì)接收到的IP包根據(jù)第一流表、第二流表和第二流表的順序逐個(gè)流表進(jìn) 行匹配,以此對(duì)IP包中的報(bào)文進(jìn)行分類。
[0017] 進(jìn)一步地,優(yōu)選的是,還包括:
[0018] 步驟5)若此IP包在某一個(gè)流表中找到了對(duì)應(yīng)的匹配規(guī)則,按照相應(yīng)規(guī)則的動(dòng)作 進(jìn)行處理,并從交換機(jī)源端口接收下一個(gè)IP包;
[0019] 若沒(méi)有找到與該IP包匹配的規(guī)則,則向一控制器提交信息,由控制器對(duì)上述規(guī)則 集或者流表進(jìn)行后續(xù)處理。
[0020] 進(jìn)一步地,優(yōu)選的是,所述步驟2)中,具體包括:
[0021] 采取哈希算法、Grid of Trie算法、Hicuts樹(shù)算法分別對(duì)規(guī)則集中的精確值、前綴 值、范圍值進(jìn)行預(yù)處理,從而根據(jù)所有規(guī)則集中的不同字段構(gòu)建對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)。
[0022] 進(jìn)一步地,優(yōu)選的是,采取哈希算法對(duì)規(guī)則集中的精準(zhǔn)值進(jìn)行預(yù)處理,包括:
[0023] 以規(guī)則集中的精確字段部分作為輸入,參數(shù)個(gè)數(shù)為numl,確定一個(gè)hash哈希函數(shù) H(kl, k2,…,knuml),所述哈希函數(shù)米用Bloom Filter數(shù)據(jù)結(jié)構(gòu),Bloom Filter基于hash 查找,并利用位數(shù)組表示一個(gè)集合,其基于所述位數(shù)組判斷一個(gè)元素是否屬于這個(gè)集合;
[0024] 其中K1,K2, Knuml是指每條規(guī)則中的每個(gè)匹配字段的具體數(shù)值,Kl代表VLAN匹 配字段的一個(gè)具體數(shù)值,作為此Hash函數(shù)的參數(shù)輸入;
[0025] 若不同的規(guī)則映射到相同的節(jié)點(diǎn)位置,則采用鏈表的方式進(jìn)行連接,其中,Hash表 中每個(gè)節(jié)點(diǎn)位置存儲(chǔ)規(guī)則的數(shù)目和代表規(guī)則優(yōu)先級(jí)的id號(hào)碼。
[0026] 進(jìn)一步地,優(yōu)選的是,采用Grid of Trie算法對(duì)前綴值進(jìn)行預(yù)處理,包括:
[0027] 遍歷所述Hash表中的節(jié)點(diǎn)位置,若當(dāng)前節(jié)點(diǎn)中包含的的規(guī)則集個(gè)數(shù)大于給定的 第一閾值,則以該節(jié)點(diǎn)為根節(jié)點(diǎn),利用前綴字段建立一 Grid-of-Trie數(shù)據(jù)結(jié)構(gòu);
[0028] 其中,Grid-of-Trie數(shù)據(jù)結(jié)構(gòu)中每個(gè)節(jié)點(diǎn)都由三個(gè)分支,分別為0、1、*,其中0表 示該數(shù)值的二進(jìn)制表示中某一位數(shù)值為〇, 1表示該數(shù)值的二進(jìn)制表示中某一位的值為1,* 代表通配,最終匹配的規(guī)則都集中在葉節(jié)點(diǎn)中。
[0029] 進(jìn)一步地,優(yōu)選的是,采用Hicuts算法對(duì)范圍值進(jìn)行預(yù)處理,包括:
[0030] 遍歷Grid-of-Trie樹(shù)中的葉子節(jié)點(diǎn),若當(dāng)前節(jié)點(diǎn)中包含的規(guī)則集個(gè)數(shù)大于給定 的第二閾值;
[0031] 則以該節(jié)點(diǎn)作為根節(jié)點(diǎn),利用范圍字段建立對(duì)應(yīng)的Hicuts數(shù)據(jù)結(jié)構(gòu),并據(jù)此存儲(chǔ) 對(duì)應(yīng)的規(guī)則,且所述Hicuts數(shù)據(jù)結(jié)構(gòu)采用了一顆決策樹(shù)作為快速查找的數(shù)據(jù)結(jié)構(gòu),其內(nèi)部 節(jié)點(diǎn)包含適當(dāng)?shù)姆诸悓?dǎo)向信息,但不存儲(chǔ)任何規(guī)則,其葉節(jié)點(diǎn)存儲(chǔ)一個(gè)小型的規(guī)則子集。
[0032] 進(jìn)一步地,優(yōu)選的是,步驟2)中,具體包括:
[0033] 對(duì)規(guī)則集中的規(guī)則進(jìn)行Hash映射,判斷此規(guī)則中精確值字段部分是否是通配,若 是通配,則跳至步驟(12);
[0034] 若非通配,按照預(yù)先定義的布隆過(guò)濾器(Bloom Filter)Hash數(shù)據(jù)結(jié)構(gòu),對(duì)規(guī)則做 一個(gè)映射,將其分配到相應(yīng)的節(jié)點(diǎn);返回到(11)開(kāi)始的位置、繼續(xù)處理下一條規(guī)則;
[0035] (12)在Hash表中設(shè)置一個(gè)固定的節(jié)點(diǎn),用來(lái)存儲(chǔ)內(nèi)容為通配的規(guī)則,將此規(guī)則存 儲(chǔ)在這一節(jié)點(diǎn)中。
[0036] 進(jìn)一步地,優(yōu)選的是,步驟4中,具體包括:
[0037] 基于第一流表,利用精確值字段,通過(guò)預(yù)先建立的哈希函數(shù),定位和此數(shù)據(jù)包相匹 配的記錄;
[0038] 其中,若對(duì)應(yīng)記錄的個(gè)數(shù)少于設(shè)定的最大值,則對(duì)該記錄內(nèi)的規(guī)則進(jìn)行線性查找, 并找到最佳匹配的規(guī)則集,并執(zhí)行對(duì)應(yīng)的處理動(dòng)作;
[0039] 若對(duì)應(yīng)的記錄個(gè)數(shù)大于設(shè)定的最大值,則進(jìn)入第二流表,根據(jù)第二流表中的維度 進(jìn)行最大匹配前綴的查找,直到找到最終的葉子節(jié)點(diǎn);
[0040] 若該葉子節(jié)點(diǎn)包含的規(guī)則集小于限定的最大值,則對(duì)該葉子節(jié)點(diǎn)內(nèi)的規(guī)則進(jìn)行線 性查找,并找到最佳匹配的規(guī)則集,按照規(guī)則集中的規(guī)則對(duì)應(yīng)的行為進(jìn)行轉(zhuǎn)發(fā)操作;
[0041] 若第二流表中的葉子節(jié)點(diǎn)中包含的規(guī)則集個(gè)數(shù)大于給定的最大值,則進(jìn)入第三流 表,按照范圍進(jìn)行查找,直到最終的葉子節(jié)點(diǎn),在葉子節(jié)點(diǎn)內(nèi)進(jìn)行線性查找,并找到最佳匹 配規(guī)則,按照相應(yīng)的行為對(duì)IP包進(jìn)行處理。
[0042] 進(jìn)一步地,優(yōu)選的是,步驟4中,具體包括:
[0043] 首先提取IP包的關(guān)鍵詞,并讀取第一流表TableO,判斷該IP包的精確值字段是否 為通配,若為通配,直接進(jìn)入Tablel ;
[0044] 否則將字段通過(guò)Hash函數(shù)進(jìn)行映射,找到哈希表中與該規(guī)則匹配的節(jié)點(diǎn);
[0045] 若該節(jié)點(diǎn)中包含的規(guī)則集的個(gè)數(shù)大于給定的閾值,此IP包進(jìn)入Tablel繼續(xù)匹配, 否則在該節(jié)點(diǎn)內(nèi)對(duì)其余字段進(jìn)行線性匹配,找到與該IP包最佳匹配的規(guī)則,跳至步驟5 ;
[0046] 其次進(jìn)入第二流表Tablel,判斷該IP包的前綴字段是否為通配,若為通配,進(jìn)入 相應(yīng)的分支;
[0047] 否則按照Trie的流向進(jìn)入最終匹配的葉子節(jié)點(diǎn),進(jìn)入葉節(jié)點(diǎn)后,判斷該葉子節(jié)點(diǎn) 包含的規(guī)則個(gè)數(shù)是否大于給定的閾值,若大于給定的閾值,進(jìn)入第三流表Table2 ;否則在 該葉子節(jié)點(diǎn)中對(duì)其余的匹配域進(jìn)行線性匹配,找到最佳的匹配規(guī)則,跳至步驟5 ;
[0048] 最后進(jìn)入第三流表Table2,按照范圍值字段進(jìn)行最后的匹配,通過(guò)對(duì)范圍字段的 查找,找到最佳的匹配葉子節(jié)點(diǎn),在葉子節(jié)點(diǎn)中進(jìn)行線性查找,找到最佳匹配規(guī)則。
[0049] 利用本發(fā)明,可以為解決OpenFlow交換機(jī)中軟