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