版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目3基于Mininet模擬SDN環(huán)境學(xué)習(xí)目標(biāo)項(xiàng)目背景項(xiàng)目需求分析項(xiàng)目相關(guān)知識(shí)項(xiàng)目實(shí)踐項(xiàng)目習(xí)題目錄(1)了解Mininet工具作用及架構(gòu)(2)掌握Mininet工具的部署方法。(3)掌握Mininet工具和MiniEdit使用方法及基本命令。(4)掌握基本的Python命令用以創(chuàng)建拓?fù)浜蜏y(cè)試。學(xué)習(xí)目標(biāo)
項(xiàng)目描述在前面的項(xiàng)目中,網(wǎng)絡(luò)部管理員根據(jù)公司業(yè)務(wù)需求配置了SDN網(wǎng)絡(luò)架構(gòu)的測(cè)試環(huán)境和基本的流表規(guī)則,實(shí)現(xiàn)了業(yè)務(wù)主機(jī)之間基本通信。由于業(yè)務(wù)部門還需要測(cè)試其他的業(yè)務(wù)系統(tǒng)相關(guān)功能。網(wǎng)絡(luò)部管理員評(píng)估了當(dāng)前的SDN網(wǎng)絡(luò)架構(gòu)后,發(fā)現(xiàn)還需要設(shè)置并測(cè)試更多的流表規(guī)則來(lái)實(shí)現(xiàn)原網(wǎng)絡(luò)生產(chǎn)環(huán)境的高級(jí)功能,如負(fù)載均衡、鏈路高可用、鏈路聚合等。為了降低部署SDN環(huán)境的難度和減輕云平臺(tái)資源的負(fù)擔(dān),工程師希望能有一個(gè)支持快速模擬SDN組網(wǎng)架構(gòu)的工具,能實(shí)現(xiàn)自定義拓?fù)洳⑶覝y(cè)試SDN相關(guān)的高級(jí)功能。因此經(jīng)商議決定采用Mininet模擬工具進(jìn)行測(cè)試,具體有如下幾點(diǎn)要求:(1)Mininet工具能夠正常使用,包括搭建拓?fù)?、測(cè)試功能、結(jié)果驗(yàn)證等。(2)能夠通過(guò)腳本的方式進(jìn)行拓?fù)涞臉?gòu)建、測(cè)試和保存。(3)工具應(yīng)該有良好的圖形化界面,清晰展示拓?fù)淝闆r,能夠使用UI界面進(jìn)行參數(shù)的配置。Mininet模擬器參數(shù)如表3-1所示。項(xiàng)目描述Minient模擬器網(wǎng)絡(luò)規(guī)劃如表3-2所示。項(xiàng)目描述主機(jī)名稱端口IP地址用途LAN區(qū)段mininetens33DHCP連接互聯(lián)網(wǎng)
ens34無(wú)IP地址SDN測(cè)試網(wǎng)絡(luò)Lan0表3-2Mininet模擬器網(wǎng)絡(luò)規(guī)劃表角色主機(jī)名系統(tǒng)版本軟件配置Mininet模擬器mininetUbuntu18.04git、gcc、make、mininet表3-1Mininet模擬器參數(shù)項(xiàng)目分析根據(jù)需求,選取Mininet工具模擬SDN環(huán)境,管理員需要完成對(duì)Mininet工具的獲
取,并在對(duì)應(yīng)的機(jī)器上進(jìn)行安裝,測(cè)試Mininet工具的功能和使用狀態(tài)。綜上所述,本次項(xiàng)目設(shè)計(jì)如下幾點(diǎn)任務(wù)。(1)源代碼部署Mininet工具,并驗(yàn)證工具的可用性。(2)使用Python語(yǔ)言編寫Mininet腳本,搭建SDN測(cè)試拓?fù)?。?)使用MiniEdit圖形化界面構(gòu)建拓?fù)?。?xiàng)目分析項(xiàng)目相關(guān)知識(shí)1.Mininet概述傳統(tǒng)的網(wǎng)絡(luò)仿真平臺(tái)有NS2、OPNET等,但基于這些平臺(tái)開發(fā)的代碼不能直接部署到真實(shí)的網(wǎng)絡(luò)中,因此尼克團(tuán)隊(duì)基于Linux開發(fā)了輕量級(jí)的進(jìn)程虛擬化網(wǎng)絡(luò)仿真工具M(jìn)ininet。Mininet是一個(gè)網(wǎng)絡(luò)仿真器,更確切的說(shuō)它是一個(gè)網(wǎng)絡(luò)仿真編排系統(tǒng)。它在單個(gè)Linux內(nèi)核中運(yùn)行一組終端主機(jī)、交換機(jī)、路由器和鏈接,使用輕量級(jí)的虛擬化技術(shù)使單個(gè)系統(tǒng)能模擬一個(gè)完整的網(wǎng)絡(luò)。網(wǎng)絡(luò)中的所有組件均運(yùn)行與物理機(jī)相同的內(nèi)核、系統(tǒng)和用戶代碼。Mininet的虛擬主機(jī)就像真機(jī)一樣,可以通過(guò)安全外殼協(xié)議(SecureShell,ssh)進(jìn)行連接(前提是開啟了sshd服務(wù),并橋接到物理機(jī)網(wǎng)絡(luò)中),還可以在上面運(yùn)行任意程序。在虛擬主機(jī)上運(yùn)行的任意一個(gè)程序均可以通過(guò)其仿真的以太網(wǎng)接口按照自定義的鏈接速度和網(wǎng)絡(luò)時(shí)延發(fā)送數(shù)據(jù)包,再由仿真的以太網(wǎng)交換機(jī)、路由器或者是中間件按自定義規(guī)則轉(zhuǎn)發(fā)。3.3.1MininetMininet最重要的一個(gè)特點(diǎn)是:它的所有代碼可以無(wú)縫遷移到真實(shí)的硬件環(huán)境,方便為網(wǎng)絡(luò)添加新的功能并進(jìn)行相關(guān)測(cè)試,這使得Mininet可以在普通電腦上快速建立由虛擬的終端節(jié)點(diǎn)、OpenFlow交換機(jī)、控制器組成的大規(guī)模的SDN原型系統(tǒng)。Mininet是基于Linux容器(LinuxContainer)內(nèi)核虛擬化技術(shù)開發(fā)的,它主要使用Linux內(nèi)核中名為網(wǎng)絡(luò)命名空間(NetworkNamespace)的資源隔離機(jī)制實(shí)現(xiàn)虛擬化。這種機(jī)制可以讓每個(gè)虛擬對(duì)象都具有獨(dú)立的網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)協(xié)議棧和端口等資源。Mininet建立網(wǎng)絡(luò)拓?fù)涞慕粨Q節(jié)點(diǎn)之間的鏈路采用Linux的虛擬以太網(wǎng)隧道(VirtualEthernetPair)機(jī)制實(shí)現(xiàn)。2.Mininet的架構(gòu)Mininet的架構(gòu)按數(shù)據(jù)路徑(datapath)的運(yùn)行權(quán)限不同,分為內(nèi)核數(shù)據(jù)路徑(kerneldatapath)和用戶空間數(shù)據(jù)路徑(userspacedatapath)兩種,其中內(nèi)核數(shù)據(jù)路徑把數(shù)據(jù)分組轉(zhuǎn)發(fā)的邏輯編譯進(jìn)Linux內(nèi)核,使得轉(zhuǎn)發(fā)效率非常高;用戶空間數(shù)據(jù)路徑則把數(shù)據(jù)分組轉(zhuǎn)發(fā)的邏輯編譯成一個(gè)應(yīng)用程序,稱為ofdatapath,效率雖不及內(nèi)核數(shù)據(jù)路徑,但比它更靈活且更容易重新編譯。3.3.1Mininet3.3.1Mininet在Mininet的內(nèi)核數(shù)據(jù)路徑架構(gòu)中,控制器和交換機(jī)的網(wǎng)絡(luò)接口都在root命名空間中,控制器就是一個(gè)用戶進(jìn)程,它使用回環(huán)(loopback)接口上預(yù)留的6633端口監(jiān)聽來(lái)自交換機(jī)安全通道的連接。Mininet的每個(gè)交換機(jī)都對(duì)應(yīng)幾個(gè)網(wǎng)絡(luò)接口,如S0-eth0、S0-eth1以及一個(gè)ofprotocol進(jìn)程(負(fù)責(zé)管理和維護(hù)與控制器之間的安全信道的進(jìn)程)。而每個(gè)主機(jī)都在自己獨(dú)立的命名空間里,這也就表明每個(gè)主機(jī)在自己的命名空間中都會(huì)有自己獨(dú)立的虛擬網(wǎng)卡eth0。其內(nèi)核數(shù)據(jù)路徑架構(gòu)示意圖如圖3-1所示。圖3-1內(nèi)核數(shù)據(jù)路徑架構(gòu)示意圖對(duì)比內(nèi)核數(shù)據(jù)路徑架構(gòu),Mininet的用戶空間數(shù)據(jù)路徑架構(gòu)的不同之處主要有兩點(diǎn):①M(fèi)ininet的每個(gè)節(jié)點(diǎn)都擁有自己獨(dú)立的命名空間(namespace)。②交換機(jī)節(jié)點(diǎn)除了使用ofprotocol進(jìn)程保持與控制器的通信外,還多運(yùn)行一個(gè)用于實(shí)現(xiàn)轉(zhuǎn)發(fā)邏輯的ofdatapath進(jìn)程。用戶空間數(shù)據(jù)路徑架構(gòu)示意圖如圖3-2所示。3.3.1Mininet圖3-2用戶空間數(shù)據(jù)路徑架構(gòu)示意圖3.Mininet的優(yōu)勢(shì)
Mininet具備如下優(yōu)點(diǎn)。①運(yùn)行速度快。Mininet創(chuàng)建一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)僅需要幾秒的時(shí)間。②支持自定義網(wǎng)絡(luò)拓?fù)?。Mininet支持用戶自定義拓?fù)浣Y(jié)構(gòu)。③仿真程度高。Mininet上運(yùn)行的虛擬主機(jī)與真實(shí)主機(jī)幾乎沒(méi)有區(qū)別。④支持自定義網(wǎng)絡(luò)鏈路。Mininet支持用戶自定義網(wǎng)絡(luò)鏈路的速率等配置信息。⑤便攜性好。Mininet可以在任何一臺(tái)筆記本電腦、服務(wù)器、虛擬機(jī)或云上運(yùn)行,而且在Mininet中執(zhí)行的任何代碼都可以遷移到其他環(huán)境中。⑥支持網(wǎng)絡(luò)拓?fù)渚幊獭ininet允許用戶通過(guò)Python編程語(yǔ)言自定義網(wǎng)絡(luò)拓?fù)湎嚓P(guān)的一切配置信息。3.3.1Mininet1.Mininet軟件的獲取 Mininet是一款開源軟件,用戶可通過(guò)直接訪問(wèn)其官網(wǎng)提供下載的頁(yè)面按照需求進(jìn)行下載,官網(wǎng)主頁(yè)如圖3-3所示。3.3.2Mininet安裝圖3-3Mininet官網(wǎng)主頁(yè)2.Mininet的安裝方式Mininet有4種安裝方法,分別是通過(guò)下載Mininet的虛擬機(jī)鏡像安裝、通過(guò)下載Mininet源代碼包進(jìn)行本機(jī)安裝、通過(guò)軟件包安裝、通過(guò)升級(jí)安裝。(1)通過(guò)下載Mininet的虛擬機(jī)鏡像安裝通過(guò)官方網(wǎng)站下載MininetVM鏡像到本地;然后就可以在本地的虛擬化軟件中(如VMW、KVM、VirtualBox等)運(yùn)行Mininet。(2)通過(guò)下載Mininet源代碼包進(jìn)行安裝這種安裝方式適合在本地VM、遠(yuǎn)程云服務(wù)器和物理機(jī)安裝,建議在較新版本的Ubuntu版本中進(jìn)行安裝。在此方式下,可通過(guò)git官網(wǎng)或其它途徑下載代碼包;然后通過(guò)執(zhí)行源代碼包中提供的install.sh腳本執(zhí)行編譯安裝。在使用源碼安裝的時(shí)候,Mininet提供了幾種命令自定義安裝方式,常用的幾種安裝命令格式如表3-3所示。3.3.2Mininet安裝3.3.2Mininet安裝命令解釋install.sh-a安裝Mininet的所有內(nèi)容,包括OVS等依賴項(xiàng)install.sh-s/mydir-a選擇將Mininet所有內(nèi)容安裝在/mydir目錄下,不帶-s參數(shù)時(shí)則默認(rèn)安裝在家目錄中install.sh-nfv僅安裝Mininet、OpenFlow協(xié)議支持、OVSinstall.sh-n3V2.6.6安裝Mininet內(nèi)核、OpenFlow1.3協(xié)議支持、2.6.6版本的OVSinstall.sh-s/mydir-nfv選擇將Mininet、OpenFlow協(xié)議支持、OVS安裝在/mydir目錄下install.sh-h安裝OpenFlow、wireshark抓包工具表3-3Mininet常用安裝命令格式(3)通過(guò)軟件包安裝Mininet這種方式建議只在新版的ubuntu系統(tǒng)中進(jìn)行,因?yàn)樵谂f版的系統(tǒng)中使用此種方式可能會(huì)導(dǎo)致安裝的Mininet不是最新的版本。安裝步驟如下。①需要確保主機(jī)能連接外網(wǎng),執(zhí)行aptupdate命令更新主機(jī)軟件倉(cāng)庫(kù)源。②執(zhí)行aptinstall命令安裝Mininet。③安裝過(guò)程無(wú)報(bào)錯(cuò),即為正常。安裝完畢即可使用Mininet工具。3.3.2Mininet安裝root@hostname:~#aptupdateroot@hostname:~#aptinstallmininet(4)通過(guò)升級(jí)安裝Mininet
這種方式的安裝方法前提是在主機(jī)上已經(jīng)有舊版本的Mininet,而且升級(jí)是僅對(duì)Mininet本身組件進(jìn)行的,其他組件如OVS、控制器等則需要用戶另外手動(dòng)執(zhí)行升級(jí)。因此不推薦此種方式進(jìn)行安裝。3.Mininet的啟動(dòng)
Mininet成功安裝后就可以基于root用戶身份通過(guò)mn命令行快速啟動(dòng)Mininet工作環(huán)境。
mn命令啟動(dòng)的Mininet模擬環(huán)境會(huì)自動(dòng)生成一個(gè)最小拓?fù)洌負(fù)浒?個(gè)Mininet自帶控制器、1個(gè)OVS內(nèi)核的交換機(jī)、2個(gè)終端主機(jī),Mininet內(nèi)置一臺(tái)DHCP服務(wù)器,它會(huì)為終端自動(dòng)分配/8網(wǎng)段的一個(gè)IP地址。拓?fù)浣Y(jié)構(gòu)如圖3-4所示。3.3.2Mininet安裝圖3-4mn命令啟動(dòng)的Mininet最小拓?fù)鋯?dòng)后命令行界面如圖3-5所示。3.3.2Mininet安裝圖3-5執(zhí)行mn命令后的命令行界面4.mn命令及其應(yīng)用mn命令除了可以快速地構(gòu)建小型SDN網(wǎng)絡(luò)外,還能借助一些預(yù)定義好的參數(shù)來(lái)快速構(gòu)建星型、樹形、線型、環(huán)形等形狀的拓?fù)浣Y(jié)構(gòu)。另外,用戶還可以通過(guò)mn命令設(shè)置交換機(jī)、控制器、終端主機(jī)等設(shè)備的具體參數(shù)。mn命令常見參數(shù)如表3-4(1),3-4(2),3-4(3)所示。3.3.2Mininet安裝表3-4(1)
mn命令常見參數(shù)命令參數(shù)解釋mn--switch=default設(shè)置交換機(jī)的類型為default,此類型的交換機(jī)創(chuàng)建時(shí)會(huì)嘗試連接默認(rèn)的控制器,如果無(wú)法連接,則會(huì)降級(jí)為OVSBridge(交換機(jī)fail_mode模式為standalone)--switch=ivs設(shè)置交換機(jī)的類型為Indigo-virtualswitch--switch=lxbr設(shè)置交換機(jī)的類型性為linux-bridge--switch=ovs設(shè)置交換機(jī)的類型為OVS,此類型的交換機(jī)創(chuàng)建時(shí)必須連接到一個(gè)控制器,否則創(chuàng)建拓?fù)鋾?huì)報(bào)錯(cuò),并主動(dòng)清理模擬環(huán)境并退出此次拓?fù)鋭?chuàng)建--switch=ovsbr設(shè)置交換機(jī)的類型為OpenvSwitch-bridge(默認(rèn)存在一條table-miss流表項(xiàng),流表項(xiàng)動(dòng)作為normal),此類型交換機(jī)在創(chuàng)建時(shí)將無(wú)視基本命令行中--controller設(shè)置的參數(shù),不連接任何控制器,但在創(chuàng)建完成后仍可以手動(dòng)連接控制器,并接收控制器下發(fā)的流表3.3.2Mininet安裝命令參數(shù)解釋mn--switch=ovsk設(shè)置交換機(jī)的類型為OVSK內(nèi)核的交換機(jī)--switch=user設(shè)置交換機(jī)的類型為UserspaceSwitch,需要用戶空間中加載了交換機(jī)的參數(shù)--controller=none設(shè)置拓?fù)錈o(wú)控制器運(yùn)行--controller=default設(shè)置控制器的類型為default,Mininet自帶控制器,此參數(shù)需要Mininet在源代碼安裝時(shí)帶上-b參數(shù)(./install.sh-b)--controller=ovsc設(shè)置控制器的類型為OVSController--controller=remote,ip=x,port=y設(shè)置控制器的類型為遠(yuǎn)程,后面需要加ip和port參數(shù)(例如:使用遠(yuǎn)程ip為的OpenDayLight控制器,詳細(xì)格式是:--controller=remote,ip=,port=6633)表3-4(2)
mn命令常見參數(shù)3.3.2Mininet安裝--topo=linear,x設(shè)置構(gòu)建的拓?fù)漕愋蜑閞emote,其中x為拓?fù)渲械慕粨Q機(jī)數(shù)量--topo=tree,depth=x,fanout=y設(shè)置構(gòu)建的拓?fù)漕愋蜑闃湫?,同時(shí)設(shè)置depth(深度)為x,fanout(扇出)為y--topo=single,x設(shè)置構(gòu)建的拓?fù)漕愋蜑閱我恍?,x為拓?fù)渲羞B接的主機(jī)的數(shù)量--topo=minimal設(shè)置構(gòu)建的拓?fù)漕愋蜑樽钚⊥負(fù)?,作用與不帶參數(shù)的mn命令一致--host=cfs設(shè)置拓?fù)渲械闹鳈C(jī)CPU的調(diào)度算法是CFS(完全公平調(diào)度算法)--host=rt設(shè)置拓?fù)渲械闹鳈C(jī)CPU的調(diào)度算法是RT(實(shí)時(shí)調(diào)度算法)--host=proc設(shè)置拓?fù)渲兄鳈C(jī)CPU的調(diào)度算法為proc(即跟隨宿主機(jī)的設(shè)置)--ipbase=x.x.x.x/NETMASK設(shè)置生成的拓?fù)淠J(rèn)使用的IP網(wǎng)段(即指定DHCP地址池IP網(wǎng)段)--mac設(shè)置拓?fù)渲械闹鳈C(jī)MAC地址與主機(jī)ID一致,如第一臺(tái)主機(jī)的MAC地址就是00:00:00:00:00:01--x設(shè)置啟動(dòng)拓?fù)鋾r(shí)自動(dòng)為每個(gè)設(shè)備打開一個(gè)命令行窗口--linktc,bw=x,delay=y設(shè)置拓?fù)鋬?nèi)各連接線纜的帶寬和延遲,x為是帶寬(默認(rèn)單位為Mbit),y為延遲(默認(rèn)單位為ms)-c清理Mininet實(shí)驗(yàn)環(huán)境并退出命令參數(shù)解釋mn
表3-4(3)
mn命令常見參數(shù)項(xiàng)目相關(guān)知識(shí)(3)mn命令示例范例1:創(chuàng)建無(wú)控制器的線型拓?fù)?,包?個(gè)交換機(jī)。生成的拓?fù)淙鐖D3-6所示。root@localhost:~#mn--topo=linear,4--controller=none圖3-6
無(wú)控制器的總線拓?fù)洌?個(gè)交換機(jī)項(xiàng)目相關(guān)知識(shí)范例2:創(chuàng)建連接Mininet默認(rèn)控制器的樹形拓?fù)?,扇出?,深度為2。生成的拓?fù)淙鐖D3-7所示。root@localhost:~#mn--topo=tree,fanout=2,depth=2--controller=default圖3-7連接默認(rèn)控制器的樹形拓?fù)?,扇出?,深度為23.3.3Mininet命令及應(yīng)用1.內(nèi)部命令 在Mininet運(yùn)行環(huán)境中,可以使用系統(tǒng)內(nèi)置命令對(duì)拓?fù)溥M(jìn)行配置和測(cè)試,常見的命令如表3-5所示。命令含義help查看Mininet可用命令nodes列出當(dāng)前拓?fù)渲械墓?jié)點(diǎn)net展示當(dāng)前拓?fù)渲械墓?jié)點(diǎn)及節(jié)點(diǎn)各端口的連接信息dump查看所有節(jié)點(diǎn)的詳細(xì)信息pingall拓?fù)鋬?nèi)全部主機(jī)互ping測(cè)試:讓每臺(tái)主機(jī)測(cè)試“ping拓?fù)鋬?nèi)所有主機(jī)(除自己之外)”。h1ifconfig-a在h1主機(jī)上運(yùn)行ifconfig-a命令,查看h1的接口s1ifconfig-a在s1交換機(jī)上運(yùn)行ifconfig-a命令,查看s1的接口h1ping-c1h2在h1主機(jī)上運(yùn)行pingh2測(cè)試,發(fā)送1個(gè)包iperfh1h2啟動(dòng)iperf工具對(duì)h1和h2之間的鏈路進(jìn)行網(wǎng)絡(luò)性能測(cè)試xterms1打開“hostname”為s1的設(shè)備的命令行界面表3-5Mininet常用命令3.3.3Mininet命令及應(yīng)用2.sh拓展命令Mininet支持調(diào)用ovs命令集,使用時(shí)需要在該命令前添加sh前綴。例如“shovs-vsctlshow”用于查看拓?fù)渲兴薪粨Q機(jī)的信息。3.py拓展命令 由于Mininet的交互式命令行是使用Python解釋器實(shí)現(xiàn)的,因此在Mininet交互式命令行中還可以執(zhí)行Python拓展命令,使用時(shí)需要該命令前添加py前綴,簡(jiǎn)稱py命令。用戶可以通過(guò)py命令增加、刪除、修改拓?fù)鋬?nèi)的主機(jī)、控制器、交換機(jī)等對(duì)象的配置。常用的py命令如表3-6(1),3-6(2)所示。3.3.3Mininet命令及應(yīng)用命令解釋pyhelp(s1)查看對(duì)象s1的可用API方法與參數(shù)pynet.addHost("h1")調(diào)用addHost方法為拓?fù)湓黾右粋€(gè)名為h1的主機(jī)節(jié)點(diǎn)pynet.addSwitch("s1")調(diào)用addSwitch方法為拓?fù)湓黾右粋€(gè)名為s1的交換機(jī)節(jié)點(diǎn)pynet.addController('c1',port=6655)調(diào)用addController方法為拓?fù)湓黾右粋€(gè)名為c1的控制器節(jié)點(diǎn),監(jiān)聽端口為6655表3-6(1)
常用的py命令pynet.addLink(s1,h1)調(diào)用addLink方法為s1與h1之間添加一條連線pynet.get("h3").cmd("ifconfigh3-eth0/8")調(diào)用h3對(duì)象的cmd方法執(zhí)行ifconfig命令,為h3-eth0接口配置/8的IP地址3.3.3Mininet命令及應(yīng)用pyh3.setIP('/8',intf='h3-eth0')調(diào)用h3對(duì)象內(nèi)置的setIP方法,為h3-eth0接口配置/8的IP地址pys1.attach("s1-eth3")調(diào)用s1對(duì)象的attach方法,將s1-eth3接口加入s1交換機(jī)中。作用相當(dāng)于ovs-vsctladd-ports1s1-eth3命令,僅交換機(jī)節(jié)點(diǎn)可以調(diào)用此方法pys1.start([c0])調(diào)用s1對(duì)象的start方法啟動(dòng)s1交換機(jī)節(jié)點(diǎn)并連接上拓?fù)渲忻麨閏0的控制器。此命令相當(dāng)于執(zhí)行了ovs-ctlstart;ovs-vsctlset-controllers1c0命令pxfrommininet.nodeimportRemoteControllerpx命令是py命令的變形,用于為Mininet交互式命令行加載其他API模塊,此命令相當(dāng)于從mininet.node中添加RemoteController模塊pynet.addController('c2',controller=RemoteController,ip='0',port='6633')調(diào)用net對(duì)象的addController方法添加一個(gè)名為c2、控制器類型為RemoteController、IP地址為0、監(jiān)聽端口為6633的遠(yuǎn)程控制器。執(zhí)行此命令需提前加載RemoteController模塊表3-6(2)
常用的py命令需要注意,addLink用于在兩個(gè)節(jié)點(diǎn)之間創(chuàng)建鏈路,addLink在創(chuàng)建鏈路的同時(shí),會(huì)為節(jié)點(diǎn)創(chuàng)建一個(gè)新的網(wǎng)絡(luò)接口,命名方式則是順延當(dāng)前已有的網(wǎng)卡接口編號(hào)。提示:addLink與attach不同,addLink出現(xiàn)的接口為虛擬接口,需要使用attach命令在交換機(jī)中添加真實(shí)接口,其作用等同于執(zhí)行ovs-vsctladd-port命令。2.使用交互式命令構(gòu)建拓?fù)涫褂胢n命令進(jìn)入到交互式命令行后,會(huì)自動(dòng)創(chuàng)建一個(gè)最小拓?fù)?,用戶可以在原有拓?fù)渖辖M建新拓?fù)?。范?:在最小拓?fù)渖闲略鲆粋€(gè)交換機(jī)連接到原有的交換機(jī),并在新增交換機(jī)上連接一臺(tái)主機(jī),操作步驟如下。①新建交換機(jī)節(jié)點(diǎn)。②新建主機(jī)節(jié)點(diǎn)。3.3.3Mininet命令及應(yīng)用mininet>pynet.addSwitch("s2")mininet>pynet.addHost("h3")執(zhí)行了以上兩個(gè)步驟后拓?fù)淙鐖D3-8所示。3.3.3Mininet命令及應(yīng)用圖3-8新建交換機(jī)節(jié)點(diǎn)和主機(jī)節(jié)點(diǎn)后的拓?fù)鋱D③為交換機(jī)增加接口。④創(chuàng)建主機(jī)與交換機(jī)之間的連接。執(zhí)行了以上步驟之后,拓?fù)淙鐖D3-9所示。3.3.3Mininet命令及應(yīng)用mininet>pys1.attach("s1-eth3")mininet>pys2.attach("s2-eth1")mininet>pys2.attach("s2-eth2")mininet>pynet.addLink(s2,h3)圖3-9創(chuàng)建主機(jī)與交換機(jī)之間的連接后的拓?fù)鋱D由圖3-9可知,交換機(jī)和主機(jī)均新增了一個(gè)網(wǎng)絡(luò)接口。它們各自接口的編號(hào)是按照十進(jìn)制順序命名的,交換機(jī)默認(rèn)第一個(gè)接口名稱為“交換機(jī)名-eth1”,主機(jī)默認(rèn)第一個(gè)接口名稱為“主機(jī)名-eth0”。⑤創(chuàng)建交換機(jī)與交換機(jī)之間的連接。執(zhí)行了以上步驟之后,拓?fù)淙鐖D3-10所示。3.3.3Mininet命令及應(yīng)用mininet>pynet.addLink(s1,s2)圖3-10創(chuàng)建交換機(jī)與交換機(jī)之間的連接后的拓?fù)鋱D3.3.3Mininet命令及應(yīng)用此時(shí)在s2與s1之間新增了一條連線,線的兩端分別是s2的第二個(gè)接口“s2-eth2”和s1的第三個(gè)接口“s1-eth3”。⑥為主機(jī)配置IP。為h3主機(jī)的h3-eth0接口配置了一個(gè)IP地址/8。⑦啟動(dòng)新增的交換機(jī)并連接到控制器。執(zhí)行了以上命令后,拓?fù)渥罱K如圖3-11所示。mininet>pyh3.setIP('/8',intf='h3-eth0')mininet>pys2.start([c0])圖3-11最終拓?fù)鋱DMininet模擬器的絕大部分框架都是由Python語(yǔ)言編寫的,因此在Mininet內(nèi)部保留了對(duì)接Python語(yǔ)言的API接口和模塊,用戶可以通過(guò)Python語(yǔ)言調(diào)用這些接口和模塊實(shí)現(xiàn)創(chuàng)建拓?fù)?、配置設(shè)備等操作。Mininet中經(jīng)常使用的類如表3-7所示:3.3.4通過(guò)Python腳本創(chuàng)建Mininet拓?fù)漕惷Q用途mininet.topotopo拓?fù)浣Y(jié)構(gòu)類(常用、關(guān)鍵類)mininet.topolib導(dǎo)入topolib拓?fù)浣Y(jié)構(gòu)類,用于使用樹形結(jié)構(gòu)拓?fù)渚W(wǎng)絡(luò)命令類(常用、關(guān)鍵類)mininet.clean清理命令類,用于清理工作環(huán)境mininet.cli命令行類,用于執(zhí)行內(nèi)部命令mininet.log日志類,用于查看設(shè)備運(yùn)行日志mininet.nodelibnodelib節(jié)點(diǎn)命令類,用于定義拓?fù)鋬?nèi)節(jié)點(diǎn)的網(wǎng)絡(luò)連接方式,如橋接或NAT的網(wǎng)絡(luò)mininet.nodenode節(jié)點(diǎn)命令類,用于拓?fù)鋬?nèi)節(jié)點(diǎn)的控制mininet.link導(dǎo)入link類,用于設(shè)置帶寬等參數(shù),必須先導(dǎo)入node類才能導(dǎo)入此類表3-7Mininet中經(jīng)常使用的類Mininet有眾多的類,用戶可以在官網(wǎng)中查找對(duì)應(yīng)類及使用方法,如圖3-12所示。3.3.4通過(guò)Python腳本創(chuàng)建Mininet拓?fù)鋱D3-12官網(wǎng)的MininetPythonAPI參考手冊(cè)3.3.4通過(guò)Python腳本創(chuàng)建Mininet拓?fù)?.Mininet.topo類簡(jiǎn)介該類主要用于生成網(wǎng)絡(luò)拓?fù)?,這些拓?fù)洳捎霉潭ǖ膸追N拓?fù)浣Y(jié)構(gòu),包括最小拓?fù)?、線形拓?fù)浜蛦我唤粨Q機(jī)類型拓?fù)?,topo類典型應(yīng)用案例如表3-8所示。2.M類簡(jiǎn)介Net類可以實(shí)現(xiàn)增加、刪除、修改拓?fù)鋬?nèi)的主機(jī)、控制器、交換機(jī)等對(duì)象的配置,net類典型應(yīng)用案例如表3-9所示。案例解釋MinimalTopo()使用MinimalTopo方法定義一個(gè)最小拓?fù)浣Y(jié)構(gòu)LinearTopo(k=4,n=2)使用LinearTopo方法定義一個(gè)交換機(jī)數(shù)量為4(k=4),每臺(tái)交換機(jī)連接的主機(jī)數(shù)為2(n=2)的拓?fù)銼ingleSwitchTopo(k=4)使用SingleSwitchTopo方法構(gòu)造一個(gè)單一交換機(jī)下連接的主機(jī)數(shù)量為4(k=4)的拓?fù)浔?-8topo類典型應(yīng)用案例3.3.4通過(guò)Python腳本創(chuàng)建Mininet拓?fù)浒咐忉孧ininet(switch=OVSSwitch,controller=RemoteController,ipBase=/24)創(chuàng)建一個(gè)最小拓?fù)?,并定義了交換機(jī)的類型為OVSSwitch,控制器的類型為RemoteController,DHCP地址池為/24net.addHost('h3')為拓?fù)湓黾右粋€(gè)主機(jī),名稱為h3net.addSwitch('s2')為拓?fù)湓黾右粋€(gè)交換機(jī),名稱為s2net.addLink(s1,h3)為交換機(jī)s1和主機(jī)h3建立一條鏈接net.pingAll()測(cè)試全部主機(jī)間的連通性net.iperf((h1,h2),l4Type='TCP')在h1和h2之間啟動(dòng)iperf網(wǎng)絡(luò)性能測(cè)試,測(cè)試類型為TCP。net.start()啟動(dòng)拓?fù)鋘et.stop()停止拓?fù)涞倪\(yùn)行表3-9net類典型應(yīng)用案例1.Mininet可視化工具的概述Mininet2.3.0的版本中內(nèi)置了一個(gè)可視化工具M(jìn)iniedit,用戶可以圖形化界面方便地創(chuàng)建網(wǎng)絡(luò)拓?fù)?。如果用戶以源代碼方式安裝的Mininet,那么Miniedit的啟動(dòng)腳本默認(rèn)是存放在“~/mininet/mininet/examples”目錄下的,其啟動(dòng)腳本名為miniedit.py。如果用戶以非源代碼方式安裝的Mininet,那么Miniedit的啟動(dòng)路徑有所不同,它默認(rèn)存放“/usr/lib/python2.7/dist-packages/mininet/examples”目錄下。以源代碼方式安裝的Mininet為例,Miniedit啟動(dòng)方式如下。3.3.5Minieditroot@hostname:~#./mininet/mininet/examples/miniedit.py啟動(dòng)后界面如圖3-13所示。3.3.5Miniedit圖3-13Miniedit啟動(dòng)后的界面Miniedit界面的左側(cè)有一排控件圖標(biāo)這些控件包括Select、Host、Switch等,其具體功能如表3-10所示。3.3.6Miniedit可視化工具的使用控件圖標(biāo)控件名稱控件作用Select選中畫布中的節(jié)點(diǎn)
Host創(chuàng)建主機(jī)
Switch創(chuàng)建openflow交換機(jī)
Legancyswitch創(chuàng)建傳統(tǒng)交換機(jī)
Legancyrouter創(chuàng)建傳統(tǒng)路由器
Netlink創(chuàng)建節(jié)點(diǎn)間的網(wǎng)絡(luò)連接
Controller創(chuàng)建控制器
Run運(yùn)行拓?fù)?/p>
Stop停止拓?fù)浔?-10MiniEdit控件圖標(biāo)功能解析1.Select控件主要用于選擇畫布中的節(jié)點(diǎn),在節(jié)點(diǎn)上長(zhǎng)按鼠標(biāo)左鍵不放,可以拖動(dòng)節(jié)點(diǎn)。2.Host控件該控件用于創(chuàng)建終端主機(jī)節(jié)點(diǎn)。單擊該工具,然后在畫布上單擊空白處,就可以創(chuàng)建一個(gè)終端主機(jī)。如果用戶沒(méi)有選擇使用其他控件,那么接著在畫布單擊就可以繼續(xù)創(chuàng)建終端主機(jī)。默認(rèn)情況下,創(chuàng)建的第1個(gè)終端主機(jī)名為h1,第2個(gè)終端主機(jī)名為h2,其他終端主機(jī)名以此類推。添加成功后,將鼠標(biāo)指針懸停在終端主機(jī)上,然后長(zhǎng)按鼠標(biāo)右鍵可以調(diào)出HostOptions(主機(jī)選項(xiàng))菜單,鼠標(biāo)移動(dòng)到菜單中的Properties(基礎(chǔ)屬性配置)上后松開,即可打開終端主機(jī)的配置窗口。HostOptions與Properites界面如圖3-14所示。3.3.6Miniedit可視化工具的使用從圖3-14可以看到,打開后的界面中有Properties、VLANInterfaces(VLAN接口配置)、ExternalInterfaces(外部接口配置)和PrivateDirectories(私有目錄配置)等可配置的選項(xiàng)頁(yè),各頁(yè)面的詳細(xì)作用如下。3.3.6Miniedit可視化工具的使用圖3-14HostOptions與Properites界面(1)Properties選項(xiàng)頁(yè)的設(shè)置用戶可以手動(dòng)更改Hostname選項(xiàng)(主機(jī)名)、IPAddress選項(xiàng)(IP地址)、DefaultRoute選項(xiàng)(默認(rèn)路由)、AmountCPU選項(xiàng)(CPU資源調(diào)配模式,主要用于限制帶寬,可選模式有host、cfs、rt)、Cores選項(xiàng)(CPU占用內(nèi)核數(shù))、StartCommand選項(xiàng)(啟動(dòng)時(shí)執(zhí)行的命令,用于自動(dòng)化控制等操作)、StopCommand選項(xiàng)(停止前執(zhí)行的命令,用于自動(dòng)化控制等操作)。其中AmountCPU選項(xiàng)默認(rèn)情況下選擇host模式,即為主機(jī)調(diào)配模式,在這個(gè)模式下終端主機(jī)的CPU資源統(tǒng)一由物理機(jī)調(diào)配。AmountCPU選項(xiàng)其他可用模式示例如下所示。①cfs模式。完全公平調(diào)度模式,在此模式下各主機(jī)可調(diào)用的CPU資源幾乎平等。②rt模式。實(shí)時(shí)調(diào)度模式,在此模式下,優(yōu)先級(jí)越高的主機(jī)可調(diào)用的虛擬機(jī)CPU資源越高,主要用于限制鏈路帶寬。3.3.6Miniedit可視化工具的使用(2)VLANInterfaces選項(xiàng)頁(yè)的設(shè)置。用戶可以通過(guò)Add按鈕新建一條IP與VLAN的對(duì)應(yīng)關(guān)系,用戶在下方的VLANInterfaces輸入框中分別輸入IPAddress(IP地址)與其對(duì)應(yīng)的VLANID值即可,如果需要新建多條記錄,繼續(xù)單擊Add按鈕新增即可,如圖3-15所示。3.3.6Miniedit可視化工具的使用圖3-15VLANInterfaces選項(xiàng)頁(yè)3.3.6Miniedit可視化工具的使用提示:一般情況下VLAN的配置需要Mininet主機(jī)上安裝了vconfig組件支持,如果沒(méi)有安裝vconfig,在配置了VLANInterfaces之后,啟動(dòng)拓?fù)鋾?huì)提示錯(cuò)誤并跳過(guò)VLAN相關(guān)的配置。(3)ExternalInterfaces選項(xiàng)頁(yè)的設(shè)置。用戶可以通過(guò)Add按鈕新建外部接口的記錄,用戶可以在下方的ExternalInterfaces輸入框中輸入外部接口的名稱。表示將Mininet所在主機(jī)的網(wǎng)卡掛載到Host上。如需要新建多個(gè)外部接口,那么則繼續(xù)單擊Add按鈕即可,如圖3-16所示。圖3-16ExternalInterfaces選項(xiàng)頁(yè)提示:外部接口配置相當(dāng)于虛擬機(jī)上的真實(shí)接口被終端主機(jī)搶占過(guò)去,在搶占期間虛擬機(jī)將無(wú)法使用此接口(如果虛擬機(jī)使用ifconfig命令查看接口信息,會(huì)發(fā)現(xiàn)接口在虛擬機(jī)上是消失了)。如果用戶配置的外部接口已有IP地址那么搶占就會(huì)不成功,并且會(huì)在啟動(dòng)拓?fù)鋾r(shí)提示錯(cuò)誤并跳過(guò)此設(shè)置。如果用戶配置的外部接口名稱不存在于虛擬機(jī)上,那么在啟動(dòng)拓?fù)鋾r(shí)也會(huì)提示錯(cuò)誤并跳過(guò)此設(shè)置。兩種報(bào)錯(cuò)界面如圖3-17所示。3.3.6Miniedit可視化工具的使用圖3-17兩種報(bào)錯(cuò)界面(4)PrivateDirectories選項(xiàng)頁(yè)的設(shè)置用戶可以通過(guò)單擊Add按鈕并在下方的Directories輸入框中輸入終端主機(jī)的掛載目錄(Mount)和虛擬主機(jī)被掛載的目錄(PersistentDirectory)為終端主機(jī)掛載私有目錄。其的作用相當(dāng)于將虛擬機(jī)中的目錄掛載到終端主機(jī)中。用戶如果多次單擊Add按鈕,可以添加多條記錄。對(duì)應(yīng)的選項(xiàng)頁(yè)如圖3-18所示。3.3.6Miniedit可視化工具的使用圖3-18Private
Directories選項(xiàng)頁(yè)提示:①用戶設(shè)置的PersistentDirectory需要在虛擬主機(jī)中存在,否則會(huì)在用戶啟動(dòng)拓?fù)涞臅r(shí)候提示錯(cuò)誤。②如果用戶在啟動(dòng)拓?fù)浜?,再次打開終端主機(jī)的HostOptions菜單,用戶將可以選擇打開Terminal(終端)菜單項(xiàng),用戶可以在終端中運(yùn)行命令等操作。HostOptions與Terminal的界面如圖3-19所示。3.3.6Miniedit可視化工具的使用圖3-19HostOptions與Terminal的界面3.3.6Miniedit可視化工具的使用3.Switch控件交換機(jī)控件用于在畫布上創(chuàng)建支持OpenFlow交換機(jī)。創(chuàng)建的方法與創(chuàng)建Host一致,單擊選擇控件后,在右側(cè)畫布空白處中再次單擊即可。如果用戶沒(méi)有選擇使用其他控件,那么在畫布單擊就可以繼續(xù)創(chuàng)建交換機(jī)。默認(rèn)情況下,創(chuàng)建的第1個(gè)交換機(jī)名為s1,第2個(gè)交換機(jī)名為s2,以此類推。添加成功后,將鼠標(biāo)指針懸停在交換機(jī)上,然后長(zhǎng)按鼠標(biāo)彈出SwitchOptions(交換機(jī)選項(xiàng))菜單,鼠標(biāo)右鍵移動(dòng)到菜單中的Properties菜單項(xiàng)上后放開,即可打開交換機(jī)的屬性配置窗口。SwitchOptions與Properites的界面如圖3-20所示。圖3-20SwitchOptions與Properites界面可以看出在交換機(jī)的屬性配置窗口中可以設(shè)置的有:Hostname(主機(jī)名)選項(xiàng)、DPID(datapath的ID)選項(xiàng)、EnableNetFlow(支持NetFlow監(jiān)控)選項(xiàng)、EnablesFlow(支持sFlow監(jiān)控)選項(xiàng)、SwitchType(交換機(jī)類型)選項(xiàng)、IPAddress(管理用的IP地址)選項(xiàng)、DPCTLport(設(shè)置流表管理命令)選項(xiàng)、StartCommand(啟動(dòng)時(shí)執(zhí)行的命令)選項(xiàng)、StopCommand(停止前執(zhí)行的命令)選項(xiàng)、ExternalInterfaces(外部端口設(shè)置)選項(xiàng)。各配置項(xiàng)的詳細(xì)解析如下。(1)Hostname選項(xiàng)的配置正常情況下,用戶可以通過(guò)Hostname更改交換機(jī)的名稱,這里的交換機(jī)名稱相當(dāng)于ovs網(wǎng)橋的名稱。需要注意的是用戶更改完Hostname之后,需要填寫DPID的值,否則會(huì)報(bào)錯(cuò)。DPID相當(dāng)于網(wǎng)橋的openvswitch(datapath)模塊的ID值,如果沒(méi)有更改交換機(jī)名稱,一般不用特別設(shè)置。3.3.6Miniedit可視化工具的使用(2)EnableNetFlow與EnablesFlow選項(xiàng)的配置啟用NetFlow或sFlow網(wǎng)絡(luò)監(jiān)控協(xié)議,用戶在交換機(jī)屬性配置中可以通過(guò)勾選EnableNetFlow或EnablesFlow選項(xiàng)來(lái)配置交換機(jī)支持NetFlow或sFlow協(xié)議用于觀察監(jiān)控交換機(jī)相關(guān)數(shù)據(jù)。(3)SwitchType選項(xiàng)的配置主要用于設(shè)置交換機(jī)類型,主要有Default、OpenvSwitchKernelMode、IndigoVirtualSwitch、UserspaceSwitch、UserspaceSwitchinNameSpace類型,如圖3-21所示。3.3.6Miniedit可視化工具的使用圖3-21Switch
Type配置項(xiàng)常見的交換機(jī)類型如下所示。①Default。此交換機(jī)類型指的是使用MiniEdit全局配置的類型,默認(rèn)情況下Mininet全局配置中的類型是OpenvSwitchKernelMode。OpenvSwitchKernelMode指的是使用OpenvSwitch內(nèi)核的交換機(jī)。②IndigoVirtualSwitch(IVS)。此交換機(jī)類型與OpenvSwitch一樣是OpenFlow虛擬交換機(jī),但I(xiàn)VS是一個(gè)純OpenFlow交換機(jī),性能高、適合大規(guī)模部署。③UserspaceSwitch。代表的是用戶程序空間交換機(jī),它是在根命名空間(RootNamespace)下運(yùn)行的,性能稍差。④UserspaceSwitchinNameSpace。代表的也是用戶程序空間交換機(jī),但此類交換機(jī)擁有自己的命名空間,性能比UserspaceSwitch稍好。3.3.6Miniedit可視化工具的使用(4)IPAddress選項(xiàng)的配置更改此配置可以設(shè)置交換機(jī)使用的管理地址,默認(rèn)情況下配置為空。(5)DPCTLport選項(xiàng)的配置設(shè)置流表管理命令(dpctl)默認(rèn)連接的交換機(jī)端口,缺省值為6634,dpctl命令是用于檢測(cè)和管理OpenFlow數(shù)據(jù)通路,該命令能夠顯示當(dāng)前的數(shù)據(jù)通路,包括功能配置和表中的條目,以及使用合適的OpenFlow內(nèi)核模塊,用來(lái)添加、刪除、修改和監(jiān)視DathPaths。(6)ExternalInterfaces選項(xiàng)的配置它可以用來(lái)為交換機(jī)配置外部接口。用戶可以通過(guò)Add按鈕添加配置,單擊多次可以添加多個(gè)配置。用戶在下方的ExternalInterfaces輸入框中輸入虛擬機(jī)上的網(wǎng)卡名稱即可。這個(gè)操作相當(dāng)于將Mininet所在主機(jī)對(duì)應(yīng)名稱的網(wǎng)卡掛載到交換機(jī)上。3.3.6Miniedit可視化工具的使用3.3.6Miniedit可視化工具的使用4.Legancyswitch控件傳統(tǒng)交換機(jī),用于創(chuàng)建具有默認(rèn)設(shè)置的自學(xué)習(xí)以太網(wǎng)交換機(jī)。創(chuàng)建的方法與創(chuàng)建Host一致,單擊選擇控件后在右側(cè)畫布空白處中再次單擊即可。如果用戶沒(méi)有選擇使用其他控件,那么在畫布空白處單擊就可以繼續(xù)創(chuàng)建傳統(tǒng)交換機(jī)。默認(rèn)情況下,創(chuàng)建的第1個(gè)交換機(jī)名為s1,第2個(gè)交換機(jī)名為s2,以此類推。此類交換機(jī)可以不連接控制器獨(dú)立運(yùn)行。但是需要注意的是傳統(tǒng)交換機(jī)不能被配置,也沒(méi)有生成樹功能,所以不能使用傳統(tǒng)交換機(jī)模擬環(huán)狀拓?fù)洹?.Legancyrouter控件傳統(tǒng)路由器,用于創(chuàng)建可不連接控制器獨(dú)立運(yùn)行的傳統(tǒng)路由器。它基本上只是一個(gè)啟用了IP轉(zhuǎn)發(fā)的主機(jī)。創(chuàng)建的方法與創(chuàng)建Host一致,單擊選擇控件后在右側(cè)畫布空白處中再次單擊即可。默認(rèn)情況下,路由器的主機(jī)名以“r”開頭,路由器與交換機(jī)使用同一套編號(hào)順序,如果畫布中的已有1臺(tái)交換機(jī)為s1,那么創(chuàng)建的路由器主機(jī)名為r2,以此類推。在拓?fù)鋯?dòng)前,不可以在MiniEdit中配置路由器屬性。在拓?fù)鋯?dòng)后,將鼠標(biāo)指針懸停在路由器上,長(zhǎng)按鼠標(biāo)右鍵彈出RouterOptions菜單,打開Terminal終端界面。3.3.6Miniedit可視化工具的使用在運(yùn)行中的交換機(jī)上打開SwitchOptions菜單,可以單擊Listbridgedetails菜單項(xiàng)查看網(wǎng)橋詳細(xì)信息,SwitchOptions與Bridgedetails的界面如圖3-22所示。圖3-22Switch
Options與Bridge
Details界面6.Netlink控件連線工具用于創(chuàng)建各節(jié)點(diǎn)之間的連接。選擇了Netlink控件后,在需要連線節(jié)點(diǎn)單擊并將保持左鍵長(zhǎng)按狀態(tài),然后拖動(dòng)連線到被連接的節(jié)點(diǎn),最后出現(xiàn)一條連接好的線即代表連線已經(jīng)成功。創(chuàng)建連線時(shí),默認(rèn)會(huì)按順序連接設(shè)備的端口,如設(shè)備的第一條連線使用的端口編號(hào)就是eth1(主機(jī)是以eth0開始),第二條連線使用的端口編號(hào)就是eth2,以此類推。連線創(chuàng)建完畢后,將鼠標(biāo)指針懸停在連線上,長(zhǎng)按鼠標(biāo)右鍵彈出LinkOptions菜單并選擇Properties菜單項(xiàng),進(jìn)入連接細(xì)節(jié)(LinkDetails)的配置窗口,該選項(xiàng)的連接詳細(xì)配置如圖3-23所示。3.3.6Miniedit可視化工具的使用圖3-23LinksOptions及LinkDetails界面3.3.6Miniedit可視化工具的使用從圖3-23可以看出,用戶可以通過(guò)屬性配置窗口,配置連接線的帶寬h(Bandwidt,默認(rèn)單位為Mbit)、延遲(Delay)、丟包率(Loss)、最大排隊(duì)空間(MaxQueuesize)、抖動(dòng)(Jitter)、加速比(Speedup)等信息。7.Controller控件控制器控件,用于創(chuàng)建控制器,創(chuàng)建的方法與創(chuàng)建Host一致,單擊控制器控件后,在右側(cè)畫布空白處中再次單擊即可。如果用戶沒(méi)有選擇使用其他控件,那么在畫布單擊就可以繼續(xù)創(chuàng)建控制器。默認(rèn)情況下,第一個(gè)創(chuàng)建的控制器名為c0,第二個(gè)創(chuàng)建的控制器為c1,以此類推。用戶可以在控制器上懸停鼠標(biāo),并長(zhǎng)按鼠標(biāo)右鍵打開菜單并選擇Properties選項(xiàng),進(jìn)入控制器細(xì)節(jié)(ControllerDetails)的設(shè)置窗口,如圖3-24所示。通過(guò)圖3-24可以看出,ControllerDetails窗口可以設(shè)置的參數(shù)有:控制器名稱(Name)、控制器監(jiān)聽端口(ControllerPort)、控制器類型(ControllerType)、控制器使用的協(xié)議類型(Protocol)以及遠(yuǎn)程或帶內(nèi)控制器(Remote/In-BandController)的控制器IP地址(IPAddress)。這里需要注意的是ControllerType配置選項(xiàng),它可以選擇控制器的類型,控制器的類型有如下4種:(1)OpenFlowReference控制器3.3.6Miniedit可視化工具的使用圖3-24Controller
Options及ControllerDetails界面3.3.6Miniedit可視化工具的使用這是Mininet自帶的控制器,是默認(rèn)的控制器的類型,它僅提供OpenFlow支持和自動(dòng)生成流表功能,不能通過(guò)此控制器手動(dòng)下發(fā)流表。(2)RemoteController控制器它是遠(yuǎn)程控制器,用戶選擇該模式并設(shè)置IP地址遠(yuǎn)程連接到外部控制器??梢赃B接OpenDayLight、ONOS等控制器,它能實(shí)現(xiàn)的功能由連接的控制器軟件決定,RemotoController本身無(wú)任何功能。(3)In-BandController控制器它是帶內(nèi)控制器,它其實(shí)也是遠(yuǎn)程控制器的一種,與RemoteController的區(qū)別不明顯。3.3.6Miniedit可視化工具的使用(4)OVSController控制器它是支持OVS的控制器,與OpenFlowReference控制器一樣均提供OpenFlow支持和自動(dòng)生成流表功能,但OVSController最多支持只能16個(gè)OVS,管理多于16個(gè)OVS時(shí)OVSController將無(wú)法自動(dòng)下發(fā)流表。8.Run控件運(yùn)行按鈕,單擊此按鈕將啟動(dòng)運(yùn)行拓?fù)洹?.Stop控件停止按鈕,單擊此按鈕將停止運(yùn)行拓?fù)?。MiniEdit菜單欄位于左上角,主要用于全局配置或進(jìn)行拓?fù)涞膶?dǎo)入導(dǎo)出操作,菜單欄如圖3-25所示。Mininet的菜單共有4個(gè),分別為File、Edit、Run和Help,詳細(xì)解析如下。3.3.7Miniedit菜單欄圖3-25MiniEdit菜單欄3.3.7Miniedit菜單欄1.File菜單File菜單主要用于拓?fù)湮募男陆?,打開、保存和MiniEdit的退出等操作。File下有5個(gè)菜單項(xiàng),分別為New、Open、Save、ExportLevel2Script。其中New菜單項(xiàng)用于新建一個(gè)拓?fù)?,Open菜單項(xiàng)用于打開保存好的拓?fù)湮募?,支持打開的類型是以.topo結(jié)尾的文件。Save菜單項(xiàng)用于保存拓?fù)湮募?,保存的拓?fù)湮募?topo后綴結(jié)尾。ExportLevel2Script菜單項(xiàng)用于將拓?fù)鋵?dǎo)出為.py結(jié)尾的Python文件,使用戶能夠在終端命令界面中執(zhí)行。Quit選項(xiàng)用于退出MiniEdit單擊File菜單后的顯示頁(yè)面如圖3-26所示。圖3-26File菜單2.Edit菜單Edit菜單主要用于拓?fù)涞娜峙渲?,Edit菜單項(xiàng)有2個(gè),分別是Cut和Preferences。其中Cut菜單項(xiàng)用于刪除畫布中創(chuàng)建的對(duì)象。Preferences菜單項(xiàng)用于打開拓?fù)淙峙渲貌藛?,用戶單擊Preferences菜單項(xiàng)會(huì)彈出對(duì)應(yīng)的配置窗口,配置窗口如圖3-27所示。3.3.7Miniedit菜單欄圖3-27Preferences配置窗口3.3.7Miniedit菜單欄從上圖可以看出,全局配置項(xiàng)主要有IPBase(基礎(chǔ)IP網(wǎng)段)、DefaultTerminal(默認(rèn)的終端命令行界面類型)、StartCLI(是否啟動(dòng)命令行,主要用于配置啟動(dòng)拓?fù)涫欠裢瑫r(shí)啟動(dòng)Mininet交互命令行,默認(rèn)為不啟動(dòng))、DefaultSwitch(設(shè)置默認(rèn)的交換機(jī)類型)、OpenvSwitch(配置交換機(jī)使用的OpenFlow協(xié)議)、sFlowProfileforOpenvSwitch(sflow監(jiān)控的服務(wù)端配置)、NetflowProfileforOpenvSwitch(Netflow監(jiān)控的服務(wù)端配置)、dpctlport(設(shè)置調(diào)用ovs-ofctl命令的端口)這幾項(xiàng)。①DefaultTerminal可選項(xiàng)有xterm和gterm,默認(rèn)為xterm。②DefaultSwitch可選項(xiàng)有OpenvSwitchKernelMode、IndigoVirtualSwitch、UserspaceSwitch、UserspaceSwitch幾種。DefaultSwitch的配置僅當(dāng)交換機(jī)屬性中的SwitchType的值為Default的時(shí)候生效,如果交換機(jī)屬性中的SwitchType的值不是Default,則交換機(jī)的類型以屬性中配置的為準(zhǔn)。3.Run菜單Run菜單主要用于啟動(dòng)、停止拓?fù)?、查看交換機(jī)統(tǒng)計(jì)信息,以及打開終端命令行。它的菜單項(xiàng)有Run、Stop、ShowOVSSummary、RootTerminal。其中Run、Stop與圖3-13中MiniEdit界面左下角的Run/Stop按鈕功能一致。ShowOVSSummary主要用于顯示當(dāng)前拓?fù)渲衞vs信息,作用與在OVS中執(zhí)行ovs-vsctl命令一致。RootTerminal菜單項(xiàng)主要是用于打開一個(gè)終端命令行界面,作用與在虛擬機(jī)中直接打開終端命令行無(wú)區(qū)別。4.Help菜單Help菜單主要用于簡(jiǎn)略介紹MiniEdit的作用,以及當(dāng)前使用的版本號(hào)、原創(chuàng)作者和官網(wǎng)地址等內(nèi)容。3.3.7Miniedit菜單欄3.3.8Miniedit導(dǎo)出拓?fù)涞姆绞組iniEdit導(dǎo)出拓?fù)淇梢苑譃閮煞N方式,一種是直接導(dǎo)出為topo文件,導(dǎo)出topo文件后用戶可以通過(guò)MiniEdit的Open菜單項(xiàng)重新打開,該方法可用于快捷備份和恢復(fù)拓?fù)?。另一種是導(dǎo)出python文件,相當(dāng)于將拓?fù)浣Y(jié)構(gòu)轉(zhuǎn)換為python腳本的方式存儲(chǔ),導(dǎo)出成功后,用戶可以直接通過(guò)python工具運(yùn)行文件,快捷啟動(dòng)一個(gè)拓?fù)洹#?)導(dǎo)出為topo文件導(dǎo)出為topo文件的詳細(xì)步驟如下。①用戶在MiniEdit中構(gòu)建完整拓?fù)浣Y(jié)構(gòu)后,單擊MiniEdit菜單欄中的File選項(xiàng),然后單擊Save選項(xiàng),將彈出選擇拓?fù)湮募4嫖恢茫瑥棾龃翱谌鐖D3-28所示。3.3.8Miniedit導(dǎo)出拓?fù)涞姆绞綀D3-28拓?fù)湮募4嫖恢玫臅?huì)話窗口②在保存會(huì)話窗口中按需求選擇Directory保存的目錄(默認(rèn)情況下是Mininet安裝目錄),在Filename輸入框填寫保存的文件名稱,隨后單擊Save按鈕進(jìn)行保存。(2)導(dǎo)出為python文件導(dǎo)出為python文件的詳細(xì)步驟如下。①用戶在MiniEdit中構(gòu)建完整拓?fù)浣Y(jié)構(gòu)后,單擊MiniEdit菜單欄中的File菜單項(xiàng),然后選擇ExportLevel2Script選項(xiàng),將彈出選擇拓?fù)湮募谋4嫖恢?,彈出窗口如圖3-29所示。3.3.8Miniedit導(dǎo)出拓?fù)涞姆绞舰趩螕鬌irectory下拉框,選擇文件保存的目錄,默認(rèn)情況下是用戶根目錄,在Filename輸入框填寫保存的文件名稱,隨后單擊Save按鈕進(jìn)行保存。提示:導(dǎo)出的文件如果沒(méi)有執(zhí)行權(quán)限,需要在終端命令行界面中執(zhí)行chmod+xFileName命令添加執(zhí)行權(quán)限。3.3.8Miniedit導(dǎo)出拓?fù)涞姆绞綀D3-29導(dǎo)出拓?fù)涞谋4嫖恢玫臅?huì)話窗口項(xiàng)目實(shí)踐任務(wù)規(guī)劃在公司服務(wù)器上通過(guò)模板創(chuàng)建一臺(tái)已經(jīng)初始化完成的虛擬機(jī),并在此機(jī)器上完成Mininet工具的安裝,具體可以通過(guò)以下幾個(gè)步驟完成。(1)在Mininet官網(wǎng)獲取Mininet工具的源碼包。(2)在虛擬機(jī)內(nèi)安裝Mininet工具。任務(wù)實(shí)施(1)登錄mininet虛擬機(jī),并打開終端命令行,測(cè)試虛擬機(jī)與外網(wǎng)的連通性,如執(zhí)行ping命令測(cè)試與外網(wǎng)的連通性。任務(wù)1源代碼部署Mininet工具root@mininet:~#ping-c1PING(74)56(84)bytesofdata.64bytesfrom74(74):icmp_seq=1ttl=128time=8.72ms---pingstatistics---1packetstransmitted,1received,0%packetloss,time0msrttmin/avg/max/mdev=8.727/8.727/8.727/0.000ms(2)在終端命令行中切換為root用戶身份,更新軟件源并安裝git工具。(3)通過(guò)git命令從Gitee獲取Mininet源代碼到root用戶根目錄下。(4)切換到mininet一鍵安裝腳本所在目錄,切換目錄后,通過(guò)ls命令可以查看當(dāng)前目錄下包含的文件。任務(wù)1源代碼部署Mininet工具classroom@mininet:~$su-root@mininet:~#aptupdate-yroot@mininet:~#aptinstallgitroot@mininet:~#gitclone/Jan16/mininet.gitroot@mininet:~#cd/root/mininet/util/root@mininet:~/mininet/util#lsbuild-ovs-packages.shclustersetup.shcolorfiltersdoxify.pyinstall.shkbuildmnox-patchesopenflow-patchessch_htb-ofbufsysctl_addonunpep8versioncheck.pyvm(5)使用“install.sh”腳本配合“-a”參數(shù)完整安裝mininet。在安裝過(guò)程中沒(méi)有出現(xiàn)error信息即為正常現(xiàn)象,默認(rèn)情況下mininet會(huì)安裝在源代碼包所在的目錄下,本任務(wù)中的目錄為/root。安裝完畢的提示如圖3-30所示?!癷nstall.sh”腳本中定義了一些特定的選項(xiàng)參數(shù),如“-a”參數(shù)代表完成安裝Mininet,安裝項(xiàng)包括OVS、OpenFlow協(xié)議支持、DefautlController、Pox、Nox、Ryu等,用戶可以通過(guò)./install.sh–help命令獲取幫助,查看腳本運(yùn)行時(shí)可支持的參數(shù)。任務(wù)1源代碼部署Mininet工具root@mininet:~/mininet/util#./install.sh-a圖3-30安裝完畢的提示任務(wù)驗(yàn)證(1)執(zhí)行【mn】命令,啟動(dòng)Mininet工具。任務(wù)1源代碼部署Mininet工具root@mininet:~#mn***Creatingnetwork***Addingcontroller***Addinghosts:h1h2***Addingswitches:s1***Addinglinks:(h1,s1)(h2,s1)***Configuringhostsh1h2***Startingcontrollerc0***Starting1switchess1...***StartingCLI:mininet>(2)在Mininet交互式命令行中執(zhí)行【nodes】命令查看拓?fù)渲械墓?jié)點(diǎn)情況。(3)在Mininet交互式命令行中執(zhí)行【pingall】命令測(cè)試拓?fù)溥B通性??梢钥闯觯?dāng)前Mininet拓?fù)渲袃膳_(tái)主機(jī)互相進(jìn)行了測(cè)試,而且0%丟失,說(shuō)明節(jié)點(diǎn)連通正常。任務(wù)1源代碼部署Mininet工具mininet>nodesavailablenodesare:c0h1h2s1mininet>pingall***Ping:testingpingreachabilityh1->h2h2->h1***Results:0%dropped(2/2received)任務(wù)1源代碼部署Mininet工具(4)在Mininet交互式命令行中執(zhí)行【dump】命令,查看拓?fù)涔?jié)點(diǎn)的詳細(xì)情況。從上面的執(zhí)行結(jié)果可以看出,當(dāng)前主機(jī)h1的IP是,進(jìn)程號(hào)是33060;主機(jī)h2的IP是,進(jìn)程號(hào)是33062;OVSs1的本地IP為,兩個(gè)接口eth1和eth2均沒(méi)有IP地址,進(jìn)程號(hào)是33067;而控制器c0的IP是,監(jiān)聽端口為6653,進(jìn)程號(hào)為33053。mininet>dump<Hosth1:h1-eth0:pid=33060><Hosth2:h2-eth0:pid=33062><OVSSwitchs1:lo:,s1-eth1:None,s1-eth2:Nonepid=33067><Controllerc0::6653pid=33053>任務(wù)規(guī)劃在任務(wù)1中已經(jīng)完成了Mininet工具的安裝,解決了模擬SDN環(huán)境的問(wèn)題,工程師現(xiàn)在需要編寫Python腳本構(gòu)建拓?fù)洌負(fù)浣Y(jié)構(gòu)如圖3-31所示。任務(wù)2使用Python語(yǔ)言編寫Mininet腳本圖3-31網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)在拓?fù)湟?guī)劃完成后,可以通過(guò)以下步驟完成拓?fù)錁?gòu)建。(1)登錄Mininet虛擬機(jī),切換root用戶身份。(2)根據(jù)拓?fù)湟?guī)劃,使用vim命令編寫Python腳本。(3)執(zhí)行Python腳本定義的拓?fù)洵h(huán)境。任務(wù)實(shí)施1.登錄mininet虛擬機(jī),打開終端命令行,并切換為root用戶身份。2.根據(jù)拓?fù)湟?guī)劃,使用vim命令編寫Python腳本任務(wù)2使用Python語(yǔ)言編寫Mininet腳本classroom@mininet:~$su- #切換身份時(shí)需要輸入root用戶的密碼(1)使用vim命令編寫腳本,腳本名稱為topo.py。任務(wù)2使用Python語(yǔ)言編寫Mininet腳本root@mininet:~#vimtopo.py#!/usr/bin/python #調(diào)用python解釋器fromimport* #導(dǎo)入構(gòu)建拓?fù)湫枰褂玫膍ininet類frommininet.nodeimport*frommininet.linkimport*frommininet.logimport*frommininet.cleanimport*frommininet.cliimport*frommininet.utilimport*#初始化Mininet參數(shù),設(shè)置主機(jī)類型、鏈路類型和交換機(jī)類型net=Mininet(host=CPULimitedHost,link=TCLink,switch=OVSBridge)s1=net.addSwitch('s1') #創(chuàng)建交換機(jī)s1、s2和s3s2=net.addSwitch('s2')s3=net.addSwitch('s3')h1=net.addHost('h1') #創(chuàng)建主機(jī)h1和h2h2=net.addHost('h2')任務(wù)2使用Python語(yǔ)言編寫Mininet腳本(2)通過(guò)【mn】命令執(zhí)行python腳本。net.addLink(s1,s2) #添加交換機(jī)與交換機(jī)、交換機(jī)與主機(jī)之間的連接net.addLink(s1,s3)net.addLink(s2,h1)net.addLink(s3,h2)net.start() #啟動(dòng)拓?fù)鋏ract() #啟動(dòng)網(wǎng)絡(luò)并運(yùn)行簡(jiǎn)單的CLIroot@mininet:~#mn--customtopo.pymininet>mininet>nodesavailablenodesare:h1h2s1s2s3任務(wù)驗(yàn)證(1)查看當(dāng)前拓?fù)淇捎玫墓?jié)點(diǎn)信息。從執(zhí)行結(jié)果中可以看出,當(dāng)前拓?fù)湟呀?jīng)有5個(gè)設(shè)備,設(shè)備名稱分別是h1、h2、s1、s2。(2)查看當(dāng)前拓?fù)渲械逆溄有畔?。從?zhí)行結(jié)果中可以看出,當(dāng)前拓?fù)湟呀?jīng)符合預(yù)設(shè)要求。任務(wù)2使用Python語(yǔ)言編寫Mininet腳本mininet>nodesavailablenodesare:h1h2s1s2s3mininet>nodesavailablenodesare:h1h2s1s2s3mininet>neth1h1-eth0:s2-eth2h2h2-eth0:s3-eth2s1lo:s1-eth1:s2-eth1s1-eth2:s3-eth1s2lo:s2-eth1:s1-eth1s2-eth2:h1-eth0s3lo:s3-eth1:s1-eth2s3-eth2:h2-eth0(3)查看當(dāng)前拓?fù)涓鞴?jié)點(diǎn)中的網(wǎng)絡(luò)信息和進(jìn)程信息。從執(zhí)行結(jié)果中可以看出,主機(jī)通過(guò)DHCP服務(wù)獲取到了IP地址,并且交換機(jī)類型為OVSBridge,主機(jī)類型為CPULimited。(4)測(cè)試當(dāng)前拓?fù)涞倪B通性。從執(zhí)行結(jié)果中可以看出,當(dāng)前拓?fù)涓髦鳈C(jī)之間通信正常。任務(wù)2使用Python語(yǔ)言編寫Mininet腳本mininet>dump<CPULimitedHosth1:h1-eth0:pid=47247><CPULimitedHosth2:h2-eth0:pid=47254><OVSBridges1:lo:,s1-eth1:None,s1-eth2:Nonepid=47236><OVSBridges2:lo:,s2-eth1:None,s2-eth2:Nonepid=47239><OVSBridges3:lo:,s3-eth1:None,s3-eth2:Nonepid=47242>mininet>pingall***Ping:testingpingreachabilityh1->h2h2->h1***Results:0%dropped(2/2received)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣東環(huán)境保護(hù)工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)及參考答案詳解1套
- 2026年福州大學(xué)至誠(chéng)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)及參考答案詳解1套
- 2026年鐵嶺衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)含答案詳解
- 2026年寶雞職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及參考答案詳解
- 2026年華東政法大學(xué)單招職業(yè)技能測(cè)試題庫(kù)帶答案詳解
- 2026年河北對(duì)外經(jīng)貿(mào)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及參考答案詳解一套
- 2026年黎明職業(yè)大學(xué)單招職業(yè)適應(yīng)性考試題庫(kù)及答案詳解一套
- 2026年塔城職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)及參考答案詳解一套
- 2026年衡陽(yáng)幼兒師范高等??茖W(xué)校單招職業(yè)技能測(cè)試題庫(kù)及答案詳解1套
- 2026年河南省南陽(yáng)市單招職業(yè)適應(yīng)性考試題庫(kù)及參考答案詳解1套
- 2025年國(guó)家電網(wǎng)考試試題及答案
- 駕駛安全文明駕駛培訓(xùn)課件
- 無(wú)人機(jī)應(yīng)用技術(shù)專業(yè)開設(shè)論證報(bào)告
- 海爾智家應(yīng)收賬款管理優(yōu)化研究
- 十五五特殊教育發(fā)展提升行動(dòng)計(jì)劃
- 原料采購(gòu)定價(jià)管理辦法
- 農(nóng)商行數(shù)據(jù)安全管理辦法
- 20.3課題學(xué)習(xí) 體質(zhì)健康測(cè)試中的數(shù)據(jù)分析課件 2025年春人教版數(shù)學(xué)八年級(jí)下冊(cè)
- 架梁安全培訓(xùn)課件
- 造價(jià)咨詢項(xiàng)目工作實(shí)施方案
- 不合格食品管理制度
評(píng)論
0/150
提交評(píng)論