本文主要详述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的更多相关文章

  1. OpenFlow Switch学习笔记(一)——基础概念

    OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...

  2. OpenFlow Switch学习笔记(六)——Instructions和Actions

    本文主要重点讨论OpenFlow Switch规范的指令集,它们深刻影响着数据包在Switch中的处理行为,下面开始从以下几个部分谈起. 1.Instructions 每一个Flow Entry里都包 ...

  3. OpenFlow Switch学习笔记(四)——Matching

    这次我们着重详述来自于网络中的数据包在OpenFlow Switch中与Flow Entries的具体匹配过程,以及当出现Table Miss时的处理方式,下面就将从这两方面说起. 1.Matchin ...

  4. OpenFlow Switch学习笔记(三)——Flow Tables

    这次我们主要讨论下OpenFlow Switch的核心组件之一——Flow Tables,以了解其内部的 matching 以及 action handling 机制.下文将会分为几个部分来逐步详述O ...

  5. OpenFlow Switch学习笔记(二)——OpenFlow Ports

    OpenFlow Ports是OpenFlow Switch与剩余网络之间传递Packet的网络接口.OpenFlow Switches之间通过OpenFlow Ports彼此相互逻辑连接.一个Ope ...

  6. OpenFlow Switch学习笔记(七)——Matching Fields

    Matching Fields in_port=port Matches OpenFlow port port dl_vlan=vlan Matches IEEE 802.1q Virtual LAN ...

  7. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  8. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor

    目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...

  9. Go语言学习笔记五: 条件语句

    Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...

随机推荐

  1. C#读取Xml【转】

      XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖 ...

  2. CentOS下编译安装MySQL 5.6.21

    一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel perl 安装cmake:http://www.cnblog ...

  3. 织梦dedecms分类信息模型上一页下一页失效办法

    修改文件/include/arc.archives.class 将一下代码 $next = (is_array($nextR) ? " where arc.id={$nextR['id']} ...

  4. digitalocean

    sudo apt-get install sshifconfigssh 198.211.102.203sudo adduser uernameubuntu装配SSH,支持开启sftp服务 sftp 1 ...

  5. Java爬虫,信息抓取的实现

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23272657 今天公司有个需求,需要做一些指定网站查询后的数据的抓取,于是花了点 ...

  6. IT公司100题-18-圆圈中最后剩下的数字

    问题描述: n个数字(下标为0, 1, …, n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(当前数字从1开始计数).当一个数字被删除后,从被删除数字的下一个数字开始计数,继续删除 ...

  7. 蓝桥杯 algo——6 安慰奶牛 (最小生成树)

    问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计 划除去P条道路中尽可能多的道路 ...

  8. 蓝桥杯 ALGO-4 结点选择 (树形动态规划)

    问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多少? 输入格式 第一行包含一个整数 n . 接下来的 ...

  9. Fix the Can’t clobber writable file error in Perforce Version Control System - forward

    http://easyprograming.com/eclipse-articles/57-fix-the-cant-clobber-writable-file-error-in-perforce-v ...

  10. DotNetBar v14.0.0.3 Fully Cracked

    更新信息: http://www.devcomponents.com/customeronly/releasenotes.asp?p=dnbwf&v=14.0.0.3 如果遇到破解问题可以与我 ...