mininet 應用實踐

教學目的與學時建議

  1. 能夠運用 mininet 可視化工具創建計算機網絡拓撲結構
  2. 能夠運用 mininet 交互界面創建拓撲結構
  3. 能夠運用 python 腳本構建計算機網絡拓撲結構
  4. 建議:2 學時

實驗環境

  1. 下載并安裝虛擬機 VMware workstation;
  2. 下載虛擬機鏡像( SDNHub_tutorial_VM_64-bit[NEW](可直接導入 VMware).ova ),百度網盤下載鏈接?提取碼:mhfi
  3. 因為虛擬機鏡像是ova格式,所以只需要打開即可使用,無需創建新的虛擬機。
  4. 還有使用命令行安裝包的方式來安裝,參考文章

技術與知識背景

1,什么是 Mininet?

  1. Mininet 是由一些虛擬的終端節點(end-hosts)、交換機、路由器連接而成的一個網絡仿真器,是一個輕量級軟件定義網絡和測試平臺;它采用輕量級的虛擬化技術使一個單一的系統看起來像一個完整的網絡運行想過的內核系統和用戶代碼,也可簡單理解為 SDN 網絡。
  2. 系統中的一種基于進程虛擬化平臺,它支持 OpenFlow、OpenvSwith 等各種協議,Mininet 也可以模擬一個完整的網絡主機、鏈接和交換機在同一臺計算機上且有助于互動開發、測試和演示,尤其是那些使用 OpenFlow 和 SDN 技術;同時也可將此進程虛擬化的平臺下代碼遷移到真實的環境中。
  3. Mininet 可以很方便地創建一個支持 SDN 的網絡:host 就像真實的電腦一樣工作,可以使用 ssh 登錄,啟動應用程序,程序可以向以太網端口發送數據包,數據包會被交換機、路由器接收并處理。有了這個網絡,就可以靈活地為網絡添加新的功能并進行相關測試,然后輕松部署到真實的硬件環境中。

?2,Mininet 的特性:

  1. 可以簡單、迅速地創建一個支持用戶自定義的網絡拓撲,縮短開發測試周期
  2. 可以運行真實的程序,在 Linux 上運行的程序基本上可以都可以在 Mininet 上運行,如 Wireshark
  3. Mininet 支持 Openflow,在 Mininet 上運行的代碼可以輕松移植到支持OpenFlow 的硬件設備上
  4. Mininet 可以在自己的電腦,或服務器,或虛擬機,或者云(例如 Amazon EC2)上運行
  5. Mininet 提供 python API,簡單易用
  6. Mininet 是開源項目

3,Mininet 部分命令

4,命令操作

  • 終端輸入mn,可以創建一個簡單的網絡,創建完成之后,命令行變為mininet>
  • Mininet>iperf <node id> <node id>—兩個節點之間的網絡性能測試

  • Mininet><node id> route—類似于Linux命令,用于定義節點路由表中的條目

  • Mininet>help

  • Mininet>nodes

  • Mininet>net

???????

  • Mininet>pingall

???????

  • Mininet>dump

???????

  • Mininet>h1 ping h2

???????

  • Mininet>h2 ifconfig

???????

  • Mininet>xterm h1

???????

  • Mininet>exit

???????

  • 更多操作命令

測試Mininet是否正常工作

  • 要快速檢查它是否工作,請鍵入以下命令:
  • 此命令將:
  • 創建一個單一網絡,其中3臺主機以非交互模式連接到單個交換機。
  • 執行從所有主機到所有其他主機的ping。
  • 此命令使用默認的交換機與控制器。
 sudo mn --test pingall --topo single,3
  • ??????????????????命令講解

???????

創建拓撲

  • 運用mininet可視化工具創建網絡拓撲結構
  • 運用mininet命令行工具創建網絡拓撲結構
  • 運用mininet交互界面創建網絡拓撲結構
  • 運用python腳本構建網絡拓撲結構
  • 參考博客

基本命令行參數 ——后面會用得到

  1. --topo—在mininet啟動時通過命令行定義拓撲
  2. --switch—定義要使用的交換機。默認情況下,使用ovsk軟件交換機
  3. --controller—定義要使用的控制器。如果未指定默認控制器,作為集線器使用

可視化工具創建拓撲

  • 導入鏡像后,默認處在/home/ubuntu的位置,可以使用pwd來查看當前的路徑,動態調整。進入/home/ubuntu/mininet/examples文件夾,使用命令cd
  • 使用命令sudo su,切換到root身份,執行python miniedit.py啟動可視化界面
  • 按照下面的操作步驟和頁面布局進行操作

  • 右鍵點擊圖標,選中preferences,對網絡拓撲結構進行相關配置,此處使用默認配置,即不進行任何操作。
  • ?“Edit”→“Preferences”,勾選 strat CLI(允許通過交互界面對拓撲結構進行調整),選擇所支持 Openflow 協議版本。

  • 保存為 python 文件,選擇“File”→“Export Level 2 Script”,起一個名字,在終端運行保存下來的 python 文件即可。
  • 或者點擊左下角的run運行,如果需要停止,則點擊stop即可。

命令行創建拓撲

  • 最小網絡,兩臺主機連接到一臺交換機。
  • sudo mn –topo minimal

?

  • 每個主機都連接到一個交換機,所有交換機都彼此連接。
  • 在本例中,有4個主機和4個交換機。
  • sudo mn --topo linear,4

  • 下圖純屬虛構,請以實物為準

?

  • 每個主機都連接到一個交換機。
  • 在本例中,有3個主機和1個交換機。
  • sudo mn --topo single,3

  • 下圖純屬虛構,請以實物為準

?

  • 具有定義深度和扇出的基于樹的拓撲。
  • sudo mn --topo tree,depth=2,fanout=2

  • 下圖純屬虛構,請以實物為準

?

交互式創建拓撲

啟動參數總結

  • -h, --help??????? show this help message and exit
  • --switch=SWITCH??????? [kernel user ovsk]
  • --host=HOST??????? [process]
  • --controller=CONTROLLER??????? [nox_dump none ref remote nox_pysw]
  • --topo=TOPO??????? [tree reversed single linear minimal],arg1,arg2,...argN
  • -c, --clean???????? clean and exit
  • --custom=CUSTOM??????? read custom topo and node params from .py file
  • --test=TEST??????? [cli build pingall pingpair iperf all iperfudp none]
  • -x, --xterms??????? spawn xterms for each node
  • --mac??????? set MACs equal to DPIDs
  • --arp??????? set all-pairs ARP entries
  • -v VERBOSITY, --verbosity=VERBOSITY??????? [info warning critical error debug output]
  • --ip=IP??????? [ip address as a dotted decimal string for aremote controller]
  • --port=PORT??????? [port integer for a listening remote controller]
  • --innamespace??????? sw and ctrl in namespace?
  • --listenport=LISTENPORT??????? [base port for passive switch listening controller]
  • --nolistenport??????? don't use passive listening port
  • --pre=PRE??????? [CLI script to run before tests]
  • --post=POST????????? [CLI script to run after tests]

python 腳本定義拓撲

  • 用 python 腳本創建與上述對應拓撲,創建完后的文件需要增加可執行權限chmod +x test.py,還是用sudo python test.py執行。
  • --topo linear,4
  • 操作:

  1. 新建名字為linear的python文件 touch linear.py
  2. 賦予權限 chmod +x linear.py
  3. 對文件進行寫入操作 vi linear.py
  4. 將下文的代碼復制黏貼到linear.py文件中,先按下i,進行輸入操作;鼠標右鍵,選擇黏貼代碼;按下Esc按鍵,同時按下shift和:按鍵,然后輸入wq保存代碼;*代碼里面不可以包含中文,否則會報錯,也可以添加# -*- coding: utf8 -*-改變編碼格式,解決代碼包含中文的問題
  5. 運行代碼 sudo python linear.py
  6. 查看輸出
  • 代碼

from mininet.net import Mininet
from mininet.topo import LinearTopo
Linear4 = LinearTopo(k=4) 
net = Mininet(topo=Linear4)
net.start()
net.pingAll()
net.stop()
  • 實踐

?

  • --topo single,3
  • 操作:
  1. 新建名字為single的python文件 touch single.py
  2. 賦予權限 chmod +x single.py
  3. 對文件進行寫入操作 vi single.py
  4. 將下文的代碼復制黏貼到single.py文件中,先按下i,進行輸入操作;鼠標右鍵,選擇黏貼代碼;按下Esc按鍵,同時按下shift和:按鍵,然后輸入wq保存代碼;
  5. 運行代碼 sudo python single.py
  6. 查看輸出
  • 代碼:
from mininet.net import Mininet
from mininet.topo import SingleSwitchTopo
Single3 = SingleSwitchTopo(k=3) 
net = Mininet(topo=Single3)
net.start()
net.pingAll()
net.stop()
  • 實踐

?

  • --topo tree,depth=2,fanout=2
  • 操作:
  1. 新建名字為tree的python文件 touch tree.py
  2. 賦予權限 chmod +x tree.py
  3. 對文件進行寫入操作 vi tree.py
  4. 將下文的代碼復制黏貼到tree.py文件中,先按下i,進行輸入操作;鼠標右鍵,選擇黏貼代碼;按下Esc按鍵,同時按下shift和:按鍵,然后輸入wq保存代碼;
  5. 運行代碼 sudo python tree.py
  6. 查看輸出
  • 代碼:
from mininet.net import Mininet
from mininet.topolib import TreeTopo
Tree22 = TreeTopo(depth=2,fanout=2)
net = Mininet(topo=Tree22)
net.start()
net.pingAll()
net.stop()
  • 實踐

?

  • 對于性能的限制
  • 操作:
  1. 新建名字為test的python文件 touch test.py
  2. 賦予權限 chmod +x test.py
  3. 對文件進行寫入操作 vi test.py
  4. 將下文的代碼復制黏貼到test.py文件中,先按下i,進行輸入操作;鼠標右鍵,選擇黏貼代碼;按下Esc按鍵,同時按下shift和:按鍵,然后輸入wq保存代碼;
  5. 運行代碼 sudo python test.py
  6. 查看輸出
  • 講解:

除了可以通過Python腳本創建基本的拓撲以外,還能在此基礎上對性能進行限制。觀察下面給出的腳本文件,addHost()語法可以對主機cpu進行設置,以百分數的形式;addLink()語法可以設置帶寬bw、延遲delay、最大隊列的大小max_queue_size、損耗率loss。

  • 代碼:
from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
net = Mininet(host=CPULimitedHost, link=TCLink)
c0 = net.addController()
s0 = net.addSwitch('s0')
h0 = net.addHost('h0')
h1 = net.addHost('h1', cpu=0.5)
h2 = net.addHost('h1', cpu=0.5)
net.addLink(s0, h0, bw=10, delay='5ms',
max_queue_size=1000, loss=10, use_htb=True)
net.addLink(s0, h1)
net.addLink(s0, h2)
net.start()
net.pingAll()
net.stop()
  • 實踐

??????????????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447239.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447239.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447239.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用百度大腦,導入aip以及相應的庫文件報錯問題

參考文章 github鏈接地址 具體操作 pip install githttps://github.com/Baidu-AIP/python-sdk.gitmasterfrom aip import 對應服務即可

一個通用的makefile寫法,自動推導文件的依賴關系

溫習之用。 假設有兩個頭文件目錄 header1,header2;兩個cpp文件目錄,src1,src2,一個lib目錄 寫一個完整的makefile步驟如下&#xff1a; 1 定義可執行文件的名稱 TARGET MyPro 2 指定此編譯工程所要使用的頭文件所在的目錄 INC -I. -Iheader1 -Iheader2 3 指…

實現基于darknet框架實現CTPN版本自然場景文字檢測 與CNN+CTCOCR文字識別的ChineseOCR搭建

Github地址 Github源碼地址 支持系統:mac/ubuntu python3.6 實現功能 文字檢測&#xff1b; 文字識別&#xff1b; 支持GPU/CPU&#xff0c;CPU優化&#xff08;opencv dnn&#xff09; docker鏡像服務&#xff08;CPU優化版本&#xff09; 下載鏡像 鏈接:https://pan.baidu…

50個c/c++源代碼網站

C/C是最主要的編程語言。這里列出了50名優秀網站和網頁清單&#xff0c;這些網站提供c/c源代碼。這份清單提供了源代碼的鏈接以及它們的小說明。我已盡力包括最佳的C/C源代碼的網站。這不是一個完整的清單&#xff0c;您有建議可以聯系我&#xff0c;我將歡迎您的建議&#xff…

在服務器上搭建基于yolo3 與crnn 實現中文自然場景文字檢測及識別,GPU版本

Github地址 參考地址作者大人&#xff0c;十分熱心&#xff0c;對于我的問題&#xff0c;提供了大量的幫助&#xff0c;使我少走了很多的彎路&#xff0c;在此表示由衷的感謝 注意事項 使用nvidia-smi命令查看cuda的版本&#xff0c;必須是10.1或者10.0&#xff0c;10.2是萬萬…

python TypeError can only concatenate tuple not str to tuple

原因分析 這個錯誤出現是因為執行元組之間的合并例子 tuple1 ("str",1,["a","b","c"],4) tuple2 ("hello",) print(tuple1[0]) print (tuple1[1:3]) print (tuple1[1:]) print (tuple2 * 2) print (tuple1tuple2) 注意事…

23種設計模式 -比喻

1、FACTORY—追MM少不了請吃飯了&#xff0c;麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西&#xff0c;雖然口味有所不同&#xff0c;但不管你帶MM去麥當勞或肯德基&#xff0c;只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory (下載源碼就到源碼網:…

python 版本2和3 在/取模方面的的差異

注意事項 python2 使用 /python3 使用 // 例子 二分法取數值 def binary_search(search_list,target):left 0right len(search_list) - 1while left < right:mid (left right) // 2if search_list[mid] < target:left mid 1continueif search_list[mid] target:r…

vc中調用其他應用程序的方法(函數) winexec,shellexecute ,createprocess

三個SDK函數: WinExec&#xff0c;ShellExecute &#xff0c;CreateProcess可以實現調用其他程序的要求&#xff0c;其中以WinExec最為簡單&#xff0c;ShellExecute比WinExec靈活一些&#xff0c;CreateProcess最為復雜。WinExec 兩個參數&#xff0c;前一個指定路徑&#xf…

算法入門篇 一 時間復雜度

時間復雜度 要求&#xff1a;只要高階項&#xff0c;不要低階項常數操作&#xff1a;操作花費的時間和數據量無關&#xff0c;比如數組尋址&#xff0c;直接利用偏移量找到對應元素的位置&#xff1b;非常數操作&#xff1a;比如list(鏈表)&#xff1b;查找元素需要遍歷鏈表&a…

遍歷文件夾下所有文件和文件夾

1 void find(char * lpPath){char szFind[MAX_PATH];WIN32_FIND_DATA FindFileData;strcpy(szFind,lpPath);strcat(szFind,"*.*");HANDLEhFind::FindFirstFile(szFind,&FindFileData);if(INVALID_HANDLE_VALUE hFind)  return;while(TRUE){if(FindFileData.dw…

算法入門篇二 認識O(NlogN)的排序

遞歸 例子引出 使用遞歸的方法求出數組中的最大值&#xff08;利用的是棧&#xff09;求中點的方法改進 mid (left right) / 2 //但是如果left和right的數很大&#xff0c;相加會造成內容溢出 改進為 mid left (right - left) / 2 //(right - left)得到整個的長度&…

算法入門篇三 詳解桶排序和整理排序知識 堆的相關操作 補充 不完整

歸并排序不使用遞歸 使用一個變量&#xff0c;使其按照1、2、4、8遞增&#xff0c;控制左右兩邊1個元素、2個元素、4個元素等元素的合并 完全二叉樹 完全二叉樹 要不全是滿的&#xff0c;要不葉子節點出現在最后一層&#xff0c;只要出現了葉子節點&#xff0c;后面的都是葉子…

C++著名程序庫

1、C各大有名庫的介紹——C標準庫標準庫中提供了C程序的基本設施。雖然C標準庫隨著C標準折騰了許多年&#xff0c;直到標準的出臺才正式定型&#xff0c;但是在標準庫的實現上卻很令人欣慰得看到多種實現&#xff0c;并且已被實踐證明為有工業級別強度的佳作。 1.1、Dinkumware…

2023年12月24日學習總結

今日to do list&#xff1a; 做kaggle上面的流量預測項目?? 學習時不刷手機&#x1f921; okkkkkkkkkkkkkk 開始&#x1f44d;&#x1f34e; 0、我在干什么&#xff1f; 我在預測一個名字叫做elborn基站的下行鏈路流量&#xff0c;用過去29天的數據預測未來10天的數據 1、…

Mac/Linux系統連接遠端服務器以及相同IP地址的服務器賬號密碼重置,ssh失敗問題

連接遠端服務器 ssh 賬號IP地址 輸入完成之后會提示輸入密碼&#xff0c;密碼輸入正確后&#xff0c;就可以連接成功了 重置ssh密鑰 如果連接的服務器除了IP地址沒有改變&#xff0c;其余的賬號、密碼、系統等都變了的話&#xff0c;因為曾經連接過的歷史數據會保存到本地&a…

內存泄漏快速定位方法

主要方法&#xff1a;利用系統帶的函數&#xff1a;EnableMemLeakCheck() 和函數重載&#xff0c;能快速準備的定位到內存泄漏的地方&#xff0c;方法簡單且實用&#xff0c;值得借用。 #include <crtdbg.h> #ifdef_DEBUG //重載一下new函數&#xff0c;這樣能得到使…

Linux操作系統監視NVIDIA的GPU使用情況

對于GPU相關參數介紹 使用命令周期性查看GPU運行情況最常用的參數是 -n&#xff0c; 后面指定是每多少秒來執行一次命令。監視顯存&#xff1a;設置為每 1s 顯示一次顯存的情況&#xff1a;使用命令ctrlz退出 watch -n 1 nvidia-smi 參數介紹 Fan&#xff1a;顯示風扇轉速&am…

一個軟件工程師的職業規劃

[1]好好規劃自己的路&#xff0c;不要跟著感覺走&#xff01;根據個人的理想決策安排&#xff0c;絕大部分人并不指望成為什么院士或教授&#xff0c;而是希望活得滋潤一些&#xff0c;爽一些。那么&#xff0c;就需要慎重安排自己的軌跡。從哪個行業入手&#xff0c;逐漸對該行…

算法入門篇四 桶排序

桶排序 計數排序&#xff08;基于統計&#xff09; 要求數據是有限的&#xff0c;和數據狀況有關&#xff0c;比如對于200個人統計他們的年齡分布&#xff0c;這個時候需要申請200個桶&#xff0c;因此對于輸入數據的規模有限制&#xff0c;如果輸入規模是不定的&#xff0c;…