凌致遠(yuǎn),陳 曉,宋 磊
(1.中國(guó)科學(xué)院聲學(xué)研究所國(guó)家網(wǎng)絡(luò)新媒體工程技術(shù)研究中心,北京 100190; 2.中國(guó)科學(xué)院大學(xué),北京 100049)
隨著下一代互聯(lián)網(wǎng)的發(fā)展,軟件定義網(wǎng)絡(luò)(Software Defined Networking, SDN)被廣泛應(yīng)用于企業(yè)廣域網(wǎng)和數(shù)據(jù)中心網(wǎng)絡(luò)[1]。SDN作為一種新興的網(wǎng)絡(luò)結(jié)構(gòu),它將控制平面與數(shù)據(jù)平面解耦[2]。數(shù)據(jù)平面由交換機(jī)等轉(zhuǎn)發(fā)單元組成,負(fù)責(zé)將報(bào)文轉(zhuǎn)發(fā)到下一跳;控制平面則由控制器組成,負(fù)責(zé)實(shí)時(shí)維護(hù)全局網(wǎng)絡(luò)狀態(tài)。
匹配動(dòng)作表(Match-Action Table, MAT)[3]在現(xiàn)有的SDN技術(shù)中得到了廣泛使用,OpenFlow[4]作為SDN技術(shù)的基石,率先使用MAT作為其數(shù)據(jù)平面編程模型[5]。匹配動(dòng)作表又稱為流表,將數(shù)據(jù)包處理流程抽象為匹配字段和執(zhí)行動(dòng)作。MAT模型的動(dòng)作集可以實(shí)現(xiàn)對(duì)數(shù)據(jù)包字段的修改和數(shù)據(jù)包整體的轉(zhuǎn)發(fā),還能實(shí)現(xiàn)諸如條件分支等簡(jiǎn)單程序邏輯[6]。但OpenFlow是一種協(xié)議相關(guān)的SDN技術(shù),僅支持對(duì)其標(biāo)準(zhǔn)[7]內(nèi)已有的協(xié)議字段進(jìn)行解析和處理,無(wú)法及時(shí)滿足新興或私有網(wǎng)絡(luò)協(xié)議的需求[8]。
為了解決上述問(wèn)題,協(xié)議無(wú)感知轉(zhuǎn)發(fā)(Protocol Oblivious Forwarding, POF)[9-10]和協(xié)議獨(dú)立的數(shù)據(jù)包編程處理器(P4)[11-12]等新的SDN技術(shù)被相繼提出。這些SDN技術(shù)沿用了MAT編程模型,但允許網(wǎng)絡(luò)編程人員以比OpenFlow規(guī)范更靈活的方式對(duì)網(wǎng)絡(luò)進(jìn)行編程。協(xié)議字段由諸如{偏移,長(zhǎng)度}的結(jié)構(gòu)組成,由此網(wǎng)絡(luò)編程人員可以對(duì)任意協(xié)議字段進(jìn)行解析和處理[13]。然而這種靈活的數(shù)據(jù)平面編程方式會(huì)帶來(lái)一些問(wèn)題:待處理的數(shù)據(jù)包可能帶有不同長(zhǎng)度的數(shù)據(jù)包頭,因此這些數(shù)據(jù)包中特定協(xié)議字段的偏移也會(huì)不同,控制平面需要下發(fā)多個(gè)匹配域偏移不同的流表去完成數(shù)據(jù)流的解析,這對(duì)有限的數(shù)據(jù)平面資源造成了很大的浪費(fèi)[14]。
在數(shù)據(jù)平面資源優(yōu)化方面,國(guó)內(nèi)外已經(jīng)有了相關(guān)的研究[15-18]。這些研究主要集中于2種思路:減少表項(xiàng)數(shù)量降低數(shù)據(jù)平面設(shè)備軟硬件資源占用和提高網(wǎng)絡(luò)內(nèi)整體數(shù)據(jù)平面資源利用率。在第一種思路下,Jia等人[19]提出了基于K相似貪婪樹(shù)(K Similar Greedy Tree, KSGT)算法的SDN交換機(jī)流表空間優(yōu)化方案,對(duì)OpenFlow空閑超時(shí)方案進(jìn)行了優(yōu)化,與現(xiàn)有解決方案相比,可以節(jié)省約60%流表項(xiàng)的資源占用;Kim等人[20]利用了OpenFlow的Vacancy事件,當(dāng)交換機(jī)內(nèi)流表可用空間小于一定閾值時(shí),向控制器發(fā)出告警并通過(guò)LRU算法清理部分非活躍表項(xiàng),從而減少表項(xiàng)占用的資源,并降低了控制消息的數(shù)量,Wu等人[21]在FPGA上實(shí)現(xiàn)了相似的算法;Mimidis-kentis等人[22]將流表項(xiàng)分為硬件表項(xiàng)和軟件表項(xiàng),優(yōu)先級(jí)或命中率較高的表項(xiàng)安裝在硬件上,從而提升交換機(jī)整體轉(zhuǎn)發(fā)性能,并減少軟件部分占用的資源;Shirali-shahreza等[23]通過(guò)預(yù)測(cè)TCP流的RST/FIN包來(lái)加速表項(xiàng)的清除,在命中率降低不到1.5%的條件下,減少了16%~62%的平均流表空間占用率;還有一些方法對(duì)流表進(jìn)行拆分和壓縮,實(shí)現(xiàn)了流表的高效存儲(chǔ)[24-25];更進(jìn)一步地,有的研究基于數(shù)據(jù)中心網(wǎng)絡(luò)實(shí)時(shí)流量特征動(dòng)態(tài)設(shè)定表項(xiàng)的生存周期,從而高效利用流表的空間[26]。基于第二種思路,喬思祎等人[27-28]提出了一種“共享流表”的方法,利用負(fù)載均衡的思想,將單臺(tái)交換機(jī)的流表負(fù)載分?jǐn)偟骄W(wǎng)絡(luò)中相鄰的節(jié)點(diǎn),提高了網(wǎng)內(nèi)交換機(jī)整體的資源利用率。
本文采用上述方法外的另一種思路,即通過(guò)減少數(shù)據(jù)平面的流表數(shù)量來(lái)降低資源占用。根據(jù)數(shù)據(jù)包動(dòng)態(tài)偏移的思想,本文提出一種基于MAT模型的可編程數(shù)據(jù)平面流表歸并方案,在數(shù)據(jù)包查詢流表時(shí)通過(guò)執(zhí)行特定動(dòng)作動(dòng)態(tài)地調(diào)整數(shù)據(jù)包的起始偏移,使不同數(shù)據(jù)包同一協(xié)議字段的偏移保持一致,實(shí)現(xiàn)匹配域相同的流表的歸并,從而降低數(shù)據(jù)平面設(shè)備的資源占用。
在數(shù)據(jù)包頭部協(xié)議層數(shù)不同或協(xié)議長(zhǎng)度可變的情況下,網(wǎng)絡(luò)編程人員需要對(duì)每種情況做出區(qū)分。對(duì)于數(shù)據(jù)包Pkt,其可能存在的協(xié)議組合有:P1={po,p1,p2}、P2={p0,op0,p1,p2}、P3={p0,p1′,p2}。其中pm為數(shù)據(jù)包頭部相對(duì)固定的協(xié)議,如以太層協(xié)議、IPv4協(xié)議;opm為可能存在的網(wǎng)絡(luò)標(biāo)簽或協(xié)議,如802.1Q報(bào)文;pm′為長(zhǎng)度可變的協(xié)議,如帶有Option字段的IPv6協(xié)議。協(xié)議P2中的某字段f在協(xié)議組合P1的情況下表示為f={off,len},那么對(duì)于P2和P3,該字段分別表示為f′={off+len(op0),len}和f″={off+len(p1′)-len(p1),len},如圖1所示。若要將字段f作為流表的匹配域,開(kāi)發(fā)人員需要針對(duì)每種協(xié)議組合設(shè)計(jì)一張流表,這將造成大量冗余的流表資源開(kāi)銷。流表符號(hào)和定義如表1所示,流表結(jié)構(gòu)如表2所示。
表1 符號(hào)和定義
圖1 不同協(xié)議組合下的數(shù)據(jù)包頭部結(jié)構(gòu)
表2 針對(duì)不同協(xié)議組合設(shè)計(jì)的流表
可以通過(guò)如圖2所示的有向無(wú)環(huán)圖G(V,E)來(lái)表示上述數(shù)據(jù)包在數(shù)據(jù)平面中的處理流程。其中V(G)代表數(shù)據(jù)平面中的流表,E(G)代表數(shù)據(jù)包跳轉(zhuǎn)流表的路徑。由于一張流表由固定描述字段和匹配域組成,則單張流表占用的資源可以看作匹配域長(zhǎng)度l的函數(shù)m(l)。
圖2 數(shù)據(jù)包處理流程G(V,E)
假設(shè)數(shù)據(jù)包處理過(guò)程中需要匹配N級(jí)流表,且數(shù)據(jù)包從第j-1級(jí)的某一張流表跳轉(zhuǎn)至第j級(jí)流表有kj條分支路徑(k0=1),記第j級(jí)流表的流表數(shù)量為sj,則有:
(1)
可以看出,一級(jí)流表的流表數(shù)與此前每一跳的分支路徑數(shù)相關(guān),前級(jí)流表跳轉(zhuǎn)分支路徑越多,后級(jí)流表數(shù)越多。若第j級(jí)流表的匹配域長(zhǎng)度為lj,則第j級(jí)流表占用的資源為:
(2)
綜上,數(shù)據(jù)平面中所有流表占用的資源總量為:
(3)
擴(kuò)充MAT模型的動(dòng)作集,新增用于修改數(shù)據(jù)包起始偏移的動(dòng)作SET_PACKET_OFFSET(SPO)和MOVE_PACKET_OFFSET(MPO)。其中,SPO直接指定數(shù)據(jù)包的起始偏移,而MPO實(shí)現(xiàn)前后移動(dòng)數(shù)據(jù)包當(dāng)前的起始偏移。在數(shù)據(jù)包元數(shù)據(jù)區(qū)新增shift字段,用于記錄數(shù)據(jù)包的當(dāng)前起始偏移。數(shù)據(jù)包進(jìn)入數(shù)據(jù)平面時(shí),其起始偏移為0。當(dāng)數(shù)據(jù)包進(jìn)入流表匹配流程時(shí),先計(jì)算數(shù)據(jù)包的起始地址(原地址+起始偏移),然后再比較匹配域和數(shù)據(jù)包中對(duì)應(yīng)字段的值。
以一個(gè)帶802.1Q標(biāo)簽的IPv4數(shù)據(jù)包為例,如圖3所示,其在數(shù)據(jù)平面中的處理流程如下:
步驟1數(shù)據(jù)包起始偏移為0,進(jìn)入Table 0查表。
步驟2Table 0匹配Ethernet Ⅱ幀頭部的類型域{96,16},數(shù)據(jù)包執(zhí)行指令“MPO 18,GOTO 4”,數(shù)據(jù)包的起始偏移由0改為18 byte,進(jìn)入Table 4查表。
步驟3Table 4匹配IPv4協(xié)議中目的IP地址{128,32},進(jìn)行后續(xù)流程。
值得注意的是,Table 4中目的IP地址字段的定義與以往不同:數(shù)據(jù)包起始偏移為0時(shí),目的IP地址字段的偏移從數(shù)據(jù)包起點(diǎn)開(kāi)始計(jì)算,為240 bit;而現(xiàn)在Table 4中數(shù)據(jù)包的起始偏移為18 byte,即144 bit,所以目的IP地址字段的偏移要從數(shù)據(jù)包144 bit的位置(即IPv4協(xié)議的起點(diǎn))開(kāi)始計(jì)算,為96 bit。
為了更豐富公司的營(yíng)銷體系,南通鵬越紡織有限公司應(yīng)不斷著眼公司的直復(fù)營(yíng)銷,優(yōu)化促銷策略。構(gòu)建更及時(shí)、更直接和更完善的人員推銷體系,公司與聯(lián)絡(luò)點(diǎn)建立更加完善便捷和及時(shí)的聯(lián)絡(luò)溝通體系。更為重要的是,面對(duì)互聯(lián)網(wǎng)技術(shù)的競(jìng)爭(zhēng)規(guī)則和營(yíng)銷手段,南通鵬越紡織有限公司應(yīng)緊跟時(shí)代步伐,探索網(wǎng)絡(luò)營(yíng)銷新模式。
圖3 含802.1Q標(biāo)簽的IPv4數(shù)據(jù)包的處理流程
不含802.1Q標(biāo)簽的IPv4數(shù)據(jù)包處理流程類似:數(shù)據(jù)包在Table 0中執(zhí)行指令“MPO 14,GOTO 4”,將數(shù)據(jù)包的起始偏移修改為IPv4協(xié)議相對(duì)于數(shù)據(jù)包起點(diǎn)的位置,所以在Table 4中可以正確匹配目的IP地址字段,而無(wú)需增加新的流表。
同樣地,可以將流表歸并后該數(shù)據(jù)包在數(shù)據(jù)平面中的處理流程抽象為如圖4所示的有向無(wú)環(huán)圖G′(V,E),其中每一級(jí)流表只解析一層協(xié)議。
圖4 流表歸并后數(shù)據(jù)包處理流程G′(V,E)
此時(shí)流表的每一跳分支路徑數(shù)不再影響后續(xù)流表的數(shù)量,且:
?j∈{0,1,...,N},kj=1
(4)
所以流表歸并后數(shù)據(jù)平面中所有流表占用的資源總量為:
(5)
流表占用資源縮減比例為:
(6)
可以看出,流表歸并方案消除了流表跳轉(zhuǎn)路徑數(shù)k對(duì)資源消耗的影響,即當(dāng)各級(jí)流表匹配域長(zhǎng)度相對(duì)固定時(shí),流表跳轉(zhuǎn)的分支越復(fù)雜,流表歸并方案的優(yōu)化性能越高。需要補(bǔ)充的是,上述問(wèn)題和方案的模型是針對(duì)單個(gè)數(shù)據(jù)包提出的,每一級(jí)流表的匹配域內(nèi)容相同。對(duì)于同層不同協(xié)議(如IPv4/IPv6、TCP/UDP等)的多種數(shù)據(jù)包的情況,可以看作在上述模型中添加更多的分支,流表歸并的整體思想和結(jié)果是相似的。
根據(jù)上述原理,本文重新設(shè)計(jì)了流表,最終得到的數(shù)據(jù)包匹配流程與流表歸并前的對(duì)比如圖5所示。其中,流表歸并前一共需要13張流表:Table 0的匹配域是Ethernet Ⅱ幀頭部的類型域字段和802.1Q標(biāo)簽的類型域字段,用于區(qū)分?jǐn)?shù)據(jù)包的類型(是否為VLAN/QinQ報(bào)文),并根據(jù)分類結(jié)果進(jìn)入不同的流表;Table 1~Table 6匹配IPv4/v6協(xié)議的源目的IP地址,考慮了是否為VLAN、QinQ報(bào)文的情況;Table 7~Table 12匹配TCP協(xié)議源目的端口號(hào)后轉(zhuǎn)發(fā)數(shù)據(jù)包,同樣考慮了是否為VLAN、QinQ報(bào)文的情況。流表歸并后流表的數(shù)量則從13張減少到了4張:Table 0的匹配域不變,用于區(qū)分?jǐn)?shù)據(jù)包的類型,并根據(jù)分類結(jié)果通過(guò)調(diào)整MPO指令的參數(shù)來(lái)修改數(shù)據(jù)包的起始偏移,隨后進(jìn)入下一張流表;Table 1和Table 2分別匹配IPv4和IPv6協(xié)議的源目的IP地址,并通過(guò)MPO指令將調(diào)整數(shù)據(jù)包的起始偏移至TCP協(xié)議起點(diǎn)后,進(jìn)入下一張流表;Table 3匹配TCP協(xié)議的源目的端口號(hào)后轉(zhuǎn)發(fā)數(shù)據(jù)包。
圖5 新舊方案數(shù)據(jù)包處理流程對(duì)比
為了驗(yàn)證基于MAT模型的可編程數(shù)據(jù)平面流表歸并方案在實(shí)際應(yīng)用中的合理性和有效性,本文在X86平臺(tái)的POF交換機(jī)上進(jìn)行了驗(yàn)證測(cè)試,分析了不同類型的流量面對(duì)本方案的應(yīng)用效果,測(cè)試平臺(tái)軟硬件信息如表3所示。
表3 測(cè)試平臺(tái)軟硬件參數(shù)
使用Spirent SPT-C50作為流量發(fā)生器,環(huán)境拓?fù)淙鐖D6所示。測(cè)試設(shè)計(jì)了3級(jí)流表,分別用于L2解析、源目的IP地址匹配、源目的TCP端口匹配,如圖7所示。其中L2解析和TCP端口匹配流表的匹配域總長(zhǎng)度均為32 bit,源目的IP地址匹配流表分為IPv4流表和IPv6流表,匹配域總長(zhǎng)度分別為64 bit和256 bit。
圖6 環(huán)境拓?fù)?/p>
圖7 流表配置
本文測(cè)試流量包含IPv4/IPv6報(bào)文和IPv4/IPv6 VLAN報(bào)文,每種報(bào)文長(zhǎng)度和數(shù)量相同。使用測(cè)試儀器以500 pps的發(fā)包速率向交換機(jī)循環(huán)發(fā)送,統(tǒng)計(jì)了流表歸并前后的數(shù)據(jù)包平均轉(zhuǎn)發(fā)時(shí)延、流表內(nèi)存使用量和平均指令執(zhí)行數(shù),結(jié)果如表4所示。
表4 測(cè)試結(jié)果
從表4可以看出,流表歸并前后流表內(nèi)存使用量差距較大,這是流表數(shù)量大幅減少的結(jié)果。經(jīng)計(jì)算,流表歸并后節(jié)省了約69%的內(nèi)存。POF交換機(jī)建表時(shí)按最大匹配域長(zhǎng)度分配內(nèi)存,所以根據(jù)式(6)預(yù)測(cè)流表占用資源縮減率時(shí)可以忽略參數(shù)m(l),最終在實(shí)驗(yàn)環(huán)境下繪制出流表資源縮減率和第二級(jí)流表分支數(shù)的曲線,如圖8所示??梢钥闯?,測(cè)試得到的結(jié)果和預(yù)測(cè)結(jié)果幾乎相同。
圖8 流表資源縮減率預(yù)測(cè)曲線與實(shí)驗(yàn)結(jié)果
此外還發(fā)現(xiàn)流表歸并后數(shù)據(jù)包在交換機(jī)處理流程中平均執(zhí)行指令數(shù)增多,但數(shù)據(jù)包平均轉(zhuǎn)發(fā)時(shí)延有少量提升。經(jīng)分析驗(yàn)證,其原因主要有2點(diǎn):
1)流表歸并后增加的MPO指令在幾個(gè)CPU時(shí)鐘內(nèi)就可以完成執(zhí)行,對(duì)數(shù)據(jù)包轉(zhuǎn)發(fā)時(shí)延的增加可以忽略不計(jì);
2)POF交換機(jī)的批處理查表機(jī)制會(huì)遍歷所有的流表,如果當(dāng)前批次的數(shù)據(jù)包中有數(shù)據(jù)包需要查某張流表,就會(huì)執(zhí)行一輪查表循環(huán)。流表歸并前不同的報(bào)文會(huì)進(jìn)入不同的流表查詢,所以需要查詢的流表數(shù)量更多,執(zhí)行的查表循環(huán)輪數(shù)更多。而流表歸并后不同的報(bào)文會(huì)進(jìn)入相同的流表,整體查表次數(shù)更少。且查表所需時(shí)間比MPO指令執(zhí)行時(shí)間長(zhǎng)很多,所以從最終結(jié)果看流表歸并后數(shù)據(jù)包轉(zhuǎn)發(fā)平均時(shí)延會(huì)更小。
本文從流表數(shù)量的層面入手,提出了一種基于MAT模型的可編程數(shù)據(jù)平面流表歸并方案,緩解了協(xié)議無(wú)感知的可編程數(shù)據(jù)平面應(yīng)對(duì)復(fù)雜網(wǎng)絡(luò)數(shù)據(jù)包頭部協(xié)議組合時(shí)存在的流表冗余問(wèn)題,通過(guò)減少流表數(shù)量大幅節(jié)約了數(shù)據(jù)平面的流表資源開(kāi)銷。本文在POF交換機(jī)上完成了方案的驗(yàn)證和測(cè)試,實(shí)驗(yàn)結(jié)果表明,所提流表歸并方案能夠大幅縮減數(shù)據(jù)平面的流表資源消耗,且小幅提升數(shù)據(jù)包的平均轉(zhuǎn)發(fā)時(shí)延。
未來(lái)的研究工作將在本文提出的方案基礎(chǔ)上結(jié)合表項(xiàng)管理機(jī)制進(jìn)一步對(duì)流表空間進(jìn)行優(yōu)化和研究。