張順康,陳 鳴,許 博
(1.南京航空航天大學 計算機科學與技術學院,江蘇 南京 211106;2.陸軍工程大學 指揮控制工程學院,江蘇 南京 210007)
在計算機網(wǎng)絡中,網(wǎng)絡服務是運行在應用層的一種程序,能夠提供數(shù)據(jù)存儲、處理、表示、通信或其他分布式計算能力,網(wǎng)絡服務可認為是某種網(wǎng)絡功能的集合,是網(wǎng)絡創(chuàng)新最為活躍的領域,是網(wǎng)絡價值的體現(xiàn)。在網(wǎng)絡功能虛擬化(network function virtualization,NFV)環(huán)境下,NFV通過軟硬件解耦和功能抽象,形成不依賴于物理設備的虛擬網(wǎng)絡功能(virtual network function,VNF),VNF運行在虛擬機或容器中,通過服務功能鏈(service function chaining,SFC)將若干個VNF互連,形成一條具有特定功能、性能的網(wǎng)絡路徑,用于提供端到端的NFV網(wǎng)絡服務[1-2]。SFC可以靈活部署網(wǎng)絡服務,有效降低網(wǎng)絡建設與運維的成本,加快新服務的應用和升級。SFC是當前學術界的研究熱點,2015年至今的HotMiddlebox研討會上,收錄了多篇SFC方面的論文,甚至計算機網(wǎng)絡的頂級會議——ACM SIGCOMM,也將SFC列為專題來研討。分析SFC的相關工作,對于SFC的研究主要分為以下3個方面:SFC標準化研究、SFC編排研究和SFC應用研究[3-6]。
在SFC應用研究領域,目前研究者比較關注的是如何降低時延、增強服務可靠性以及靈活調(diào)整服務功能。該文研究如何靈活調(diào)整NFV網(wǎng)絡服務的功能,提出了兩個問題并給出了解決方案。第一,目前SFC僅通過定義VNF序列的執(zhí)行順序來控制網(wǎng)絡服務功能,而事實上,VNF的運行參數(shù)及執(zhí)行時間段等都會對NFV網(wǎng)絡服務的功能產(chǎn)生影響;第二,如何讓系統(tǒng)理解用戶對NFV網(wǎng)絡服務的要求,并且能夠自動將其轉換為對VNF序列的控制操作。針對第一個問題,文中提出了增強服務功能鏈(enhanced service function chaining,ESFC)的概念,并給出了一種基于XML語言的描述方法,通過自定用戶義的標簽描述VNF序列的執(zhí)行順序、運行參數(shù)以及執(zhí)行時間段等,從而精細地定制ESFC,滿足用戶細粒度控制NFV網(wǎng)絡服務的需求;對于第二個問題,文中設計了一種靈活控制ESFC的系統(tǒng)模型,可以自動解析控制描述文件,并生成對VNF序列的控制任務,執(zhí)行相應的任務,就可以控制特定VNF在特定時間內(nèi),以特定的參數(shù)運行,從而自動調(diào)整ESFC,實現(xiàn)NFV網(wǎng)絡服務的精細化控制。
目前,SFC的標準化工作主要由IETF下的SFC工作組完成,該組織在草案[7]中詳細定義了SFC的框架結構、適用場景、數(shù)據(jù)包分組格式等。SFC編排問題已經(jīng)被證明是一個NP難問題[8],可將SFC編排問題轉化為整數(shù)線性規(guī)劃模型,然后設計啟發(fā)式算法求最優(yōu)解,如Beck等人[9]設計了一種基于彈性約束的啟發(fā)式算法,根據(jù)SFC策略需求可以快速得到最優(yōu)解,有效降低計算資源消耗;李丹等人[10]則提出了一種基于最優(yōu)加權圖匹配的算法,將SFC抽象為功能拓撲圖,利用特征向量分解算法獲得匹配結果,并利用爬山算法對結果進行優(yōu)化,可以顯著降低帶寬資源消耗,并且算法復雜度很低,具有較高的時效性。
當前對于SFC應用問題的研究主要集中在如何降低時延以及保證服務的可靠性,如Oljira等人[11]通過一些仿真試驗測試了虛擬化對網(wǎng)絡時延的影響,仿真結果表明,對于端到端的網(wǎng)絡時延,虛擬化環(huán)境下的數(shù)值比非虛擬化環(huán)境要大;陳卓等人[12]抽象了一個面向業(yè)務流服務時延優(yōu)化的數(shù)學模型,并基于遺傳算法提出了一種啟發(fā)式SFC重遷移配置策略,并通過對比試驗證明了模型和算法的有效性。而為了提高服務的可靠性,通常采用VNF備份機制,如Fan等人[13]基于VNF備份機制提出了一種新穎的在線算法,可以在資源消耗最小的同時,確保網(wǎng)絡服務的可靠性;蘭巨龍等人[14]通過將網(wǎng)絡拓撲抽象為有向圖進行建模分析,提出了一種基于路徑選擇的可靠性算法;韓青等人[15]提出了一種最優(yōu)備份拓撲生成算法,可以在保證服務可靠性的前提下,減少VNF備份數(shù)量,提高資源利用率。
綜上所述,雖然目前關于SFC標準化以及SFC編排的研究已經(jīng)相對成熟,在SFC應用方面也取得了一定的研究成果,提出的一些算法和模型也具備一定的可行性,但是,由于上述算法基本都是通過仿真系統(tǒng)進行驗證的,在真實網(wǎng)絡中的效果還有待商榷。另外當前也缺少利用SFC靈活、精細地控制NFV網(wǎng)絡服務的研究。文中針對這一問題進行了探討,提出了兩個問題并給出了解決方案,同時在NFV網(wǎng)絡中進行試驗,確保了結果的準確性及可靠性。
定義1:NFV環(huán)境下,所謂VNF是一段能夠在虛擬機或容器等環(huán)境中運行的代碼或軟件。
定義2:NFV環(huán)境下,虛擬中間盒(virtual middle-box,VMB)是指具有特定網(wǎng)絡功能的Linux容器(Linux container,LXC),在LXC環(huán)境中運行一個或多個VNF提供某種網(wǎng)絡功能,這種LXC即被稱為VMB。
定義3:NFV環(huán)境下,某VNFi的定義為:VNFi={F,P},其中F是性能與功能集合,P是運行參數(shù)集合。當分組序列通過VNFi時,所呈現(xiàn)的功能及性能集合稱為VNFi行為。當前的VNF通常認為其行為是不變的,但事實上,若P取不同的子集pt,則其可能呈現(xiàn)不同的功能和性能Ft={fs|pt}。

當前的SFC較之傳統(tǒng)方式提供網(wǎng)絡服務的優(yōu)勢,就在于它可以定制VNF的次序,增強網(wǎng)絡服務的靈活性。但是SFC一旦確定并部署完成,SFC的行為就是固定的,且xAi(x),x∈A取值為1。而事實上,VNFi的行為是可變的,因此xAi(x)可能取值為0,并且由定義3可知,每個VNF的行為都可能隨著運行參數(shù)的改變而不同。
定義5:NFV環(huán)境下,當某SFC的運行參數(shù)P可控調(diào)整,且xAi(x)可按時間t取值0或1,該SFC稱為增強服務功能鏈(ESFC)。
SFC與ESFC的本質(zhì)區(qū)別是,前者僅能定制VNF次序,且一旦定制完成,則其行為固定不變;而后者則可通過VNF順序、運行參數(shù)集合P和隨時間變化的xAi(x)等要素來定制SFC,從而靈活、精細地控制SFC,使得NFV網(wǎng)絡服務呈現(xiàn)豐富的功能多樣性。

引入上述概念使得靈活、精細地控制NFV網(wǎng)絡服務成為可能,但由于用戶對網(wǎng)絡服務的需求不斷變化,通過人工修改程序來滿足網(wǎng)絡服務行為調(diào)整的方法是不可取的,需要研發(fā)一種系統(tǒng):理解人類用戶需求,進而自動將其轉換為可執(zhí)行的網(wǎng)絡任務。
為此,基本思路是:定義一種形式化描述ESFC的方法,用戶利用該方法描述所需的網(wǎng)絡服務,并形成控制描述文件;系統(tǒng)讀入并解析控制描述文件,進而將其分解為對VNF序列的控制任務。
為了具有靈活、精細地控制網(wǎng)絡服務的能力,需要系統(tǒng)提供相關的功能支持。該系統(tǒng)的層次模型如圖1所示,它分為服務定制層、服務編排層以及任務執(zhí)行層。其中,服務定制層主要供用戶定制NFV網(wǎng)絡服務的控制描述文件,用于解決提出的第一個問題;服務編排層是控制描述文件的解釋執(zhí)行環(huán)境,負責編排控制描述文件并生成任務隊列,用來解決提出的第二個問題;任務執(zhí)行層的主要功能就是執(zhí)行具體的任務以控制VNF呈現(xiàn)特定行為,從而靈活調(diào)整ESFC的功能,實現(xiàn)靈活控制NFV網(wǎng)絡服務的目標。
對于該靈活控制ESFC的系統(tǒng)模型,有以下3條假設:

圖1 靈活控制ESFC的系統(tǒng)模型
(1)NFV網(wǎng)絡服務由ESFC提供。
(2)ESFC已經(jīng)部署在NFV網(wǎng)絡中。
(3)用戶明確NFV網(wǎng)絡服務需求。
該系統(tǒng)中,執(zhí)行一個控制任務指調(diào)整一個VNF的行為,任務隊列中的所有任務全部被執(zhí)行之后,即完成了相應的ESFC的調(diào)整,即實現(xiàn)了用戶的NFV網(wǎng)絡服務需求??刂迫蝿站哂小翱刂泼枋觥?、“解析調(diào)度”和“任務執(zhí)行”3種狀態(tài),系統(tǒng)調(diào)度控制任務執(zhí)行時的有限狀態(tài)機如圖2所示。其中,當新的網(wǎng)絡服務需求到達時,任務處于“控制描述”狀態(tài),采用形式化方法描述NFV網(wǎng)絡服務行為,定義構成網(wǎng)絡服務行為的控制任務可通過描述ESFC實現(xiàn),而事實上是描述構成ESFC的VNF序列的行為,任務保持在“控制描述”狀態(tài)直至描述完畢為止;而當完成控制描述文件時,提交控制描述文件,任務處于“解析調(diào)度”狀態(tài)??刂迫蝿仗幱凇敖馕稣{(diào)度”狀態(tài)時,當任務隊列中某個任務的調(diào)度時間到了,提交該任務,轉向“任務執(zhí)行”狀態(tài);如果當任務調(diào)度時間到了而沒有任務可調(diào)度,則返回。當任務處于“任務執(zhí)行”狀態(tài),若某個控制任務是一次性任務,則執(zhí)行完畢后刪除該任務;而當該任務需要重復執(zhí)行時,則需要將該任務重新插入隊列的適當位置。

圖2 系統(tǒng)執(zhí)行控制任務的有限狀態(tài)機
XML是一種可擴展標記語言,允許用戶自定義標簽,同時具有自描述性,可定義各種標識描述信息的所有元素[16]。因此為了解決文中提出的第一個問題,提出了一種基于XML語言描述ESFC的形式化方法,用戶可根據(jù)NFV網(wǎng)絡服務需求自主定義標簽,從而能夠靈活地基于多個約束條件定義一個ESFC,滿足用戶靈活、精細地描述NFV網(wǎng)絡服務的需求。
文中給出了從VNF次序、VNF執(zhí)行時間、VNF運行參數(shù)等因素共同定義的ESFC的控制描述文件control.xml。該文件共3層,第1層為根標簽,表示此文件用來描述NFV網(wǎng)絡服務的控制信息,其標簽定義為;第2層標簽為

表1 VNF控制信息的標簽定義
上述控制描述文件可解決靈活、細粒度地描述ESFC的問題,而為了解決文中提出的第二個問題,基于圖1所示的靈活控制ESFC的系統(tǒng)模型,設計實現(xiàn)了一個控制器,用來解析控制描述文件,并將其自動轉換為控制相應VNF行為的任務隊列,調(diào)度隊列執(zhí)行任務即可及時、準確地調(diào)整ESFC,從而實現(xiàn)NFV網(wǎng)絡服務的精細化控制。
控制器分為解析模塊和任務隊列模塊兩部分,解析模塊負責檢測控制描述文件的語法格式,并解析描述文件得到NFV網(wǎng)絡服務的控制描述信息;任務隊列模塊根據(jù)控制描述信息構建任務隊列,并調(diào)度任務隊列的任務在特定時間下發(fā)到任務執(zhí)行模塊執(zhí)行。其中,解析模塊的語法檢測功能由檢測函數(shù)XMLGrammarD()提供,基于DTD文件實現(xiàn),描述文件解析功能由解析函數(shù)analysisXML()提供,基于Java DOM4j函數(shù)庫實現(xiàn),逐行解析控制描述文件即可得到NFV網(wǎng)絡服務的控制描述信息;任務隊列基于雙向鏈表實現(xiàn),構造任務隊列時,有VNF運行時間和VNF優(yōu)先級兩個約束條件,因此得到的任務隊列中,排在前面的都是執(zhí)行時間靠前且優(yōu)先級較高的控制任務。控制器的工作流程如下:
(1)系統(tǒng)讀入控制描述文件,執(zhí)行函數(shù)XMLGrammarD()檢查控制描述文件的語法,若語法正確,執(zhí)行解析函數(shù);否則,給出錯誤提示,由人工修改控制描述文件后再重新讀入。
(2)執(zhí)行完解析函數(shù)之后得到NFV網(wǎng)絡服務的控制信息,根據(jù)控制描述信息生成任務隊列,執(zhí)行調(diào)度函數(shù)taskControl()處理任務隊列。
(3)若已到達隊首任務的執(zhí)行時間startTime,則讓隊首控制任務出隊,獲取控制任務信息,然后執(zhí)行隊列函數(shù)taskAdjustment(),此過程中根據(jù)任務類別,對該任務進行不同操作,然后開啟線程下發(fā)任務參數(shù)到任務執(zhí)行模塊,從而控制特定VMB中特定的VNF執(zhí)行特定的操作;若未到達隊首任務的執(zhí)行時間,則繼續(xù)等待。
調(diào)度任務隊列的詳細流程如圖3所示。

圖3 任務隊列調(diào)度流程
任務執(zhí)行模塊,用來執(zhí)行具體的控制任務,改變特定VNF的行為,其基于shell腳本實現(xiàn),主要接收任務隊列下發(fā)的控制任務信息。首先,根據(jù)任務信息確定操作的VMB以及VNF;然后,根據(jù)VNF的動作信息調(diào)整VNF行為。任務執(zhí)行腳本control.sh位于/usr/local/目錄下,共有3個函數(shù):start()、stop()和restart(),分別用來執(zhí)行啟動VNF、停止VNF運行以及重啟VNF等操作。
(1)執(zhí)行start()函數(shù)需要傳遞的參數(shù)有VMB名稱、VNF名稱以及VNF運行參數(shù)(可選)。
(2)執(zhí)行stop()函數(shù)需要傳遞的參數(shù)有VMB名稱和VNF名稱。
(3)執(zhí)行restart()函數(shù)需要傳遞的參數(shù)有VMB名稱、VNF名稱以及VNF運行參數(shù)。
其中VNF的運行參數(shù)存儲在文件config.txt中,以“參數(shù)名=參數(shù)值”的格式存儲,每個參數(shù)占一行,位于相應VMB中的/usr/local/
根據(jù)第2節(jié)提出的靈活控制ESFC的系統(tǒng)模型,本節(jié)基于LXC技術在一臺服務器上建立了原型系統(tǒng),通過對原型系統(tǒng)的試驗,驗證了基于XML語言描述NFV網(wǎng)絡服務需求的方法的可行性,以及ESFC機制的有效性。
原型系統(tǒng)運行在一臺型號為Intel(R) Xeon(R) X5647的服務器上,服務器的主頻為2.93 GHz,內(nèi)存為32 G,CPU為四核,安裝Ubuntu 16.04 server版系統(tǒng)。原型系統(tǒng)的NFV網(wǎng)絡拓撲結構如圖4所示,NFV網(wǎng)絡中的所有虛擬網(wǎng)絡節(jié)點都是通過在LXC中運行VNF得到的,所有鏈路的帶寬均為1 000 Mbps,在LXC中運行Quagga[17]軟件得到虛擬路由器R1~R5,所有路由器中都運行OSPF協(xié)議[18];在LXC運行OpenvSwitch軟件得到交換機S1;在LXC中運行IPERF軟件得到虛擬主機iperf1和iperf2,用來發(fā)送或接收TCP/UDP流量;在LXC中運行TFN2K[19]軟件得到可以發(fā)動DDoS攻擊中間盒A1,可發(fā)送DDoS攻擊流;在LXC中運行DDoS防御程序[20]得到DDoS防御中間盒D1,可用來檢測并防御DDoS攻擊。

圖4 測試原型系統(tǒng)的NFV網(wǎng)絡
為了驗證靈活控制ESFC的系統(tǒng)能夠根據(jù)控制描述文件準確地調(diào)整ESFC,從而按需靈活控制NFV網(wǎng)絡服務,在此NFV網(wǎng)絡中,部署了兩條ESFC:iperf2→iperf1和A1→D1→iperf1,通過以下試驗來驗證靈活控制ESFC的系統(tǒng)功能,試驗開始前,ESFC的功能節(jié)點中的VNF都未運行。
試驗過程如下:
(1)在T0=0 s時,啟動iperf2和iperf1,并讓iperf2向iperf1發(fā)送帶寬為100 Mbps的TCP流。
(2)在T1=10 s時,改變iperf2中IPERF VNF的運行參數(shù),讓其向iperf1發(fā)送帶寬為200 Mbps的UDP流。
(3)在T2=20 s時,啟動A1中的TFN2K VNF,讓其對iperf1發(fā)動DDoS攻擊,攻擊方式為TCP flood。
(4)在T3=30 s時,啟動D1中的防御程序。
(5)在T4=40 s時,結束試驗。
編輯表示此次試驗過程的控制描述文件,并將其提交給原型系統(tǒng)執(zhí)行,統(tǒng)計這段時間內(nèi),iperf1端口捕獲分組速率的變化情況,試驗重復了30次,取其平均值作為iperf1端口捕獲分組速率的數(shù)值。圖5展示了iperf1端口捕獲分組速率的變化曲線。

圖5 通過系統(tǒng)控制ESFC的行為
由圖5可見,在T0~T1(0~10 s)時間段內(nèi),iperf1端口捕獲分組的速率大約在8 500個報文/秒左右,報文類型為TCP;在T1~T2(10~20 s)時間段內(nèi),iperf1端口捕獲分組的速率約為17 000個報文/秒,報文類型為UDP;在T2~T3(20~30 s)時間段內(nèi),iperf1端口捕獲UDP分組的速率基本不變,仍為17 000個報文/秒,捕獲TCP分組的速率則迅速增加,約為60 000個報文/秒;在T3~T4(30~40 s)時間段內(nèi),iperf1端口捕獲UDP分組的速率保持不變,仍為17 000個報文/秒,而捕獲TCP分組的速率則迅速下降到0。并且在時刻T0、T1、T2、T3,捕獲分組的速率變化基本都在極短時間內(nèi)完成,此后基本保持穩(wěn)定。分析捕獲分組速率的變化曲線可知,在T0時刻,iperf1接收到帶寬為100 Mbps的TCP報文;在T1時刻iperf1接收到帶寬為200 Mbps的UDP 報文;在T2時刻iperf1遭受了TCP flood 攻擊;在T3時刻啟動了DDoS防御中間盒D1,因此,DDoS攻擊報文不能通過交換機S1轉發(fā)到iperf1。可以看到,試驗過程中,相關VNF的行為與預定義的控制描述文件完全一致。
試驗小結:基于XML語言編輯控制描述文件可以表示復雜、多變的NFV網(wǎng)絡服務需求,并且該系統(tǒng)讀入控制描述文件,可以按照預期調(diào)控相關VNF的行為,從而按需調(diào)整ESFC,進而實現(xiàn)靈活、精細地控制NFV網(wǎng)絡服務的目標。
為了測試通過系統(tǒng)控制VNF行為的及時性,將VNF行為預定發(fā)生時間與實際執(zhí)行時間的間隔稱為調(diào)度時間,以其作為評價指標。通過該系統(tǒng)反復測試了控制不同的VNF執(zhí)行不同操作時的調(diào)度時間,最后得到如表2所示的試驗結果。

表2 三種VNF的調(diào)度時間 ms
由表2可見,調(diào)度時間與VNF類型基本無關,但與VNF行為有關。啟動或停止VNF的調(diào)度時間約為40 ms,而重啟VNF的調(diào)度時間大致為100 ms。這說明,當同時刻僅有一個控制任務需要被執(zhí)行時,該系統(tǒng)可以在極短時間內(nèi)完成特定VNF行為的控制。
但在實際應用中,用戶可能需要同時改變大量VNF的行為,為此,讓該系統(tǒng)在同一時刻分別調(diào)度100、200、300、400、500和800個任務進行試驗,這些控制任務并發(fā)執(zhí)行,此時統(tǒng)計處理完成同一時刻執(zhí)行的所有任務所需要的調(diào)度時間。圖6顯示了并發(fā)執(zhí)行任務的測試結果。
由圖6可見,任務調(diào)度時間與同一時刻需要執(zhí)行的任務數(shù)量大致呈線性增長的關系。該系統(tǒng)在1秒內(nèi)可以同時處理大約200個動作為“restart”的VNF操作,800個動作為“start”或“stop”的VNF操作,因此該系統(tǒng)應當能滿足大部分實際網(wǎng)絡服務的應用需求。

圖6 并發(fā)執(zhí)行多個任務所需的調(diào)度時間
為了測試該系統(tǒng)工作時對宿主機的影響,在試驗過程中,統(tǒng)計了宿主服務器資源的使用情況。圖7展示了系統(tǒng)運行過程中宿主服務器的CPU使用率及內(nèi)存占用率的變化情況。

圖7 宿主服務器資源與任務數(shù)量的關系
由圖7可見,盡管宿主服務器的CPU利用率和內(nèi)存占用率隨任務數(shù)量的增加而上升,但即使在調(diào)度800個任務時,內(nèi)存占用率的增長也沒有超過1%,CPU利用率最大也沒有達到15%。上述試驗結果表明,系統(tǒng)總的調(diào)度時間隨著任務數(shù)量的增加而大致呈線性增長趨勢,該系統(tǒng)能夠同時處理200個動作為“restart”的VNF調(diào)度,或800個動作為“start”或“stop”的VNF調(diào)度,而不影響響應的及時性,并且這些調(diào)度操作對系統(tǒng)資源的影響較小。說明基于普通宿主服務器,原型系統(tǒng)能夠滿足完成處理大量并發(fā)任務調(diào)度的需求。
當前,通過SFC定制NFV網(wǎng)絡服務,僅能定義VNF次序,并且在SFC部署完成之后,不能再調(diào)整相應的VNF行為。文中研究了SFC定制NFV網(wǎng)絡服務時所面臨的兩個問題,并給出了解決方案。首先,提出了ESFC的概念,給出了一種基于XML語言的細粒度描述NFV網(wǎng)絡服務的表示方法;其次,設計并實現(xiàn)了靈活控制ESFC的系統(tǒng)。原型系統(tǒng)的試驗結果表明,該系統(tǒng)通過解析控制描述文件,能夠靈活、精細地控制NFV網(wǎng)絡服務。并且該系統(tǒng)基于NFV技術實現(xiàn),所得的試驗結果真實可靠。接下來,將進一步優(yōu)化控制器設計,使所提架構與機制能夠更好地滿足多種NFV網(wǎng)絡服務的需求,以及研究該系統(tǒng)如何應用到真實網(wǎng)絡中。