Dockernet Open vSwitch -1
阿新 • • 發佈:2018-04-13
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 -->(新增規則)
註意
- idle-timeout 這個規則沒有符合這個封包經過,這個規則被閑置多久後就會被刪除(sec)
- hard-timeout 不管有沒有封包經過,只要設置的時間一到,就直接刪除規則(sec)
- priority 權值,這個規則排行是排多少,最小是1,最高是65535
- dl_src (dl = data link層) 這個表示 來源端的網路卡卡號
- dl_dst 這個表示 目的端的網路卡卡號
- dl_type 這個表示 種類(0x0800 =IP 0x0806 =ARP)
- ip_proto =1 icmp (設規則時簡化成inport= 1 )
- ip_proto =6 tcp
- 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
在上圖中,會看到:
- dpid = data path id (這是每一臺交換機的識別碼,在虛擬環境中以最簡單的方式呈現)
- n_buffers 緩沖區的大小
- actions 支援的動作 enqueue(主要在做QoS)我們把封包的丟初去時,可以先把封包丟到事先設定好的不同佇列,並針對不同的佇列去設定不同的頻寬(一個output可以支援8個queues q0=default queue ,數值越高的優先權越高)
- 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