OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters
本文主要详述OpenFlow Switch的另外两个主要组件——Group Table和Meter Table,它们在整个OpenFlow Swtich Processing中也起到了重要作用。
1、Group Table
Group Table给OpenFlow Switch提供了更加高级的数据包转发特性(比如select或者all),其由多个Group Entries组成,而每个Group Entry结构如下所示:

每个Group Entry根据其Group Identifier来唯一定位,每项具体说明如下:
1)Group Identifier:一个32位无符号整数,Group Entry的唯一标识。
2)Group Type:决定了Group的语义,通俗地讲,就是表明了对数据包的处理行为,具体参考下文。
3)Counters:被该Group Entry处理过的数据包的统计量。
4)Action Buckets:一个Action Bucket的有序列表,每个Action Bucket又包含了一组Action集合及其参数。
2、Group Types
一个OpenFlow Switch不需要支持下列所有的Group Types,但必须支持下面加黑的类型:
1)all:Group Table中所有的Action Buckets都会被执行,这种类型的Group Table主要用于数据包的多播或者广播。数据包对于每一个Action Bucket都会被克隆一份,进而克隆体被处理。如果一个Action Bucket显示地将数据包发回其 ingress port,那么该数据包克隆体会被丢弃;但是,如果确实需要将数据包的一个克隆体发送回其 ingress port,那么该Group Table里就需要一个额外的Action Bucket,它包含了一个 output action 将数据包发送到 OFPP_IN_PORT Reserved Port。
2)select:仅仅执行Group Table中的某一个Action Bucket,基于OpenFlow Switch的调度算法,比如基于用户某个配置项的hash或者简单的round robin,所有的配置信息对于OpenFlow Switch来说都是属于外部的。当将数据包发往一个当前down掉的port时,Switch能将该数据包替代地发送给一个预留集合(能将数据包转发到当前live的ports上),而不是毫无顾忌地继续将数据包发送给这个down的port,这或许可以明显降低由于一个down的link或者switch带来的灾难。
3)indirect:执行Group Table中已经定义好的Action Bucket,这种类型的Group Table仅仅只支持一个Action Bucket。允许多个Flow Entries或者Groups 指向同一个通用的 Group Identifier,支持更快更高效的聚合。这种类型的Group Table与那些仅有一个Action Bucket的Group Table是一样的。
4)fast failover:执行第一个live的Action Bucket,每一个Action Bucket都关联了一个指定的port或者group来控制它的存活状态。Buckets会依照Group顺序依次被评估,并且第一个关联了一个live的port或者group的Action Bucket会被筛选出来。这种Group类型能够自行改变Switch的转发行为而不用事先请求Remote Controller。如果当前没有Buckets是live的,那么数据包就被丢弃,因此这种Group必须要实现一个管理存活状态的机制。
3、Meter Table
Meter Table同样是由多个Meter Enties构成,每个Meter Entry定义每个 Flow 的 meters。基于此结构,OpenFlow Switch可以实现各种简单的QoS功能,比如速率限制等,再结合每个port的queues,可以实现更加复杂的QoS框架,例如DiffServ。
一个meter可以衡量与它关联的数据包的速率,并进而可以控制其聚合速率。任何一个Flow Entry都可以在其Instructions Set里指定某一个Meter,从而控制与该Flow Entry能够成功匹配的数据包的聚合速率。
Meter Entry的具体结构如下:

同样地,每个Meter Entry都是由其Meter Identifier来唯一定位。具体每项说明如下:
1)Meter Identifier:一个32位无符号整数,作为一个Meter Entry的唯一标识。
2)Meter Bands:一个无序的Meter Band集合,每个Meter Band指明了带宽速率以及处理数据包的行为。
3)Counters:被该Meter Entry处理过的数据包的统计量。
4、Meter Bands
每一个Meter Entry都可能有一个或者多个Meter Bands,每个Meter Band指明了带宽速率以及对数据包的处理行为。数据包基于其当前的速率会被其中一个Meter Band来处理,其筛选策略是选择那个定义的带宽速率略低于当前数据包的测量速率的Meter Band, 假若当前数据包的测试速率均低于任何一个Meter Band定义的带宽速率,那么不会筛选任何一个Meter Band。
Meter Band的具体结构如下:
这里,每个Meter Band以其定义的Rate来唯一标识。每项具体说明如下:
1)Band Type:定义了数据包的处理行为。
2)Rate:Meter Band的唯一标识,定义了Band可以应用的最低速率。
3)Counters:被该Meter Band处理过的数据包的统计量。
4)Type specific arguments:某些Meter Band有一些额外的参数。
Band Type的类型有如下两种,它们都是可选的:
1)drop:丢包,可以被用来实现一个rate limiter。
2)dscp remark:增加数据包IP头DSCP域的丢弃优先级,可以被用来实现一个DiffServ仲裁器。
5、Counters
如前面几篇学习笔记中描述的,每一个Flow Table、Flow Entry、Group、Action Bucket、Meter和Meter Band都有一个Counters域,表示被其处理的数据包的统计量。这种机制可以由软件方式实现,也可以由硬件方式实现。下表列出了Counters的集合,但并不需要所有的Counter都需要支持:

Duration(Seconds)记录了该Flow Table或者Meter被安装到OpenFlow Switch内的时间,并且必须以秒为记录单位。
Receive Errors记录了所有接收到Switch里,但是发生碰撞冲突或者其他原因没有转发出去的数据包的数量。
每个Counter都是无符号的,并且没有溢出检查机制,如果一个数字Counter在Switch中不可用,那么我们需要将其默认设置为最大值。
OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters的更多相关文章
- OpenFlow Switch学习笔记(一)——基础概念
OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...
- OpenFlow Switch学习笔记(六)——Instructions和Actions
本文主要重点讨论OpenFlow Switch规范的指令集,它们深刻影响着数据包在Switch中的处理行为,下面开始从以下几个部分谈起. 1.Instructions 每一个Flow Entry里都包 ...
- OpenFlow Switch学习笔记(四)——Matching
这次我们着重详述来自于网络中的数据包在OpenFlow Switch中与Flow Entries的具体匹配过程,以及当出现Table Miss时的处理方式,下面就将从这两方面说起. 1.Matchin ...
- OpenFlow Switch学习笔记(三)——Flow Tables
这次我们主要讨论下OpenFlow Switch的核心组件之一——Flow Tables,以了解其内部的 matching 以及 action handling 机制.下文将会分为几个部分来逐步详述O ...
- OpenFlow Switch学习笔记(二)——OpenFlow Ports
OpenFlow Ports是OpenFlow Switch与剩余网络之间传递Packet的网络接口.OpenFlow Switches之间通过OpenFlow Ports彼此相互逻辑连接.一个Ope ...
- OpenFlow Switch学习笔记(七)——Matching Fields
Matching Fields in_port=port Matches OpenFlow port port dl_vlan=vlan Matches IEEE 802.1q Virtual LAN ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
- Go语言学习笔记五: 条件语句
Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...
随机推荐
- log4j的简单应用(转载)
当程序有错误时,我们就需要找出错误的地方并进行验证,怎样才能准确快速的找到出错的地方呢,那就是在程序运行时在控制台上输出相关的信息,从而可以判断程序的运行顺序以及出错的位置.以前总是习惯使用Syste ...
- HDU 1681 Frobenius
题目链接:Frobenius 思路:想了很久还是没转过弯来. 递推. 初始化vis[0] = 1,每次有四种方法扩展,这样能扩展到所有能被表示的数.上界的判定,如果一万以内的数都能被表示,那以后的数肯 ...
- ajax分页2:jquery.pagination +JSON 动态无刷新分页
静态页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- [开发笔记]-FireWorks常用操作快捷键
一.工具快捷键 指针.选择后方对象[V],[0] 部分选定[A],[1] 选取框.椭圆选取框[M] 套索.多边形套索[L] 裁剪.导出区域[C] 魔术棒[W] 线条工具[N] 钢笔工具[P] 矩形.圆 ...
- nbtstat -a <IP> 会显示主机名、所在工作组等信息
nbtstat -a <IP> 会显示主机名.所在工作组等信息
- windows下安装openssh服务并实现远程登录
需要准备的工具: winscp 点击下载 openssh 点击下载 步骤: 在远程计算机安装 1.首先安装openssh,双击并安装 2.指定用户的home directory为C:\ ...
- Spring学习笔记之Bean的一些属性设置
1.beans 里边配置default-init-method="shunge",有这个方法的会执行,没有也不会报错 2.beans 里边配置default-destroy-met ...
- [转]C++运算优先级列表
From:http://en.cppreference.com/w/cpp/language/operator_precedence Precedence Operator Description A ...
- S5PV210之beep-bus模型 linux3.0.8驱动
目录: 一. bus-driver-device模型 二. 运行结果,及错误解决 三. 怎样利用以有的driver device驱动来写自已的beep-driver-device 驱动 四 ...
- C#获取项目程序及运行路径的方法
1.asp.net webform用“Request.PhysicalApplicationPath获取站点所在虚拟目录的物理路径,最后包含“\”: 2.c# winform用 A:“Applicat ...