1 實驗目的
熟悉Mininet自定義拓撲三種實現方式:命令行創建、Python腳本編寫、交互式界面創建。
2 實驗原理
Mininet 是一個輕量級軟件定義網絡和測試平臺;它採用輕量級的虛擬化技術使一個單一的系統看起來像一個完整的網絡運行想過的內核系統和用戶代碼,也可簡單理解爲 SDN 網絡系統中的一種基於進程虛擬化平臺,它支持 OpenFlow、OpenvSwith 等各種協議,Mininet 也可以模擬一個完整的網絡主機、鏈接和交換機在同一臺計算機上且有助於互動開發、測試和演示,尤其是那些使用 OpenFlow 和 SDN 技術;同時也可將此進程虛擬化的平臺下代碼遷移到真實的環境中。
3 實驗內容
1.命令行創建拓撲,這裏舉4個例子
(1)最小的網絡拓撲,一個交換機下掛兩個主機。
sudo mn --topo minimal
(2)每個交換機連接一個主機,交換機間相連接。本例:4個主機,4個交換機
sudo mn --topo linear,4
(3)每個主機都連接到同一個交換機上。本例:3個主機,一個交換機。
sudo mn --topo single,3
(4)定義深度和扇出形成基於樹的拓撲。本例:深度2,扇出2。
sudo mn --topo tree, fanout=2,depth=2
2 在腳本文件內輸入代碼然後通過指令運行
(1)--linear,4:在裝有Mininet鏡像的虛擬機中新建腳本文件我給他命名爲num4.py,添加以下內容:
我在mininet/mininet/examples/test裏面創建的(首先先要sudo su進入開發者模式,然後再用gedit 以py爲後綴的文件名創建python腳本文件然後輸入下面的東西)
from mininet.net import Mininet
from mininet.topo import LinearTopo
Linear4 = LinearTopo(k=4) #四個交換機,分別下掛一個主機
net = Mininet(topo=Linear4)
net.start()
net.pingAll()
net.stop()
然後把它修改爲可執行文件
chmod +x num4.py
最後運行這個腳本
sudo python num4.py
(2)一個交換機下掛3個主機:同樣的,我們在single3這個python腳本文件裏面重複相同的操作
from mininet.net import Mininet
from mininet.topo import SingleSwitchTopo
Single3 = SingleSwitchTopo(k=3) #一個交換機下掛3個主機
net = Mininet(topo=Single3)
net.start()
net.pingAll()
net.stop()
(3)樹形拓撲(注:深度表示的是“樹枝”的分化次數,扇出表示“樹枝”每次分化的時候分化多少gen)
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()
(此處那兩個2是因爲我把腳本文件裏面的兩個變量改成了輸入的形式)
(4) 如果是非上述三種類型的拓撲,那麼下面介紹一種適合各種拓撲形式的腳本創建模式。本例:1個交換機,2個主機,並且賦予主機IP地址
from mininet.net import Mininet
net = Mininet()
# 創建網絡節點
c0 = net.addController()
h0 = net.addHost('h0')
s0 = net.addSwitch('s0')
h1 = net.addHost('h1')
# 創建兩節點之間的連接
net.addLink(h0, s0)
net.addLink(h1, s0)
# 在接口處配置ip地址
h0.setIP('192.168.1.1', 24)
h1.setIP('192.168.1.2', 24)
# 啓動
net.start()
net.pingAll()
net.stop()
結果如下:
(5)除了可以通過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()
三 交互式界面創建主機、交換機等並且測試網絡
sudo mn
py net.addHost('h3')
# 添加主機h3
py net.addLink(s1,net.get('h3'))
# 創建主機h3和s1的連接
py s1.attach('s1-eth3')
# 給交換機s1添加端口eth3用於連接h3
py net.get('h3').cmd('ifconfig h3-eth0 10.3')
# 給h3賦予IP(10.0.0.3)
h1 ping -c1 10.3
# h1 ping h3
px from mininet.util import dumpNodeConnections
py dumpNodeConnections(net.hosts)
# 測試網絡,展示所有的網絡信息
py net.pingAll()
# 所有節點的ping測試
這裏有33%的掉包想請大佬指教一下是怎麼回事
總結:
1.明白的腳本的具體運行方式和編輯方式以及腳本的簡要內容
2.不明白爲什麼會丟包