天天看點

Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

Test connectivity between hosts

驗證h1可以ping通h2

h1 ping h2 -c 1
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

現在第一主機知道的第二個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中的指令解析二Part 2: 進階選項Advanced Startup Options

退出mininet互動指令:

mininet>exit

如果mininet出于某種原因崩潰,可以用下面指令來清理:

sudo mn -c

Part 2: 進階選項Advanced Startup Options

回歸測試Run a Regression Test

Mininet 可以用于直接運作回歸測試,不一定要切換到他的 CLI 下面。

運作回歸測試:

sudo mn --test pingpair
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

這條指令會建立一個小的拓撲結構,然後啟動 OpenFLow 的控制器,然後跑 ping 測試,最後再把拓撲結構跟控制器關掉。

還有一直常用的測試是iperf(完成這個測試大概需要10s 鐘):

sudo mn --test iperf
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

此指令建立的相同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
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

另一個例子中,使用線性拓撲(其中每個交換機配有一個主機,并且所有的交換機連接配接在一起):

sudo mn --test pingall --topo linear,4
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

鍊路變化 Link variations

Mininet2.0允許你設定連接配接參數,甚至可以通過指令行實作自動化設定:

$ sudo mn --link tc,bw=10,delay=10ms
mininet> iperf
mininet> h1 ping -c10 h2
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

上面的設定每兩個節點之間的延遲是10ms,因為 ICMP 請求傳過了兩條鍊路(一次是到大交換機,一次到達主機),往返時間(RRT)就應該是40ms。

你還可以使用 PythonAPI 來做更多的事兒,不過現在我們先繼續往下演練。

調整輸出資訊Adjustable Verbosity

Mininet預設輸出資訊的級别是 Info,Info級别會輸出 Mininet的詳細資訊。

我們也可以通過 -v參數來設定輸出DEBUG資訊。

$ sudo mn -v debug
mininet> exit
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

這樣會列印出更多額外的細節。現在嘗試一下output參數,這樣可以在 CLI 中列印更少的資訊。

$ sudo mn -v output
mininet> exit
           

除了上面的幾個級别,還有其他的級别可以使用,比如warning等

Custom Topologies自定義拓撲結構

在custom/topo-2sw-2host.py中是一個例子可以拿來參考,我們可以看到通過 PythonAPI 我們可以很簡單的來定義拓撲結構。

這個例子直接連接配接兩台交換機,每個交換機帶有一台主機。

Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

我們提供一個自定義的mininet 檔案,就可以建立新的拓撲結構、交換機類型。

我們在指令行裡面測試一下:

Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

ID= MAC

預設情況下,host 的 mac 位址是随機配置設定的。這會導緻每次 mininet 建立的時候,MAC位址都會改變,這會給調試帶來一些困難

–mac參數可以解決上面的問題,例子如下:

之前:

$ sudo mn
mininet> h1 ifconfig
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

使用–mac參數:

$ sudo mn --mac
mininet> h1 ifconfig
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

XTerm Display xterm屏顯

為了友善更複雜的調試工作,可以使用 mininet 的 xterms

可以通過x選項來給每一個 host 與交換機啟動一個xterm。

sudo mn -x
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

後一秒鐘,在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
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

因為交換機中沒有資料流量,是以不會有資訊輸出。

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
           
Mininet中的指令解析二Part 2: 進階選項Advanced Startup Options

回到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.

就其本身而言,這個選項是沒有多大用處的,但它确實提供了如何分離不同交換機的例子。