openflow协议入门与分析

OpenFlow是什么?

        OpenFlow,一种网络通信协议,属于数据链路层,能够控制网络交换器路由器转发平面(forwarding plane),借此改变网络数据包所走的网络路径。OpenFlow应用于SDN架构中控制器和转发器之间的通信。软件定义网络(SDN)的一个核心思想就是“转发、控制分离”,要实现转、控分离,就需要在控制器与转发器之间建立一个通信接口标准,允许控制器直接访问和控制转发器的转发平面。OpenFlow引入了“流表”的概念,转发器通过流表来指导数据包的转发。控制器正是通过OpenFlow提供的接口在转发器上部署相应的流表,从而实现对转发平面的控制。

        形象来说,SDN中的SDN控制器是SDN网络的“大脑”,它将信息传递给交换机/路由器的“下方”(通过南向API)和“上方”(通过北向API)的应用和业务逻辑。最近,随着组织部署更多的SDN网络,SDN控制器的任务是使用通用应用程序接口(如OpenFlow和开放式虚拟交换机数据库(OVSDB))在SDN控制器域之间进行联合。

OpenFlow的起源与发展

        OpenFlow起源于斯坦福大学的Clean Slate项目,该项目的目标是要“重塑互联网”,旨在改变设计已略显不合时宜,且难以进化发展的现有网络基础架构。在2006年,斯坦福的学生Martin Casado领导了一个关于网络安全与管理的项目,试图通过一个集中式的控制器,让网络管理员方便地定义基于网络流的安全控制策略,并将这些安全策略应用到各种网络设备中,从而实现对整个网络通讯的安全控制。

        受此项目启发,Clean Slate项目的负责人Nick McKeown教授及其团队发现,如果将传统网络设备的数据转发和路由控制两个功能模块相分离,通过集中式的控制器(Controller)以标准化的接口对各种网络设备进行管理和配置,那么这将为网络资源的设计、管理和使用提供更多的可能性,从而更容易推动网络的革新与发展。于是,他们便提出了OpenFlow的概念,并且于2008年发表了题为《OpenFlow: Enabling Innovation in Campus Networks》的论文,首次详细地介绍了OpenFlow的原理和应用场景。

        2009年,基于OpenFlow,该研究团队进一步提出了SDN(Software Defined Network,软件定义网络)的概念,引起了行业的广泛关注和重视。2011年,由Google、Facebook、微软等公司共同发起成立了一个对SDN影响深远的组织ONF(Open Networking Foundation),致力于发展SDN。ONF将OpenFlow定义为SDN架构的控制层和转发层之间的第一个南向标准通信接口,并加大OpenFlow的标准化力度。


OpenFlow在SDN中的位置

自2009年底发布第一个正式版本v1.0以来,OpenFlow协议已经经历了1.1、1.2、1.3以及最新发布的1.5等版本的演进过程。目前使用和支持最多的是OpenFlow1.0和OpenFlow1.3版本。

OpenFlow的工作原理

                整个OpenFlow协议架构由控制器(Controller)、OpenFlow交换机(OpenFlow Switch)、以及安全通道(Secure Channel)组成。控制器对网络进行集中控制,实现控制层的功能;OpenFlow交换机负责数据层的转发,与控制器之间通过安全通道进行消息交互,实现表项下发、状态上报等功能。


OpenFlow协议架构

OpenFlow控制器

        OpenFlow控制器位于SDN架构中的控制层,是SDN的“大脑”,通过OpenFlow协议指导设备的转发。目前主流的OpenFlow控制器分为两大类:开源控制器和厂商开发的商用控制器。常见的开源控制器例如NOX/POX、OpenDaylight等。厂商的商用控制器有Huawei的iMaster NCE等。

OpenFlow安全通道

        安全通道就是连接OpenFlow交换机与控制器的信道,负责在OpenFlow交换机和控制器之间建立安全链接。控制器通过这个通道来控制和管理交换机,同时接收来自交换机的反馈。

        通过OpenFlow安全通道的信息交互必须按照OpenFlow协议规定的格式来执行,通常采用TLS(Transport Layer Security)加密,在一些OpenFlow版本中(1.1及以上),有时也会通过TCP明文来实现。通道中传输的OpenFlow消息类型包括以下三种:

  • Controller-to-Switch消息:由控制器发出、OpenFlow交换机接收并处理的消息,主要用来管理或获取OpenFlow交换机状态。
  • Asynchronous消息:由OpenFlow交换机发给控制器,用来将网络事件或者交换机状态变化更新到控制器。
  • Symmetric消息:可由OpenFlow交换机发出也可由控制器发出,也不必通过请求建立,主要用来建立连接、检测对方是否在线等。

OpenFlow交换机

        OpenFlow交换机是整个OpenFlow网络的核心部件,主要负责数据层的转发。OpenFlow交换机可以是物理的交换机/路由器,也可以是虚拟化的交换机/路由器。按照对OpenFlow的支持程度,OpenFlow交换机可以分为两类:

  • OpenFlow专用交换机:一个标准的OpenFlow设备,仅支持OpenFlow转发。他不支持现有的商用交换机上的正常处理流程,所有经过该交换机的数据都按照OpenFlow的模式进行转发。
  • OpenFlow兼容型交换机:既支持OpenFlow转发,也支持正常二三层转发。这是在商业交换机的基础上添加流表、安全通道和OpenFlow协议来获得了OpenFlow特性的交换机。

        OpenFlow交换机在实际转发过程中,依赖于流表(Flow Table)。流表是OpenFlow交换机进行数据转发的策略表项集合,指示交换机如何处理流量,所有进入交换机的报文都按照流表进行转发。流表本身的生成、维护、下发完全由控制器来实现。

流表项的组成

        在传统网络设备中,交换机/路由器的数据转发需要依赖设备中保存的二层MAC地址转发表、三层IP地址路由表以及传输层的端口号等。OpenFlow交换机中使用的“流表”也是如此,不过他的表项并非是指普通的IP五元组,而是整合了网络中各个层次的网络配置信息,由一些关键字和执行动作组成的灵活规则。

        OpenFlow流表的每个流表项都由匹配域(Match Fields)、处理指令(Instructions)等部分组成。流表项中最为重要的部分就是匹配域和指令,当OpenFlow交换机收到一个数据包,将包头解析后与流表中流表项的匹配域进行匹配,匹配成功则执行指令。

        流表项的结构随着OpenFlow版本的演进不断丰富,不同协议版本的流表项结构如下。


流表项组成

多级流表与流水线处理

        OpenFlow v1.0采用单流表匹配模式,这种模式虽然简单,但是当网络需求越来越复杂时,各种策略放在同一张表中显得十分臃肿。这使得控制平面的管理变得十分困难,而且随着流表长度与数目的增加,对硬件性能要求也越来越高。

        从OpenFlow v1.1开始引入了多级流表和流水线处理机制,当报文进入交换机后,从序号最小的流表开始依次匹配,报文通过跳转指令跳转至后续某一流表继续进行匹配,这样就构成了一条流水线。多级流表的出现一方面能够实现对数据包的复杂处理,另一方面又能有效降低单张流表的长度,提高查表效率。


多级流表处理流程

流表下发方式

OpenFlow流表的下发分可以是主动(Proactive)的,也可以是被动(Reactive)的:

  • 主动模式下,控制器将自己收集的流表信息主动下发给OpenFlow交换机,随后交换机可以直接根据流表进行转发。
  • 被动模式下,OpenFlow交换机收到一个报文而查流表失败时,会发送消息询问控制器,由控制器进行决策该如何转发,并计算、下发相应的流表。被动模式的好处是交换机无需维护全部的流表,只有当实际的流量产生时才向控制器获取流表记录并存储,当老化定时器超时后可以删除相应的流表,因此可以大大节省交换机芯片空间。

OpenFlow消息

消息按照发送的位置可分为三大类,每一大类中有若干子消息

  • Controller-to-Switch消息:SDN控制器主动发送给OpenFlow交换机的消息

    • Features:用于获取交换机特性
    • Configuration:用来配置和查询交换机参数
    • Modify-State:用来修改交换机状态信息(增删改流表项、组表项等)
      • Table-Mod消息
      • Flow-Mod消息(流表操作,添加、删除、修改流表项)
      • Group-Mod消息
      • Port-Mod消息
      • Meter-Mod消息
    • Read-State:用来读取交换机状态信息(当前配置、统计信息等)
      • Port-Stats消息
      • Flow-Stats消息
    • Packet-Out:用来指定交换机将数据包从指定端口转发出去
    • Barrier:在不同消息之间使用,确保操作顺序执行
    • Role Request:控制器用于询问或设置自身在交换机中的角色,常用于交换机与多控制器连接的场景
    • Asynchronous-Configuration:控制器设置异步消息过滤器,只接收感兴趣的异步消息,一般在多控制器场景下使用
  • Asynchronous(异步)消息:OpenFlow交换机主动发送给SDN控制器的异步消息

    • Packet-In:将数据包交给控制器处理,一般流表匹配中出现Table-Miss时或流表项显示指定将数据包交给控制器时,触发该消息
    • Flow-Removed:通知控制器,流表项被删除;流表项超时或控制器删除流表项时触发该消息(需要在交换机配置时使能该消息)
    • Port-status :通知控制器,交换机端口状态发生变化
    • Role-status:通知控制器,控制器在交换机中的角色发送变化
    • Controller-Status:通知控制器,OpenFlow通道状态发生变化
    • Flow-monitor:通知控制器,流表发送变化
  • Symmetric(对称)消息:可由SDN控制器或OpenFlow交换机主动发送的消息
    • Hello:建立控制器与交换机之间的OpenFlow通道
    • Echo:检测交换机与控制器之间的连接状态或测量OpenFlow通道的时延和带宽
    • Error:用于通告错误
    • Experiment:用于实验,测试新特性

Openflow实验

一、实验目的

1.能够运用 wireshark 对 OpenFlow 协议数据交互过程进行抓包;

2.能够借助包解析工具,分析与解释 OpenFlow协议的数据包交互过程与机制。

二、实验环境

1.下载虚拟机软件Oracle VisualBox;

2.在虚拟机中安装Ubuntu 20.04 Desktop amd64,并完整安装Mininet;

三、实验要求

搭建下图所示拓扑,完成相关 IP 配置,并实现主机与主机之间的 IP 通信。用抓包软件获取控制器与交换机之间的通信数据包。

(二)配置网段与IP地址

(三)保存拓扑为Python文件

(四)从另外一个终端输入sudo wireshark并选择any开启抓包软件,并在当前终端输入sudo +刚保存的Python文件打开拓扑,执行pingall命令并查看抓包信息。

(五)查看过滤后的抓包结果,分析OpenFlow协议中交换机与控制器的信息交互过程

四.实验实现过程

(一)搭建拓扑

        首先进入用户模式,搭建打开拓扑界面

        然后搭建下图所示拓扑,完成相关 IP 配置,并实现主机与主机之间的 IP 通信。用抓包软件获取控制器与交换机之间的通信数据包。

(二)配置网段与IP

  1. 配置网段

2.配置h1 h2 h3 h4 的ip地址

(三)保存拓扑为python文件

(四)从另外一个终端输入sudo wireshark并选择any开启抓包软件,并在当前终端输入sudo +刚保存的Python文件打开拓扑,执行pingall命令并查看抓包信息。

运行文件

可以看到全部连接成功,成功运行!

(五)查看过滤后的抓包结果,分析OpenFlow协议中交换机与控制器的信息交互过程

源端口6633     目的端口41142

源端口41142     目的端口6633     此处协议为openflow1.5

OFPT_FEATURES_REQUEST        源端口6633   目的端口41142  从控制器到交换机

OFPT_SET_CONFIG        源端口6633           目的端口41142  从控制器到交换机

OFPT_RORT_STATUS        源端口41142     目的端口6633 从交换机到控制器

OFPT_FEATURES_REPLY         源端口41142  目的端口6633  从交换机到控制器

OFPT_PACKET_IN        源端口41142   目的端口6633  从交换机到控制器

OFPT_PACKET_OUT        源端口6633   目的端口41142 从控制器到交换机

OFPT_FLOW_MOD        源端口6633 目的端口41146  从控制器到交换机

结语

        在整篇文章中,我们深入探讨了 OpenFlow 的基本概念、其特性、它与 SDN 的关系、其架构、实际示例和实际实现过程。 OpenFlow 在现代网络技术中扮演着非常重要的角色,其灵活性和效率受到许多公司和组织的赞赏。

       特别是,集中管理网络和灵活更改网络配置的能力是 OpenFlow 的一大吸引力。 此外,与 SDN 的集成可实现更高效的网络控制。

        OpenFlow的技术将在未来继续发展。 我想关注最新的趋势和应用实例,并期待未来网络技术的发展。

       最后,如果您正在考虑实现 OpenFlow,我们希望本文对您有所帮助。 使用准确的信息和适当的程序来建立有效的网络。

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值