諸葛斌,王林超,宋楊,邵瑜,董黎剛,蔣獻
(浙江工商大學(xué)信息與電子工程學(xué)院(薩塞克斯人工智能學(xué)院),浙江 杭州 310018)
運營商基于當前快速增長的網(wǎng)絡(luò)需求和日益復(fù)雜的網(wǎng)絡(luò)環(huán)境提出流量預(yù)測需求,OMC(operation and maintenance center)系統(tǒng)應(yīng)支持基于歷史流量數(shù)據(jù),通過大數(shù)據(jù)分析算法進行流量預(yù)測,即能根據(jù)當前軟件定義網(wǎng)絡(luò)(software defined network,SDN)[1]已有的歷史流量數(shù)據(jù),結(jié)合監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)等人工智能算法,快速全面預(yù)測整體網(wǎng)絡(luò)流量趨勢以指導(dǎo)網(wǎng)絡(luò)提前進行調(diào)整或擴容,并且?guī)椭\營商提前進行大客戶流量營銷。
互聯(lián)網(wǎng)和通信設(shè)備的快速發(fā)展創(chuàng)造了更大、更復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),網(wǎng)絡(luò)的復(fù)雜性導(dǎo)致大量流量數(shù)據(jù)的溢出,并且給網(wǎng)絡(luò)管理和流量優(yōu)化帶來了挑戰(zhàn),包括路由決策、負載均衡、擁塞控制等服務(wù)。同時,研究人員看到兩個可行的解決方案幫助更有效地管理網(wǎng)絡(luò)——SDN和機器學(xué)習(xí)。SDN為所有的網(wǎng)絡(luò)設(shè)備提供了一個集中的訪問和控制機制,SDN控制器不僅可以監(jiān)視和測量各種網(wǎng)絡(luò)參數(shù)和度量,而且可以對資源分配和路由做出更明智和高效的決策,因為它可以全局地查看網(wǎng)絡(luò)中的所有內(nèi)容。然而,SDN控制器接收的數(shù)據(jù)量可能非常大。雖然SDN控制器本身可以擴展,例如在云上運行它,但是仍然需要有效的算法從接收的數(shù)據(jù)中提取所需的測量和信息。這是機器學(xué)習(xí)可以很好輔助SDN的地方。許多流量分類和流量預(yù)測問題可以通過各種機器學(xué)習(xí)算法實現(xiàn),在保持相對簡單設(shè)計的同時提高了系統(tǒng)性能。流量預(yù)測對SDN中路由決策、擁塞控制、負載均衡等服務(wù)的開展具有重大的促進作用,是一個基礎(chǔ)性的研究領(lǐng)域。
本文提出的SDN流量預(yù)測系統(tǒng)框架如圖1所示,所提的SDN體系架構(gòu)是一種基于模型化的架構(gòu),各層提供的服務(wù)和功能均以元模型為基礎(chǔ),通過資源組合滿足上層用戶的多元化需求。元業(yè)務(wù)中包含了上層應(yīng)用的特性和要求,它可以根據(jù)應(yīng)用的特性和要求抽象業(yè)務(wù)所需的最基本網(wǎng)絡(luò)服務(wù)功能??刂破矫嬷蓄A(yù)測模塊為整個系統(tǒng)的核心模塊,本文將深度學(xué)習(xí)模型應(yīng)用到流量預(yù)測中進行網(wǎng)絡(luò)流量的預(yù)測和處理機制的研究,通過與其他各層的模塊進行交互,可以實現(xiàn)對轉(zhuǎn)發(fā)層的優(yōu)化調(diào)度和靈活轉(zhuǎn)發(fā)。
圖1 基于SDN的流量預(yù)測框架
在轉(zhuǎn)發(fā)層,將物理設(shè)備虛擬化成一個資源池,再通過正交分解將轉(zhuǎn)發(fā)層虛擬化成各種邏輯功能塊,也就是元能力。與流量預(yù)測相關(guān)的模塊包括流量抓取模塊和轉(zhuǎn)發(fā)信息庫,流量抓取模塊負責(zé)抓取流量信息,并將信息發(fā)送至控制層中的流量統(tǒng)計模塊。轉(zhuǎn)發(fā)信息庫主要用于保存控制層中流與動作管理模塊下發(fā)的流表信息。
控制層中,流量統(tǒng)計模塊用于下發(fā)統(tǒng)計信息到流量抓取模塊,接收流量抓取模塊抓取的流量信息進行分析。然后發(fā)送至流量預(yù)測模塊,流量預(yù)測模塊通過深度學(xué)習(xí)算法對流量進行預(yù)測。然后將預(yù)測結(jié)果發(fā)送至結(jié)果分析模塊進行流量分析,分析結(jié)果分別發(fā)送給控制層的策略管理模塊和應(yīng)用層的應(yīng)用服務(wù)管理元業(yè)務(wù)模塊。策略管理模塊制定相應(yīng)的策略發(fā)送給流與動作管理模塊。流與動作管理模塊將具體的策略下發(fā)至轉(zhuǎn)發(fā)層的轉(zhuǎn)發(fā)信息庫。
其中,應(yīng)用層的元業(yè)務(wù)是一個單獨的微服務(wù),它具有平臺無關(guān)性和可以支持獨立部署的特點。流量預(yù)測相關(guān)的業(yè)務(wù)主要包括應(yīng)用服務(wù)管理模塊和應(yīng)用處理模塊,應(yīng)用服務(wù)管理元業(yè)務(wù)用于接收結(jié)果分析模塊得出流量分析結(jié)果。應(yīng)用處理元業(yè)務(wù)用于接收應(yīng)用服務(wù)管理元業(yè)務(wù)轉(zhuǎn)發(fā)的操作指令,對具體應(yīng)用做出對應(yīng)的操作。
SDN流量預(yù)測框架的流量預(yù)測機制是整個架構(gòu)的核心部分,流量預(yù)測機制為流量預(yù)測系統(tǒng)提供了高效的防護策略。
目前,流量矩陣的估算主要依賴合成數(shù)據(jù)的流量矩陣評估某個算法的具體效果。幾乎沒有主流的機構(gòu)可以提供流量矩陣的數(shù)據(jù),直到 Uhilg等[2]公布了他們在歐洲探索與學(xué)習(xí)網(wǎng) GEANT上獲得的真實可用的流量矩陣數(shù)據(jù)集。這份流量矩陣數(shù)據(jù)集囊括了 GEANT中全內(nèi)部網(wǎng)關(guān)協(xié)議(Interior gateway protocol,IGP)的流量信息、抽樣了 NetFlow數(shù)據(jù)和邊界網(wǎng)關(guān)協(xié)議(border gateway protocol,BGP)路由信息一同建立的流量矩陣。真實公開的流量矩陣可以加強對真實流量矩陣及其動態(tài)性的理解。因此,本文采用了CEANT2上部署的25個節(jié)點,收集節(jié)點之間鏈路的流量作為數(shù)據(jù)集,然后通過流量數(shù)據(jù)測量和估算方法計算流量矩陣,再通過流量矩陣進行流量預(yù)測。
首先對數(shù)據(jù)集進行處理,因為下載的數(shù)據(jù)集以15 min為間隔,為期兩周左右的977個XML文件,每個XML文件中包含了25×25條流量信息。但是本文需要的數(shù)據(jù)集格式以不同的流劃分文件,每個文件包含了兩周時間內(nèi)一條流以15 min為間隔的全部數(shù)據(jù),文件輸出格式為常用數(shù)據(jù)集格式CSV。創(chuàng)建一個數(shù)組array=[],設(shè)置文件的 path。讀取目錄下的文件名稱,存儲在變量files內(nèi)。對files循環(huán)遍歷該目錄下的所有文件,每次循環(huán)調(diào)用dom.minidom.parse打開XML文件,打開文件之后通過 rootdata.get Elements By Tag Name 設(shè)置讀取范圍在標簽<dst>…</dst>之間的元素。標簽內(nèi)的即需要的流量數(shù)據(jù)。通過itemlist.firstChild.data[5]確定選擇每個XML文件中的第幾條數(shù)據(jù),并將讀取出來的數(shù)據(jù)保存到數(shù)組中。使用to_csv函數(shù)將數(shù)組array=[]輸出CSV文件保存至相同目錄下。將數(shù)據(jù)拆分成訓(xùn)練集和測試集,將第n_0~n_12個數(shù)字作為特征。第n_13個數(shù)字為標簽。依次循環(huán)累加x將第n_x個數(shù)字至第n_(x+12)個數(shù)字作為特征。第n_(x+13)個數(shù)字作為標簽,最后,返回x_train訓(xùn)練集的特征,y_train測試集的標簽,x_test測試集的特征,y_test測試集的標簽。最后再將數(shù)據(jù)集進行標準化。
人們對一個問題的思考不會從頭開始,如一個人能夠理解一篇文章是因為這個人已經(jīng)有了一定的語言基礎(chǔ),人能夠不斷地累積知識,是因為人能夠記憶一些已經(jīng)學(xué)習(xí)過的知識。但是傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)做不到這一點,傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)對時序信息的預(yù)測和處理是非常困難的。如預(yù)測一句話的結(jié)尾,或者文章內(nèi)容的下一段。雖然理論上遞歸神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)可以處理這種“長依賴問題”,但在實際過程中RNN無法學(xué)習(xí)這種特征。Hochreiter[3]和 Bengio[4]深入研究過為什么RNN不能學(xué)習(xí)到該特征。于是長短期記憶(long short-term memory,LSTM)網(wǎng)絡(luò)——一種新的RNN模型應(yīng)運而生。由于RNN絕大分都由相同的神經(jīng)網(wǎng)絡(luò)復(fù)制鏈接而成,而神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)非常簡單,LSTM 也具有這種鏈式結(jié)構(gòu),但是它不同于簡單的 RNN神經(jīng)網(wǎng)絡(luò)單元里只有一個網(wǎng)絡(luò)層,LSTM的內(nèi)部有4個網(wǎng)絡(luò)層。LSTM的核心是網(wǎng)絡(luò)單元設(shè)計,LSTM 的網(wǎng)絡(luò)單元設(shè)計類似一個細胞,一個網(wǎng)絡(luò)單元內(nèi)的狀態(tài)傳輸結(jié)構(gòu)簡單來說是由一個點乘器和一個加法器構(gòu)成的,數(shù)據(jù)的傳輸過程像一個傳送帶,貫穿了整個細胞而且鮮有分支。一個LSTM里有3個門,而LSTM的細胞狀態(tài)是由這 3個門控制的。門是由一個sigmoid函數(shù)和一個點乘操作組合而成的。門的作用是為了對細胞狀態(tài)進行刪除和更改,sigmoid函數(shù)輸出的值在0~1,這表示有多少數(shù)據(jù)可以通過sigmoid層,0表示全丟棄,1表示全接受。LSTM細胞狀態(tài)如圖2所示。
圖2 LSTM狀態(tài)傳輸
本文基于 LSTM 模型[5]修改的深度學(xué)習(xí)模型BL-LSTM(based linear regression-LSTM),BL-LSTM算法模型如圖3所示。采用BL-LSTM進行SDN流量預(yù)測模型的搭建。具體來說由兩個部分組成,一個是LSTM網(wǎng)絡(luò),另一個是線性回歸模型。LSTM網(wǎng)絡(luò)由m個堆疊的LSTM層組成,用于對網(wǎng)絡(luò)流量的時空特征進行建模。輸出層采用線性回歸模型計算未來的流量大小。
圖3 BL-LSTM算法模型
開始訓(xùn)練模型時,不會直接把整個數(shù)據(jù)集導(dǎo)入模型中,而是使用batch的方式。深度學(xué)習(xí)的優(yōu)化算法總的來說是梯度下降法,每次的權(quán)重和偏置更新可以分為以下兩種極端。第一種是遍歷完所有數(shù)據(jù)后再計算損失函數(shù),然后根據(jù)新的參數(shù)計算新的梯度。這種方法因為數(shù)據(jù)集的增長和內(nèi)存的限制,一次性導(dǎo)入整個數(shù)據(jù)集,變得非常困難。另一種是每次只訓(xùn)練一個樣本,每載入一個數(shù)據(jù)就計算一次損失函數(shù),然后求出梯度更新參數(shù),這種方法雖然速度較快,但是收斂性能較差,可能在最優(yōu)點附近來回移動,無法到達最優(yōu)點?;蛘邘状螀?shù)的更新互相抵消最終導(dǎo)致目標函數(shù)的強烈震蕩,為了克服上述的兩種極端現(xiàn)象,一般采取折中的方法。
訓(xùn)練模型時將數(shù)據(jù)分批次載入,這樣一批數(shù)據(jù)共同決定了梯度方向,方向不容易跑偏,降低了隨機性。另一方面因為一批內(nèi)的樣本數(shù)與整個數(shù)據(jù)集相比小很多,計算量也大大減小。定義迭代變量 iterations,一個 iterations等于使用batch_size個樣本訓(xùn)練一次。定義輪詢變量epochs,epochs被定義為向前和向后傳播所有批次的單次訓(xùn)練迭代,這意味著一個 epoch是整個輸入數(shù)據(jù)的單次向前和向后傳遞。簡單來說,epoch指的是訓(xùn)練過程中數(shù)據(jù)將要被輪詢多少次,即需要完整遍歷數(shù)據(jù)集多少次。如果 epoch數(shù)量太少,神經(jīng)網(wǎng)絡(luò)就有可能發(fā)生欠擬合(即對定型數(shù)據(jù)的學(xué)習(xí)不夠充分),如果 epoch數(shù)量太多,則有可能發(fā)生過擬合(即神經(jīng)網(wǎng)絡(luò)對定型數(shù)據(jù)中的“噪聲”而非信號進行擬合)。BL-LSTM模型搭建的流程如下。
步驟 1創(chuàng)建一個 ArgumentParser對象,添加參數(shù)并解析,設(shè)置一組特征數(shù)量lag為12。
步驟 2經(jīng)過多次調(diào)試最終設(shè)置 batch值為256,設(shè)置epochs值為600。調(diào)用數(shù)據(jù)處理函數(shù)獲取x_train訓(xùn)練集的特征和y_train訓(xùn)練集的標簽。
步驟3對x_train進行reshape,將數(shù)據(jù)轉(zhuǎn)變?yōu)橐涣械娜S數(shù)組。設(shè)置輸入層、隱藏層和輸出層的參數(shù)。
步驟4初始化一個順序模型,加入一個LSTM層,設(shè)置return_sequences=True,每個時間步都輸出ht?1。
步驟5將LSTM的輸出結(jié)果,輸出到多元線性回歸模型進行訓(xùn)練。
步驟6獲得完整的模型,輸入測試集x_test,取得預(yù)測結(jié)果。
步驟7將歸一化后的結(jié)果轉(zhuǎn)化為原始數(shù)據(jù)。
傳統(tǒng)路徑切換主要為如何在限制條件完成最快的更新,如何解決網(wǎng)絡(luò)變化時流量波動等問題。
針對多條路徑更新時,因為鏈路的帶寬限制使路徑切換后出現(xiàn)網(wǎng)絡(luò)擁塞的問題[9],本文使用BP-ACO算法[10]進行路由規(guī)劃,GEANT獲得的流量矩陣作為數(shù)據(jù)集通過BL-LSTM算法進行訓(xùn)練,預(yù)測后短時間內(nèi)的流量趨勢。BP-ACO通過對流量預(yù)測的分析進行路由規(guī)劃避免流量擁塞,對這個問題本文通過上述基于LSTM模型的流量預(yù)測的方法進行處理。
針對域間路由更新導(dǎo)致流表部署時間不同的問題,以及網(wǎng)絡(luò)變化時會產(chǎn)生控制器下發(fā)的流表和交換機內(nèi)實際接收到流表的不一致問題。
本文提出了一種新的方法解決SDN的一致性多交換機更新問題,方法是通過協(xié)調(diào)不同控制域內(nèi)的控制器,中央控制器向各控制域下發(fā)流表,實現(xiàn)控制域的有序更新。但是域內(nèi)的控制器向不同高質(zhì)量的,多層虛擬交換機(open vSwitch,OVS)下發(fā)流表且OVS部署流表會產(chǎn)生不同的時延,導(dǎo)致轉(zhuǎn)發(fā)數(shù)據(jù)流時沒有流表而開始丟包。因為新的域內(nèi)路由有空閑OVS,傳輸時延較低,傳輸過程中因為有一些數(shù)據(jù)包在鏈路傳輸,所以數(shù)據(jù)包傳輸失序。雖然失序現(xiàn)象可以通過傳輸控制協(xié)議(transmission control protocol,TCP)的重傳機制緩解,但是隨著數(shù)據(jù)發(fā)送速率的不斷上升,傳輸?shù)臄?shù)據(jù)包開始變大,隨機失序情況會越來越明顯。
為了解決域內(nèi)的一致性問題,本文提出了一種新的方法,該方法通過在拆除現(xiàn)有路由之前檢查新路由的運行狀態(tài)。具體的識別過程是通過多播的方式向每一個既在新路徑又在舊路徑上的OVSCNi發(fā)送兩條相同的轉(zhuǎn)發(fā)流表。CNi收到相同的數(shù)據(jù)包之后確認當前網(wǎng)絡(luò)的新舊兩條鏈路都能正常轉(zhuǎn)發(fā)數(shù)據(jù)包,再斷開舊的鏈路。然后,新的路徑開始正式使用,最后將新的路徑剩余帶寬、吞吐量提交給控制器,控制器重新進行路由規(guī)劃。
一個OVS連接SDN控制器時,觸發(fā)Event OFPS witch Features事件,在事件內(nèi)實例化一個連接 OVS到控制器的網(wǎng)橋,實例化并解析OpenFlow協(xié)議,創(chuàng)建一個匹配流表頭部的Match域,控制器向OVS發(fā)送報文,OVS接收報文后通過默認流表向控制器發(fā)送確認字符(acknowledge character,ACK),控制器通過收到的反饋報文,確認OVS和控制器建立連接。
SDN中央控制向所有只在新鏈路(Lnew)的控制器發(fā)送流表,OVS接收SDN控制器發(fā)送的流表后開始安裝收到的流表,OVS安裝完流表后發(fā)送ACK返回給控制器,中央控制器接收到所有 OVS的 ACK后開始下一步。
SDN中央控制向所有既在新鏈路(Lnew)又在舊鏈路(Lold)的控制器()發(fā)送流表,OVS接收SDN控制器發(fā)送的流表后開始安裝接收的流表,OVS安裝完流表后發(fā)送ACK確認報文返回給控制器,中央控制器接收所有OVS的ACK后開始下一步。
SDN控制器對所有域內(nèi)鏈路,從遠到近發(fā)送多播信號,當R∩收到兩個相同的數(shù)據(jù)包時,確認兩條鏈路都可以正常工作,則斷開Lold鏈路中屬于本次轉(zhuǎn)發(fā)鏈路的部分。路徑切換流程如圖4所示。
圖4 路徑切換流程
在SDN中,控制器可以刪除、添加或替換路由表中的源目流表。采取以多播的方式更新路徑,旨在最小化節(jié)點資源消耗和鏈路資源消耗總成本。本文通過使控制器向OVS下發(fā)相同的源目流表。然后數(shù)據(jù)包通過先進先出隊列(first input first output,F(xiàn)IFO)的方式沿著某一條路徑傳輸。如果兩個數(shù)據(jù)包P1、P2沿著同一條路徑傳輸,然后都經(jīng)過了OVS交換機S1、S2。如果P1在P2之前遍歷S1,那么P1必須在P2之前遍歷S2。當Si≠Sd收到了流表之后,部署安裝流表,經(jīng)過該OVS的數(shù)據(jù)包按照新的路由表開始轉(zhuǎn)發(fā)數(shù)據(jù)包。
SDN控制器可以指示 OVSSi向控制器轉(zhuǎn)發(fā)一段路徑中的所有數(shù)據(jù)包,通過對這段路徑中的Si打上標簽,在Si這些的路由表中添加一條轉(zhuǎn)發(fā)給控制器的流表。通過控制器識別數(shù)據(jù)包是否相同,而不是通過交換機Si識別。值得注意的是,只有整條轉(zhuǎn)發(fā)鏈路的最后一個OVS需要將數(shù)據(jù)包轉(zhuǎn)發(fā)給控制器,而不是轉(zhuǎn)發(fā)鏈路中的每一個OVS。因此,OVS的標準操作和OpenFlow命令可以支持多播轉(zhuǎn)發(fā)所需要的操作。多播傳輸中復(fù)制的數(shù)據(jù)包通過每個數(shù)據(jù)包的源地址和標識字段辨別。通過這個方法可以分辨當前數(shù)據(jù)包是多播傳輸中復(fù)制的數(shù)據(jù)包還是通過TCP重傳機制重新發(fā)送到Si的數(shù)據(jù)包。
本文介紹算法的一個例子,SSRU切換開始之前的網(wǎng)絡(luò)拓撲如圖5所示,其中,一次只建立(s,d)路徑的一個部分,并替代當前的等效部分。Dx表示一個域,Cx,x∈ { 0,1,2,… ,n}表示舊鏈路上的OVS,Ny,y∈ { 0,1,2,3,… ,n}表示新鏈路上的OVS,CNi:Cx=Ny,x∈ { 0,1,2,… ,n}表示既在新鏈路又在舊鏈路上的OVS。
圖5 SSRU切換開始之前的網(wǎng)絡(luò)拓撲
控制器查詢新舊兩條域間路徑上 OVS的dpid,如果找到兩組相同的dpid就可以確認該域處于新舊路徑的交點。首先,向只在新域間路徑的控制器下發(fā)流表,然后再部署域內(nèi)OVS的流表。
切換從CNi下標最大的替換路徑開始,第一段需要切換的路徑N9~N12??刂破飨騈9~N12新鏈路上的OVS下發(fā)流表。
然后,起點S交換機向終點D交換機發(fā)送兩條相同的數(shù)據(jù)包,一條沿著Cx,x∈ { 0,1,2,… ,n}傳輸,一條沿著Ny,y∈ { 0,1,2,… ,n}傳輸。當相交節(jié)點N12收到兩個相同的數(shù)據(jù)包時確認兩條路徑都可以正常轉(zhuǎn)發(fā),刪除舊鏈路上的流表,停止舊鏈路的轉(zhuǎn)發(fā)。
通過算法計算第二段切換的路徑為N0~N9,因此,向N0~N9新鏈路上的節(jié)點下發(fā)流表。
起點S交換機向終點D交換機通過多播發(fā)送兩條相同的數(shù)據(jù)包,當相交節(jié)點N9收到兩個相同的數(shù)據(jù)包,確認兩條轉(zhuǎn)發(fā)鏈路建立完成。刪除舊鏈路的轉(zhuǎn)發(fā)流表,流量按照新鏈路開始轉(zhuǎn)發(fā),完成切換,SSRU切換結(jié)束之后的網(wǎng)絡(luò)拓撲如圖6所示。
圖6 SSRU切換結(jié)束之后的網(wǎng)絡(luò)拓撲
中央控制器向源目管理域內(nèi)的控制器下發(fā)流表,然后域內(nèi)通過上文域內(nèi)的多播算法對域內(nèi)路徑進行切換,完成新域間路徑的切換之后,刪除舊域間路徑上的轉(zhuǎn)發(fā)流表。
本實驗使用如下硬件設(shè)備:華為 FusionCloud服務(wù)器 5臺、華為 CE6800交換機兩臺、華為CE12800交換機兩臺、華為S1700交換機一臺、AR交換機一臺。本實驗使用如下軟件:4.18版本的Ryu控制器、2.3.0版本的 mininet、16.04版本的Ubuntu。本節(jié)主要介紹了BL-LSTM算法的流量預(yù)測和在預(yù)測結(jié)果下基于 BP-ACO[10]的路由規(guī)劃和切換實驗。
本文以GEANT2部署的25個節(jié)點之間的流量信息作為數(shù)據(jù)集,然后通過流量數(shù)據(jù)測量和估算方法計算流量矩陣,再通過流量矩陣進行流量預(yù)測。通過BL-LSTM實現(xiàn)流量的預(yù)測,并將該算法和門控循環(huán)單元(gated recurrent unit,GRU)[5]以及棧式自編碼(stacked auto-encoder,SAE)深度學(xué)習(xí)模型[8]進行比較。選擇第12個端口到第23個端口的鏈路作為被測對象,數(shù)據(jù)集每隔5 min進行一次測量,持續(xù)兩周。該鏈路共記錄977條流量數(shù)據(jù)。預(yù)處理之后的數(shù)據(jù)集見表1。
表1 預(yù)處理之后的數(shù)據(jù)集
首先讀取977個XML流量數(shù)據(jù)文件,其次將每份數(shù)據(jù)集中的12~23端口之間的流量依次插入到新的newdata.CSV文件。
然后通過預(yù)處理腳本對獲取的數(shù)據(jù)進行分組、歸一化、矩陣轉(zhuǎn)換等數(shù)據(jù)預(yù)處理,腳本處理算法見算法1。
算法1預(yù)處理腳本
開始
train, test = [], []
foriin range(lags, len(flow1)):
train.append(flow1[i- lags:i+ 1])
foriin range(lags, len(flow2)):
test.append(flow2[i- lags:i+ 1])
train = np.array(train)
test = np.array(test)
np.random.shuffle(train)
X_train = train[:, :-1]
y_train = train[:, -1]
X_test = test[:, :-1]
y_test = test[:, -1]
returnX_train,y_train,X_test,y_test, scaler
結(jié)束
本節(jié)實驗將本文提出的 BL-LSTM 算法與GRU算法、SAE算法進行對比,首先將BL-LSTM算法的預(yù)測結(jié)果與真實數(shù)據(jù)進行對比,BL-LSTM預(yù)測結(jié)果曲線如圖7所示,BL-LSTM 曲線很好地擬合了真實值的曲線,但低點較真實值偏高。將歸一化的測試集和預(yù)測結(jié)果進行反歸一化,縱坐標變?yōu)榱髁康恼鎸嵈笮 ?/p>
其次,將3種算法的預(yù)測結(jié)果和真實值進行對比,預(yù)測曲線對比如圖8所示。BL-LSTM算法對真實值曲線的擬合效果最好,SAE的效果次之,GRU的效果最差。
使用歸一化過后的測試集和預(yù)測結(jié)果計算相應(yīng)的預(yù)測評估結(jié)果,量化算法之間的區(qū)別。其中,以12~23端口之間的流量數(shù)據(jù)集為例,對測試集的評價結(jié)果見表2。
表2 評價結(jié)果
由表2可知 BL-LSTM 模型的 MAPE為22.361 037%,誤差最?。籗AE次之,GRU的MAPE為43.088 212%,誤差最大。從BL-LSTM、SAE、GRU模型的預(yù)測結(jié)果看,BL-LSTM模型的預(yù)測準確率要高于SAE和GRU。雖然LSTM和GRU都是循環(huán)神經(jīng)網(wǎng)絡(luò),但是在處理時間序列問題上,具有長期記憶特性的循環(huán)神經(jīng)網(wǎng)絡(luò)LSTM優(yōu)勢更大。
25組數(shù)據(jù)中不同算法的MAPE值如圖9所示,采用25組不同端口之間的數(shù)據(jù)作為數(shù)據(jù)集,各種算法預(yù)測結(jié)果的 MAPE值區(qū)別明顯。BL-LSTM預(yù)測精度最高,MAPE值在22.5%左右,SAE和GRU略有波動,SAE的MAPE平均值為35.2%,GRU的平均值為45.8%。
圖9 25組數(shù)據(jù)中不同算法的MAPE值
運行整理好的mininet拓撲,拓撲主要由4個控制域構(gòu)成,每個控制器控制一個控制域,SSRU切換之前的轉(zhuǎn)發(fā)路徑如圖10所示。C2的控制域只在舊的鏈路上,C1的控制域只在新的鏈路上。而C0、C3的控制域既在新的鏈路又在舊的鏈路,域間的路由切換需要中央控制器對各控制域有序下發(fā)流表實現(xiàn)。
圖10 SSRU切換之前的轉(zhuǎn)發(fā)路徑
每個域內(nèi)有6臺OVS,它們構(gòu)成兩條新舊鏈路,以C0的控制域為例,S22~S24只在舊鏈路上的交換機、S18~SS20是只在新鏈路上的交換機、S17和S21既在新鏈路又在舊鏈路上的交換機。域內(nèi)的路徑切換需要通過多播數(shù)據(jù)包確認路由更新狀態(tài),進而實現(xiàn)路徑切換,SSRU切換之后的轉(zhuǎn)發(fā)路徑如圖11所示。
圖11 SSRU切換之后的轉(zhuǎn)發(fā)路徑
運行寫好的RYU控制器和mininet拓撲,控制器連接OVS會觸發(fā)裝飾器Event OFPS witch Features,每次OVS向控制器泛洪報文的時候?qū)⒍x的標志(Flags)加 1??刂破鬟B接 OVS如圖12所示。
圖12 控制器連接OVS
經(jīng)過測試發(fā)現(xiàn)55次左右的裝飾器觸發(fā)能夠建立完整的連接。本文設(shè)置Flags到達55之后控制器開始執(zhí)行路徑切換。
傳統(tǒng)的 Ryu二層交換機作為控制器,發(fā)送37個數(shù)據(jù)包進行測試,75%的數(shù)據(jù)包在切換的過程中丟失。二層交換交換機丟包現(xiàn)象如圖13所示。
圖13 二層交換交換機丟包現(xiàn)象
在應(yīng)用無損路徑切換算法時,發(fā)送多組數(shù)據(jù)包進行測試,沒有數(shù)據(jù)包在切換的過程中丟失,該算法的丟包率和失序率都明顯優(yōu)于傳統(tǒng)路徑切換算法。SSRU切換丟包現(xiàn)象如圖14所示。
圖14 SSRU切換丟包現(xiàn)象
發(fā)送速率從100 Mbit/s到500 Mbit/s的丟包數(shù)量實驗結(jié)果見表3,當發(fā)送速率從 100 Mbit/s到500 Mbit/s時,丟包率始終維持在0,但是其中伴隨了一些包失序問題,這是因為在路徑切換過程中,新路徑的網(wǎng)絡(luò)設(shè)備會出現(xiàn)空閑狀態(tài),該路徑上的傳輸速率更快,于是切換過程中后續(xù)的數(shù)據(jù)包經(jīng)過新鏈路可能會先到達目的地址,導(dǎo)致在一個往返時延(round-trip time,RTT)內(nèi)可能會出現(xiàn)數(shù)據(jù)包失序的情況。幸運的是TCP具有重傳機制可以有效地緩解這個問題,用戶數(shù)據(jù)報協(xié)議(user datagram protocol,UDP)也有相關(guān)的機制解決少量的數(shù)據(jù)包失序。
表3 發(fā)送速率從100 Mbit/s到500 Mbit/s的丟包數(shù)量實驗結(jié)果
從H1到H2跨越3個控制域發(fā)送數(shù)據(jù)包,發(fā)送速率從800 Mbit/s到1 200 Mbit/s的丟包數(shù)量實驗結(jié)果見表4。
表4 發(fā)送速率從800 Mbit/s到1 200 Mbit/s的丟包數(shù)量實驗結(jié)果
發(fā)送速率逐步提高的實驗結(jié)果見表5,可以看出來 SSRU算法在進行路徑切換時引起的平均時延非常少,且這種時延幾乎不影響文件的實際傳輸,在文件的傳輸過程中既保證了業(yè)務(wù)以及會話的穩(wěn)定運行,又防止流量只走最短路徑導(dǎo)致網(wǎng)絡(luò)局部擁塞,對網(wǎng)絡(luò)整體進行了負載均衡。
表5 發(fā)送速率逐步提高的實驗結(jié)果
對表5出現(xiàn)的縮寫的簡單介紹見表6。
表6 縮寫介紹
傳輸速率對平均時延的影響如圖15所示,可以看出隨著傳輸速率ATR的增長,路徑切換產(chǎn)生的平均時延呈線性增長,這表示SSRU算法在高速傳輸中依然可以保持高可用性。驗證了即使在高的傳輸速率SSRU也可以實現(xiàn)無損的路徑切換。
圖15 傳輸速率對平均時延的影響
隨著近年網(wǎng)絡(luò)技術(shù)的不斷發(fā)展和演進,用戶對網(wǎng)絡(luò)資源的需求體量越來越大,內(nèi)容越來越復(fù)雜,傳統(tǒng)的網(wǎng)絡(luò)架構(gòu)很難滿足目前靈活的網(wǎng)絡(luò)需求。SDN的革命性技術(shù)思想賦予了網(wǎng)絡(luò)可編程性和可演進性,實現(xiàn)網(wǎng)絡(luò)資源更靈活的管理。為了提高網(wǎng)絡(luò)資源利用率,提出了基于LSTM模型的流量預(yù)測,為路由規(guī)劃提供理論依據(jù)。通過提前預(yù)測網(wǎng)絡(luò)流量,在流量激增之前進行防御措施保證網(wǎng)絡(luò)的安全性和穩(wěn)定性,實現(xiàn)基于流量預(yù)測的路由規(guī)劃、無損路徑切換等功能。