何榮希 林子薇 雷田穎 劉彤彤
摘 要 針對(duì)難以用硬件設(shè)備大規(guī)模部署軟件定義網(wǎng)絡(luò)實(shí)驗(yàn)平臺(tái)的現(xiàn)狀,基于Mininet軟件搭建軟件定義數(shù)據(jù)中心網(wǎng)絡(luò)仿真平臺(tái),并進(jìn)行實(shí)驗(yàn)測(cè)試,有助于學(xué)生了解軟件定義網(wǎng)絡(luò)的應(yīng)用場(chǎng)景、掌握Mininet仿真平臺(tái)、理解軟件定義網(wǎng)絡(luò)架構(gòu)和OpenFlow協(xié)議的報(bào)文結(jié)構(gòu)。
關(guān)鍵詞 軟件定義網(wǎng)絡(luò) 數(shù)據(jù)中心網(wǎng)絡(luò) 實(shí)驗(yàn)教學(xué) Mininet
中圖分類號(hào):G424 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.16400/j.cnki.kjdks.2018.08.047
Abstract For the current situation of large-scale deployment of software-defined network experimental platforms with hardware devices, Mininet software is used to build a software-defined data center network simulation platform, and experimental tests are conducted to help students understand the application scenarios of software-defined networks, master the Mininet simulation platform, Understand the message structure of the software-defined network architecture and the OpenFlow protocol.
Keywords software-defined network; data center network; experimental teaching; Mininet
0 引言
軟件定義網(wǎng)絡(luò)(Software Defined Network,SDN)可以解耦合控制層與數(shù)據(jù)轉(zhuǎn)發(fā)層,很好地實(shí)現(xiàn)網(wǎng)絡(luò)直接可編程,支持網(wǎng)絡(luò)集中控制,使網(wǎng)絡(luò)的開(kāi)放性及靈活性得到空前提升,為網(wǎng)絡(luò)的創(chuàng)新發(fā)展提供了良好的平臺(tái)。SDN架構(gòu)分為應(yīng)用層、控制層和數(shù)據(jù)轉(zhuǎn)發(fā)層。[1]其中,應(yīng)用層用于業(yè)務(wù)應(yīng)用開(kāi)發(fā),控制層負(fù)責(zé)下發(fā)及管理數(shù)據(jù)層的轉(zhuǎn)發(fā)表,而數(shù)據(jù)轉(zhuǎn)發(fā)層則依照控制層下發(fā)的流表進(jìn)行高速數(shù)據(jù)轉(zhuǎn)發(fā)。OpenFlow[2]作為應(yīng)用最廣泛的南向接口協(xié)議,很好地規(guī)范了控制層與數(shù)據(jù)層之間的信息交互形式。北向接口對(duì)上層業(yè)務(wù)應(yīng)用開(kāi)放,可實(shí)現(xiàn)底層網(wǎng)絡(luò)設(shè)施對(duì)上層應(yīng)用的透明,使得上層業(yè)務(wù)應(yīng)用能夠靈活地對(duì)底層網(wǎng)絡(luò)設(shè)備及資源進(jìn)行調(diào)用。[3]
近年來(lái),SDN受到學(xué)術(shù)界及商業(yè)界的廣泛關(guān)注,被認(rèn)為是當(dāng)前網(wǎng)絡(luò)體系架構(gòu)的主要演進(jìn)方向之一。[4]自2008年Nick McKeown教授等人提出OpenFlow協(xié)議原型開(kāi)始,普林斯頓大學(xué)、哥倫比亞大學(xué)以及蘇黎世聯(lián)邦理工大學(xué)等國(guó)外高校逐漸開(kāi)設(shè)SDN課程,其他很多大學(xué)也將SDN教學(xué)加入高級(jí)網(wǎng)絡(luò)課程中。近年來(lái),我國(guó)對(duì)未來(lái)網(wǎng)絡(luò)領(lǐng)域的發(fā)展也給予高度重視,各大高校建立不少SDN相關(guān)研究室,這為SDN技術(shù)的發(fā)展注入活力,同時(shí)也為本科生和研究生計(jì)算機(jī)網(wǎng)絡(luò)課程的教學(xué)實(shí)踐開(kāi)辟了新方向。[5]目前國(guó)內(nèi)很多高校雖緊追網(wǎng)絡(luò)發(fā)展潮流,也有大量學(xué)者從事SDN的相關(guān)研究,但還少有開(kāi)設(shè)SDN課程,相關(guān)實(shí)驗(yàn)教學(xué)手段更是匱乏。為了彌補(bǔ)這一缺陷,有必要在本科生和研究生課程中增加SDN相關(guān)實(shí)踐環(huán)節(jié)。數(shù)據(jù)中心網(wǎng)絡(luò)(Data Center Network,DCN)是SDN應(yīng)用最廣泛的場(chǎng)景之一,通過(guò)模擬測(cè)試軟件定義數(shù)據(jù)中心網(wǎng)絡(luò)(Software-defined Data Center Network,SDCN),有助于學(xué)生直觀理解SDN架構(gòu)的網(wǎng)絡(luò)運(yùn)行模式。為此,本文設(shè)計(jì)SDCN的相關(guān)仿真實(shí)驗(yàn),利用Mininet仿真軟件搭建、測(cè)試SDCN,并通過(guò)Wireshark軟件抓包查看及理解OpenFlow協(xié)議的報(bào)文結(jié)構(gòu),有助于學(xué)生了解SDN應(yīng)用場(chǎng)景、熟悉Minient仿真平臺(tái)、理解SDN架構(gòu)和OpenFlow協(xié)議。
1 實(shí)驗(yàn)平臺(tái)搭建
由于受實(shí)驗(yàn)經(jīng)費(fèi)和場(chǎng)地等因素限制,難以采用硬件交換設(shè)備大規(guī)模部署SDN實(shí)驗(yàn)平臺(tái)。為了解決這一問(wèn)題,可利用Mininet仿真軟件進(jìn)行SDN仿真和測(cè)試。Mininet是Stanford大學(xué)Nick McKeown研究小組基于Linux Container架構(gòu)開(kāi)發(fā)的虛擬化平臺(tái),利用它很容易在一臺(tái)PC上搭建SDN網(wǎng)絡(luò),對(duì)基于OpenFlow、Open vSwitch等協(xié)議進(jìn)行開(kāi)發(fā)驗(yàn)證,[6]而且Mininet安裝簡(jiǎn)單,能夠?qū)?shí)驗(yàn)成本大大降低,并提高實(shí)驗(yàn)靈活性。
1.1 Mininet安裝
Mininet的安裝方法主要有如下三種:
(1)在虛擬機(jī)中安裝Mininet鏡像:首先需要安裝VMware Workstation、Virtualbox、VMware Fusion等虛擬機(jī)軟件,其次下載Mininet VM鏡像,并將下載好的鏡像導(dǎo)入虛擬機(jī)軟件中即可。
(2)通過(guò)GitHub獲取安裝Mininet源代碼:在Ubuntu14.04或更高版本下,可通過(guò)命令#git clone http://github.com/mininet/mininet.git獲取源代碼,通過(guò)#mininet/util/install.sh進(jìn)行指定參數(shù)進(jìn)行安裝。本文選擇該方法,且指定參數(shù)-n3V 2.5.0來(lái)安裝mininet的核心文件、OpenFlow1.3版本以及Open vSwitch2.5.0,更多可選參數(shù)可通過(guò)-h獲取。
(3)Mininet文件包安裝:在Ubuntu14.04或更高版本下通過(guò)命令#sudo apt-get install mininet/precise-backports安裝Mininet文件包。
1.2 控制器部署
當(dāng)前主流的遠(yuǎn)程控制器有NOX、POX、Floodlight、OpenDayLight和RYU等控制器。本文采用基于JAVA語(yǔ)言的Floodlight控制器。[7]
安裝Floodlight控制器十分簡(jiǎn)單。首先,下載安裝jdk8,修改profile文件,并通過(guò)java -version查看是否安裝成功。其次,執(zhí)行命令#sudo apt-get install build-essential default-jdk ant python-dev,通過(guò)#git clone git://github.com/floodlight/floodlight.git下載Floodlight1.2版本。隨后,在版本1.2增加以下配置,#cd floodlight,#git submodule init,#git submodule update,#ant。最后,通過(guò)#sudo mkdir /var/lib/floodlight,#sudo chmod 777 /var/lib/floodlight創(chuàng)建文件夾并附上普通用戶權(quán)限,通過(guò)#java -jar target/floodlight.jar即可運(yùn)行Floodlight。當(dāng)然還需要安裝Eclipse等開(kāi)發(fā)環(huán)境,并將Floodlight導(dǎo)入。
2 實(shí)驗(yàn)設(shè)計(jì)
2.1 實(shí)驗(yàn)?zāi)康?/p>
DCN作為SDN最為廣泛的應(yīng)用場(chǎng)景之一,其與SDN結(jié)合可以更好地實(shí)現(xiàn)網(wǎng)絡(luò)的集中管理、故障檢測(cè)及恢復(fù)、流量管理以及虛擬機(jī)遷移等功能。[8]該實(shí)驗(yàn)基于Mininet及Floodlight模擬SDCN,實(shí)驗(yàn)?zāi)康氖菐椭鷮W(xué)生熟悉Mininet使用方法、理解SDN的工作原理和OpenFlow1.3協(xié)議的數(shù)據(jù)報(bào)文結(jié)構(gòu)、掌握利用Mininet搭建自定義拓?fù)湟约熬W(wǎng)絡(luò)測(cè)試方法。
2.2 實(shí)驗(yàn)內(nèi)容
實(shí)驗(yàn)內(nèi)容如下:(1)利用Mininet的Pyhton API搭建多數(shù)據(jù)中心網(wǎng)絡(luò)拓?fù)?;?)模擬數(shù)據(jù)中心的流量分布;(3)連接Floodlight控制器進(jìn)行簡(jiǎn)單的路徑選擇;(4)啟用Wireshark抓包軟件,查看OpenFlow 1.3協(xié)議的報(bào)文結(jié)構(gòu)。
2.2.1 拓?fù)鋭?chuàng)建
利用Mininet創(chuàng)建拓?fù)渥詈?jiǎn)單便捷的方法就是通過(guò)網(wǎng)絡(luò)構(gòu)建參數(shù)--topo來(lái)創(chuàng)建單一交換機(jī)、線形、樹(shù)形三種基本類型拓?fù)?。Mininet 2.2.0或以上版本還可通過(guò)內(nèi)置的可視化工具miniedit創(chuàng)建拓?fù)鋱D。然而,上述兩種方法創(chuàng)建大型拓?fù)鋾r(shí)均存在一定局限性。因此,更通用的方法是通過(guò)Python API編寫腳本來(lái)創(chuàng)建自定義拓?fù)浣Y(jié)構(gòu),具體過(guò)程為:
首先,創(chuàng)建自定義拓?fù)漕?,并可以根?jù)需要選擇性導(dǎo)入Topo、Mininet、Open vSwitch、TCLink等包。其次,分別通過(guò)addSwitch( )、addHost( )和addLink( , )方法來(lái)添加交換機(jī)、主機(jī)和鏈路。最后,通過(guò)#mn --custom 文件名.py的方式啟動(dòng)拓?fù)洹?/p>
本文通過(guò)編寫自定義拓?fù)湮募attree.py,建立樹(shù)形拓?fù)淠_本,通過(guò)命令#mn --custom fattree.py --topo=mytopo –switch ovs,protocol=OpenFlow13 --controller=remote, (ip=
2.2.2 網(wǎng)絡(luò)測(cè)試
(1)用mininet>pingall進(jìn)行連通性測(cè)試,結(jié)果如圖3所示,表示8臺(tái)主機(jī)之間均連通。
(2)用mininet>iperf h1 h2,mininet>iperf h1 h3,mininet>iperf h1 h5測(cè)試TCP帶寬,結(jié)果如圖4所示,每組測(cè)試均返回兩個(gè)值,分別為發(fā)送數(shù)據(jù)的速率和接收數(shù)據(jù)的速率。
(3)分別用mininet>h1 ping –c 1 h2,mininet>h1 ping –c 1 h3,mininet>h1 ping –c 1 h5,測(cè)試ICMP包往返時(shí)間的最小值、平均值、最小值和算術(shù)平均偏差值,測(cè)試結(jié)果如圖5所示。
(4)模擬數(shù)據(jù)中心流量測(cè)試。為了模擬數(shù)據(jù)中心流量的隨機(jī)性,需要在mininet中添加自定義命令iperfmulti,為每臺(tái)主機(jī)隨機(jī)選取其余主機(jī)來(lái)組成iperf udp測(cè)試的通信節(jié)點(diǎn)對(duì)。具體過(guò)程為:首先在mininet/net.py中定義相應(yīng)函數(shù),其次在mininet/cli.py中注冊(cè)函數(shù),然后在bin/mn中將iperfmulti加入可執(zhí)行命令列表中,最后,通過(guò)命令#~/mininet/util/install.sh –n重新編譯mininet核心文件。
通過(guò)命令mininet>iperfmulti
2.2.3 Wireshark抓包
在仿真測(cè)試過(guò)程中,開(kāi)啟Wireshark軟件,以Packet-out消息為例,其理論報(bào)文結(jié)構(gòu)如圖8所示。抓取到的兩個(gè)封裝了ICMP和LLDP的Packet-out消息如圖9-10所示。對(duì)比可驗(yàn)證理論結(jié)構(gòu)與實(shí)際消息結(jié)構(gòu)相符。
3 結(jié)語(yǔ)
作為未來(lái)網(wǎng)絡(luò)架構(gòu)演進(jìn)的主要方向之一,SDN有著令人矚目的發(fā)展前景。為了順應(yīng)網(wǎng)絡(luò)的發(fā)展潮流,在本科生和研究生網(wǎng)絡(luò)教學(xué)實(shí)驗(yàn)課程中引入SDN相關(guān)實(shí)踐環(huán)節(jié),對(duì)其教學(xué)和研究具有重要意義。SDCN作為SDN最廣泛的應(yīng)用場(chǎng)景之一,通過(guò)設(shè)計(jì)SDCN實(shí)驗(yàn)方案、搭建實(shí)驗(yàn)平臺(tái),學(xué)生可通過(guò)動(dòng)手實(shí)踐來(lái)學(xué)習(xí)SDN的應(yīng)用場(chǎng)景、熟悉Mininet仿真平臺(tái)、理解SDN架構(gòu)及OpenFlow協(xié)議下的網(wǎng)絡(luò)運(yùn)行模式,有助于了解新型網(wǎng)絡(luò)技術(shù),培養(yǎng)對(duì)新興技術(shù)的自主學(xué)習(xí)及創(chuàng)新能力。
參考文獻(xiàn)
[1] Nunes B A A,Mendonca M, Nguyen X N, et al. A survey of software-defined networking: Past, present, and future of programmable networks[J].IEEE Communications Surveys & Tutorials,2014.16(3):1617-1634.
[2] Mckeown N,Anderson T,Balakrishnan H, et al. OpenFlow:enabling innovation in campus networks[J]. Acm Sigcomm Computer Communication Review,2008.38(2):69-74.
[3] 雷葆華,王峰,王茜,等.SDN核心技術(shù)剖析和實(shí)戰(zhàn)指南[M].北京:電子工業(yè)出版社,2013:14-18.
[4] 崔來(lái)中.下一代互聯(lián)網(wǎng)技術(shù)課程教學(xué)探索[J].計(jì)算機(jī)教育,2014(20):70-73.
[5] 徐磊.基于軟件定義網(wǎng)絡(luò)的計(jì)算機(jī)網(wǎng)絡(luò)課程實(shí)驗(yàn)教學(xué)研究[J].計(jì)算機(jī)教育,2017(5):150-153.
[6] 張連成,奚琪,郭毅,等.基于Mininet模擬環(huán)境的軟件定義網(wǎng)絡(luò)實(shí)驗(yàn)課程設(shè)計(jì)[J].計(jì)算機(jī)教育,2015(6):104-107.
[7] Floodlight Editor,F(xiàn)loodlight Manual[OL].[2017-09-11],http://www.project floodlight.org
[8] 吳強(qiáng),徐鑫,劉國(guó)燕.基于SDN技術(shù)的數(shù)據(jù)中心基礎(chǔ)網(wǎng)絡(luò)構(gòu)[J].電信科學(xué),2013.29(1):130-133.