前言:
這邊的實驗主要是熟悉mininet以及簡單的測試mininet各節點的功能。
實驗一 建立網路拓樸:
輸入以下指令,建立預設mininet網路拓樸
$sudo mn
2台Host (h1 h2)
1台Switch (s1)
1台*Controller (c0)
*Controller指的是Mininet內部簡易的Controller
如下圖所示
但此次實驗網路拓墣如下:
其建立拓樸是使用下列指令
$sudo mn --topo single,3 --mac --switch ovsk --controller remote
上面的參數分別代表為:
--topo:網路拓墣形式,有single,linear,tree
--topo {topo_name},{number_nodes}
{topo_name} = single、linear、tree
{number_nodes} = 節點數目
--mac:MAC_address=根據HostID自動設置MACs
--switch:設置switch, ovsk = Openflow vSwitch
--controller:設置controller, remote = 外部controller控制
更多指令請輸入
$mn help
mn CLI 指令
mn CLI指令很多,這邊只介紹基本常用的指令
nodes //顯示可用的節點
net //顯示各個鏈節訊息
dump //顯示各節點的訊息
pingall // 所有主機與其他所有主機進行ping測試
xterm h1 h2 //開啟節點h1、h2上的 xterm
實驗二:簡易環境測試
這個實驗是利用h1 ping h2來了解SDN封包傳輸的流程。
當h1 ping h2時,第一個封包來到s1,此時s1並不知道封包要去哪
因為s1的流表(flow table)目前是空的,所以s1會把封包標頭傳至Controller (packet_in)
Controller 看到後,處裡完會發送 packet_out 和 flow_mod 到 s1
s1收到 Controller 指令之後會將封包會轉發至h2,之後h2回傳echo給h1
回傳echo封包到s1時,因為流表已經有flow在裡面,所以會將封包直接轉發給h1
接下來的實驗就是看這些行為
首先先將h1、h2的xterm啟動
接著要觀察h1與h2的網路資訊,分別在h1、h2的視窗中打
ifconfig
由上兩張圖可以得知,h1的ip為10.0.0.1,h2的ip為10.0.0.2
我們用h1去ping h2(在h1的窗口裡執行ping),可以看到第一個ping封包的時間為50.6ms
第二個以後的ping封包時間都小於0.4ms,這是因為第一個封包要轉送到controller的關係
造成的延遲時間。
接下來我們把流表dump下來看
ovs-ofctl dump-flows s1
由上圖可知,一個ping封包他會下4條flow到流表中
第一個與第二個flow主要是h1到h2的icmp封包與h2到h1的icmp封包匹配
第三個與第四個是arp封包
接下來解釋一下上圖flow entry的各個參數意思
第三個與第四個是arp封包
接下來解釋一下上圖flow entry的各個參數意思