Software Defined Networking (SDN) is a new paradigm in which the forwarding hardware is decoupled from control decisions~\cite{sdn-past-present-future}.
In this architecture there is a logical centralized controller and multiple forwarding devices that are configured via an interface (e.g OpenFlow).

The former has a view of the whole network, it runs the control plane that is in charge of handle flows and forwarding rules, the latter are simple network devices (e.g switches) which manage the forwarding process of the packets.

Due to its decoupled nature, SDN is believed to be a new networking technology that simplifies today's network operation and management, also it enables networking innovations and new infrastructure design~\cite{sdn-survey}.
An SDN instance has tree main parts as it is shown in Figure~\ref{fig:sdn architecture}:
\begin{itemize}
	\item 
	application, it takes advantage of the decoupled control and data plane to gain some specific goals as security rules or network measurement.
	It communicates with the control plane through the northbound interface used by the applications to give it commands;
	\item 
	control plane, it is the entity called SND controller which manipulates forwarding devices independently from the protocol adopted. It uses its southbound to talk with the data plane and to push flow-rules on physical appliance;
	\item 
	data plane, this layer is connected to the controller via shared protocol (OpenFlow is the most used) and it handles the packets based on the rules and configuration given by the control plane.
\end{itemize}

This programmability, given by separation between controller and forwarding devices, allows to have some features that the traditional networking has been hard to reach:

\begin{itemize}
	\item 
	flexibility: the user could change flow rules and device configuration on demand;
	\item 
	availability: the network topology could change, some middle-boxes could be add or be removed without loss of connectivity;
	\item
	programmability: it easy to program the network, because the user needs to focus only on the controller and not on the forwarding functions;
	\item 
	open interfaces: SDN devices use open source interface, both for north and south bounds, to communicate to the controller;
	\item 
	centralized control: it is useful to have one point that configures all the devices, because it has a wide-view of the network, which simplifies trouble shooting operations.
\end{itemize}

\begin{figure}[H]
	\centerline{\includegraphics[width=0.95\textwidth]
		{SDN-01.png}}
	\caption{From network functions hardware-based to software-based NFV solutions~\cite{SDN-architecture}.
		\label{fig:sdn architecture}}
\end{figure}

\subsubsection{OpenFlow}
The main protocol used in SDN network architecture is OpenFlow~\cite{openflow-report} standardized by Open Networking Foundation.
OpenFlow is a protocol that exposes an API used for the communication between the controller and switches.
It enables to control the network-wide forwarding behaviour under an SDN concept~\cite{sdn-survey}.
OpenFlow switch can act as a router, a bridge, a NAT, a firewall, or exhibit similar functions that depend on packet-handling rules~\cite{sdn-survey}.
OpenFlow protocol allows the switches to setup flows not based only on IP addresses, protocol types or port, but the controller could push some forwarding rules following high-level logic as the forwarding based on the input port of the switch where the traffic is coming from.

SDN paradigm could be more powerful if it is used combined with NFV (Network Function Virtualization), because both these technologies gave more flexibility and scalability that the current hardware-centric Internet infrastructure suffers from several shortcomings~\cite{sdn-survey}.
