OpenvSwitch系列之九 Group表


Open vSwitch系列之一 Open vSwitch誕生
Open vSwitch系列之二 安裝指定版本ovs
Open vSwitch系列之三 ovs-vsctl命令使用
Open vSwitch系列之四 ovs-ofctl命令使用
Open vSwitch系列之五 網橋特性功能配置
Open vSwitch系列之六 vlan隔離
Open vSwitch系列之七 meter表限速
Open vSwitch系列之八 vxlan隧道
Open vSwitch系列之九 Group表
Open vSwitch系列之十 調用北向接口下發流表
OpenvSwitch系列之十一 ovs-dpdk

簡介

組表是openflow1.1之后引入的一個高級功能,可以解決在特定場景下需要很多流表才能完成的動作。

組表的能力

1. 節省流表空間

組表的能力就可以存儲多個動作,當匹配到一個合適的動作后可以執行多個動作,優化了流表一個匹配+一個動作的工作模式。

2. 數據包復制

組表可以將進入的流量復制成多份,並對每一份單獨處理。特定場合下如流量分析,可以一邊將流量正常轉發,一邊將流量導入到某一個分析機中。

3. 容錯能力-備用端口/路徑

組表有識別up端口和down端口的能力,可以在up的端口down掉之后將選擇一個新的up端口轉發流量。
例如:如果一個數據包應該在端口1離開交換機,但是這個端口down掉了,你想要將數據包通過端口2發送出去。如果用流表的話,當端口1down掉,需要找到所有含有“發往端口1”的流表項,全部修改成端口2,這個操作是很復雜的。這個時候,需要定義一個“1st live” group來表示這種容錯行為,然后將所有的流表項的規則指向該組表。只要端口1正常,group會把所有的數據包發往端口1,如果端口1 down掉,將所有數據包發往端口2,流表沒有任何變化。

4. 負載分流

組表可以選擇動作中的某一個動作執行,在負載的場景下就可以通過轉發到不同的端口實現后端流量負載。

組表結構

組表的結構圖如下

一個組表包含多個組條目。組條目的能力是讓openflow能夠實現額外的轉發能力。

 | Group Identifier | Group Type | Counters | Action Buckets|

Group Identifier:一個32bit無符號的整形,用來表示組表在交換機中的身份
Group Type: 確定組的類型
Counters: 當數據包被組處理時跟新數值
Action Buckets: 一個動作桶的有序列表,每一個桶包含多個動作可以去執行。動作桶中的動作是無重復的結合。

組表可以包含0個或多個動作桶,除了 indirect 類型的桶只能有一個動作。一個組表沒有動作桶默認是丟棄數據。
一個桶的典型使用是包含一個可以修改數據包的動作和一個將數據轉發到另一個端口的動作。動作桶也可以包含一個動作,這個動作可以調用另一個組的,前提是交換機支持這種組表調用鏈。一個沒有動作桶的組表是合法的,一個動作桶沒有轉發動作或別的動作,會默認丟棄掉匹配的數據包。

組表的類型:

  • all: 執行組表中所有的動作。這種類型通常被用在組播或者廣播轉發。數據包非常高效的復制給每一個桶。每一個數據都被組表中的動作桶執行。如果一個動作是直接將數據包轉發到進入的端口,這個包的復制會被放棄。如果控制器中寫入了轉發到進端口的流表,組表必須包含一個轉發動作為OFPT_IN_PORT的保留動作。

  • select: 執行組表中的一個動作桶。數據包被組表中一個單個的桶處理,具體是哪一個動作通取決於交換機的選擇算法。所有關於選擇算法的配置和狀態都是獨立於OpenFlow協議之外的。

  • indirect: 執行組表中的一個定義的動作桶。這種組表只支持一個動作桶。允許多個流表條目或者組表指向這個id,支持更快,更高校的聚合。這種組類型是所有組類型中最高效的方式。

  • fast failover: 執行第一個活動的桶。每個動作桶和特殊的端口或組表有關系,可以控制動作桶的存活。動作桶有序的定義在組表中,第一個和活動的端口有關系的桶會被選擇。這種類型可以修改交換機的流表而不需要控制器下發流表。如果沒有動作桶是活動的,數據包會被丟棄。

類型驗證

all

  1. 用mininet新建一個拓撲,一個交換機,下面掛4個主機
    mn --topo single,4

  1. 刪除所有流表然后下發組表,引用組表
ovs-ofctl del-flows s1
ovs-ofctl add-group s1 group_id=1,type=all,bucket=output:2,bucket=output:3,bucket=output:4 -O openflow11
ovs-ofctl add-flow s1 in_port=1,action=group:1 -O openflow11


  1. 驗證類型為all的功能
    type=all,組表將選擇動作桶里所有的的動作。首先打開h4,打開wireshark,抓取網卡上的數據。

在h1上ping h2,流量會經過交換機,被流表匹配到,然后交給組表。組表會將ping的數據包復制多份,發給每一個動作去處理。流量會從2、3、4這三個端口都轉發出去,所以在h4上能夠看到icmp的數據包。

select

仍然使用上面的的拓撲,一個交換機連接4個主機。

ovs-ofctl add-group s1 group_id=2,type=select,bucket=output:2,bucket=output:3,bucket=output:4 -O openflow11
ovs-ofctl add-flow s1 in_port=1,action=group:1 -O openflow11

type=select,組表在動作桶中隨機選擇一個動作去執行,可以看到下在h2、h3、h4中監聽的tcpdump中h4有流量捕獲。在h1中ping 10.0.0.2,最后流量通過組表的select轉發到h4上。

fast failover

通過fast failover這個名字就能發現該類型是一個快速恢復的類型。具體來說就是當轉發的端口down掉之后組表能夠感知到並且切換到另一個up的端口。
由於構建場景比較復雜,還沒有實現該功能的演示。

ovs-ofctl add-group s1 group_id=0,type=ff,bucket=weight:0,watch_port:2,watch_group:0,actions=output:2,bucket=weight:0,watch_port:3,watch_group:0,actions=output:3 -O openflow11

具體可以參加該使用案例:http://voip.netlab.uky.edu/grw2018ky/handout/Khayam_FFO_Clemson.pdf


免責聲明!

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



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