OpenFlow is a communication protocol that gives access to the forwarding plane of a network switch or router over the network. A major feature of OpenFlow separates network form its components, abstracts these components, and reorganizes them. This feature is called SDN (Software Defined NEtwork), and OpenFlow is a technology that actualizes SDN. To abstract network, whole network can be a subject to a program, and the program enables to the central control, automatic configuration changes and optimization of network.
OpenFlow consists of OpenFlow Switch and OpenFlow Controller.
An OpenFlow Switch consists of one or more flow tables and a group table transmits the packets. An OpenFlow Switch follows a direction of a flow table and transmits the packet. If a packet, which is not listed on the flow table, the OpenFlow Switch asks OpenFlow Controller to how to handle this unknown packet.
The OpenFlow Controller manages the OpenFlow Switch via the OpenFlow protocol. The Open Flow Controller add, update, and delete flow entries in flow table, reactively and proactively. Since the OpenFlow Controller manages the OpenFlow Switch, the OpenFlow Switch becomes a swatch, load balancer, and router.
The communication specifications between the OpenFlow Switch and OpenFlow Controller are standardized with OpenFlow protocol.
Up to OpenFlow 1.1, the OpenFlow Switching specifications were developed by the OpenFlow Switching specification consortium, whose core team was the research group of Stanford University. The consortium was also hosted at Stanford University. The specifications are available to the public. For the details, please visit website, http://www.openflow.org/wp/documents.
Today, the specifications are developed at Open Network Foundation. As of the end of March, the specifications of OpenFlow 1.3.1 have been released.
https://www.opennetworking.org/sdn-resources/onf-specifications/openflow
To communicate in an OpenFlow protocol, the same versions of OpenFlow Switch and OpenFlow Controller have to be the same and they can support only the same version of the OpenFlow protocol.
Many products that adapt OpenFlow have supported only the version 1.0 and 1.1 of the OpenFlow Switches. Lately, the growth of support for version 1.3.1 of OpenFlow Switch is increased rapidly, and many products support the version 1.3.1 of OpenFlow Switch.
The Characteristics of each version are shown below.
- 1.0 January 2010
Decide the details of protocol, which is mainly targeted to the use of collage campus use and data center use.
- 1.1
February 2011
Extend its functionalities for supporting wide area network.
Support multiple flow tables.
- 1.2
December 2011
Support IPv6.
Expanded description matching system, Introducing TLV~. Support multiple OpenFlow Controllers.
- 1.3
March 2012
Control plane supports IPv6.
Support tunneling in the internal VPN of the data center.
Bridge between provider backbones.
Support QoS.
And others.
There are two ways to implement the OpenFlow Switch. One way is implemented by software, and the other is the device implementation, which is done by device venders.
There are several ways to implement the Controller that manages the OpenFlow Switch, depending on which programming language is used to write the rules of the controller.
- OpenFlow reference implementation
http://www.openflow.org/wk/index.php/OpenFlow_Releases
The reference implementation, which is working in the user space, support OpenFlow 1.0 and 1.1. The user space is created for defining specifications. The OpenFlow reference implementation consists of elements shown below.
- ofdtapath
A flow table, which is implemented in a user space.- ofprotocol
The secure channel part of reference implementation switch.- dpctl
The configuration command for reference implementation switch.
- Open vSwitch
http://www.opemvswitch.org/
This is an open sourced virtual software switch. This is already used at several virtual platforms, and it supports many management interface. OpenvSwitch supports Linux 2.6.18 or later, and this is included in Linux kernel 3.3 or later. To set up a specific configuration, this works as a OpenFlow switch. This is based upon the specifications of OpenFlow 1.0.
The devices, which implement Open vSwitch, are shown below.
NEC Univerge PF5240, PF5820, IBM G864 switch, HP Procurve 5400zl series, 6600 series. Pica Proto 3290, 3780 and so on.
- Beacon
https://openflow.stanford.edu/display/Beacon/Home
This OpenFlow Controller is developed at Stanford University. This is Java based OepnFlow controller and supports OpenFlow 1.0.
- Floodlight
http://www.projectfloodlight.org/floodlight/
This OpenFlow Controller is created by big switch network and based upon Java. Version 0.90 supports OpenFlow 1.0. The next version will support OpenFlow1.2/1.3.
- NOX
http://www.noxrepo.org/nox/about-nox/
This is developer by Standord University and Nicria Network. The development process of NOX is parallel to the process of defining specifications of OpenFlow. This OpenFlow Controller is an open source project and written in C++. It supports OpenFlow 1.0.
Since the middle of 2012, this has been only occasionally maintained. There are several derivatives of NOX such as nexoflib. The old version of NOX is based upon C++/Python, and this is renamed to NOX classic.
http://www.noxrepo.org/nox/versions-downloads/
- POX
http://www.noxrepo.org/pox/about-pox/
POX is a derivative of NOX and written in Python. It supports OpenFlow 1.0.
Trema
http://trema.github.io/trema/
Trema is an OpenFlow Controller written in Ruby + C. It supports OpenFlow 1.0 There is trema-edge branch, which supports OpebFlow 1.3.
https://github.com/trema/trema-edge
Ryu
http://osrg.github.io/ryu/
This OpenFlow Controller is developed by Open Source Computing Group at NTT Laboratory. This is based upon Python.
These are examples of testing OpenFlow. To combine a OpenFlow Switch with a OpenFlow Controller, test to execute several settings of OpenFlow.
mininet is a virtual network, which allows to develop and test OpenFlow. On aLinux environment, a virtual network of mininet includes OpenFlow Switch, OpenFlow Controller, and a host that connects to OpenFlow Switch. The details of how to use mini net are listed on OpenFlow/mininet.
To refer to OpenFlow Tutorial, test features of OpenFlow.
http://www.openflow.org/wk/index.php/OpenFlow_Tutorial
Please look at these pages shown below.
OpenFlow/OpenFlow Tutorial 1
OpenFlow/OpenFlow Tutorial 2
To use a mininet environment on two different Linux machines, create OpenFlow Controller and OpenFlow Switch. Then, repeat the process that were done at OpenFlow Tutorial 1 and 2, on this virtual network. In this process, Open vSwitch is used as OpenFlow Switch.
For the details, please visit the site shown below.
OpenFlow/OpenvSwitch_x86
- 2013/08/28 This article is initially uploaded.