OpenFlow是一种网络通信协议,应用于SDN架构中控制器和转发器之间的通信。软件定义网络SDN的一个核心思想就是“转发、控制分离”,要实现转、控分离,就需要在控制器与转发器之间建立一个通信接口标准,允许控制器直接访问和控制转发器的转发平面。OpenFlow引入了“流表”的概念,转发器通过流表来指导数据包的转发。控制器正是通过OpenFlow提供的接口在转发器上部署相应的流表,从而实现对转发平面的控制。
1.引言
随着云计算、大数据和物联网等技术的快速发展,网络规模和复杂度不断增加,传统网络架构已无法满足日益增长的业务需求。软件定义网络(SDN)作为一种新兴的网络架构,将网络控制平面与数据转发平面分离,使得网络管理变得更加灵活、高效。OpenFlow作为SDN的核心协议,实现了控制器与交换机之间的通信,使得网络设备可以按照控制器下发的流表进行数据转发。
2.OPEN FLOW 的起源与发展
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的标准化力度。
自2009年底发布第一个正式版本v1.0以来,OpenFlow协议已经经历了1.1、1.2、1.3以及最新发布的1.5等版本的演进过程。目前使用和支持最多的是OpenFlow1.0和OpenFlow1.3版本。
3.实验目的
-
理解OpenFlow协议的基本原理:通过实验,学生可以深入理解OpenFlow协议的工作机制,包括其消息类型、交换机和控制器之间的交互方式等。
-
掌握OpenFlow交换机的工作模式:实验可以帮助学生了解OpenFlow交换机如何处理数据包,如何根据流表项进行转发决策,以及如何与控制器进行通信。
-
学习OpenFlow控制器的编程:通过实验,学生可以学习如何编写简单的OpenFlow控制器程序,实现对网络流量的管理和控制。
-
探索SDN网络的可编程性:通过配置OpenFlow交换机和控制器,学生可以体验到SDN网络的可编程性和灵活性,并了解SDN在提高网络管理效率、实现网络功能创新等方面的优势。
-
研究OpenFlow协议在不同网络环境下的应用:实验中可以模拟不同的网络环境和应用场景,研究OpenFlow协议在不同情况下的性能和适用性。
-
分析OpenFlow协议的安全性:通过实验,学生可以分析OpenFlow协议可能面临的安全威胁,并探讨如何采取措施保护网络的安全。
4.实验环境
Ubuntu+ + mininet + WireShark
5.实验过程
(一)基本要求
1.搭建下图所示拓扑,完成相关 IP 配置,并实现主机与主机之间的 IP 通信。用抓包软件获取控制器与交换机之间的通信数据包。
查看抓包结果,分析OpenFlow协议中交换机与控制器的消息交互过程(截图以其中一个交换机为例)
-
OFPT_HELLO 源端口6633 -> 目的端口49032,从控制器到交换机
-
也有源端口49032 -> 目的端口6633的,即交换机到控制器的另一个包,此处协议为openflow1.5
控制器与交换机建立连接,并使用OpenFlow 1.0 -
OFPT_FEATURES_REQUEST 源端口6633 -> 目的端口49032,从控制器到交换机
控制器请求交换器的特征信息 -
OFPT_SET_CONFIG 源端口6633 -> 目的端口49032,从控制器到交换机
控制器要求交换机按照所给出的信息进行配置 -
OFPT_PORT_STATUS 源端口49032 -> 目的端口6633,从交换机到控制器
当交换机端口发生变化时,交换机告知控制器相应的端口状态 -
OFPT_FEATURES_REPLY 源端口49032 -> 目的端口6633,从交换机到控制器
交换机告知控制器它的特征信息 -
OFPT_PACKET_IN 源端口49032 -> 目的端口6633,从交换机到控制器
交换机告知控制器有数据包进来,请求控制器指示 -
OFPT_PACKET_OUT 源端口6633 -> 目的端口49032,从控制器到交换机
控制器要求交换机按照所给出的action进行处理 -
OFPT_FLOW_MOD 源端口6633 -> 目的端口49032,从控制器到交换机
控制器对交换机进行流表的添加、删除、变更等操作 -
上述OFPT_PACKET_IN、OFPT_PACKET_OUT、OFPT_FLOW_MOD三种消息报文的交互会频繁多次出现在交换机和控制器之间。
6.实验总结
- OpenFlow协议实践案例
(1)基于OpenFlow的网络虚拟化:通过在物理网络中引入OpenFlow交换机,实现虚拟网络的隔离和互访。控制器为每个虚拟网络生成独立的流表,保证了网络资源的隔离和高效利用。
(2)OpenFlow在数据中心的应用:利用OpenFlow实现数据中心的负载均衡、故障恢复和绿色节能等功能。控制器根据实时网络状态调整流表,优化网络性能。
(3)OpenFlow在园区网的应用:通过OpenFlow实现园区网的无线网络与有线网络的融合,提高网络覆盖范围和接入速度。控制器根据用户需求和网络状况,动态调整流表,实现网络资源的优化分配。
- 总结
本文对OpenFlow协议的基本原理和关键技术进行了详细分析,并通过实践案例展示了OpenFlow协议在实际网络环境中的应用。随着SDN技术的不断成熟,OpenFlow协议将在未来网络中发挥越来越重要的作用。掌握OpenFlow协议,将为我国网络技术发展提供有力支持。