謝升旭 邢長友 張國敏 宋麗華 胡谷雨
(陸軍工程大學(xué)指揮控制工程學(xué)院 南京 210007)
自從Mckeown等人[1]提出后,軟件定義網(wǎng)絡(luò)(soft-ware defined networking, SDN)技術(shù)得到了學(xué)術(shù)界和產(chǎn)業(yè)界的廣泛關(guān)注,其架構(gòu)也在不斷地發(fā)展完善.近些年來,隨著云環(huán)境的大量部署使用,SDN的熱度進(jìn)一步增加,并出現(xiàn)了許多較為成熟的商業(yè)應(yīng)用,如谷歌的B4項(xiàng)目[2],F(xiàn)acebook的開放計(jì)算項(xiàng)目(open compute project, OCP)[3]等.得益于其控制平面與數(shù)據(jù)平面相分離的特點(diǎn),SDN技術(shù)相較于傳統(tǒng)網(wǎng)絡(luò)的發(fā)展更加具有優(yōu)勢.然而,作為一種新興的網(wǎng)絡(luò)架構(gòu),SDN在帶來便利性的同時(shí)也引入了新的安全問題[4-5].數(shù)據(jù)平面[6]、安全通道[7]、控制平面[8]等都存在著大量的安全隱患.在各類安全威脅中,交換機(jī)的流表溢出問題是SDN面臨的一個(gè)重要挑戰(zhàn).
現(xiàn)階段,網(wǎng)絡(luò)管理和流量調(diào)度越來越趨向于細(xì)粒度化,同時(shí),SDN大量部署于數(shù)據(jù)中心網(wǎng)絡(luò)和核心網(wǎng)中[9],這勢必會導(dǎo)致交換機(jī)中的流表項(xiàng)數(shù)目大幅度地增加.然而SDN硬件交換機(jī)受限于有限的流表資源,很容易出現(xiàn)流表溢出問題,使得網(wǎng)絡(luò)吞吐量、時(shí)延等受到嚴(yán)重影響.本文通過深入分析SDN環(huán)境中流表溢出問題,詳細(xì)介紹了流表溢出造成的影響以及目前緩解流表溢出的相關(guān)技術(shù),為有效降低該問題對網(wǎng)絡(luò)性能的影響提供支持.
本節(jié)主要介紹SDN與OpenFlow協(xié)議、三態(tài)內(nèi)容尋址存儲器(ternary content addressable memory, TCAM)的特點(diǎn)及其局限性.同時(shí),通過實(shí)驗(yàn)驗(yàn)證并分析流表溢出對SDN網(wǎng)絡(luò)性能的影響.
在當(dāng)今網(wǎng)絡(luò)快速發(fā)展的時(shí)代,網(wǎng)絡(luò)規(guī)模不斷擴(kuò)大,網(wǎng)絡(luò)復(fù)雜度也持續(xù)增加.SDN作為一種全新的網(wǎng)絡(luò)架構(gòu)被提出,用以解決傳統(tǒng)網(wǎng)絡(luò)中存在的網(wǎng)絡(luò)協(xié)議多且實(shí)現(xiàn)復(fù)雜、流管理靈活度不足以及網(wǎng)絡(luò)新業(yè)務(wù)部署周期長等問題.
SDN被定義為一種轉(zhuǎn)發(fā)與控制分離、軟件可編程的新型網(wǎng)絡(luò)體系架構(gòu).它將傳統(tǒng)控制平面功能從各個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)中抽象出來,將原來分布式控制的網(wǎng)絡(luò)架構(gòu)重構(gòu)為集中控制的網(wǎng)絡(luò)架構(gòu).其基本架構(gòu)如圖1所示,主要包含3個(gè)平面和2個(gè)接口:應(yīng)用平面(application plane)、控制平面(control plane)、數(shù)據(jù)平面(data plane)、北向接口(northbound interface)以及南向接口(southbound interface).
Fig. 1 Basic architecture of SDN圖1 SDN的基本架構(gòu)
在SDN架構(gòu)中,網(wǎng)絡(luò)用戶可以通過編程的方式制定網(wǎng)絡(luò)管理策略應(yīng)用,并部署到SDN應(yīng)用平面.這些SDN應(yīng)用通過北向接口將網(wǎng)絡(luò)行為請求交給控制平面.SDN控制器(SDN controller)在接收到SDN應(yīng)用的請求后,通過南向接口交給數(shù)據(jù)平面中的網(wǎng)元(network element),使得網(wǎng)元能夠正確地處理和轉(zhuǎn)發(fā)數(shù)據(jù).同時(shí),控制平面為SDN應(yīng)用提供底層網(wǎng)絡(luò)的抽象模型,包含全局的網(wǎng)絡(luò)拓?fù)湟晥D狀態(tài)以及網(wǎng)元連接事件等.
在眾多南向接口協(xié)議中,OpenFlow已經(jīng)成為既定的標(biāo)準(zhǔn).OpenFlow作為一種通信協(xié)議,將對等的數(shù)據(jù)平面轉(zhuǎn)發(fā)設(shè)備和SDN控制器連接起來,其架構(gòu)如圖2所示.在OpenFlow v1.3版本中,支持該協(xié)議的SDN交換機(jī)主要包含3個(gè)部分:組表(group table)、流水線(pipeline)以及安全通道(secure channel).其中流水線上的流表(flow table)可以看作為一組策略表項(xiàng)(即流表項(xiàng))的集合,數(shù)據(jù)分組在流水線上的多張流表間跳轉(zhuǎn)進(jìn)行匹配;組表用來聚合具有相同指令的不同流表項(xiàng)以提高流表的資源利用率;而安全通道則是連接OpenFlow交換機(jī)與控制器的接口,用來保護(hù)兩者之間的通信不受干擾.
Fig. 2 Architecture of OpenFlow v1.3圖2 OpenFlow v1.3架構(gòu)圖
圖3描述了基于OpenFlow的SDN環(huán)境下網(wǎng)絡(luò)流的基本轉(zhuǎn)變過程,Pkt0和Pkt1是同一條流(首部字段相同)的前2個(gè)數(shù)據(jù)包.當(dāng)OpenFlow交換機(jī)S收到主機(jī)1發(fā)往主機(jī)2的新流的第1個(gè)數(shù)據(jù)包時(shí),該流的處理過程如圖3中點(diǎn)劃線箭頭所示.首先交換機(jī)S接收到該新流并進(jìn)行匹配;在未匹配到相應(yīng)流表項(xiàng)后,向控制器發(fā)送封裝有該流首部信息的packet_in消息;控制器接收到packet_in消息后根據(jù)網(wǎng)絡(luò)管理策略生成相應(yīng)的流規(guī)則,并向交換機(jī)S發(fā)送flow_mod消息以下發(fā)該流規(guī)則對應(yīng)的流表項(xiàng);最后,交換機(jī)S根據(jù)該流表項(xiàng)對流進(jìn)行轉(zhuǎn)發(fā)等操作.而當(dāng)交換機(jī)收到主機(jī)1發(fā)往主機(jī)2的一條舊流(指交換機(jī)中已經(jīng)安裝有對應(yīng)的流表項(xiàng))的數(shù)據(jù)分組時(shí),該數(shù)據(jù)分組的轉(zhuǎn)發(fā)過程如圖3中虛線箭頭所示.即交換機(jī)匹配到該分組對應(yīng)的流表項(xiàng),并根據(jù)該流表項(xiàng)的動作對分組進(jìn)行轉(zhuǎn)發(fā)等操作.
Fig. 3 Forwarding process of flow in SDN environment圖3 網(wǎng)絡(luò)流在SDN環(huán)境中轉(zhuǎn)發(fā)過程
線性查找法(linear search, LS)、二叉樹查找法(binary search tree, BST)、散列表(Hash table)查找等傳統(tǒng)的表項(xiàng)查找方法都是基于靜態(tài)隨機(jī)存取存儲器(static random access memory, SRAM)的軟件查找方法,共同特點(diǎn)是查找速度慢.在這種背景下,基于硬件的TCAM查找方法被提出.在進(jìn)行TCAM查找時(shí),整個(gè)表項(xiàng)空間的所有數(shù)據(jù)在同一時(shí)刻被查詢,查找速度不受表項(xiàng)空間數(shù)據(jù)大小影響,每個(gè)時(shí)鐘周期可以完成一次查找.相較于典型的內(nèi)存搜尋算法,TCAM電路的方式由于平行比對所有儲存數(shù)據(jù),從而有效縮短了搜尋的時(shí)間.
此外,與傳統(tǒng)的基于內(nèi)容尋址寄存器(content addressable memory, CAM)相比,TCAM在每個(gè)比特位上的狀態(tài)不僅包含“0”和“1”,還有另一個(gè)由掩碼來實(shí)現(xiàn)的“don’t care”狀態(tài).正是由于TCAM的第3種狀態(tài),使得其既能夠進(jìn)行精確匹配查找,又能夠進(jìn)行模糊匹配查找,因此被廣泛應(yīng)用于SDN硬件交換機(jī)中[10].
雖然TCAM在匹配能力上比較靈活高效,但相較于傳統(tǒng)隨機(jī)存取存儲器(random access memory, RAM),價(jià)格昂貴且耗電量大[11].這導(dǎo)致當(dāng)前商用OpenFlow交換機(jī)只擁有幾千至上萬條流表項(xiàng)的空間[12],在大規(guī)模網(wǎng)絡(luò)中部署時(shí)SDN交換機(jī)容易出現(xiàn)流表溢出現(xiàn)象,進(jìn)而對網(wǎng)絡(luò)性能造成影響.目前網(wǎng)絡(luò)安全服務(wù)鏈[13]、路由故障恢復(fù)[14]等典型SDN應(yīng)用場景都會受到流表空間不足的影響.
為了進(jìn)一步說明流表溢出對網(wǎng)絡(luò)性能的影響,我們使用如圖4(a)所示的網(wǎng)絡(luò)拓?fù)洌ㄟ^主機(jī)1至主機(jī)4相互之間發(fā)送流量造成流表空間溢出.同時(shí),通過主機(jī)5和主機(jī)6互ping來驗(yàn)證流表溢出對網(wǎng)絡(luò)性能的影響.控制器匹配五元組(源IP地址,源端口,目的IP地址,目的端口,協(xié)議),當(dāng)流表溢出時(shí),采取由控制器packet_in和packet_out機(jī)制轉(zhuǎn)發(fā)未能匹配到流表項(xiàng)的新流.
圖4(b)為實(shí)驗(yàn)結(jié)果,從圖4(b)中實(shí)線可以看出,當(dāng)流表未發(fā)生溢出時(shí),ping時(shí)延幾乎為0.而從圖4(b)中虛線可以看出,當(dāng)流表發(fā)生溢出時(shí),ping時(shí)延始終在50 ms上下浮動.由此可知,當(dāng)交換機(jī)流表發(fā)生溢出時(shí),SDN網(wǎng)絡(luò)性能將有所下降.
除上述處理機(jī)制外,在SDN硬件交換機(jī)發(fā)生流表溢出時(shí),控制器也可以采取其他類型的策略,如直接丟棄新流,不下發(fā)對應(yīng)流表項(xiàng)也不進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā);或者刪除已有流表項(xiàng)來為下發(fā)新的流表項(xiàng)騰出空間等.然而,這些方法都會對網(wǎng)絡(luò)中的流量造成影響,使得網(wǎng)絡(luò)性能下降.本文后續(xù)將著重分析目前有效緩解流表溢出而導(dǎo)致網(wǎng)絡(luò)性能下降的方法.
在部署SDN網(wǎng)絡(luò)的域間骨干或大型數(shù)據(jù)中心網(wǎng)絡(luò)中往往運(yùn)行著龐大的流量,而OpenFlow交換機(jī)有限的流表空間很可能無法安裝控制器下發(fā)的大量流表項(xiàng)條目數(shù).尤其在出現(xiàn)短時(shí)間內(nèi)突然有大量流經(jīng)過網(wǎng)絡(luò)的情況下,流表項(xiàng)更容易出現(xiàn)溢出問題.由于這些流都是網(wǎng)絡(luò)中的合法流量,SDN網(wǎng)絡(luò)必須高效地進(jìn)行轉(zhuǎn)發(fā)處理.對于該情況下的流表溢出緩解問題,研究人員主要從2個(gè)方面進(jìn)行了考慮:1)優(yōu)化交換機(jī)流表空間架構(gòu)及利用率,以避免交換機(jī)頻繁發(fā)生流表項(xiàng)溢出;2)當(dāng)發(fā)生流表溢出時(shí),設(shè)計(jì)合理的流表項(xiàng)替換算法,選擇性地剔除舊的流表項(xiàng),進(jìn)而為新流表項(xiàng)的下發(fā)騰出空間.
2.1.1 流表空間架構(gòu)優(yōu)化
SDN硬件交換機(jī)流表溢出的根本原因在于受限的TCAM空間大小.因此,通過優(yōu)化交換機(jī)的流表空間,有助于提高支持流表項(xiàng)數(shù)量的上限.研究人員提出了一種結(jié)合SRAM的串行多級流表架構(gòu)[15].如圖5所示,該架構(gòu)在使用TCAM實(shí)現(xiàn)流表的基礎(chǔ)上,通過在TCAM尾部增加SRAM,以串行的方式使流表空間得到大大增加.使用該流表架構(gòu)的交換機(jī)在處理到達(dá)的新流時(shí),首先在TCAM流表中查找匹配,若沒有對應(yīng)匹配流表項(xiàng),則進(jìn)一步在SRAM的流表中查找.這種串行架構(gòu)的好處在于,當(dāng)流量較小時(shí),能優(yōu)先使用TCAM來快速查找,使流表空間具有很好的伸縮性.
Fig. 5 Multi-level flow table architecture combining TCAM and SRAM圖5 結(jié)合TCAM和SRAM的多級流表架構(gòu)
然而,在該串行架構(gòu)中,當(dāng)流數(shù)量較多的情況下,平均查表速度將顯著下降.與串行架構(gòu)不同的是,一種利用TCAM與RAM構(gòu)造的雙流表空間并行架構(gòu)CacheFlow被提了出來[16].如圖6所示,該架構(gòu)基于網(wǎng)絡(luò)流量往往遵循Zipf分布的特點(diǎn)(即絕大多數(shù)流量與相對較少的規(guī)則匹配)[17],將最常見流的規(guī)則存儲在容量較小的TCAM中以達(dá)到快速查找、匹配、更新流規(guī)則,而將其余的流規(guī)則存儲在使用RAM的軟件交換機(jī)(硬件交換機(jī)中的一部分)中.存儲在TCAM中的流規(guī)則相較于RAM中的流規(guī)則具有更高的優(yōu)先級,能優(yōu)先被匹配.
Fig. 6 CacheFlow architecture diagram圖6 CacheFlow架構(gòu)圖
由于CacheFlow沒有考慮到在流表溢出時(shí)對流表項(xiàng)存儲位置的處理,一種新的MMS(memory management system)架構(gòu)被提出[18].此外,與Cache-Flow使用位于SDN交換機(jī)上虛擬內(nèi)存機(jī)制不同的是,MMS使用的是控制器上的RAM.MMS通過Swap out的方式在流表空間溢出時(shí)將最新被匹配了的流表項(xiàng)置換到控制器上的RAM中以及通過Swap in的方式將需要再次匹配的流表項(xiàng)重新安裝在交換機(jī)的TCAM中.MMS在有效地?cái)U(kuò)大流表空間的同時(shí),提高了TCAM流表空間的利用率,但平均查表速度值得通過實(shí)驗(yàn)進(jìn)行進(jìn)一步分析.
2.1.2 流表項(xiàng)匹配規(guī)則優(yōu)化
對于OpenFlow交換機(jī)來說,流表溢出直接原因在于控制器下發(fā)的流表項(xiàng)超過了交換機(jī)所能支持的上限.因此,通過對流表項(xiàng)匹配規(guī)則的優(yōu)化,能夠起到減少下發(fā)流表項(xiàng)數(shù)量的作用.
OpenFlow v1.3作為重要的一個(gè)穩(wěn)定版本,在設(shè)計(jì)架構(gòu)上相較于v1.0版本增加了多級流表(multiple flow tables, MFT)的結(jié)構(gòu)[19].MFT在一定程度上減輕了單一流表臃腫的問題,同時(shí)也為流表管理帶來了新的途徑.Agg-Extable作為一種多級流表管理方法,能在一定程度上減少流表中流表項(xiàng)數(shù)量[20].該方法主要基于2個(gè)算法:1)利用剪枝算法剪去流表中的冗余項(xiàng);2)基于TCAM任意掩碼,利用Quine-McCluskey算法定期聚合多級流表中具有相同動作(action)的流表項(xiàng).如圖7所示,流表項(xiàng)E1,E2和E4,E5被聚合的同時(shí),掩碼位也進(jìn)行了調(diào)整.與之相類似的工作包括FTRS機(jī)制,通過聚合流表項(xiàng)的相同action和匹配域中相同的地址來節(jié)省流表空間[21].同時(shí),在SDN網(wǎng)絡(luò)中如何快速進(jìn)行流表聚合[22-23]以及如何確保流表項(xiàng)聚合時(shí)保證流表項(xiàng)的依賴[24]都被廣泛的研究.
Fig. 7 Example of aggregation of flow entries based on mask圖7 基于掩碼聚合流表項(xiàng)的示例
相較于流表的管理,Compact TCAM方法在保持SDN交換機(jī)對流的動態(tài)處理等特性的情況下,能夠通過改變流表項(xiàng)結(jié)構(gòu)而優(yōu)化流表空間使用[25].如圖8所示,該方法對流的轉(zhuǎn)發(fā)主要分為3步:首先,當(dāng)流F1:P1到達(dá)入口交換機(jī)Sin時(shí),控制器根據(jù)流的首部信息生成一個(gè)特定的FLOW-ID并存儲在控制器的FLOW-ID Table中,然后用FLOW-ID替換該流的首部信息進(jìn)行轉(zhuǎn)發(fā);其次,對處在中間鏈路上的交換機(jī)Smid下發(fā)匹配域?yàn)镕LOW-ID的流表項(xiàng),對流進(jìn)行處理;最后在出口交換機(jī)Sout處,將FLOW-ID換回該流原來的首部信息.由于FLOW-ID使用比原始流表項(xiàng)匹配域比特?cái)?shù)更短的標(biāo)記來標(biāo)識流,因此大大提高了TCAM的利用率.文獻(xiàn)[26]也采用了類似在邊緣交換機(jī)上對流首部字段進(jìn)行改變的思想,提出了一種按需目標(biāo)地址轉(zhuǎn)換和源端口轉(zhuǎn)換的機(jī)制.它基于地址修改和端口重寫,主動創(chuàng)造更多可以聚合的流表項(xiàng).
Fig. 8 Compact TCAM method for new flow processing圖8 Compact TCAM方法對新流處理的流程
此外,Palette方案在保留SDN原有整體語義的情況下,根據(jù)匹配域掩碼將流表分解為多個(gè)子表并分布式地部署在網(wǎng)絡(luò)的不同位置上,同時(shí)保證每條流在路徑中對每種類型的子表至少能匹配一次[27],如圖9所示.Palette方案能夠平衡跨網(wǎng)絡(luò)的流表大小,并在不同連接之間共享資源,進(jìn)而達(dá)到降低流表項(xiàng)數(shù)量的作用.文獻(xiàn)[28]則提出了一種針對異構(gòu)流表(不同的控制器應(yīng)用程序會有不同的流策略,導(dǎo)致所有流的流規(guī)則集不盡相同)的流規(guī)則劃分和分配算法,同時(shí)保證了語義不變.SA(sub-table allocation)和SSP(size-balancing sub-table partition)算法,則被用于平衡子表以及減少規(guī)則開銷[29].
Fig. 9 Flow table separation deployment圖9 流表分解部署
2.1.3 流表項(xiàng)超時(shí)時(shí)間優(yōu)化
為了能夠使交換機(jī)主動且適時(shí)地刪除流表項(xiàng),OpenFlow協(xié)議規(guī)定了每條流表項(xiàng)都包含一個(gè)超時(shí)時(shí)間(timeouts)組件,用來指明交換機(jī)中的流表項(xiàng)在過期之前的最大生存時(shí)間量以及最長空閑時(shí)間量.控制器需要在向交換機(jī)安裝流表項(xiàng)時(shí)設(shè)置超時(shí)時(shí)間,包含2個(gè)值:hard_timeout和idle_timeout.hard_timeout表示流表項(xiàng)自安裝時(shí)起至該時(shí)間結(jié)束時(shí),交換機(jī)會主動刪除該流表項(xiàng).idle_timeout表示流表項(xiàng)在匹配到數(shù)據(jù)包后的這段時(shí)間內(nèi)如果未匹配到后續(xù)數(shù)據(jù)包,則會被交換機(jī)刪除.
超時(shí)時(shí)間設(shè)置一般分為如表1所示的4種情況,其中a,b為正常數(shù).當(dāng)hard_timeout和idle_timeout都設(shè)置為0時(shí),該流表項(xiàng)不會因超時(shí)而刪除;而當(dāng)hard_timeout和idle_timeout其中一個(gè)設(shè)置為0另一個(gè)設(shè)置為正常數(shù)時(shí),該流表項(xiàng)的生存時(shí)間取決于非零項(xiàng)超時(shí)時(shí)間;若2個(gè)超時(shí)時(shí)間都設(shè)置為正常數(shù)時(shí),該流表項(xiàng)的生存時(shí)間取決于2個(gè)超時(shí)時(shí)間誰先到期.
Table 1 4 Types of Timeout of Flow Entries表1 4種流表項(xiàng)超時(shí)時(shí)間設(shè)置 s
由于超時(shí)時(shí)間設(shè)置的長短決定了流表項(xiàng)在交換機(jī)中存儲的時(shí)間,因此,過長會降低流表利用率,過短又會因頻繁的packet_in事件導(dǎo)致控制器-交換機(jī)之間的交互增加,如圖10所示.此外,較長的超時(shí)時(shí)間設(shè)置將更容易導(dǎo)致流表項(xiàng)溢出[30].一種簡單的方法是在P4交換機(jī)上,通過識別TCP數(shù)據(jù)包的FIN標(biāo)記位來判斷TCP連接的最后一個(gè)數(shù)據(jù)包,進(jìn)而在最后一個(gè)數(shù)據(jù)包得到轉(zhuǎn)發(fā)后,將相應(yīng)的流表項(xiàng)刪除以減少無效時(shí)間,從而提高流表利用率[31].
Fig. 10 Impact of timeout configuration圖10 超時(shí)時(shí)間配置影響示意圖
在智能動態(tài)優(yōu)化流表項(xiàng)超時(shí)時(shí)間設(shè)置方面,HQTimer機(jī)制實(shí)現(xiàn)了為不同的流規(guī)則分配不同的超時(shí)時(shí)間[32].該機(jī)制包含2個(gè)部分:混合超時(shí)時(shí)間機(jī)制和基于Q-learning的適應(yīng)邏輯.其中混合超時(shí)時(shí)間機(jī)制負(fù)責(zé)流表項(xiàng)的下發(fā)和刪除,而基于Q-learning的適應(yīng)邏輯負(fù)責(zé)超時(shí)時(shí)間的動態(tài)決策.HQTimer的實(shí)現(xiàn)包含3個(gè)模塊:超時(shí)決策模塊、流規(guī)則下發(fā)模塊、流規(guī)則刪除模塊.超時(shí)決策模塊實(shí)現(xiàn)了基于Q-learning的適應(yīng)邏輯,以流規(guī)則下發(fā)模塊提供的table-miss規(guī)則作為輸入,通過運(yùn)行神經(jīng)網(wǎng)絡(luò),為table-miss規(guī)則獲取一個(gè)適當(dāng)?shù)某瑫r(shí)時(shí)間;同時(shí),以流規(guī)則刪除模塊提供的已刪除的流規(guī)則信息來計(jì)算獎勵,在此基礎(chǔ)上對模型進(jìn)行訓(xùn)練,該機(jī)制的具體實(shí)現(xiàn)如圖11所示.文獻(xiàn)[33]則基于Markov模型推測流表項(xiàng)的到期時(shí)間,并通過超時(shí)時(shí)間設(shè)置使該流表項(xiàng)在相同的時(shí)間內(nèi)刪除.
Fig. 11 HQTimer architecture diagram and Q-learning logic圖11 HQTimer架構(gòu)圖和Q-learning邏輯
雖然智能預(yù)測算法精確度相對較高,但設(shè)計(jì)復(fù)雜度以及對控制器性能影響都比較大.因此,一些較為簡單的啟發(fā)式方法也被用來動態(tài)地優(yōu)化流表項(xiàng)的超時(shí)時(shí)間.基于網(wǎng)絡(luò)中99%的流都是短流(活躍時(shí)間不超過0.4 s)這一特點(diǎn)[34],一種動態(tài)超時(shí)機(jī)制(dynamic hybrid timeout method, DHTM)被設(shè)計(jì)出來[35].DHTM包含2個(gè)方法:動態(tài)Hard Timeout方法和動態(tài)Idle Timeout方法.默認(rèn)使用動態(tài)Hard Timeout方法,而當(dāng)不滿足:1)流表空間利用率超過90%;2)沒有足夠的流歷史信息;3)平均持續(xù)時(shí)間小于2 s;4)已經(jīng)分類為短流或者非頻繁流這4條件之一時(shí),則使用動態(tài)Idle Timeout方法.2個(gè)方法設(shè)置的動態(tài)時(shí)間都在基于最小時(shí)間(1 s和2 s)的情況下,依據(jù)后續(xù)流的到達(dá)情況以1 s為步進(jìn)增加或減少超時(shí)時(shí)間.
IHTA(dynamic Idle-Hard Timeout allocation)算法通過分析分組到達(dá)時(shí)間的分布也得出了以1 s為初始idle_timeout值[36].不同的是,IHTA對2個(gè)超時(shí)時(shí)間的動態(tài)調(diào)整考慮了流表空間利用率同時(shí)設(shè)置了最大超時(shí)時(shí)間.類似的工作還有,自適應(yīng)硬超時(shí)的方法(adaptive Hard Timeout method, AHTM)[37]以及根據(jù)可預(yù)測流和不可預(yù)測流來分配不同的硬超時(shí)時(shí)間[38].
與預(yù)測流實(shí)際生存時(shí)間來動態(tài)配置流表項(xiàng)超時(shí)時(shí)間不同的是,根據(jù)網(wǎng)絡(luò)負(fù)載變化情況來動態(tài)配置流表項(xiàng)的超時(shí)時(shí)間.一種是通過預(yù)測下一時(shí)刻新增流表項(xiàng)數(shù)量,再結(jié)合網(wǎng)絡(luò)當(dāng)前負(fù)載情況,對流表項(xiàng)的超時(shí)時(shí)間進(jìn)行動態(tài)優(yōu)化配置,如利用動態(tài)指數(shù)平滑(DES)模型進(jìn)行預(yù)測的DTO算法[39]以及使用AR進(jìn)行預(yù)測的方法[40]等.另一種則是依據(jù)交換機(jī)流表使用率變化情況來動態(tài)的調(diào)整空閑超時(shí)時(shí)間[41].
2.1.4 基于網(wǎng)絡(luò)流路徑優(yōu)化的交換機(jī)流表均衡
網(wǎng)絡(luò)一般依賴于嚴(yán)格的路由策略(比如最短路徑路由),這會使網(wǎng)絡(luò)中的部分鏈路成為核心鏈路,而核心鏈路上的交換機(jī)因流量匯聚導(dǎo)致流表空間使用率大大增加.相反,不依賴于嚴(yán)格的路由策略可以更好地利用網(wǎng)絡(luò)容量,同時(shí)能夠減少帶寬浪費(fèi)和擁塞事件[2].因此,對網(wǎng)絡(luò)流路徑優(yōu)化可以在一定程度上緩解流表溢出問題.目前該研究主要分為2類,即基于全網(wǎng)流的路徑優(yōu)化和基于核心節(jié)點(diǎn)流的重定向.
1) 基于全網(wǎng)流的路徑優(yōu)化
如圖12所示,1個(gè)網(wǎng)絡(luò)共有8個(gè)交換機(jī)、2個(gè)出口鏈路(南北)和2個(gè)入口鏈路(東西).當(dāng)A,B這2個(gè)流需要到北向出口而其他流需要到南向出口時(shí),3個(gè)子圖分別代表了3種路由策略下的流表項(xiàng)數(shù)量情況.圖12(a)使用最短路徑路由策略,在網(wǎng)絡(luò)中共安裝了15條流表項(xiàng).圖12(b)則使用最小化流表項(xiàng)數(shù)量策略,共安裝了9條流表項(xiàng),但帶來的是A,B流的路由跳數(shù)增加.圖12(c)則表示在每個(gè)交換機(jī)僅僅只有2個(gè)流表項(xiàng)空間大小的約束下,網(wǎng)絡(luò)仍能對流進(jìn)行路由轉(zhuǎn)發(fā).由此可以看出,在交換機(jī)流表空間大小的約束條件下,可以通過網(wǎng)絡(luò)流路徑優(yōu)化來減少交換機(jī)中流表項(xiàng)數(shù)量.
Fig. 12 Example of the routing policy圖12 路由策略示意圖
基于這種全網(wǎng)流的路徑優(yōu)化思想,軟件定義自適應(yīng)路由(software-defined adaptive routing, STAR)策略利用SDN具有全網(wǎng)拓?fù)湟晥D以及靈活的網(wǎng)絡(luò)控制特性對網(wǎng)絡(luò)流量進(jìn)行路由規(guī)劃[42].該策略通過全網(wǎng)所有SDN交換機(jī)流表利用率的實(shí)時(shí)檢測,對于入網(wǎng)的新流根據(jù)交換機(jī)流表利用率情況選擇合適的路徑通過網(wǎng)絡(luò),以避免因流表溢出帶來的網(wǎng)絡(luò)性能下降.而多項(xiàng)式時(shí)間的啟發(fā)式算法OFFICER被提出用來找出不同的路徑以滿足在不顯著增加路徑長度的情況下提升網(wǎng)絡(luò)流的承載能力[43].此外,文獻(xiàn)[44]提出的“big switch”概念,將全局的高級策略映射到網(wǎng)絡(luò)中每個(gè)交換機(jī)的等價(jià)低級流規(guī)則集,來對交換機(jī)的流表資源進(jìn)行整體分配.
然而,在結(jié)合路徑優(yōu)化和流表項(xiàng)聚合問題上,由于采取去中心化路由(decentralized routing, DR)(DR表示路由分布在整個(gè)網(wǎng)絡(luò)中,且大多數(shù)路由經(jīng)過的鏈路不重合)可以實(shí)現(xiàn)流表均衡,使平均時(shí)延最小化,但不利于流表項(xiàng)的聚合.而采取中心化路由(centralized routing, CR)(CR表示路由集中在網(wǎng)絡(luò)中,大部分路由都經(jīng)過相同的鏈路)會導(dǎo)致平均傳輸時(shí)延增加,但可以聚合更多的流表項(xiàng)以節(jié)省流表空間.對此,文獻(xiàn)[45]提出了一種整型線性規(guī)劃方案(integer linear program, ILP),用來均衡傳輸時(shí)延和流表空間利用率,同時(shí)提出快速啟發(fā)式ORWFA算法來實(shí)現(xiàn)最優(yōu)折中.
2) 基于核心節(jié)點(diǎn)流的重定向
在網(wǎng)絡(luò)中,流表溢出大部分時(shí)間都發(fā)生在部分核心節(jié)點(diǎn)上,因此解決核心節(jié)點(diǎn)上交換機(jī)流表空間的利用問題不失為一種有效的緩解方法.FTS架構(gòu)的提出可以用來緩解網(wǎng)絡(luò)中部分交換機(jī)流表溢出問題[46-47].該架構(gòu)針對流分布不均勻的現(xiàn)象,將流表負(fù)載過重的交換機(jī)中觸發(fā)table-miss事件的流(新流)隨機(jī)轉(zhuǎn)發(fā)給鄰近負(fù)載較輕的交換機(jī)進(jìn)行精確匹配處理.如圖13所示,圖13(a)展示了經(jīng)典架構(gòu)下當(dāng)S2交換機(jī)流表空間已滿時(shí)對新流的處理情況,圖13(b)則展示了FTS架構(gòu)處理情況.在經(jīng)典架構(gòu)下,當(dāng)一條新流到達(dá)流表空間已滿的S2交換機(jī),packet_in消息將觸發(fā)控制器刪除交換機(jī)已有的流表項(xiàng)進(jìn)而下發(fā)針對該流的流表項(xiàng),這會導(dǎo)致原本活躍的流的轉(zhuǎn)發(fā)被迫中斷.而在FTS架構(gòu)下,當(dāng)新流到達(dá)S2交換機(jī),如果流表沒有溢出,則轉(zhuǎn)發(fā)至控制器;若流表溢出則將新流隨機(jī)轉(zhuǎn)發(fā)至源端口以外的某一端口.由此可見,F(xiàn)TS在交換機(jī)發(fā)生流表溢出的情況下保證了原有活躍流的通信質(zhì)量.
Fig. 13 Normal architecture and FTS architecture圖13 經(jīng)典架構(gòu)和FTS架構(gòu)
在FTS架構(gòu)的基礎(chǔ)上,采用路由松弛策略可以最大化流量效率[48].即在流表空間已滿的交換機(jī)中,保留大流的流表項(xiàng),而將小流通過默認(rèn)(default)流表項(xiàng)轉(zhuǎn)發(fā)至其他交換機(jī)進(jìn)行精確匹配.
雖然將流從飽和的交換機(jī)中重定向至有足夠空余流表空間的空閑交換機(jī)可以有效地緩解流表溢出問題.但是,該方法的性能依賴于空閑資源的數(shù)量,當(dāng)沒有足夠的空閑交換機(jī)來滿足大量流時(shí),容易導(dǎo)致全網(wǎng)交換機(jī)受流表溢出的影響.
在不改變網(wǎng)絡(luò)其他配置的情況下,為了緩解因交換機(jī)流表空間緩存溢出而導(dǎo)致網(wǎng)絡(luò)性能下降的問題,研究人員提出了多種流表項(xiàng)替換策略,即按照特定的規(guī)則刪除交換機(jī)中已有流表項(xiàng),以便為新流表項(xiàng)的下發(fā)騰出空間.
2.2.1 被動替換策略
被動替換策略的核心思想在于,只有在交換機(jī)流表處于飽和狀態(tài)且發(fā)生新流到達(dá)事件時(shí),控制器才會選擇刪除一條已有流表項(xiàng)并為該新流下發(fā)對應(yīng)的流表項(xiàng).最典型的工作是OpenFlow協(xié)議1.4版本[49]增加了對流表滿載情況的處理機(jī)制,控制器對下發(fā)的流表項(xiàng)設(shè)置不同的重要度(important)值,進(jìn)而允許OpenFlow交換機(jī)在流表發(fā)生溢出時(shí)可以刪除那些重要度值較低的流表項(xiàng).
典型的流表項(xiàng)刪除策略,包括最近最少使用(least recently used, LRU)、先進(jìn)先出(first in first out, FIFO)和隨機(jī)(random)[50].研究發(fā)現(xiàn)FIFO刪除策略比LRU要差,但優(yōu)于隨機(jī)策略[51].
在流表溢出時(shí),為了更好地選擇出最適合刪除的流表項(xiàng),結(jié)合近些年較為熱門的機(jī)器學(xué)習(xí)思想,一種基于機(jī)器學(xué)習(xí)的剔除方法(machine learning based eviction approach, MLBEA)被用來找出并剔除不活躍的流表項(xiàng)[52].該方法以五元組(源IP地址,源端口,目的IP地址,目的端口,協(xié)議)定義流,通過數(shù)據(jù)流的協(xié)議、流表項(xiàng)未匹配時(shí)間長度、平均包間隔以及最后N個(gè)數(shù)據(jù)包的長度4個(gè)特征組成的向量,使用UNIV,UNIBS等網(wǎng)絡(luò)數(shù)據(jù)集進(jìn)行離線訓(xùn)練隨機(jī)森林分類器,并將訓(xùn)練結(jié)果通過在線仿真的方式進(jìn)行驗(yàn)證.結(jié)果顯示,基于機(jī)器學(xué)習(xí)選擇合適流表項(xiàng)進(jìn)行刪除的方法要遠(yuǎn)好于LRU方法.
與MLBEA高復(fù)雜度相比,短流優(yōu)先策略(short flow first, SFF)要簡單得多[53].SFF動態(tài)標(biāo)記流表項(xiàng)是長流還是短流,在流表發(fā)生溢出時(shí),選擇短流表項(xiàng)進(jìn)行刪除替換,并使長流能夠提供更長時(shí)間的匹配.具體動態(tài)標(biāo)記的方法如圖14所示.①首先將到達(dá)交換機(jī)的新流所對應(yīng)的流表項(xiàng)標(biāo)記為短流.②如果該流表項(xiàng)在被刪除之前與第2個(gè)到達(dá)的包匹配,則將該流表項(xiàng)標(biāo)記為長流,同時(shí)設(shè)置最大等待時(shí)間(maximum waiting time, MWT),其中t為2次匹配的時(shí)間間隔,α為權(quán)重因子.③在最大等待時(shí)間內(nèi)若沒有再匹配到數(shù)據(jù)包,則將該流表項(xiàng)重新標(biāo)記為短流.④被重新標(biāo)記為短流后,如果再次匹配到數(shù)據(jù)包,則重新將流表項(xiàng)標(biāo)記為長流,同時(shí)更新匹配時(shí)間為t′.實(shí)驗(yàn)顯示,SFF策略比FIFO,LRU的替換刪除策略都要好.
Fig. 14 Flow identification in SFF scheme圖14 短流優(yōu)先策略中流的鑒定方法
2.2.2 主動替換策略
被動替換策略具有實(shí)現(xiàn)簡單等優(yōu)點(diǎn),但由于流表項(xiàng)的替換發(fā)生在交換機(jī)流表溢出時(shí),此時(shí)需要消耗大量時(shí)間來找出相應(yīng)需要刪除的流表項(xiàng),因此會大大增加新流的處理時(shí)延,導(dǎo)致網(wǎng)絡(luò)性能不太理想[54].為了解決溢出時(shí)替換造成的時(shí)延增大問題,需在流表項(xiàng)將要發(fā)生溢出之前,通過流的篩選策略,提前剔除流表空間中的一部分流表項(xiàng),以供即將到達(dá)的新流使用.一般分為2種方式:
1) 設(shè)定流表空間使用閾值
即當(dāng)流表空間使用率超過一定閾值時(shí),刪除特定流表項(xiàng).如一種基于隱Markov模型(hidden Markov model, HMM)的流表項(xiàng)主動剔除方案,在流表空間超過閾值時(shí)通過HMM選出最低匹配概率的流表項(xiàng)并刪除,直到流表利用率下降到閾值以下[55].此外,研究發(fā)現(xiàn)閾值大小的設(shè)定會對網(wǎng)絡(luò)性能帶來一定的影響.當(dāng)閾值設(shè)置較低時(shí),流表可用空間增加,但會導(dǎo)致頻繁地用新流表項(xiàng)替換舊的流表項(xiàng)而帶來額外的開銷,因此閾值可以與數(shù)據(jù)包的到達(dá)速率成反比;同樣的,在一段時(shí)間內(nèi)到達(dá)的數(shù)據(jù)包數(shù)量增加是因?yàn)榫W(wǎng)絡(luò)中主機(jī)增加導(dǎo)致,因此閾值可以與主機(jī)數(shù)量成反比[56].
2) 對流表溢出進(jìn)行預(yù)測
即當(dāng)預(yù)測到流表即將要發(fā)生溢出時(shí),刪除特定流表項(xiàng).如,基于流表項(xiàng)溢出預(yù)測的CPD架構(gòu)[57].如圖15所示,該架構(gòu)包含3個(gè)模塊:流表狀態(tài)采集模塊(flow table state collection)、新流預(yù)測模塊(predict module)、流表項(xiàng)刪除模塊(delete module).流表狀態(tài)采集模塊負(fù)責(zé)采集各個(gè)周期內(nèi)流表空間使用情況,包括流表空間總大小和剩余流表空間大小.新流預(yù)測模塊負(fù)責(zé)使用泰勒級數(shù)通過各周期內(nèi)統(tǒng)計(jì)的packet_in數(shù)量預(yù)測下一個(gè)采樣周期新流到達(dá)的數(shù)量.流表項(xiàng)刪除模塊則是根據(jù)預(yù)測新流數(shù)量與流表空間使用情況判斷下一周期內(nèi)是否會出現(xiàn)流表溢出問題,若流表會出現(xiàn)溢出,則刪除最不可能再被匹配到的流表項(xiàng).
Fig. 15 The architecture of CPD圖15 CPD架構(gòu)示意圖
由于流表溢出對網(wǎng)絡(luò)性能會產(chǎn)生重要影響,因此越來越多的研究開始關(guān)注于流表溢出攻擊及其防御策略.網(wǎng)絡(luò)攻擊者可以通過網(wǎng)絡(luò)探測手段獲取SDN交換機(jī)的相關(guān)配置、控制器網(wǎng)絡(luò)管理策略以及網(wǎng)絡(luò)拓?fù)涞刃畔?基于這些信息,攻擊者可以設(shè)計(jì)發(fā)起針對SDN交換機(jī)的流表溢出攻擊.從攻擊流的角度區(qū)分,這類攻擊主要分為2種形式:一般性攻擊流和精心設(shè)計(jì)的低速率攻擊流.與正常網(wǎng)絡(luò)下的優(yōu)化技術(shù)相比,針對流表溢出的攻擊,必須能夠有效地檢測出攻擊并進(jìn)行遏制,否則即使再優(yōu)的方案,攻擊者也總能使流表空間被攻擊流占滿.本節(jié)將以流表溢出攻擊為背景,首先介紹相關(guān)網(wǎng)絡(luò)探測手段,進(jìn)而分別介紹一般性攻擊流和低速率攻擊流情況下的緩解方案.
在SDN網(wǎng)絡(luò)環(huán)境中,網(wǎng)絡(luò)配置信息探測一般分為2種方式:1)控制器感染,即攻擊者通過病毒、SQL注入等形式獲得SDN控制器的相關(guān)權(quán)限來獲取相關(guān)配置信息;2)網(wǎng)絡(luò)測量,即攻擊者通過向網(wǎng)絡(luò)中發(fā)送特定的探測流來獲取相關(guān)配置信息.控制器作為SDN網(wǎng)絡(luò)的核心部件,被感染則意味著攻擊者可以獲取網(wǎng)絡(luò)的任意信息[58].相較于控制器感染,通過網(wǎng)絡(luò)測量獲取網(wǎng)絡(luò)配置信息具有實(shí)現(xiàn)較為容易、不易被發(fā)現(xiàn)等優(yōu)點(diǎn),已經(jīng)成為攻擊者獲取網(wǎng)絡(luò)配置信息的主要手段.本節(jié)主要介紹通過網(wǎng)絡(luò)測量的方法獲取流表項(xiàng)生存時(shí)間配置、流規(guī)則配置、流表容量及其使用情況等信息.
3.1.1 流表項(xiàng)超時(shí)時(shí)間及流規(guī)則配置探測
若流表項(xiàng)超時(shí)時(shí)間設(shè)置較長,攻擊者將有足夠的時(shí)間通過惡意流量使交換機(jī)流表空間占滿.因此,文獻(xiàn)[59]研究了攻擊者如何通過向網(wǎng)絡(luò)發(fā)送構(gòu)建的數(shù)據(jù)包,來探測控制器對流表項(xiàng)idle_timeout和hard_timeout的配置以及流規(guī)則配置情況.探測示意圖如圖16所示,由于新的數(shù)據(jù)流(控制器流規(guī)則下的不同流)在SDN網(wǎng)絡(luò)中沒有對應(yīng)流表項(xiàng),需要通過packet_in和flow_mod消息下發(fā)對應(yīng)流表項(xiàng),這就使得新流的往返時(shí)延(round-trip time, RTT)要遠(yuǎn)大于直接匹配到流表項(xiàng)的流.因此攻擊者通過控制發(fā)送數(shù)據(jù)包的間隔以及每個(gè)數(shù)據(jù)包的RTT時(shí)間大小來判斷超時(shí)時(shí)間設(shè)置,如圖17所示.圖18則給出了匹配域的掩碼推測示例.
Fig. 16 The processing of probing timeout configuration圖16 探測流表項(xiàng)超時(shí)時(shí)間配置示意圖
Fig. 17 Inference of timeout period圖17 超時(shí)時(shí)間推測示意圖
Fig. 18 Inference of match field of flow entry圖18 流表項(xiàng)匹配域掩碼推測
3.1.2 流表容量及使用情況探測
交換機(jī)支持的最大流表項(xiàng)數(shù)量直接決定了攻擊者短期內(nèi)需要發(fā)送攻擊流數(shù)量的下限,因此流表容量探測對于攻擊者來說顯得尤為重要.一種利用流RTT大小變化情況進(jìn)行推測的方法,可以推斷出在流表溢出時(shí)使用基于FIFO和LRU的流表刪除規(guī)則的OpenFlow交換機(jī)的流表容量以及使用情況[60].圖19給出了該方法基于FIFO的流表空間推測示意圖,其中ABCD為流表空間的4種狀態(tài),菱形填充的小矩形為正常流占用的流表空間,斜線填充的小矩形為攻擊者發(fā)送的探測數(shù)據(jù)流占用的流表空間,空白部分為剩余未使用的空間.探測分為3個(gè)步驟,首先在起始狀態(tài)A的情況下,向網(wǎng)絡(luò)中不斷注入探測流到狀態(tài)B;其次,當(dāng)發(fā)現(xiàn)發(fā)送的新流的RTT增加時(shí),說明控制器進(jìn)行了流表項(xiàng)FIFO的刪除動作,因此可以判斷到達(dá)狀態(tài)C,即流表空間已被占滿;最后,隨著探測流的不斷注入,當(dāng)有已經(jīng)注入的流的后續(xù)包出現(xiàn)RTT突然增大時(shí),說明到達(dá)狀態(tài)D,即流表空間全部被探測流的流表項(xiàng)給占滿.在整個(gè)探測過程中,攻擊者始終記錄著探測流的數(shù)量,因此在到達(dá)狀態(tài)D時(shí)可以推斷出流表空間大小,再結(jié)合狀態(tài)C可以推斷出流表空間的使用情況.
Fig. 19 Inference of flow table space based on FIFO圖19 基于FIFO的流表空間推測示意圖
若攻擊者需要消耗整個(gè)網(wǎng)絡(luò)的流表資源而不是單個(gè)交換機(jī)的流表資源,則意味著它們必須提高攻擊流的請求速度或延長攻擊的持續(xù)時(shí)間,這2種方法通常代價(jià)都非常高.利用該攻擊特點(diǎn)而設(shè)計(jì)出的基于QoS感知的緩解策略(即對等支持策略)可以有效地緩解這種類型的流表溢出攻擊[61].該策略在交換機(jī)流表空間滿狀態(tài)時(shí),通過向交換機(jī)下發(fā)帶有通配符的流表項(xiàng),引導(dǎo)流量到對等的路徑上.因此該策略集成了整個(gè)SDN系統(tǒng)可用的空閑流表資源,能夠在遭受流表溢出攻擊時(shí),使網(wǎng)絡(luò)可以維持更長的時(shí)間以及更易檢測流表溢出攻擊.
此外,通過網(wǎng)絡(luò)拓?fù)浞治鲎钣锌赡鼙还舻哪繕?biāo)交換機(jī)(中間節(jié)點(diǎn)交換機(jī)Smid)可以在保證檢測精度的情況下提高檢測效率.例如,文獻(xiàn)[62]通過使用外部流消耗增長(growth of foreign flow consump-tion, GFFC)、流量偏差(deviation of amount, DFA)、流進(jìn)入的共性(commonness of flow entry, CFE) 3個(gè)指標(biāo)對攻擊進(jìn)行檢測,并使用令牌桶模型(token bucket model, TBM)進(jìn)行限速.對于檢測出的攻擊端,通過令牌桶限制控制器下發(fā)流表項(xiàng)的速度,以避免流表空間被占滿.如圖20所示,當(dāng)Smid這個(gè)中間交換機(jī)通過3個(gè)指標(biāo)檢測出攻擊端Sattack時(shí),通過控制器中的令牌桶限制從Sattack到達(dá)的流的對應(yīng)流表項(xiàng)的下發(fā)速度.
Fig. 20 Limit the speed of flow entries installation圖20 限制流表項(xiàng)下發(fā)速度示意圖
該緩解方法的不足在于,當(dāng)網(wǎng)絡(luò)中惡意用戶的數(shù)據(jù)流不斷增加,整個(gè)流表空間會被耗盡,使得正常用戶的數(shù)據(jù)流可能會遭受流表不足的問題.為此,一種基于行為優(yōu)先級感知的防御策略——FTGuard被設(shè)計(jì)提出[63].如圖21所示,F(xiàn)TGuard架構(gòu)中流量特征采集(traffic feature collection)模塊用于采集數(shù)據(jù)信息,包括新流的到達(dá)頻率、每個(gè)流的包數(shù)量,然后再通過評價(jià)分值計(jì)算(evaluation score calcu-lation)模塊計(jì)算分值,最后通過優(yōu)先級配置(priority encapsulation)模塊依據(jù)分值對不同用戶的流分配不同的優(yōu)先級.當(dāng)流表滿時(shí),優(yōu)先級最低的流條目會被刪除,為下發(fā)新流的流表項(xiàng)提供空間.
Fig. 21 The architecture of FTGuard圖21 FTGuard架構(gòu)示意圖
此外,文獻(xiàn)[64]分析了流表溢出攻擊的2種攻擊手段:控制器中惡意APP和網(wǎng)絡(luò)數(shù)據(jù)包,并提出了基于事件處理的剔除模型.該模型實(shí)現(xiàn)了對每一個(gè)新的數(shù)據(jù)包的分析,并通過日志驗(yàn)證源地址,對于黑名單中的源地址,將刪除超過一定流量閾值的流,以保證正常用戶數(shù)據(jù)流的正常通信.
相較于一般性的流表溢出攻擊,低速率流表溢出攻擊的攻擊流是經(jīng)攻擊者精心策劃過,即以最少的攻擊流造成交換機(jī)流表溢出,相對于傳統(tǒng)的攻擊方式進(jìn)一步增加了檢測難度.
基于低速率拒絕服務(wù)攻擊(low-rate denial-of-service, LDoS)特點(diǎn)以及OpenFlow流規(guī)則特性,研究人員提出了低速率流表溢出攻擊機(jī)制(low-rate flow table overflow attack, LOFT)[59].攻擊方式如圖22所示,假設(shè)其中Pi表示第i條攻擊流的數(shù)據(jù)包,idle_timeout為10 s,hard_timeout為15 s,交換機(jī)最多能夠支持5條流表項(xiàng).圖22(a)中對于特定的idle_timeout設(shè)置,攻擊者通過每隔2 s在idle_timeout內(nèi)發(fā)送足夠使交換機(jī)流表發(fā)生溢出的攻擊流數(shù)量(圖22中5條新流,分別為P0至P4),這些流再以idle_timeout為周期進(jìn)行發(fā)送,則會始終導(dǎo)致交換機(jī)流表空間處于溢出狀態(tài).圖22(b)中,若同時(shí)設(shè)置了idle_timeout和hard_timeout,則攻擊者可以在idle_timeout時(shí)間內(nèi)發(fā)送足夠的攻擊流的同時(shí)以hard_timeout為周期,重復(fù)發(fā)送攻擊流.對于該方式的攻擊,作者提出了2種可行的防御方案:1)在數(shù)據(jù)流的頭幾個(gè)包的傳遞過程中加入適當(dāng)?shù)臅r(shí)間抖動,例如控制器在接收到packet_in消息后不立即為新流下發(fā)流表項(xiàng);2)使用動態(tài)的超時(shí)時(shí)間值.
Fig. 22 Diagram of LDoS attack in two cases圖22 2種情況下的LDoS攻擊示意圖
面對OpenFlow交換機(jī)流表溢出問題,雖然已經(jīng)從流表空間架構(gòu)、流表項(xiàng)匹配規(guī)則、流表項(xiàng)刪除替換等眾多方面進(jìn)行研究,但都不可避免地對網(wǎng)絡(luò)性能造成影響,或是對OpenFlow相關(guān)軟硬件進(jìn)行了修改,這在一定程度上削弱了SDN網(wǎng)絡(luò)的能力.在此,本節(jié)對幾類代表性的交換機(jī)流表溢出緩解方法進(jìn)行比較分析.
由于不同的流表溢出緩解方法的效果評估方式具有差異性,例如有些使用網(wǎng)絡(luò)數(shù)據(jù)集[49],有些則使用自定義的仿真環(huán)境[36]等.因此,為了更加直觀分析各流表溢出緩解方法的特點(diǎn),我們從網(wǎng)絡(luò)性能(通信時(shí)延、鏈路負(fù)載)、對交換機(jī)額外的修改、控制器模塊、控制器負(fù)載影響、OpenFlow協(xié)議更改等多個(gè)方面做了統(tǒng)計(jì),結(jié)果如表2所示(比較是在正常通信且流表未發(fā)生溢出的情況下進(jìn)行的).
分析表2可以發(fā)現(xiàn),流匹配規(guī)則優(yōu)化中的流表聚合方法(Agg-Extable, FTRS)會因流表項(xiàng)匹配域字段的掩碼位數(shù)增加而導(dǎo)致流管理精細(xì)度下降,而更改匹配字段(Compact TCAM, Palette)需要對OpenFlow協(xié)議規(guī)定的流表項(xiàng)匹配域進(jìn)行修改;流路徑優(yōu)化機(jī)制中流的重路由實(shí)現(xiàn)方法(FTS,STAR),都會因?yàn)榱餍枰?jīng)過的鏈路數(shù)增加而導(dǎo)致網(wǎng)絡(luò)時(shí)延增加同時(shí)平均鏈路負(fù)載加重;而在使用主動/被動流表項(xiàng)刪除、針對流表溢出攻擊的緩解機(jī)制實(shí)現(xiàn)中,因需要采集交換機(jī)中統(tǒng)計(jì)字段信息以判斷流表空間是否將要溢出、流表項(xiàng)是否活躍以及網(wǎng)絡(luò)中的流是否是攻擊流,這些都會因?yàn)轭l繁數(shù)據(jù)請求增加控制器與交換機(jī)之間的通信量使得安全通道負(fù)載加重,從而影響SDN網(wǎng)絡(luò)性能.
隨著SDN網(wǎng)絡(luò)的大量應(yīng)用部署以及網(wǎng)絡(luò)流量不斷增多的趨勢,OpenFlow交換機(jī)流表溢出是一個(gè)迫切需要解決的問題.結(jié)合SDN特點(diǎn)、新技術(shù)發(fā)展以及應(yīng)用部署等方面,未來工作可以考慮5個(gè)問題:
1) 應(yīng)用感知的流表溢出緩解機(jī)制設(shè)計(jì)
SDN通過在集中的控制器上部署各種SDN應(yīng)用程序來實(shí)現(xiàn)對網(wǎng)絡(luò)的靈活管理.在流表溢出緩解機(jī)制的方案實(shí)現(xiàn)中,大多需要在SDN應(yīng)用平面安裝相應(yīng)的SDN應(yīng)用,以對數(shù)據(jù)平面的相關(guān)信息進(jìn)行采集和實(shí)現(xiàn)相應(yīng)的流表管理,如信息采集包括流表空間使用率[57]、流表項(xiàng)匹配信息[63]等,流表管理包括進(jìn)行流表項(xiàng)的修改以實(shí)現(xiàn)流表項(xiàng)聚合[20]、流的重路由[47]、刪除不活躍流表項(xiàng)[55]等.而SDN應(yīng)用平面上安裝流表溢出緩解應(yīng)用時(shí),需要考慮與其他各種SDN應(yīng)用程序(如QoS、流量工程等)有無策略沖突.例如QoS應(yīng)用將某流設(shè)定為高優(yōu)先級,而流表溢出緩解應(yīng)用判斷其為不重要的流從而優(yōu)先刪除或重定向.在以后的工作中需要解決這類策略不一致性問題.
Table 2 Comparison of Flow Table Overflow Mitigation Methods表2 流表溢出緩解方法比較
2) 降低流表溢出緩解機(jī)制對網(wǎng)絡(luò)的整體影響
已有的優(yōu)化方案在實(shí)現(xiàn)過程中或多或少對SDN網(wǎng)絡(luò)都有一定的影響,如通過流表項(xiàng)聚合減少流表空間占用的同時(shí)會使網(wǎng)絡(luò)流管理的細(xì)粒度降低[20]、路由優(yōu)化中的流重定向以均衡流表空間負(fù)載的同時(shí)增加了鏈路負(fù)載和時(shí)延[44]等.以后的研究中,可以綜合考慮流管理細(xì)粒度、鏈路帶寬、時(shí)延、安全通道負(fù)載等性能的影響,并結(jié)合多種機(jī)制提出新的緩解方案.在緩解OpenFlow交換機(jī)流表溢出問題的同時(shí)進(jìn)一步降低對SDN網(wǎng)絡(luò)整體性能的影響.
例如,從網(wǎng)絡(luò)拓?fù)涞慕嵌瘸霭l(fā),通常情況下,流表溢出發(fā)生在網(wǎng)絡(luò)中的核心節(jié)點(diǎn)交換機(jī)上,因此研究網(wǎng)絡(luò)中不同位置的交換機(jī)使用不同細(xì)粒度的流匹配規(guī)則,使網(wǎng)絡(luò)既能保證相應(yīng)流能夠獲得精確的統(tǒng)計(jì)信息,又能減輕核心節(jié)點(diǎn)交換機(jī)流表負(fù)載,同時(shí)不影響網(wǎng)絡(luò)通信性能.
3) 運(yùn)用新技術(shù)解決流表溢出問題
OpenFlow交換機(jī)容易發(fā)生流表溢出問題的根本原因在于其使用了TCAM從而導(dǎo)致流表空間嚴(yán)重不足.而若嚴(yán)格按照OpenFlow協(xié)議標(biāo)準(zhǔn),流表的實(shí)現(xiàn)只能使用TCAM.因此,提高單位功耗單位價(jià)格的TCAM容量是一個(gè)值得研究的方向.
結(jié)合P4等技術(shù)的發(fā)展[65],未來可以研究改進(jìn)OpenFlow相關(guān)協(xié)議,例如在使用P4交換機(jī)時(shí),增加交換機(jī)流表項(xiàng)主動刪除判定條件以便及時(shí)刪除無效流表項(xiàng);增加交換機(jī)相關(guān)統(tǒng)計(jì)字段主動上報(bào),以便分析相應(yīng)流的特性,從而在進(jìn)行流表優(yōu)化的同時(shí)能夠減少信息采集量.
此外,可以利用機(jī)器學(xué)習(xí)相關(guān)算法來應(yīng)對流表溢出問題.在正常網(wǎng)絡(luò)環(huán)境中,機(jī)器學(xué)習(xí)算法已經(jīng)有了很好的應(yīng)用,如通過強(qiáng)化學(xué)習(xí)算法判斷流表項(xiàng)合適的超時(shí)時(shí)間值[32]、使用隨機(jī)深林算法選出最不活躍的流表項(xiàng)進(jìn)行刪除[52]等.未來,可以研究智能算法用在流表空間溢出預(yù)測、流表空間溢出攻擊流識別等其他領(lǐng)域.
4) 針對流表溢出的攻擊行為進(jìn)行研究
在正常網(wǎng)絡(luò)中,流表空間可以通過優(yōu)化方案提升承載能力,但在面向流表溢出攻擊的情形下,優(yōu)化方案只能治標(biāo)不能治本.這部分的研究目前整體偏少.未來研究可以從2個(gè)方面出發(fā):
首先,可以在網(wǎng)絡(luò)配置信息探測層面進(jìn)行阻斷或提高探測難度.包括:①通過SDN網(wǎng)絡(luò)拓?fù)浠煜夹g(shù)[66],阻止攻擊者通過分布式攻擊流使某些核心節(jié)點(diǎn)交換機(jī)流表發(fā)生溢出;②使用動態(tài)隨機(jī)的流表項(xiàng)超時(shí)時(shí)間以及不同粒度的流處理規(guī)則,可以有效增加攻擊者發(fā)送針對性攻擊流難度,從而使攻擊更容易被檢測出來;③由于流表容量和使用情況探測是基于RTT時(shí)間變化進(jìn)行推測,因此可以對網(wǎng)絡(luò)流適當(dāng)增加時(shí)延抖動,以提升攻擊者的分析難度.
其次,需要研究針對流表溢出的攻擊流典型模式,尤其是低速率攻擊.包括:①不同流占用多個(gè)流表項(xiàng)空間的情況,可以從流首部信息、流路徑分布、新流到達(dá)速率等角度考慮;②相同流占用一個(gè)流表項(xiàng)空間的情況,可以從流的不同數(shù)據(jù)包大小分布、到達(dá)時(shí)間分布等角度考慮.這部分研究有利于在未來提出更有效的攻擊檢測方案,進(jìn)而可以有效抑制攻擊.
5) 在實(shí)際環(huán)境中部署進(jìn)行效果驗(yàn)證
目前大多數(shù)流表溢出緩解機(jī)制都只停留在學(xué)術(shù)研究上,或者在實(shí)驗(yàn)仿真環(huán)境中進(jìn)行了實(shí)現(xiàn),如使用非SDN網(wǎng)絡(luò)的流量數(shù)據(jù)集進(jìn)行流匹配預(yù)測、使用Mininet工具生成仿真SDN環(huán)境等.這些實(shí)驗(yàn)方法雖然可以在理論上對方案效果進(jìn)行驗(yàn)證,但在真實(shí)SDN網(wǎng)絡(luò)環(huán)境中會存在各種難以預(yù)知的情況,尤其是在網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)量、網(wǎng)絡(luò)流總量都十分巨大的場景下.如何保證所提出的流表溢出方案在真實(shí)SDN環(huán)境中能夠平穩(wěn)有效運(yùn)行,在未來是值得驗(yàn)證評估的.
在SDN網(wǎng)絡(luò)環(huán)境中,若OpenFlow交換機(jī)流表發(fā)生溢出,會導(dǎo)致網(wǎng)絡(luò)時(shí)延、吞吐量等性能下降.而商用OpenFlow交換機(jī)考慮到TCAM的功耗、價(jià)格等原因,其能夠支持的流表空間大小十分有限,導(dǎo)致OpenFlow交換機(jī)面臨嚴(yán)重的流表溢出問題.同時(shí),隨著近些年來SDN的廣泛部署,OpenFlow交換機(jī)流表溢出問題在TCAM架構(gòu)、流表均衡、OpenFlow機(jī)制以及流表溢出攻擊等方面得到廣泛的研究.本文對本領(lǐng)域目前的相關(guān)工作進(jìn)行了綜述分析,對SDN環(huán)境下OpenFlow硬件交換機(jī)基于TCAM的流表溢出問題進(jìn)行了深入探討,并對下一步的研究趨勢進(jìn)行了展望,以期為解決交換機(jī)的流表溢出問題提供進(jìn)一步的研究支撐.