Decoupling network control from networking devices is the common denominator of Software-
Defined Networking (SDN). SDN is a recent paradigm shift in computer networking, where
network control functionality (also known as the control plane) is decoupled from data forwarding
functionality (also known as the data plane), and furthermore, the split control is programmable.
The migration of control logic, which used to be tightly integrated into networking devices (for
example, Ethernet switches) into accessible and logically centralized controllers enables the
underlying networking infrastructure to be abstracted from an application's point of view. This
separation paves the way for a more flexible, programmable, vendor-agnostic, cost-effective, and
innovative network architecture.
Besides the network abstraction, the SDN architecture will provide a set of APIs that simplify the
implementation of common network services (for example, routing, multicast, security, access
control, bandwidth management, traffic engineering, QoS, energy efficiency, and various forms of
policy management). As a result, enterprises, network operators, and carriers gain unprecedented
programmability, automation, and network control, enabling them to build highly scalable, flexible
networks that readily adapt to changing business needs. OpenFlow is the first standard interface
designed specifically for SDN, providing high-performance, granular traffic control across
multiple networking devices.
This book looks at the fundamentals of OpenFlow, as one of the early implementations of the SDN
concept. Starting from an SDN introduction, we will go from OpenFlow switches and controllers
up to the development of OpenFlow-based network applications (Net Apps), network
virtualization, OpenFlow in cloud computing, active OpenFlow-related open source projects, and
the future of SDN. If you are still hungry for more, this book shows you how to set up SDN with
OpenFlow.
Conventions
In this book, you will find a number of text styles that distinguish between different kinds of
information. Here are some examples of these styles and an explanation of their meaning. Code
words in text, database table names, folder names, filenames, file extensions, pathnames, dummy
URLs, user input, and Twitter handles are shown as follows: "The message
is OFPT_BARRIER_REQUEST and has no message body. " A block of code is set as follows:
if packet.dst not in self.macToPort:
log.debug("Port for %s unknown -- flooding" %
(packet.dst,))
flood()
else:
port = self.macToPort[packet.dst]
When we wish to draw your attention to a particular part of a code block, the relevant lines or
items are set in bold:
,if packet.dst not in self.macToPort:
log.debug("Port for %s unknown -- flooding" %
(packet.dst,))
flood()
else:
port = self.macToPort[packet.dst]
Any command-line input or output is written as follows:
git clone https://github.com/noxrepo/nox
New terms and important words are shown in bold. Words that you see on the screen, for
example, in menus or dialog boxes, appear in the text like this: "Configure the VirtualBox for
the Host-Only Network Details from File | Preferences | Networks | Host-only Networks | DHCP
Server."
Warnings or important notes appear like this.
Tips and tricks appear like this.
Downloading the example code
You can download the example code files for this book from your account
at http://www.packtpub.com. If you purchased this book elsewhere, you can
visit http://www.packtpub.com/support and register to have the files emailed directly to you. You
can download the code files by following these steps:
1. Log in or register to our website using your email address and password.
2. Hover the mouse pointer on the SUPPORT tab at the top.
3. Click on Code Downloads & Errata.
4. Enter the name of the book in the Search box.
5. Select the book for which you're looking to download the code files.
6. Choose from the drop-down menu where you purchased this book from.
7. Click on Code Download.
Once the file is downloaded, please make sure that you unzip or extract the folder using the latest
version of:
WinRAR / 7-Zip for Windows
Zipeg / iZip / UnRarX for Mac
7-Zip / PeaZip for Linux
The code bundle for the book is also hosted on GitHub at https://github.com/PacktPublishing/-
Software-Defined-Networking-with-OpenFlow. We also have other code bundles from our rich
catalog of books and videos available at https://github.com/PacktPublishing/. Check them out!
Software-Defined Networks
, This chapter provides a solid foundation for Software-Defined Networking (SDN) concepts and
other supporting technologies. Its characteristics are covered in this chapter as well as the various
applications of SDN on production networks. Finally, Network Function Virtualization (NFV),
a concept often mixed up with SDN, is explored and the differences between SDN and NFV are
explained in details.
In this chapter, we will cover the following topics:
What is SDN?
SDN use cases
NFV
Understanding SDN
In a bid to understand SDN in relation with OpenFlow, it is necessary to provide a good
background on SDN, its motivation, and what it promises. This chapter provides you with the
required knowledge prior to the actual setup of SDN/OpenFlow, enabling experimental and
developmental environments.
So what is SDN?
Traditional network technologies have existed from the inception of networking, even though
various modifications have been made to the underlying architecture and devices (such as
switches, routers, and firewalls) and frames and packets have been forwarded and routed using a
similar approach resulting in limited efficiency and a high cost of maintenance. As a consequence
of this, there was the need to evolve the techniques used in the architecture and operations of
networks, which led to the birth of SDN.
SDN, often referred to as a revolutionary new idea in computer networking, promises to
dramatically simplify network control and management and enable innovation through network
programmability. Network engineers are responsible for configuring policies to respond to a wide
range of network events and application scenarios. They manually transform these high-level
policies into low-level configuration commands. These very complex tasks are often accomplished
with access to very limited tools. Thus, network management control and performance tuning are
quite challenging and error-prone tasks.
Another challenge is what network engineers and researchers refer to as internet ossification. Due
to its huge deployment base and its impacts on different aspects of our life, the internet has become
extremely difficult to evolve both in terms of its physical infrastructure as well as its protocols and
performance. As emerging and demanding applications become more complex, the current status
quo of the internet seems unable to evolve to address emerging challenges.
Present day network architecture is made up of a control plane, data plane, and management plane
where the control and data planes are merged into a machine generally known as inside the box.
To avoid these limitations, a new set of networks known as programmable networks have emerged,
generally known as out of the box.