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
- 用mininet新建一个拓扑,一个交换机,下面挂4个主机
mn --topo single,4

- 删除所有流表然后下发组表,引用组表
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



- 验证类型为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
OpenvSwitch系列之九 Group表的更多相关文章
- OpenvSwitch系列之七 meter表限速
Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...
- CRL快速开发框架系列教程九(导入/导出数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十九】
<Web 前端开发精华文章推荐>2013年第七期(总第十九期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
- 学习ASP.NET Core Razor 编程系列十九——分页
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- 单元测试系列之九:Sonar 常用代码规则整理(一)
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...
- OpenvSwitch系列之八 vxlan隧道
Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...
- solr与.net系列课程(九)solr5.1的配置
solr与.net系列课程(九)solr5.1的配置 最近一些园友来咨询solr5.1的配置方式,然后我就去官网下载了个最新版本的solr,发现solr5.0以后solr的下载包里的内容发生的变化,移 ...
- SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型
原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block 代理对象(Proxy Object) ...
- information_schema系列六(索引,表空间,权限,约束相关表)
information_schema系列六(索引,表空间,权限,约束相关表) 1: STATISTICS 这个表提供的是关于表的索引信息: INFORMATION_SCHEMA Name SHOW ...
随机推荐
- C#12中的Primary Constructors(主构造函数)
什么是主构造函数 把参数添加到class与record的类声明中就是主构造函数.例如 class Person(string name) { private string _name = name; ...
- OpenAI 董事会宫斗始作俑者?一窥伊尔亚·苏茨克维内心世界
OpenAI 董事会闹剧应该是暂告一个段落了,Sam Altman和Greg Brockman等一众高管均已加入微软,还有员工写联名信逼宫董事会的戏码,关注度已经降下来了. 但是,这场宫斗闹剧的中心人 ...
- 文心一言 VS 讯飞星火 VS chatgpt (143)-- 算法导论12.1 3题
三.用go语言,设计一个执行中序遍历的非递归算法.(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等.) 文心一言,代码正常运行: ...
- Cplex学术版申请及Python API环境配置
当使用Cplex时弹出下面错误: CPLEX Error 1016: Community Edition. Problem size limits exceeded. Purchase at http ...
- C#中await /async 的使用场景,优点,使用方法介绍
async/await 是 C# 中异步编程的关键特性,它使得异步代码编写更为简单和直观.下面深入详细描述了 async/await 的使用场景.优点以及一些高级使用方法,并提供了相应的实例源代码. ...
- Tensorflow2.0使用Resnet18进行数据训练
在今年的3月7号,谷歌在 Tensorflow Developer Summit 2019 大会上发布 TensorFlow 2.0 Alpha 版,随后又发布了Beta版本. Resnet18结构 ...
- Maven仓库settings.xml配置信息
找到你的settings.xml配置文件E:\maven3.6.3\apache-maven-3.6.3\conf # 你的本地依赖仓库路径 <localRepository>E:\mav ...
- 同样的SQL,怎么突然就慢了?
本篇文章素材来源于某银行系统的一次性能问题分析. 许久没写这种troubleshooting类型的技术文章了,因为曾在服务公司呆过多年,工作原因,这方面之前做的多,听的更多,导致已经达到在自己认知维度 ...
- 华企盾DSC造成扫描仪无法扫描成pdf文件
解决方法:去掉缩略图策略,重启电脑
- Asp.net core Webapi 如何执行定时任务?
前言 在计算机系统中,定时执行一些后台任务是很常见的场景,比如定时发送邮件.备份数据等等. 那么,.NET 技术如何通过编程灵活地实现项目里复杂的自定义任务呢? 如果是 Windows 生态,通常来说 ...