前言:
在mininet 純模擬的環境下操作跟在實體的機器上設定有相當大的不同,
這個實驗可以讓我們觀察OpenFlow跟跟傳統網路協議的溝通過程,
並希望同學能在實體機器的環境下對SDN跟傳統網路有更好的理解。
實驗內容:
以下實驗分兩部份進行
1.當交換器與控制器連接時,交換器與控制器之間的溝通訊息(分別從Controller / Host 1 / Host 2 來觀察)
2. 當host-1 ping host-2時,交換器與控制器之間的溝通訊息(分別從Controller / Host 1 / Host 2 來觀察)
機架的環境建置請看這邊
拓樸如下圖:
最下面附上兩個檔案是利用Wirehark在Controller端所截的封包檔
之後的分析會利用這兩個封包檔做分析
第一個檔案是當交換器與控制器連接時,交換器與控制器之間的溝通訊息的封包檔
第二個是當host-1 ping host-2時,交換器與控制器之間的溝通訊息的封包檔
實驗第一部分:
1.當交換器與控制器連接時,交換器與控制器之間的溝通訊息
Switch connect Controller(在controller上觀察)
上圖是封包檔的截圖,在這麼多的封包中,我們到底要看哪些封包呢?
首先看第一個OpenFlow封包,可以看到這個封包的訊息是HELLO
這個封包我們稱為Hello message,是交換器和控制器用來建立連接的封包
裡面包含目前可支援的最新OF協議版本
從這張圖可以看到首個Hello message是從10.0.0.1發出的,也就是從交換器發出的
這個代表示是交換器先跟控制器說我可以支援的版本
我們可以點開來看更詳細的資訊
Switch(10.0.0.1) to Controller(10.0.0.3) :
可以看到這台交換器可以支援到OF 1.4
那控制器呢?
Controller(10.0.0.3) to Switch(10.0.0.1):
也是OF 1.4,之後就會以OF 1.4做溝通協議
實驗第二部分:
2. 當host-1 ping host-2時,交換器與控制器之間的溝通訊息(分別從Controller / Host 1 / Host 2 來觀察)
Host 1 ping Host 2(在Host 1上觀察)
實驗步驟
使用ssh連線至實驗室 Host 1,各組連線IP請向助教詢問
$ssh -X host1@140.135.xx.xxx
$yes
若為第一次連線會出現金鑰不認識,會出現確認連線的(yes/no)選擇,此時選yes
接下來輸入連線密碼
$sudo top
可能是因為遠端連線問題若直接打sudo wireshark & 會因為無法輸入密碼不能順利開啟wireshark
故先執行任意一個程式,讓電腦先記住密碼,下一次打sudo wireshark &的時候就可以順利開啟
$q
按q跳出來
$arp -e
先看host1 裡面的Mac cache table裡面是不是已經有host2的IP跟Mac address對應
若已經存在則無法看到Host 1向Host 2所發出的ARP
$arp -d 192.168.1.102
若有則刪掉Host 2的IP跟Mac address對應
或是刪除全部mac address cache則使用下面這個命令
$sudo ip -s -s neigh flush all
$sudo wireshark &
等wireshark視窗開起來之後,選擇網卡,開啟封包側錄
此時我們錄下所有進/出Host1的封包
$ping 192.168.1.102
Ping host 2
此時將wireshark監聽按暫停,開始分析封包
以下我們觀察到的是在Host 1上看Host1 Ping Host2 的封包分析。
封包分析重點:
1. 觀察Host 1 對 Host 2 的ARP請求
2. 觀察Host 2 對 Host 1 的ARP回覆
3. 觀察Host 1 對 Host 2 的ICMP Ping請求
4. 觀察Host 2 對 Host 1 的ICMP Ping回覆
小技巧: 可以在wireshark左上方輸入搜尋條件,如小寫arp / icmp 等等來觀察符合某種特定條件的封包
Host 1 ping Host 2(在Controller上觀察)
當host-1 ping host-2 時會發生什麼是呢?
在lab1中你可以看到說第一筆ping封包會花很長的時間
原因就在上圖,當第一筆ping封包進入到交換器時
由於交換器表格是空的,所以會利用PACKET_IN的方式送到控制器
上圖是PACKET_IN訊息的詳細資訊,可以看到是因為OFPR_TABLE_MISS的關係送到控制器
控制器會利用FLOW_MOD去新增交換器表格的規則
控制器會利用FLOW_MOD去新增交換器表格的規則
上圖是action
上圖是match,這兩張都是FLOW_MOD訊息的詳細資訊
它是做精確比對,這邊只顯示出兩個,match項目有六項
接下來是看PACKET_OUT
它是做精確比對,這邊只顯示出兩個,match項目有六項
接下來是看PACKET_OUT
PACKET_OUT是將 Controller 的封包轉送到指定的連接埠
而第二筆封包到達交換器時,由於第一筆封包已經將flow記在流表中,所以會直接轉發到host2
這就是為什麼第一筆封包會比第二筆封包來的久的原因
而第二筆封包到達交換器時,由於第一筆封包已經將flow記在流表中,所以會直接轉發到host2
這就是為什麼第一筆封包會比第二筆封包來的久的原因