OpenvSwitch系列之四 ovs-ofctl命令使用


Open vSwitch系列之一 Open vSwitch誕生 

Open vSwitch系列之二 安裝指定版本ovs

Open vSwitch系列之三 ovs-vsctl命令使用

Open vSwitch系列之四 ovs-ofctl命令使用

Open vSwitch系列之五 網橋特性功能配置

Open vSwitch系列之六 vlan隔離

Open vSwitch系列之七 meter表限速

 

ovs-ovofctl 命令是對流表的操作,包括對流表的增,刪,改,查等命令。簡單來說流表類似於交換機的MAC地址表,路由器的路由表,是ovs交換機指揮流量轉化的表。

  

說到流表就不得不說控制器。控制器是給交換機下發流表的設備,最常見的控制器是OpenDaylight,簡稱ODL,下面首先安裝一個ODL控制器,看看控制器給交換機下發的原汁原味的流表是怎么樣的。

一、安裝 ODL控制器

1.安裝java

apt install openjdk-8-jdk

2.配置環境

vim /etc/environment ,進入環境變量配置文件,在第二行加入java的環境變量。

JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"

 

3.下載ODL編譯好的文件   

wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.6.4-Carbon/distribution-karaf-0.6.4-Carbon.tar.gz

 

 

 4.解壓文件

tar zvxf distribution-karaf-0.6.4-Carbon.tar.gz

5.配置文件

簡單配置ODL的運行文件

 /etc/org.apache.karaf.management.cfg 

6.開啟ODL控制器 

 7. 安裝必要的插件。

全新的ODL只有核心插件,還需要web 頁面,openflow支持等插件。 

opendaylight-user@root>feature:install odl-restconf opendaylight-user@root>feature:install odl-l2switch-switch-ui opendaylight-user@root>feature:install odl-openflowplugin-flow-services-ui opendaylight-user@root>feature:install odl-mdsal-apidocs opendaylight-user@root>feature:install odl-dluxapps-applications opendaylight-user@root>feature:install odl-faas-all

 

8.查看端口驗證ODL是否啟動成功

當ODL啟動成功之后會監聽在6633端口,監聽交換機的連接。如果6633端口有監聽,那就說明ODL啟動是正常的

sudo netstat -anput | grep 6633

二、連接控制器   

這個命令是不是很熟悉呢?對的,這個命令就是上一篇 ovs-vsctl 命令 中最后一個命令,交換機連接控制器的命令。

 ovs-vsctl set-controller br-test tcp:127.0.0.1:6633

連接上控制器之后我們來看看有什么變化。在網橋br-test下多了一個controller設備信息,包括一個狀態 is_connected:true,這個狀態標志這連接成功,如果沒有這個狀態說明交換機並沒正真的連接到控制器上。

當交換機連接上控制器之后,有沒有好奇控制器會給交換機發送什么流表呢?發送的流表就是如下啦:

 

上面的命令是交換機查看流表的命令  ovs-ofctl dump-flows br-test ,這個命令和ovs-vsctl show 命令是使用頻率最高的兩個命令,一定要記住的。那么這兩條流表是什么意思呢?我們逐個分析:

在分析之前簡單介紹一個流表的組成,一個最簡單的流表由3部分組成,分別是:匹配項  ,動作 ,計數器。

匹配項:用來匹配流量的特征,例如傳統交換機能夠根據mac地址轉發,路由器能夠根據ip地址轉發。mac,ip都是流量的特征。

動作:動作是匹配項匹配到數據之后采取的動作,包括轉發和丟棄這兩個最常見的動作。

在OpenStack的ovs交換機中,流表是這樣的:

 可以看到in_port=1是一種匹配項,actions指明了轉發動作。

 對於以上兩條流表來說轉發動作分別是CONTROLLER:65535 轉發給控制器,drop 丟棄流表。那么這兩個動作是怎么執行呢?以上兩個流表都沒有匹配項就是說默認匹配進入的所有的流量。一個轉發,一個丟棄,到底執行誰呢?這個根據優先級來選擇,priority 是優先級,作用是優先級越高,流表越先執行。所有第一條:actions=CONTROLLER:65535 發揮效果。其實這也符合常識,交換機里沒有流表,所以進入的流表都要交給控制器,讓控制器去完成計算和流表下發。

三、手動下發流表

流表(低版本)可以匹配OSI模型的1層至4層,如下圖所示,對匹配到的流表做轉發、丟棄或者更復雜的操作。具體的匹配項如下圖所示:

 

下發流表的命令,需要加上匹配項和動作,可以匹配到上面提到1~4層。

ovs-ofctl add-flow 

1.第一層:入端口

in_port 表示入端口,匹配到之后的actions是output:2, 意思是從2端口轉發出去。

使用命令來查看剛剛下發的流表,可以在交換機中找到。 

ovs-ofctl dump-flows br-test

 

2.第二層:匹配MAC地址

匹配mac地址的關鍵字是:

dl_src :源mac地址

dl_dst :目的mac地址

然后轉發actions=output:2 從2端口轉發出去

 

查看流表下發是否成功: 

 

 3.第三層:匹配IP地址 

匹配網絡層ip地址比匹配入端口和mac地址要復雜一些。因為網絡層中除了IP協議外還有ICMP,IGMP等,所以需要指定匹配的是網絡層中的哪一種協議。

匹配方式:

協議: dl_type=0x0800 或者 ip   表明是用於匹配哪一種協議

nw_src: 源ip地址

nw_dst: 目的ip地址

dl_type = 0x0800 

ip

 

更多匹配字段:

字段名稱  說明
 in_port=port 傳遞數據包的端口的 OpenFlow 端口編號
dl_vlan=vlan 數據包的 VLAN Tag 值,范圍是 0-4095,0xffff 代表不包含 VLAN Tag 的數據包
dl_vlan_pcp=priority VLAN 優先級,改值取值區間為[0-7]。數字越大,表示優先級越高。

dl_src=<MAC>
dl_dst=<MAC>  

匹配源或者目標的 MAC

地址01:00:00:00:00:00/01:00:00:00:00:00 代表廣播

地址00:00:00:00:00:00/01:00:00:00:00:00 代表單播

dl_type=ethertype 

匹配以太網協議類型,其中:
dl_type=0x0800 代表 IPv4 協議
dl_type=0x086dd 代表 IPv6 協議
dl_type=0x0806 代表 ARP 協議

nw_src=ip[/netmask]

nw_dst=ip[/netmask]

當 dl_typ=0x0800 時,匹配源或者目標的 IPv4 地址,可以使 IP 地址或者域名 
nw_proto=proto  和 dl_type 字段協同使用。

當 dl_type=0x0800 時,匹配 IP 協議編號
當 dl_type=0x086dd 代表 IPv6 協議編號

table=number

指定要使用的流表的編號,范圍是 0-254。

在不指定的情況下,默認值為 0 通過使用流表編號,可以創建或者修改多個 Table 中的 Flow

reg<idx>=value[/mask]

交換機中的寄存器的值。

當一個數據包進入交換機時,所有的寄存器都被清零,用戶可以通過 Action 的指令修改寄存器中的值 

tp_src=number TCP/UDP/SCTP 源端口
tp_dst=number  TCP/UDP/SCTP 目的端口

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、刪除流表

流表不僅要會添加,同時也要會刪除。刪除流表的命令是:ovs-ofctl del-flows  + 網橋 + 匹配條件

匹配條件一:入端口

匹配條件二:源ip地址。刪除去往 114.114.114.114 的流表 

想要使用ovs交換機,知道了vsctl以及ofctl這兩個命令之后基本上就能上手了,但作為對ovs交換機的深入學習到現在為止也才入門而已,下面還會有更復雜但更強大的命令使用介紹和原理介紹。更復雜,更強大?怎么感覺是在說:我變強了,也變禿了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM