SDN与OPENFLOW 简介

article/2025/10/25 6:44:10

本文对Openflow的发展、规范、应用和SDN的提出及相关应用做出较为客观全面的介绍。笔者希望通过本文对OpenFlow/SDN做一个初步介绍,以期帮助大家能够进一步深入了解和学习OpenFlow/SDN。

序言:从网络虚拟化说起

云计算的发展,是以虚拟化技术为基础的。云计算服务商以按需分配为原则,为客户提供具有高可用性、高扩展性的计算、存储和网络等IT资源。虚拟化技术将各种物理资源抽象为逻辑上的资源,隐藏了各种物理上的限制,为在更细粒度上对其进行管理和应用提供了可能性。近些年,计算的虚拟化技术(主要指x86平台的虚拟化)取得了长足的发展;相比较而言,尽管存储和网络的虚拟化也得到了诸多发展,但是还有很多问题亟需解决,在云计算环境中尤其如此。OpenFlow和SDN尽管不是专门为网络虚拟化而生,但是它们带来的标准化和灵活性却给网络虚拟化的发展带来无限可能。

起源与发展

OpenFlow起源于斯坦福大学的Clean Slate项目组 [1] 。CleanSlate项目的最终目的是要重新发明英特网,旨在改变设计已略显不合时宜,且难以进化发展的现有网络基础架构。在2006年,斯坦福的学生Martin Casado领导了一个关于网络安全与管理的项目Ethane[2],该项目试图通过一个集中式的控制器,让网络管理员可以方便地定义基于网络流的安全控制策略,并将这些安全策略应用到各种网络设备中,从而实现对整个网络通讯的安全控制。受此项目(及Ethane的前续项目Sane[3])启发,Martin和他的导师Nick McKeown教授(时任Clean Slate项目的Faculty Director)发现,如果将Ethane的设计更一般化,将传统网络设备的数据转发(data plane)和路由控制(control plane)两个功能模块相分离,通过集中式的控制器(Controller)以标准化的接口对各种网络设备进行管理和配置,那么这将为网络资源的设计、管理和使用提供更多的可能性,从而更容易推动网络的革新与发展。于是,他们便提出了OpenFlow的概念,并且Nick McKeown等人于2008年在ACM SIGCOMM发表了题为OpenFlow: Enabling Innovation in Campus Networks[4]的论文,首次详细地介绍了OpenFlow的概念。该篇论文除了阐述OpenFlow的工作原理外,还列举了OpenFlow几大应用场景,包括:1)校园网络中对实验性通讯协议的支持(如其标题所示);2) 网络管理和访问控制;3)网络隔离和VLAN;4)基于WiFi的移动网络;5)非IP网络;6)基于网络包的处理。当然,目前关于OpenFlow的研究已经远远超出了这些领域。

扩展为SDN

基于OpenFlow为网络带来的可编程的特性,Nick和他的团队(包括加州大学伯克利分校的Scott Shenker教授)进一步提出了SDN(Software Defined Network, 目前国内多直译为“软件定义网络”)的概念–其实,SDN的概念据说最早是由KateGreene于2009年在TechnologyReview网站上评选年度十大前沿技术时提出[5]。如果将网络中所有的网络设备视为被管理的资源,那么参考操作系统的原理,可以抽象出一个网络操作系统(Network OS)的概念—这个网络操作系统一方面抽象了底层网络设备的具体细节,同时还为上层应用提供了统一的管理视图和编程接口。这样,基于网络操作系统这个平台,用户可以开发各种应用程序,通过软件来定义逻辑上的网络拓扑,以满足对网络资源的不同需求,而无需关心底层网络的物理拓扑结构。关于SDN的概念和原理,可以参考开放网络基金会(Open NetworkingFoundation)于今年4月份发表的SDN白皮书Software Defined Networking:The New Norm forNetworks [6] 。

从上面的描述中,可以看出OpenFlow/SDN的原理其实并不复杂,从严格意义上讲也很难算是具有革命性的创新。然而OpenFlow/SDN却引来了业界越来越多的关注,成为近年来名副其实的热门技术。截止2012年,包括HP、IBM、Cisco、NEC以及国内的华为和中兴等传统网络设备制造商都已纷纷加入到OpenFlow的阵营,同时有一些支持OpenFlow的网络硬件设备已经面世。2011年,开放网络基金会(Open Networking Foundation)在Nick等人的推动下成立,专门负责OpenFlow标准和规范的维护和发展;同年,第一届开放网络峰会(OpenNetworking Summit)召开,为OpenFlow和SDN在学术界和工业界都做了很好的介绍和推广。2012年年初召开的第二届峰会上,来自Google的Urs Hölzle在以OpenFlow@Google[7]为题的Keynote演讲中宣布Google已经在其全球各地的数据中心骨干网络中大规模地使用OpenFlow/SDN,从而证明了OpenFlow不再仅仅是停留在学术界的一个研究模型,而是已经完全具备了可以在产品环境中应用的技术成熟度。而后,Facebook也宣布其数据中心中使用了OpenFlow/SDN的技术。

OpenFlow标准和规范

自2009年初发布第一个版本(v1.0)以来,OpenFlow规范已经经历了1.1、1.2以及最近刚发布的1.3等版本。同时,2012年初OpenFlow管理和配置协议也发布了第一个版本(OF-CONFIG 1.0 & 1.1)。下图[8] 列出了OF和OF-CONFIG规范各个版本的发展历程及变化,从图中可以看到目前使用和支持最多的仍然是1.0和1.1版本。

在这里,我们将详细介绍一下OpenFlow Switch的最新规范(即OF-1.3)[9]。下图选自Nick等人的论文OpenFlow:EnablingInnovation in Campus Networks [4] 。这张图常被用来说明OpenFlow的原理和基本架构。其实,这张图还很好地表明了OpenFlow Switch规范所定义的范围—从图上可以看出,OpenFlow Switch规范主要定义了Switch的功能模块以及其与Controller之间的通信信道等方面。

Openflow规范主要分为如下四大部分

  1. OpenFlow的端口(Port)

OpenFlow规范将Switch上的端口分为3种类别:

a) 物理端口,即设备上物理可见的端口;
b) 逻辑端口,在物理端口基础上由Switch设备抽象出来的逻辑端口,如为tunnel或者聚合等功能而实现的逻辑端口;
c) OpenFlow定义的端口。OpenFlow目前总共定义了ALL、CONTROLLER、TABLE、IN_PORT、ANY、LOCAL、NORMAL和FLOOD等8种端口,其中后3种为非必需的端口,只在混合型的OpenFlow Switch(OpenFlow-hybrid Switch,即同时支持传统网络协议栈和OpenFlow协议的Switch设备,相对于OpenFlow-only Switch而言)中存在。
2. OpenFlow的FlowTable(国内有直译为“流表”的)

OpenFlow通过用户定义的或者预设的规则来匹配和处理网络包。一条OpenFlow的规则由匹配域(Match Fields)、优先级(Priority)、处理指令(Instructions)和统计数据(如Counters)等字段组成,如下图所示。

在一条规则中,可以根据网络包在L2、L3或者L4等网络报文头的任意字段进行匹配,比如以太网帧的源MAC地址,IP包的协议类型和IP地址,或者TCP/UDP的端口号等。目前OpenFlow的规范中还规定了Switch设备厂商可以选择性地支持通配符进行匹配。据说,OpenFlow在未来还计划支持对整个数据包的任意字段进行匹配。

所有OpenFlow的规则都被组织在不同的FlowTable中,在同一个FlowTable中按规则的优先级进行先后匹配。一个OpenFlow的Switch可以包含一个或者多个FlowTable,从0依次编号排列。OpenFlow规范中定义了流水线式的处理流程,如下图所示。当数据包进入Switch后,必须从FlowTable 0开始依次匹配;FlowTable可以按次序从小到大越级跳转,但不能从某一FlowTable向前跳转至编号更小的FlowTable。当数据包成功匹配一条规则后,将首先更新该规则对应的统计数据(如成功匹配数据包总数目和总字节数等),然后根据规则中的指令进行相应操作–比如跳转至后续某一FlowTable继续处理,修改或者立即执行该数据包对应的Action Set等。当数据包已经处于最后一个FlowTable时,其对应的Action Set中的所有Action将被执行,包括转发至某一端口,修改数据包某一字段,丢弃数据包等。OpenFlow规范中对目前所支持的Instructions和Actions进行了完整详细的说明和定义。

另外,OpenFlow规范中还定义了很多其他功能和行为,比如OpenFlow对于QoS的支持(即MeterTable和Meter Bands的定义等),对于GroupTable的定义,以及规则的超时处理等。

  1. OpenFlow的通信通道

这一节中,OpenFlow规范定义了一个OpenFlow Switch如何与Controller建立连接、通讯以及相关消息类型等。

OpenFlow规范中定义了三种消息类型:

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之间的信道加密、如何建立多连接等(主连接和辅助连接)。

  1. OpenFlow协议及相关数据结构

在OpenFlow规范的最后一部分,主要详细定义了各种OpenFlow消息的数据结构,包括OpenFlow消息的消息头等。这里就不一一赘述,如需了解可以参考OpenFlow源代码[10]中openflow.h头文件中关于各种数据结构的定义。

OpenFlow的应用

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

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

  1. 网络虚拟化 – FlowVisor[11]

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

  1. 负载均衡 – Aster*x[12]

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

  1. 绿色节能的网络服务 – ElasticTree[13]

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

结束语

没有任何一项技术可以解决所有问题,我们相信OpenFlow/SDN也不会是解决现有所有网络问题的“万金油”。但是,我们相信OpenFlow/SDN的确给网络变革和创新带了许多机遇—既然网络问题已经变得可以通过编程来解决的时候,技术宅们该出手了,拯救网络世界的时候到了!


http://chatgpt.dhexx.cn/article/TIEmMvlh.shtml

相关文章

OpenFlow协议分析

实验环境:CentOS OpenDayLight-Carbon mininet WireShark 本实验通过wireshark抓包分析openflow1.3协议的各种报文与字段。 抓包 首先安装好实验所需的软件,这里不多赘述,需要的可以点击查看:mininet多方法安装,控制…

openflow简介

openflow交换机包含一些流表,流表负责具体包查找和转发 控制器通过of协议对流表查询和管理 一、流表 流表组成: 包头域、活动计数器、0个或多个执行行动 包头域: 计数器: 可以针对每张表、每个流、每个端口、每个队列来维护。…

SDN-OpenFlow1.0协议分析

目录 OpenFlow1.0代码 OpenFlow交换机流表 包头域 计数器 行动 流表匹配 OpenFlow消息 OpenFlow消息格式 对称消息 建立OpenFlow连接(OFPT_HELLO消息) 报告错误(OFPT_ERROR消息) 获取交换机特性信息(Featu…

OpenFlow概述

OpenFlow简介 通俗的讲,OpenFlow是使用类似于API进程配置网络交换机的协议。OpenFlow的思路很简单,网络设备维护一个FlowTable并且只按照FlowTable进行转发,FlowTable本身的生成、维护、下发完全由外置的Controller来实现,注意这里…

OpenFlow了解

openflow的核心思想是将所有的协议都抽象出来,抽象成公共的flow概念。协议抽象:数据,函数(对数据的处理方式),逻辑(数据与处理的对应关系,函数之间的交互行为与时序) pu…

OpenFlow交换机概述

1 交换机组成 OpenFlow交换机包括一个或多个流表和一个组表,执行分组查找和转发,和到一个外部控制器OpenFlow的信道。 控制器使用OpenFlow的协议,可添加、更新和删除流表中表项,既主动或被动响应数据包。 每个流表项包含匹配字段&…

openflow阅读感悟

一、背景 随着网络的快速发展和普及,设备和协议的复杂性导致了网络实验的困难。当时,几乎没有实际方法可以在足够现实的环境中尝试新的网络协议,来自网络学术、产业界的大多数新想法都未经试用和测试。因此,人们普遍认为网络基础设…

OpenFlow概念

OpenFlow是一种网络通信协议,应用于SDN架构中控制器和转发器之间的通信。软件定义网络SDN的一个核心思想就是“转发、控制分离”,要实现转、控分离,就需要在控制器与转发器之间建立一个通信接口标准,允许控制器直接访问和控制转发…

OpenFlow总结

OpenFlow总结 OpenFlow体系结构OpenFlow端口1.1、物理端口1.2、逻辑端口1.3、预定端口(OpenFlow1.5中文版) OpenFlow流表(FlowTable)2.1、概念2.2、流表结构 OpenFlow通信通道3.1、消息类型3.2 、消息交换 OpenFlow体系结构 Open…

Openflow

1.Openflow是啥 OpenFlow是第一个开放的南向接口协议,也是目前最流行的南向协议。 它提出了控制与转发分离的架构,规定了SDN转发设备的基本组件和功能要求,以及与控制器通信的协议。 2.OpenFlow组件 2.1. OpenFlow交换协议 2.2 OpenFlow网…

[学习笔记]OpenFlow概述(1)

个人学习笔记,出问题请指出下。摘取《图解OpenFLow》 Openflow协议是由斯坦福大学提出,最初的出发点是为了更加轻松地构建用于研究的网络。 Openflow的初期设计思想:无需设计新的硬件,只对现有硬件更新其软件。因此,O…

OpenFlow 协议详解(干货)

OpenFlow是一种新型的网络协议,它是控制器和交换机之间的标准协议。自2009年底发布1.0版本后,OpenFlow协议又经历了1.1、1.2、1.3及1.4版本的演进过程,目前使用和支持最多的是1.0和1.3版本。OpenFlow1.3在1.0版的基础上进一步优化及升级&…

OpenFlow概念学习

前言 OpenFlow交换机将原来完全由交换机/路由器控制的报文转发过程转化为由OpenFlow交换机和控制服务器来共同完成,目的交换机要通过of协议(OpenFlow Protocol)经安全通道(Secure Channel)连接到外部控制器&#xff08…

Openflow协议详解

来自:http://www.h3c.com/cn/d_201811/1131080_30005_0.htm 1 OpenFlow背景 转发和控制分离是SDN网络的本质特点之一 。在SDN网络架构中,控制平面与转发平面分离,网络的管理和状态在逻辑上集中到一起,底层的网络基础从应用中独立出来&#…

深入分析OpenFlow协议

文章目录 OpenFlow是什么???OpenFlow的起源与发展OpenFlow工作原理OpenFlow组件OpenFlow控制器1、NOX/POX2、ONOS3、OpenDaylight OpenFlow安全通道OpenFlow交换机流表项的组成多级流表与流水线处理流表下发方式 OpenFlow的应用场景OpenFlow的…

【赛氪 Saikr】不正方形(数学、平面几何 ps:今天打了假赛)

题目: 不正方形 Description 今天是数学课!小A发现同学们上课很消极,于是给大家出了一个数学小游戏。 小A在黑板上画了一个很大很大的平面直角坐标系,然后给出了若干个红点和黄点,现在同学们需要回答,这…

数学真正的意义

产业智能官:“很多人对现代数学充满疑虑,成长的过程中被数学的难题长期折磨而产生的心理阴影。因此,数学成了社交网络中避而不谈的话题。 很早以前,我们就被教育“数学是思维的体操”。但是,对大脑是如何受益于这种体…

查询语文成绩大于数学的学生

Oracle --创建表,插入资料 create table lx ( sno number(10), course varchar2(10), score number(10) ) insert into lx select 3,语文,90 from dual union select 3,数学,68 from dual select * from lx 写法1: 将语文成绩,数学…

美团2022秋招笔试题-小美的数学题-栈

题目描述 阔浩序列是这样定义的: 空串是合法的序列,且代价1如果 s 是合法的阔浩序列,那么( s )也是合法的,且( s )的代价为 s1如果s,t都是合法的,那么它们拼接起来的 st 也是合法,且总的代价为s的代价*t 的代价。 例如,(()())()是合法的,其代价为(2*21)*210 输入…

那些虐哭过你的大学数学课都有什么用处?看完后恍然大悟!

导读:高等数学有什么用?很多人都在问这个问题。其实大多数人在问这个问题的时候,心里已经预设了否定的答案。确实,对于大多数人来说,已经发展到了连数字都基本很少用了的一些高等数学分支,是过于虚无飘渺了…