1. 程式人生 > >Dockernet Open vSwitch -1

Dockernet Open vSwitch -1

openvswitch dockernet

技術分享圖片

創建topo

user@user-VirtualBox:~$ sudo mn --topo single,2        

基本操作:

dockernet>sh ovs-ofctl dump-flows s1 -->(顯示規則)      
dockernet>sh ovs-ofctl del-flows s1 -->(刪除規則)       
dockernet>sh ovs-ofctl add-flow s1 -->(新增規則)       

註意

  1. idle-timeout 這個規則沒有符合這個封包經過,這個規則被閑置多久後就會被刪除(sec)
  2. hard-timeout 不管有沒有封包經過,只要設置的時間一到,就直接刪除規則(sec)
  3. priority 權值,這個規則排行是排多少,最小是1,最高是65535
  4. dl_src (dl = data link層) 這個表示 來源端的網路卡卡號
  5. dl_dst 這個表示 目的端的網路卡卡號
  6. dl_type 這個表示 種類(0x0800 =IP 0x0806 =ARP)
  7. ip_proto =1 icmp (設規則時簡化成inport= 1 )
  8. ip_proto =6 tcp
  9. ip_proto =17 udp

實驗一:

我們現在練習手動設定規則:
首先,我們在創建topo時,因為有一個controller,他會自動內定規則,使得h1、h2能夠互相溝通。
這時,我們必須要先將contorller幹掉,手動寫入規則(刪除規則後h1、h2便無法通訊了)

user@user-VirtualBox:~$ sudo ps -ef | grep controller
user@user-VirtualBox:~$ sudo kill -9 (這邊寫contorller的進程號)

技術分享圖片

dockernet>sh ovs-ofctl add-flow s1 in_port=1,actions=output:2

當我們新增完後,
我們可以另外開一個terminal然後輸入下列指令查看當前s1的規則

user@user-VirtualBox:~$ sudo ovs-ofctl show s1

技術分享圖片
在上圖中,會看到:

  1. dpid = data path id (這是每一臺交換機的識別碼,在虛擬環境中以最簡單的方式呈現)
  2. n_buffers 緩沖區的大小
  3. actions 支援的動作 enqueue(主要在做QoS)我們把封包的丟初去時,可以先把封包丟到事先設定好的不同佇列,並針對不同的佇列去設定不同的頻寬(一個output可以支援8個queues q0=default queue ,數值越高的優先權越高)
  4. set_vlan_vid 要設定vlan時要幫封包打標簽

同理,在新增回覆的規則

dockernet>sh ovs-ofctl add-flow s1 in_port=2,actions=output:1
dockernet>xterm h1 h2

進到h1 h2 
arp -n --->(查看目前有的arp)
arp -d 10.0.0.2(這裏要看目前有哪一個arp的紀錄,就刪除哪一個,這樣才方便下面做通訊的觀察)

在h2:
tcpdump -i h2-eht0
在h1:
ping -c 3 10.0.0.2

技術分享圖片
技術分享圖片
從上圖h2監聽的過程會發現,ARP Request,ARP reply,三組ICMP(去回)的封包(因為ping -c 3),加上後面持續的ARP Request以及ARP reply,總共10個封包。

我們開啟另外一個terminal來看:
技術分享圖片
其中,兩個規則的n_packets皆等於5,所以剛好可以匹配上面監聽的傳送10個封包(雙向傳輸,每一個方向各五個)

特別註意:在每一次實驗完後,都要執行sudo mn-c 將上一個實驗的規則完全清除幹凈,避免下面產生問題

實驗二

user@user-VirtualBox:~$ sudo mn --topo single,2 --mac

dockernet> sh ovs-ofctl add-flow s1 priority=1,in_port=1,action=output:2
dockernet> sh ovs-ofctl add-flow s1 priority=2,in_port=1,action=output:1
dockernet> sh ovs-ofctl dump-flows s1

技術分享圖片

dockernet> sh ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.0.1,actions=output:1
dockernet>sh ovs-ofctl add-flow s1 priority=10,dl_type=0x0800,nw_dst=10.0.0.2,actions=output:2    (dl_type=0x0800  等於 ip )

技術分享圖片

dockernet>xterm h1 h2

進到h1 h2 
arp -n --->(查看目前有的arp)
arp -d 10.0.0.2(這裏要看目前有哪一個arp的紀錄,就刪除哪一個,這樣才方便下面做通訊的觀察)

在h2:
tcpdump -i h2-eht0
在h1:
ping -c 3 10.0.0.2

技術分享圖片
技術分享圖片
技術分享圖片

Dockernet Open vSwitch -1