目录

OpenFlow起源与发展

OpenFlow网络

1、OpenFlow交换机:

2、FlowVisor:

3、Controller:

OpenFlow交换机

分类

安全通道

流表

OpenFlow协议 :

OpenFlow协议

匹配流程

消息类型

OpenFlow应用

网络虚拟化 – FlowVisor

负载均衡 – Aster*x

绿色节能的网络服务 – ElasticTree


OpenFlow起源与发展

OpenFlow 是 Software Definded Network 的一种,由斯坦福大学的 Nick McKeown 教授在 2008 年 4 月 ACM Communications Review 上发表的一篇论文 OpenFlow: enabling innovation in campus networks 里首先提出来的。它最初的出发点是用于网络研究人员实验其创新网络架构、协议,考虑到实际的网络创新思想需要在实际网络上才能更好地验证,而研究人员又无法修改在网的网络设备,故而提出了 OpenFlow 的控制转发分离架构,将控制逻辑从网络设备盒子中引出来,研究者可以通过一组定义明确的接口对网络设备进行任意的编程从而实现新型的网络协议、拓扑架构而无需改动网络设备本身。

OpenFlow网络

所谓OpenFlow网络指的是相互连接的一组OpenFlow交换机的集合,并且这些交换机全部置于一个OpenFlow Controller或一个OpenFlow Controller的集群管理之下。

分为以下三个部分

1、OpenFlow交换机:

主要实现数据层的转发。下面一节做详细介绍

2、FlowVisor:

主要作用是对网络进行虚拟化。FlowVisor是建立在OpenFlow协议上的网络虚拟化工具。部署在标准OpenFlow控制器与OpenFlow交换机之间,它将物理网络划分为不同的逻辑网络,使每个控制器控制一个虚网,从而实现虚网划,并保证各虚网相互隔离分。它让管理员通过定义流规则来管理网络,而不是修改路由器和交换机的配置。效果如下图所示,

FlowVisor的设计原则是:

FlowVisor对控制器和交换机是透明的,它们都感知不到FlowVisor的存在
各虚网之间相互隔离,即使是广播包,各虚网的流量也相互隔离
划分虚网的策略是灵活、模块化、可扩展的
OpenFlow消息在进行传输时,FlowVisor会根据配置策略对OpenFlow消息进行拦截、修改、转发等操作。这样,控制器就只能控制其被允许控制的流,但是控制器并不知道它所管理的网络被FlowVisor进行过分片操作。 同样,交换机发出的消息经过FlowVisor过滤后,也会被发送到相应的控制器。

3、Controller:

主要是对网络集中控制OpenFlow将控制层与数据转发层分离,其中OpenFlow交换机实现了数据转发功能,而OpenFlow控制器则实现了控制层功能。Controller通过OpenFlow协议提供的标准数据接口,对OpenFlow交换机中的流表进行控制、管理,实现了对整个网络的集中控制。
在Controller中,可以用python等程序对其功能进行定义,比如下发流表,对Packet_in包进行处理等。

OpenFlow交换机

OpenFlow交换机是OpenFlow网络得核心部件,主要用于管理数据层得转发。其结构如上图方框中所示。

分类

OpenFlow交换机分为两类:专用OpenFlow交换机和支持OpenFlow的交换机

  • 专用OpenFlow交换机:专门为OpenFlow设计的交换机。与传统交换机不同,它不再具有控制逻辑,而仅仅是在端口间转发数据包的一个简单部件。
  • 支持OpenFlow的交换机:是在传统商业交换机的基础上,添加了安全通道、流表、OpenFlow协议,获得了OpenFlow特性的交换机。它既具有传统交换机的控制转发功能,又具有OpenFlow的转发逻辑。因此该交换机对数据包支持两种不同的接收处理方式。

整个流程如下:OpenFlow交换机接收到数据包,首先在流表上查找转发目标端口,如果没有匹配,将数据包转发给Controller,由控制层决定转发端口。

如上图所示,openflow交换机由以下三个部分组成:

安全通道

安全通道是连接OpenFlow交换机和控制器通信的接口。控制器通过这个接口来控制和管理OpenFlow交换机,同时OpenFlow交换机通过这个接口将事件传给控制器,发送数据包,并接收来自控制器下发数据包。控制器和交换机必须通过安全通道进行通信,而且进行通信的数据包必须按照OpenFlow协议规定的格式执行。

流表

流表由控制器下发给交换机。下发模式有两种:主动模式、被动模式。

主动模式——控制器将自己收集的流表信息主动下发给交换机等网络设备,随后网络设备可直接查询流表转发。
被动模式——网络设备收到一个没有匹配的FlowTable记录时,将其封装成Packet_in数据包,转发给控制器,由控制器决定如何处理,并下发流表。

由多个流表项组成,每个流表就是一个转发规则,进入交换机的数据包通过查询流表来获得转发的目的端口。流表项由头域、计数器和操作组成;其中头域是个十元组,是流表项的标识;计数器用来计数流表项的统计数据;操作标明了与该流表项匹配的数据包应该执行的操作。因此流表是数据转发的依据,与交换机的mac地址转发表和IP地址路由表类似,流表中保存了网络中各个层次的网络配置信息,因此可以进行更加丰富的转发规则。

参考文献2中介绍了一个流表的例子。

OpenFlow协议 :

OpenFlow协议用来描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。OpenFlow协议支持三种信息类型:Controller-to-Switch,Asynchronous和Symmetric,每一个类型都有多个子类型。Controller-to-Switch信息由控制器发起并且直接用于检测交换机的状态。Asynchronous信息由交换机发起并通常用于更新控制器的网络事件和改变交换机的状态。Symmetric信息可以在没有请求的情况下由控制器或交换机发起。下面一节将做详细介绍。

OpenFlow协议

OpenFlow是一种新型的网络协议,它是控制器和交换机之间的标准协议。自2009年底发布1.0版本后,OpenFlow协议又经历了1.1、1.2、1.3及1.4版本的演进过程,目前使用和支持最多的是1.0和1.3版本。OpenFlow1.3在1.0版的基础上进一步优化及升级,其中添加了很多新的特性及消息,如支持多个流表(flow table)、组表(group table),支持多控制器等。一个流表中包含多个流表项,OpenFlow v1.3中流表项主要由7部分组成,分别是匹配域(用来识别该条表项对应的flow)、优先级(定义流表项的优先顺序)、计数器(用于保存与条目相关统计信息),指令(匹配表项后需要对数据分组执行的动作)、TimeoutsCookieFlags,如下图所示。

匹配流程

与OpenFlow v1.0不同的是,OpenFlow v1.3协议中一台OpenFlowF交换机会有多张流表。具体匹配流程如下图所示。

当 一 个 数据包到达交换机 , 从数据包中提取匹配字段从第 一 个流表 开始 查找 匹配 , 匹配字段 取 决于数据 包 的类 型 , 通常 包括各种 数 据包 的 头字段 , 例如 以 太 网 源地 址或 IPv4 目 的地 地址 等 , 此 外 , 还可 以 对 数据 包 关 联的 字段 ( 如 交换 机 1 4 的入端 口 等 ) 进行 匹配 。 如果 数据包和流表项匹配成功 , 则 更 新计数器并执 行流 表项 中 的 指令。 如果该流表 项使用GOTO 指令指 向 了 某一 其他流表 , 则执行完本次指令的数据包以及动作集、元数据等信息转到GOTO 指令指 向 的 流表进行 下 一 步 的 匹 配(也就是图中的 跳转到Table n?); 若 未指 向 另 一 流表则执行动作集 , 此时流水线处理成功。 如果在 某 个流表 中 并 未 匹配成 功 , 则 查找该 流表中 是否存在 table-miss流表项 ( 流 表 中 的table-miss流表项 指定如 何 处理未 匹 配成功 的 数据包 ) , 如 果存在table-miss流 表 项 , 则 按该流表项中 的 指令执行 , 如丢弃 数据包 、 将数据包 转到 另 外 一 个 流表 或者发送给控制器(即通过Packet_In消息传递给控制器,由控制器制定数据包的转发策略而后通过Packet_Out消息下发流表给交换机) 等; 如果在 流表 中 并未 匹配成 功并且该流表项 中 不存在table-miss流 表项, 那么 交换机将会丢弃该 数据 包。

Ope nFlo w 协议在工作 中 使用 GOTO 指令从一 张流表转 到另 一 张流表 , 该技 术被称 为 多级 流表技术 。

消息类型

OpenFlow规范定义了一个OpenFlow交换机如何与Controller建立连接、通信及相关消息类型

a) Controller/Switch消息,是指由Controller发起、Switch接收并处理的消息,主要包括Features、Configuration、Modify-State、Read-State、Packet-out、Barrier和Role-Request等消息。这些消息主要由Controller用来对Switch进行状态查询和修改配置等操作。
b) 异步(Asynchronous)消息,是由Switch发送给Controller、用来通知Switch上发生的某些异步事件的消息,主要包括Packet-in、Flow-Removed、Port-status和Error等。例如,当某一条规则因为超时而被删除时,Switch将自动发送一条Flow-Removed消息通知Controller,以方便Controller作出相应的操作,如重新设置相关规则等。
c) 对称(Symmetric)消息,顾名思义,这些都是双向对称的消息,主要用来建立连接、检测对方是否在线等,包括Hello、Echo和Experimenter三种消息。
下图展示了OpenFlow和Switch之间一次典型的消息交换过程,出于安全和高可用性等方面的考虑,OpenFlow的规范还规定了如何为Controller和Switch之间的信道加密、如何建立多连接等(主连接和辅助连接)。

OpenFlow应用

随着OpenFlow/SDN概念的发展和推广,其研究和应用领域也得到了不断拓展。目前,关于OpenFlow/SDN的研究领域主要包括网络虚拟化、安全和访问控制、负载均衡、聚合网络和绿色节能等方面。另外,还有关于OpenFlow和传统网络设备交互和整合等方面的研究。

下面将举几个典型的研究案例来展示OpenFlow的应用。

网络虚拟化 – FlowVisor

网络虚拟化的本质是要能够抽象底层网络的物理拓扑,能够在逻辑上对网络资源进行分片或者整合,从而满足各种应用对于网络的不同需求。为了达到网络分片的目的,FlowVisor实现了一种特殊的OpenFlow Controller,可以看作其他不同用户或应用的Controllers与网络设备之间的一层代理。因此,不同用户或应用可以使用自己的Controllers来定义不同的网络拓扑,同时FlowVisor又可以保证这些Controllers之间能够互相隔离而互不影响。下图展示了使用FlowVisor可以在同一个物理网络上定义出不同的逻辑拓扑。FlowVisor不仅是一个典型的OpenFlow应用案例,同时还是一个很好的研究平台,目前已经有很多研究和应用都是基于FlowVisor做的。

负载均衡 – Aster*x

传统的负载均衡方案一般需要在服务器集群的入口处,通过一个gateway或者router来监测、统计服务器工作负载,并据此动态分配用户请求到负载相对较轻的服务器上。既然网络中所有的网络设备都可以通过OpenFlow进行集中式的控制和管理,同时应用服务器的负载可以及时地反馈到OpenFlowController那里,那么OpenFlow就非常适合做负载均衡的工作。Aster*x通过Host Manager和Net Manager来分别监测服务器和网络的工作负载,然后将这些信息反馈给FlowManager,这样Flow Manager就可以根据这些实时的负载信息,重新定义网络设备上的OpenFlow规则,从而将用户请求(即网络包)按照服务器的能力进行调整和分发。

绿色节能的网络服务 – ElasticTree

在数据中心和云计算环境中,如何降低运营成本是一个重要的研究课题。能够根据工作负荷按需分配、动态规划资源,不仅可以提高资源的利用率,还可以达到节能环保的目的。ElasticTree创新性地使用OpenFlow,在不影响性能的前提下,根据网络负载动态规划路由,从而可以在网络负载不高的情况下选择性地关闭或者挂起部分网络设备,使其进入节电模式达到节能环保、降低运营成本的目的。

参考文献:

https://blog.csdn.net/Sponge_bobo_herbert/article/details/80535869

https://www.ibm.com/developerworks/cn/cloud/library/1303_silei_openflow/

https://blog.csdn.net/qq_38668258/article/details/82534341

OpenFlow网络、OpenFlow交换机及OpenFlow协议的知识总结相关推荐

  1. 引领SDN网络浪潮 锐捷网络8款SDN交换机获OpenFlow v1.3一致性认证

    在近日举办的2016GNTC全球网络技术大会上,中国数据通信解决方案领导品牌锐捷网络旗下3大系列共8款交换机,通过全球SDN测试认证中心的OpenFlowv1.3一致性测试,获得由ONF颁发的相关认证 ...

  2. OpenFlow网络基本介绍

    近期对SDN进行了初步的认识和学习,现将自己做的笔记进行简要整理. 目 录 目 录 OpenFlow交换机 安全通道 流表 OpenFlow协议 OpenFlow交换机分类 FlowVisor Con ...

  3. OpenFlow入门资料汇总(OpenFlow、SDN、NOX等,多为网络文章)

    声明:此篇文章为转载,转载原文地址为:http://blog.csdn.net/jincm13/article/details/7825754 很好的OpenFlow方向的网络文章汇总,阅读通篇能够对 ...

  4. 《软件定义网络:SDN与OpenFlow解析》

    <软件定义网络:SDN与OpenFlow解析> 基本信息 原书名:SDN: Software Defined Networks 原出版社: O'Reilly Media 作者: (美)Th ...

  5. OpenFlow网络中处理正常流量的工作流程

    OpenFlow网络中处理正常流量的工作流程 在OpenFlow网络中,控制平面中的控制器通过两种方式在数据平面上安装流规则来控制整个网络的行为:主动流安装和反应流安装. 在主动方法中,控制平面在数据 ...

  6. ipsec协议_网工知识角轻松学网络|三分钟了解PPPOE协议

    学网络,就在IE-LAB 国内高端网络工程师培养基地 PPPOE( Point-to-PointProtocol Over Ethernet)以太网上的点对点协议,是将点对点协议(PPP)封装在以太网 ...

  7. 企业网络高级技术-VTP中继协议(2)

    [接 - 企业网络高级技术-VTP中继协议(1)] 实验结果[可以是截屏图片]: 任务2.在SERVER SWITCH1上增加VLAN,请用SNIFFER载获VTP通告的数据包,表明发送汇总通告和子集 ...

  8. 前置:API:DSP:核心交换机:边界网关协议:边界:(防御)防火墙:负载均衡:摆渡机:名词解释

    前置:API:DSP:核心交换机:边界网关协议:边界:(防御)防火墙:负载均衡:摆渡机:名词解释 前置: 前置,拼音qián zhì,游戏术语,在即时战略游戏(RTS)中,将建筑物建造在作战前线(例如 ...

  9. 基于CPT构建网络,熟悉各层协议

    基于CPT构建网络,熟悉各层协议 一.CRT使用简单介绍 (1)设备的选择 (2)连线 (3)相关配置 (4)相关操作 二.CPT实验项目实操 (1)直接连接两台 PC 构建 LAN (2)用交换机构 ...

最新文章

  1. mysql存储过程查询实例_mysql存储过程查询实例
  2. R语言ggplot2地理信息可视化(上)
  3. microsoft visual basic保存时错误429_win10更新失败错误8000FFF的解决小技巧
  4. 返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API
  5. python parser count_Python分析哪座城市小吃最好吃
  6. Linux 移动或重命名文件/目录-mv 的10个实用例子
  7. RTT 动态线程和静态线程
  8. python的in,is和id函数
  9. 时结果 hive_Hive优化
  10. 视频压缩工具linux,Ubuntu视频转换工具-mencoder命令行参数
  11. [Python] 根据提供的函数对指定序列做映射:map() 函数
  12. php7与mysql相关配置_PHP7连接mysql,文件配置问题
  13. gaussian软件linux版本,Gaussian 09的版本与平台。
  14. java版spring cloud电商源码+spring boot+redis多租户社交电子商务平台
  15. python库itchat介绍(自动登录微信,自动回复消息)
  16. html文字闪烁特效代码,HTML最简单的文字闪烁代码
  17. 分享四款实用流程图模板
  18. Vivado当中的ooc与global模式
  19. 风控中消费信贷板块的英文词汇
  20. Windows Route 路由表命令详解

热门文章

  1. 海底捞的启示(1):无处不在的服务
  2. Eighth season twenty-second episode,does sex promote childbirth???????
  3. Eviews面板数据之数据写入和常用面板回归模型案例实战
  4. ACS运动控制:轨迹拐点、曲率不连续点
  5. Experiment 0x1:TCP套接字编程
  6. ES6 —— 3、async-await、微任务和宏任务、class、proxy(代理)
  7. mysql创建库和用户名
  8. Spring Bean配置细节author: 惠惠
  9. C 和 C++ 区别 (函数/类/struct/class)
  10. 自定义maven插件:自动生成API的word文档