文档章节

openflow中流表的概念

wangxuwei
 wangxuwei
发布于 2017/05/21 01:22
字数 2220
阅读 348
收藏 0

如前文所述,OpenFlow的设计目标之一就是将网络设备的控制功能与转发功能进行分离,进而将控制功能全部集中到远程的控制器上完成,而OpenFlow交换机只负责在本地做简单高速的数据转发。在OpenFlow交换机的运行过程中,其数据转发的依据就是流表。

所谓流表,其实可被视作是OpenFlow对网络设备的数据转发功能的一种抽象。在传统网络设备中,交换机和路由器的数据转发需要依赖设备中保存的二层MAC地址转发表或者三层IP地址路由表,而OpenFlow交换机中使用的流表也是如此,不过在它的表项中整合了网络中各个层次的网络配置信息,从而在进行数据转发时可以使用更丰富的规则。流表中每个表项的结构如图2-3所示。
 

图2-3  OpenFlow流表项结构

如图2-3所示,OpenFlow流表的每个流表项都由3部分组成:用于数据包匹配的包头域(Header Fields),用于统计匹配数据包个数的计数器(Counters),用于展示匹配的数据包如何处理的动作(Actions)。

包头域:OpenFlow流表的包头域(OpenFlow v1.1之后被称作匹配域),用于对交换机接收到的数据包的包头内容进行匹配。在OpenFlow v1.0中,流表的包头域中包括了12个元组(Tuple),相关内容如图2-4所示。
 

图2-4  OpenFlow流表项包头域

如图2-4所示,包头域中用于和交换机接收到的数据包进行匹配的元组涵盖了ISO网络模型中第二至第四层的网络配置信息。每一个元组中的数值可以是一个确定的值或者是“ANY”以支持对任意值的匹配。另外,如果交换机能够在IP地址相关元组上支持子网掩码的话,将有助于实现更精确的匹配。

                                      OpenFlow流表匹配域的变化示意

规范版本 匹配域数量 匹配域主要变化 备    注
v1.0 12
v1.1 15 — 在v1.0基础上增加了元数据(Metadata)、MPLS标签、MPLS业务类别等3个匹配域
— 支持将v1.0中定义的IP协议、TCP/UDP源端口、目的端口进行复用
— 元数据不是数据包自带的,而是多流表处理时所需的附加信息,用于在同一交换机的不同流表间传递信息
v1.2 36 — 将v1.1定义为可复用的匹配域全部拆分
— 增加对IPv6信息的匹配
— 规定OpenFlow交换机必须支持13个匹配域
v1.3 39 — 增加了PBB、tunnel-ID及IPv6扩展头的匹配 — OpenFlow交换机必须支持的匹配域与v1.2相同

计数器:OpenFlow流表的计数器可以针对交换机中的每张流表、每个数据流、每个设备端口、每个转发队列进行维护,用于统计数据流量的相关信息。例如:针对每张流表,统计当前活动的表项数、数据包查询次数、数据包匹配次数等;针对每个数据流,统计接收到的数据包数、字节数、数据流持续时间等;针对每个设备端口,除统计接收到的数据包数、发送数据包数、接收字节数、发送字节数等指标之外,还可以对各种错误发生的次数进行统计;针对每个队列,统计发送的数据包数和字节数,还有发送时的溢出(Overrun)错误次数等。

动作:OpenFlow流表的动作用于指示交换机在收到匹配的数据包后应该如何对其进行处理。与传统交换机转发表只需要指明数据包的转发出端口不同,OpenFlow交换机因为缺少控制平面的能力,所以对匹配数据包的处理不仅仅是简单的转发操作,而需要用动作来详细说明交换机将要对数据包所做的处理。

OpenFlow交换机的每个流表项可以对应有零至多个动作,如果没有定义转发动作,那么与流表项包头域匹配的数据包将被默认丢弃。统一流表项中的多个动作的执行可以具有优先级,但是在数据包的发送上并不保证其顺序。另外,如果流表项中出现有OpenFlow交换机不支持的参数值,交换机将向控制器返回相应的出错信息。

动作分为必备动作(Required Actions)和可选动作(Optional Actions)两种类型。其中,必备动作是需要由所有的OpenFlow交换机默认支持的,而可选动作则需要由交换机告知控制器它所能支持的动作种类。OpenFlow流表动作的列表如表2-1所示。

表2-1  OpenFlow流表动作列表

 

类型 名    称 说    明
必备动作 转发(Forward) 交换机必须支持将数据包转发给设备的物理端口及如下的一个或多个虚拟端口
ALL:转发给所有出端口,但不包括入端口
CONTROLLER:封装数据包并转发给控制器
LOCAL:转发给本地的网络栈
TABLE:对packet_out消息执行流表的动作
IN_PORT:从入端口发出
丢弃(Drop) 对没有明确指明处理动作的流表项,交换机将会对与其所匹配的所有数据包进行默认的丢弃处理
可选动作 转发(Forward) 交换机可选支持将数据包转发给如下的虚拟端口
NORMAL:利用交换机所能支持的传统转发机制(例如二层的MAC、VLAN信息或者三层的IP信息)处理数据包
FLOOD:遵照最小生成树从设备出端口洪泛发出,但不包括入端口
排队(Enqueue) 交换机将数据包转发到某个出端口对应的转发队列中,便于提供QoS支持
修改域(Modify-Field) 交换机修改数据包的包头内容,具体可以包括:
— 设置VLAN ID、VLAN优先级,剥离VLAN头
— 修改源MAC地址、目的MAC地址
— 修改源IPv4地址、目的IPv4地址、ToS位
— 修改源TCP/IP端口、目的TCP/IP端口

 根据交换机的应用场景及其所能够支持的流表动作类型,OpenFlow交换机可以被分为“OpenFlow专用交换机(OpenFlow-only)”和“OpenFlow使能交换机(OpenFlow-enabled,在OpenFlow v1.1之后被称作OpenFlow-hybrid)”。其中,前者只支持OpenFlow协议,而后者则是考虑到了OpenFlow交换机与传统交换机混合组网时可能遇到的协议栈不兼容问题,能同时运行OpenFlow协议和传统的二层/三层协议栈。因此,后者可以支持OpenFlow可选转发动作中的NORMAL动作。

OpenFlow交换机在接收到网络数据包后,对其开展的处理流程如图2-5所示。
 

图2-5  OpenFlow交换机中的数据包处理流程

如图2-5所示,流程中对802.1d协议的处理是流程中的可选步骤(在OpenFlow v1.1之后已删除)。当OpenFlow交换机接收到一个数据包时,将按照优先级依次匹配其本地保存的流表中的表项,并以发生具有最高优先级的匹配表项作为匹配结果,并根据相应的动作对数据包进行操作。同时,一旦匹配成功,对应的计数器将更新;而如果没能找到匹配的表项,则将数据包转发给控制器。

OpenFlow交换机对数据包头的解析和匹配过程的细节操作如图2-6所示。

如图2-6所示,交换机中每一个表项的匹配首先按照接收到数据包的物理端口对入端口进行匹配,然后按照二层数据包头进行比较。如果以太网类型为0x8100,即数据包是VLAN包,则继续查询VLAN ID和PCP域。如果以太网类型为0x0806,则为ARP包,继续查询源IP地址和目的IP地址。如果以太网类型为0x0800,即为IP包,则继续查询IP包头的相关域。如果IP包是TCP/UDP包,则还需继续查询传输层端口。如果IP包是ICMP包,则继续查询ICMP包中的Type和Code。对于分段数据包的后续包,则将传输层端口设为0后继续查询。
 

图2-6  OpenFlow交换机中的数据包头解析和匹配流程

本文转载自:http://blog.csdn.net/a879365197/article/details/36667019

wangxuwei
粉丝 27
博文 343
码字总数 137316
作品 0
杭州
其他
私信 提问
【转载】基于 Open vSwitch 的 OpenFlow 实践

Open vSwitch 概述 Open vSwitch(下面简称为 OVS)是由 Nicira Networks 主导的,运行在虚拟化平台(例如 KVM,Xen)上的虚拟交换机。在虚拟化平台上,OVS 可以为动态变化的端点提供 2 层交...

Inchin
2014/07/25
229
1
OpenFlow协议标准演进过程

OpenFlow是一种新型网络协议,起源于斯坦福大学的Clean Slate项目组。OpenFlow提出的出发点是由于研究人员无法改变现有网络设备进行创新网络架构和协议的研究和实验,而这些新的网络创新思想...

SDN_LAB
2014/12/04
178
0
Proactive vs. Reactive

前不久一个研究SDN的博士生和博主抱怨说:现在开源的SDN控制器性能都好差啊,每秒钟2K个新流就会提示packet-in太多,停止工作。博主问他是如何定义一个流的,他说用TCP 5 tuple。博主又问他是...

hoolev
2015/04/03
89
0
Open vSwitch 简介

概述 Open vSwitch 是一个高质量的、多层虚拟交换机,使用开源 Apache 2.0 许可协议,由 Nicira Networks 开发,主要实现代码为可移植的 C 代码。 它的目的是让大规模网络自动化可以通过编程...

1899
2015/10/08
570
0
Google 组建下一代开源网络

科技网站Wired报道,在一个开源网络论坛上,Google的网络基础架构的主要负责人Urs Hölzle声称,Google正在组建基于Openflow协议的下一代开源网络。 众所周知,Google公司拥有世界上为数最多...

红薯
2012/04/18
2.6K
18

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
8
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
5
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部