Test connectivity between hosts
驗證h1可以ping通h2
h1 ping h2 -c 1

現在第一主機知道的第二個IP位址,并且可以通過ICMP ping 來回應要求
重複前一條指令
這次 ping 的時間将比第一次低的多, A flow entry covering ICMP ping traffic was previously installed in the switch, so no control traffic was generated, and the packets immediately pass through the switch.
使用
pingall
指令可以讓每一個節點直接都産生上面的效果。
Run a simple web server and client
我們不單可以在主機上面運作ping指令,每一條 Linux下的指令或者程式都可以在 Mininet 中運作:
接下來,嘗試開始于h1啟動一個簡單的HTTP伺服器上,然後從h2送出請求,最後關閉Web伺服器:
h1 python -m SimpleHTTPServer 80 &
h2 wget h1
h1 kill %python
退出mininet互動指令:
mininet>exit
如果mininet出于某種原因崩潰,可以用下面指令來清理:
sudo mn -c
Part 2: 進階選項Advanced Startup Options
回歸測試Run a Regression Test
Mininet 可以用于直接運作回歸測試,不一定要切換到他的 CLI 下面。
運作回歸測試:
sudo mn --test pingpair
這條指令會建立一個小的拓撲結構,然後啟動 OpenFLow 的控制器,然後跑 ping 測試,最後再把拓撲結構跟控制器關掉。
還有一直常用的測試是iperf(完成這個測試大概需要10s 鐘):
sudo mn --test iperf
此指令建立的相同Mininet,并在其中一台 host 上面跑 iperf server, 然後在另外一台 host 上面運作iperf client 然後解析取得帶寬情況。
更改拓撲結構大小和類型 Changing Topology Size and Type
Mininet 預設的拓撲結構是由兩台 host 以及一台交換機組成的,你可以用–topo參數來更改拓撲結構。
假設你要在一個交換機與三台 host 之間做 ping 探測驗證(verify all-pairs ping connectivity)。
運作回歸測試:
sudo mn --test pingall --topo single,3
另一個例子中,使用線性拓撲(其中每個交換機配有一個主機,并且所有的交換機連接配接在一起):
sudo mn --test pingall --topo linear,4
鍊路變化 Link variations
Mininet2.0允許你設定連接配接參數,甚至可以通過指令行實作自動化設定:
$ sudo mn --link tc,bw=10,delay=10ms
mininet> iperf
mininet> h1 ping -c10 h2
上面的設定每兩個節點之間的延遲是10ms,因為 ICMP 請求傳過了兩條鍊路(一次是到大交換機,一次到達主機),往返時間(RRT)就應該是40ms。
你還可以使用 PythonAPI 來做更多的事兒,不過現在我們先繼續往下演練。
調整輸出資訊Adjustable Verbosity
Mininet預設輸出資訊的級别是 Info,Info級别會輸出 Mininet的詳細資訊。
我們也可以通過 -v參數來設定輸出DEBUG資訊。
$ sudo mn -v debug
mininet> exit
這樣會列印出更多額外的細節。現在嘗試一下output參數,這樣可以在 CLI 中列印更少的資訊。
$ sudo mn -v output
mininet> exit
除了上面的幾個級别,還有其他的級别可以使用,比如warning等
Custom Topologies自定義拓撲結構
在custom/topo-2sw-2host.py中是一個例子可以拿來參考,我們可以看到通過 PythonAPI 我們可以很簡單的來定義拓撲結構。
這個例子直接連接配接兩台交換機,每個交換機帶有一台主機。
我們提供一個自定義的mininet 檔案,就可以建立新的拓撲結構、交換機類型。
我們在指令行裡面測試一下:
ID= MAC
預設情況下,host 的 mac 位址是随機配置設定的。這會導緻每次 mininet 建立的時候,MAC位址都會改變,這會給調試帶來一些困難
–mac參數可以解決上面的問題,例子如下:
之前:
$ sudo mn
mininet> h1 ifconfig
使用–mac參數:
$ sudo mn --mac
mininet> h1 ifconfig
XTerm Display xterm屏顯
為了友善更複雜的調試工作,可以使用 mininet 的 xterms
可以通過x選項來給每一個 host 與交換機啟動一個xterm。
sudo mn -x
後一秒鐘,在xterm終端會彈出,并且具有自動設定視窗的名稱(h1,h2…)。
或者,您也可以用下面的方式打開更多的xterm。
預設情況下,僅僅 host 需要一個namespace,而交換機的視窗則不用(與政策的終端類似)
but can be a convenient place to run and leave up switch debug commands, such as flow counter dumps.
在你想看到互動指令的時候,xterm 很有用,但是如果你僅僅想看到輸出資訊,那你可能想停掉 xterm
例如:
在switch: s1 (root)的 xterm下面運作:
dpctl dump-flows tcp:127.0.0.1:6634
因為交換機中沒有資料流量,是以不會有資訊輸出。
To use dpctl with other switches, start up mininet in verbose mode and look at the passive listening ports for the switches when they’re created.
現在,在host: h1的xterm中運作:
# ping 10.0.0.2
回到s1的 xterm中檢視:
# dpctl dump-flows tcp:127.0.0.1:6634
現在就可以看見資料流了。
另外我們可以直接用dpctl指令直接調用 Mininet CLI 裡面的指令,而不需要啟動任何xterm或者指定交換機的IP 跟端口。
我們看已認證ifconfig指令來判斷xterm 是否在root的名字空間下,如果所有的網卡都顯示出來(包含eth0),那他就是在root下。
Other Switch Types 其他類型的交換機
我們可以使用不同的交換機類型。例如:運作 user-space 交換機:
$ sudo mn --switch user --test iperf
值得注意的是這種交換機下,帶寬相比于前面的核心态交換機要小的多。
如果做 ping 探測,也會有更高的延遲,這是因為現在的資料包需要從核心态轉換到使用者空間,消耗了更多的資源。
另一方面,使用者空間的交換機會有一些新功能,如果交換機的性能不是關鍵問題是的時候。
在 Mininet 虛拟機中預裝了另外一個交換機類型是 Open vSwitch(OVS),在iperf測試中,帶寬會比核心态交換機更大。
$ sudo mn --switch ovsk --test iperf
Mininet Benchmark
To record the time to set up and tear down a topology, use test ‘none’:
$ sudo mn --test none
Everything in its own Namespace (user switch only)
預設情況下,主機都放在自己的命名空間,
而交換機和控制器的root命名空間。
我們可以通過–innamespace參數來把交換機放在自己的名字空間中。
$ sudo mn --innamespace --switch user
Instead of using loopback, the switches will talk to the controller through a separately bridged control connection.
就其本身而言,這個選項是沒有多大用處的,但它确實提供了如何分離不同交換機的例子。