Bruno Astuto

A Nunes

Marc Mendonca

Xuan-Nam Nguyen

Katia Obraczka

Thierry Turletti
email: thierry.turletti@inria.fr

A Survey of Software-Defined Networking: Past, Present, and Future of Programmable Networks

Keywords: Software-Defined Networking, programmable networks, survey, data plane, control plane, virtualization

The idea of programmable networks has recently re-gained considerable momentum due to the emergence of the Software-Defined Networking (SDN) paradigm. SDN, often referred to as a "radical new idea in networking", promises to dramatically simplify network management and enable innovation through network programmability. This paper surveys the state-of-the-art in programmable networks with an emphasis on SDN. We provide a historic perspective of programmable networks from early ideas to recent developments. Then we present the SDN architecture and the OpenFlow standard in particular, discuss current alternatives for implementation and testing of SDN-based protocols and services, examine current and future SDN applications, and explore promising research directions based on the SDN paradigm.

I. INTRODUCTION

C OMPUTER networks are typically built from a large number of network devices such as routers, switches and numerous types of middleboxes (i.e., devices that manipulate traffic for purposes other than packet forwarding, such as a firewall) with many complex protocols implemented on them. Network operators are responsible for configuring policies to respond to a wide range of network events and applications. They have to manually transform these high level-policies into low-level configuration commands while adapting to changing network conditions. And often they need to accomplish these very complex tasks with access to very limited tools. As a result, network management and performance tuning is quite challenging and thus error-prone. The fact that network devices are usually vertically-integrated black boxes exacerbates the challenge network operators and administrators face.

Another almost unsurmountable challenge network practitioners and researchers face has been referred to as "Internet ossification". Because of its huge deployment base and the fact it is considered part of our society's critical infrastructure (just like transportation and power grids), the Internet has become extremely difficult to evolve both in terms of its physical infrastructure as well as its protocols and performance. However, as current and emerging Internet applications and services become increasingly more complex and demanding, it is imperative that the Internet be able to evolve to address these new challenges.

The idea of "programmable networks" has been proposed as a way to facilitate network evolution. In particular, Software Defined Networking (SDN) is a new networking paradigm in which the forwarding hardware is decoupled from control decisions. It promises to dramatically simplify network management and enable innovation and evolution. The main idea is to allow software developers to rely on network resources in the same easy manner as they do on storage and computing resources. In SDN, the network intelligence is logically centralized in software-based controllers (the control plane), and network devices become simple packet forwarding devices (the data plane) that can be programmed via an open interface (e.g., ForCES [START_REF] Doria | Forwarding and Control Element Separation (ForCES) Protocol Specification[END_REF], OpenFlow [START_REF] Mckeown | Openflow: enabling innovation in campus networks[END_REF], etc).

SDN is currently attracting significant attention from both academia and industry. A group of network operators, service providers, and vendors have recently created the Open Network Foundation [START_REF]Open networking foundation[END_REF], an industrial-driven organization, to promote SDN and standardize the OpenFlow protocol [START_REF] Mckeown | Openflow: enabling innovation in campus networks[END_REF]. On the academic side, the OpenFlow Network Research Center [START_REF]Open Networking Research Center (ONRC[END_REF] has been created with a focus on SDN research. There have also been standardization efforts on SDN at the IETF and IRTF and other standards producing organizations.

The field of software defined networking is quite recent, yet growing at a very fast pace. Still, there are important research challenges to be addressed. In this paper, we survey the state-of-the-art in programmable networks by providing a historic perspective of the field and also describing in detail the SDN paradigm and architecture. The paper is organized as follows: in Section II, it begins by describing early efforts focusing on programmable networks. Section III provides an overview of SDN and its architecture. It also describes the OpenFlow protocol. Section IV describes existing platforms for developing and testing SDN solutions including emulation and simulation tools, SDN controller implementations, as well as verification and debugging tools. In Section V, we discuss several SDN applications in areas such as data centers and wireless networking. Finally, Section VI discusses research challenges and future directions.

II. EARLY PROGRAMMABLE NETWORKS

SDN has great potential to change the way networks operate, and OpenFlow in particular has been touted as a "radical new idea in networking" [START_REF] Limoncelli | Openflow: a radical new idea in networking[END_REF]. The proposed benefits range from centralized control, simplified algorithms, commoditizing network hardware, eliminating middleboxes, to enabling the design and deployment of third-party 'apps'.

While OpenFlow has received considerable attention from industry, it is worth noting that the idea of programmable networks and decoupled control logic has been around for many years. In this section, we provide an overview of early programmable networking efforts, precursors to the current SDN paradigm that laid the foundation for many of the ideas we are seeing today.

a) Open Signaling: The Open Signaling (OPENSIG) working group began in 1995 with a series of workshops dedicated to "making ATM, Internet and mobile networks more open, extensible, and programmable" [START_REF] Campbell | Open signaling for atm, internet and mobile networks (opensig'98)[END_REF]. They believed that a separation between the communication hardware and control software was necessary but challenging to realize; this is mainly due to vertically integrated switches and routers, whose closed nature made the rapid deployment of new network services and environments impossible. The core of their proposal was to provide access to the network hardware via open, programmable network interfaces; this would allow the deployment of new services through a distributed programming environment.

Motivated by these ideas, an IETF working group was created, which led to the specification of the General Switch Management Protocol (GSMP) [START_REF] Doria | General Switch Management Protocol (GSMP) V3. RFC 3292[END_REF], a general purpose protocol to control a label switch. GSMP allows a controller to establish and release connections across the switch, add and delete leaves on a multicast connection, manage switch ports, request configuration information, request and delete reservation of switch resources, and request statistics. The working group is officially concluded and the latest standards proposal, GSMPv3, was published in June 2002.

b) Active Networking: Also in the mid 1990s, the Active Networking [START_REF] Tennenhouse | A survey of active network research[END_REF], [START_REF] Tennenhouse | Towards an active network architecture[END_REF] initiative proposed the idea of a network infrastructure that would be programmable for customized services. There were two main approaches being considered, namely: (1) user-programmable switches, with inband data transfer and out-of-band management channels; and (2) capsules, which were program fragments that could be carried in user messages; program fragments would then be interpreted and executed by routers. Despite considerable activity it motivated, Active Networking never gathered critical mass and transferred to widespread use and industry deployment, mainly due to practical security and performance concerns [START_REF] Moore | Towards practical programmable packets[END_REF].

c) DCAN: Another initiative that took place in the mid 1990s is the Devolved Control of ATM Networks (DCAN) [START_REF]Devolved Control of ATM Networks[END_REF]. The aim of this project was to design and develop the necessary infrastructure for scalable control and management of ATM networks. The premise is that control and management functions of the many devices (ATM switches in the case of DCAN) should be decoupled from the devices themselves and delegated to external entities dedicated to that purpose, which is basically the concept behind SDNs. DCAN assumes a minimalist protocol between the manager and the network, in the lines of what happens today in proposals such as OpenFlow. More on the DCAN project can be found at [START_REF] Van Der Merwe | Switchlets and dynamic virtual atm networks[END_REF].

Still in the lines of SDNs and the proposed decoupling of control and data plane over ATM networks, amongst others, in the work proposed in [START_REF] Van Der Merwe | The tempesta practical framework for network programmability[END_REF] multiple heterogeneous control architectures are allowed to run simultaneously over single physical ATM network by partitioning the resources of that switch between those controllers. d) 4D Project: Starting in 2004, the 4D project [START_REF] Rexford | Network-wide decision making: Toward a wafer-thin control plane[END_REF], [START_REF] Greenberg | A clean slate 4d approach to network control and management[END_REF], [START_REF] Caesar | Design and implementation of a routing control platform[END_REF] advocated a clean slate design that emphasized separation between the routing decision logic and the protocols governing the interaction between network elements. It proposed giving the "decision" plane a global view of the network, serviced by a "dissemination" and "discovery" plane, for control of a "data" plane for forwarding traffic. These ideas provided direct inspiration for later works such as NOX [START_REF] Gude | Nox: towards an operating system for networks[END_REF], which proposed an "operating system for networks" in the context of an OpenFlow-enabled network.

e) NETCONF: In 2006, the IETF Network Configuration Working Group proposed NETCONF [START_REF] Enns | NETCONF Configuration Protocol[END_REF] as a management protocol for modifying the configuration of network devices. The protocol allowed network devices to expose an API through which extensible configuration data could be sent and retrieved.

Another management protocol, widely deployed in the past and used until today, is the SNMP [START_REF] Case | Simple network management protocol (snmp)[END_REF]. SNMP was proposed in the late 80's and proved to be a very popular network management protocol, which uses the Structured Management Interface (SMI) to fetch data contained in the Management Information Base (MIB). It could be used as well to change variables in the MIB in order to modify configuration settings. It later became apparent that in spite of what it was originally intended for, SNMP was not being used to configure network equipment, but rather as a performance and fault monitoring tool. Moreover, multiple shortcomings were detected in the conception of SNMP, the most notable of which was its lack of strong security. This was addressed in a later version of the protocol.

NETCONF, at the time it was proposed by IETF, was seen by many as a new approach for network management that would fix the aforementioned shortcomings in SNMP. Although the NETCONF protocol accomplishes the goal of simplifying device (re)configuration and acts as a building block for management, there is no separation between data and control planes. The same can be stated about SNMP. A network with NETCONF should not be regarded as fully programmable as any new functionality would have to be implemented at both the network device and the manager so that any new functionality can be provided; furthermore, it is designed primarily to aid automated configuration and not for enabling direct control of state nor enabling quick deployment of innovative services and applications. Nevertheless, both NETCONF and SNMP are useful management tools that may be used in parallel on hybrid switches supporting other solutions that enable programmable networking.

The NETCONF working group is currently active and the latest proposed standard was published in June 2011.

f) Ethane: The immediate predecessor to OpenFlow was the SANE / Ethane project [START_REF] Casado | Ethane: Taking control of the enterprise[END_REF], which, in 2006, defined a new architecture for enterprise networks. Ethane's focus was on using a centralized controller to manage policy and security in a network. A notable example is providing identitybased access control. Similar to SDN, Ethane employed two components: a controller to decide if a packet should be forwarded, and an Ethane switch consisting of a flow table and a secure channel to the controller.

Ethane laid the foundation for what would become Software-Defined Networking. To put Ethane in the context of today's SDN paradigm, Ethane's identity-based access control would likely be implemented as an application on top of an SDN controller such as NOX [START_REF] Gude | Nox: towards an operating system for networks[END_REF], Maestro [START_REF] Cai | Maestro: A system for scalable openflow control[END_REF], Beacon [22], SNAC [START_REF]Simple Network Access Control (SNAC)[END_REF], Helios [START_REF]Helios by nec[END_REF], etc.

III. SOFTWARE-DEFINED NETWORKING ARCHITECTURE

Data communication networks typically consist of enduser devices, or hosts interconnected by the network infrastructure. This infrastructure is shared by hosts and employs switching elements such as routers and switches as well as communication links to carry data between hosts. Routers and switches are usually "closed" systems, often with limitedand vendor-specific control interfaces. Therefore, once deployed and in production, it is quite difficult for current network infrastructure to evolve; in other words, deploying new versions of existing protocols (e.g., IPv6), not to mention deploying completely new protocols and services is an almost insurmountable obstacle in current networks. The Internet, being a network of networks, is no exception.

As mentioned previously, the so-called Internet "ossification" [START_REF] Mckeown | Openflow: enabling innovation in campus networks[END_REF] is largely attributed to the tight coupling between the data-and control planes which means that decisions about data flowing through the network are made on-board each network element. In this type of environment, the deployment of new network applications or functionality is decidedly nontrivial, as they would need to be implemented directly into the infrastructure. Even straightforward tasks such as configuration or policy enforcement may require a good amount of effort due to the lack of a common control interface to the various network devices. Alternatively, workarounds such as using "middleboxes" (e.g., firewalls, Intrusion Detection Systems, Network Address Translators, etc.) overlayed atop the underlying network infrastructure have been proposed and deployed as a way to circumvent the network ossification effect. Content Delivery Networks (CDNs) [START_REF] Passarella | Review: A survey on content-centric technologies for the current internet: Cdn and p2p solutions[END_REF] are a good example.

Software-Defined Networking was developed to facilitate innovation and enable simple programmatic control of the network data-path. As visualized in Figure 1, the separation of the forwarding hardware from the control logic allows easier deployment of new protocols and applications, straightforward network visualization and management, and consolidation of various middleboxes into software control. Instead of enforcing policies and running protocols on a convolution of scattered devices, the network is reduced to "simple" forwarding hardware and the decision-making network controller(s).

A. Current SDN Architectures

In this section, we review two well-known SDN architectures, namely ForCES [START_REF] Doria | Forwarding and Control Element Separation (ForCES) Protocol Specification[END_REF] and Openflow [START_REF] Mckeown | Openflow: enabling innovation in campus networks[END_REF]. Both OpenFlow and ForCES follow the basic SDN principle of separation between the control and data planes; and both standardize information exchange between planes. However, they are technically very different in terms of design, architecture, forwarding model, and protocol interface.

1) ForCES:

The approach proposed by the IETF ForCES (Forwarding and Control Element Separation) Working Group, redefines the network device's internal architecture having the control element separated from the forwarding element. However, the network device is still represented as a single entity. The driving use case provided by the working group considers the desire to combine new forwarding hardware with third-party control within a single network device. Thus, the control and data planes are kept within close proximity (e.g., same box or room). In contrast, the control plane is ripped entirely from the network device in "OpenFlow-like" SDN systems.

ForCES defines two logic entities called the Forwarding Element (FE) and the Control Element (CE), both of which implement the ForCES protocol to communicate. The FE is responsible for using the underlying hardware to provide per-packet handling. The CE executes control and signaling functions and employs the ForCES protocol to instruct FEs on how to handle packets. The protocol works based on a masterslave model, where FEs are slaves and CEs are masters.

An important building block of the ForCES architecture is the LFB (Logical Function Block). The LFB is a well-defined functional block residing on the FEs that is controlled by CEs via the ForCES protocol. The LFB enables the CEs to control the FEs' configuration and how FEs process packets.

ForCES has been undergoing standardization since 2003, and the working group has published a variety of documents including: an applicability statement, an architectural framework defining the entities and their interactions, a modeling language defining the logical functions within a forwarding element, and the protocol for communication between the control and forwarding elements within a network element. The working group is currently active. 2) OpenFlow: Driven by the SDN principle of decoupling the control and data forwarding planes, OpenFlow [START_REF] Mckeown | Openflow: enabling innovation in campus networks[END_REF], like ForCES, standardizes information exchange between the two planes.

In the OpenFlow architecture, illustrated in Figure 2, the forwarding device, or OpenFlow switch, contains one or more flow tables and an abstraction layer that securely communicates with a controller via OpenFlow protocol. Flow tables consist of flow entries, each of which determines how packets belonging to a flow will be processed and forwarded. Flow entries typically consist of: (1) match fields, or matching rules, used to match incoming packets; match fields may contain information found in the packet header, ingress port, and metadata; (2) counters, used to collect statistics for the particular flow, such as number of received packets, number of bytes and duration of the flow; and (3) a set of instructions, or actions, to be applied upon a match; they dictate how to handle matching packets.

Upon a packet arrival at an OpenFlow switch, packet header fields are extracted and matched against the matching fields portion of the flow table entries. If a matching entry is found, the switch applies the appropriate set of instructions, or actions, associated with the matched flow entry. If the flow table look-up procedure does not result on a match, the action taken by the switch will depend on the instructions defined by the table-miss flow entry. Every flow table must contain a table-miss entry in order to handle table misses. This particular entry specifies a set of actions to be performed when no match is found for an incoming packet, such as dropping the packet, continue the matching process on the next flow table, or forward the packet to the controller over the OpenFlow channel. It is worth noting that from version 1.1 OpenFlow supports multiple tables and pipeline processing. Another possibility, in the case of hybrid switches, i.e., switches that have both OpenFlow-and non-OpenFlow ports, is to forward non-matching packets using regular IP forwarding schemes.

The communication between controller and switch happens via OpenFlow protocol, which defines a set of messages that can be exchanged between these entities over a secure channel. Using the OpenFlow protocol a remote controller can, for example, add, update, or delete flow entries from the switch's flow tables. That can happen reactively (in response to a packet arrival) or proactively.

3) Discussion: In [START_REF] Wang | Analysis of Comparisons between OpenFlow and ForCES[END_REF], the similarities and differences between ForCES and OpenFlow are discussed. Among the differences, they highlight the fact that the forwarding model used by ForCES relies on the Logical Function Blocks (LFBs), while OpenFlow uses flow tables. They point out that in OpenFlow actions associated with a flow can be combined to provide greater control and flexibility for the purposes of network management, administration, and development. In ForCES the combination of different LFBs can also be used to achieve the same goal.

We should also re-iterate that ForCES does not follow the same SDN model underpinning OpenFlow, but can be used to achieve the same goals and implement similar functionality [START_REF] Wang | Analysis of Comparisons between OpenFlow and ForCES[END_REF].

The strong support from industry, research, and academia that the Open Networking Foundation (ONF) and its SDN proposal, OpenFlow, has been able to gather is quite impressive. The resulting critical mass from these different sectors has produced a significant number of deliverables in the form of research papers, reference software implementations, and even hardware. So much so that some argue that OpenFlow's SDN architecture is the current SDN de-facto standard. In line with this trend, the remainder of this section focuses on OpenFlow's SDN model. More specifically, we will describe the different components of the SDN architecture, namely: the switch, the controller, and the interfaces present on the controller for communication with forwarding devices (southbound communication) and network applications (northbound communication). Section IV also has an OpenFlow focus as it describes existing platforms for SDN development and testing, including emulation and simulation tools, SDN controller implementations, as well as verification and debugging tools. Our discussion of future SDN applications and research directions is more general and is SDN architecture agnostic.

B. Forwarding Devices

The underlaying network infrastructure may involve a number of different physical network equipment, or forwarding devices such as routers, switches, virtual switches, wireless access points, to name a few. In a software-defined network, such devices are often represented as basic forwarding hardware accessible via an open interface at an abstraction layer, as the control logic and algorithms are off-loaded to a controller. Such forwarding devices are commonly referred to, in SDN terminology, simply as "switches", as illustrated in Figure 3.

In an OpenFlow network, switches come in two varieties: pure and hybrid. Pure OpenFlow switches have no legacy features or on-board control, and completely rely on a controller for forwarding decisions. Hybrid switches support OpenFlow in addition to traditional operation and protocols. Most commercial switches available today are hybrids.

1) Processing Forwarding Rules: Flow-based SDN architectures such as OpenFlow may utilize additional forwarding table entries, buffer space, and statistical counters that are difficult to implement in traditional ASIC switches. Some recent proposals [START_REF] Lu | Using cpu as a traffic co-processing unit in commodity switches[END_REF], [START_REF] Mogul | Hey, you darned counters!: get off my asic![END_REF] have advocated adding a generalpurpose CPU, either on-switch or nearby, that may be used to supplement or take over certain functions and reduce the complexity of the ASIC design. This would have the added benefit of allowing greater flexibility for on-switch processing as some aspects would be software-defined.

In [START_REF] Luo | Accelerating openflow switching with network processors[END_REF], network processor based acceleration cards were used to perform OpenFlow switching. They proposed and described the design options and reported results that showed a 20% reduction on packet delay. In [START_REF] Tanyingyong | Improving pc-based openflow switching performance[END_REF], an architectural design to improve look-up performance of OpenFlow switching in Linux was proposed. Preliminary results reported showed a packet switching throughput increase of up to 25% compared to the throughput of regular software-based OpenFlow switching. Another study on data-plane performance over Linux based Openflow switching was presented in [START_REF] Bianco | Openflow switching: Data plane performance[END_REF], which compared OpenFlow switching, layer-2 Ethernet switching and layer-3 IP routing performance. Fairness, forwarding throughput and packet latency in diverse load conditions were analyzed. In [START_REF] Jarschel | Modeling and performance evaluation of an openflow architecture[END_REF], a basic model for the forwarding speed and blocking probability of an OpenFlow switch was derived, while the parameters for the model were drawn from measurements of switching times of current OpenFlow hardware, combined with an OpenFlow controller.

2) Installing Forwarding Rules: Another issue regarding the scalability of an OpenFlow network is memory limitation in forwarding devices. OpenFlow rules are more complex than forwarding rules in traditional IP routers. They support more flexible matchings and matching fields and also different actions to be taken upon packet arrival. A commodity switch normally supports between a few thousand up to tens of thousands forwarding rules [START_REF] Stephens | Past: scalable ethernet for data centers[END_REF]. Also, Ternary Content-Addressable Memory (TCAM) has been used to support forwarding rules, which can be expensive and power-hungry. Therefore, the rule space is a bottleneck to the scalability of OpenFlow, and the optimal use of the rule space to serve a scaling number of flow entries while respecting network policies and constraints is a challenging and important topic.

Some proposals address memory limitations in OpenFlow switches. Devoflow [START_REF] Curtis | Devoflow: scaling flow management for high-performance networks[END_REF] is an extension to OpenFlow for highperformance networks. It handles mice flows (i.e. short flows) at the OpenFlow switch and only invokes the controller in order to handle elephant flows (i.e larger flows). The performance evaluation conducted in [START_REF] Curtis | Devoflow: scaling flow management for high-performance networks[END_REF] showed that Devoflow uses 10 to 53 times less flow table space. In DIFANE [START_REF] Yu | Scalable flow-based networking with difane[END_REF], "ingress" switches redirect packets to "authority" switches that store all the forwarding rules while ingress switches cache flow table rules for future use. The controller is responsible for partitioning rules over authority switches.

Palette [START_REF] Kanizo | Palette: Distributing tables in software-defined networks[END_REF] and One Big Switch [START_REF] Kang | Optimizing the one big switch abstraction in software-defined networks[END_REF] address the rule placement problem. Their goal is to minimize the number of rules that need to be installed in forwarding devices and use end-to-end policies and routing policies as input to a rule placement optimizer. End-to-end policies consist of a set of Abstraction Layer Fig. 3. The separated control logic can be viewed as a network operating system, upon which applications can be built to "program" the network.

prioritized rules dictating, for example, access control and load balancing, while viewing the whole network as a single virtual switch. Routing policies, on the other hand, dictate through what paths traffic should flow in the network. The main idea in Palette is to partition end-to-end policies into sub tables and then distribute them over the switches. Their algorithm consists of two steps: determine the number k of tables needed and then partition the rules set over k tables. One Big Switch, on the other hand, solves the rule placement problem separately for each path, choosing the paths based on network metrics (e.g. latency, congestion and bandwidth), and then combining the result to reach a global solution.

C. The Controller

The decoupled system has been compared to an operating system [START_REF] Gude | Nox: towards an operating system for networks[END_REF], in which the controller provides a programmatic interface to the network. That can be used to implement management tasks and offer new functionalities. A layered view of this model is illustrated in Figure 3. This abstraction assumes the control is centralized and applications are written as if the network is a single system. It enables the SDN model to be applied over a wide range of applications and heterogeneous network technologies and physical media such as wireless (e.g. 802.11 and 802.16), wired (e.g. Ethernet) and optical networks.

As a practical example of the layering abstraction accessible through open application programming interfaces (APIs), Figure 4 illustrates the architecture of an SDN controller based on the OpenFlow protocol. This specific controller is a fork of the Beacon controller [22] called Floodlight [START_REF]Floodlight, an open sdn controller[END_REF]. In this figure it is possible to observe the separation between the controller and the application layers. Applications can be written in Java and can interact with the built-in controller modules via a JAVA API. Other applications can be written in different languages and interact with the controller modules via the REST API. This particular example of an SDN controller allows the implementation of built-in modules that can communicate with their implementation of the OpenFlow controller (i.e. OpenFlow Services). The controller, on the other hand, can communicate with the forwarding devices via the OpenFlow protocol through the abstraction layer present at the forwarding hardware, illustrated in Figure 3.

While the aforementioned layering abstractions accessible via open APIs allow the simplification of policy enforcement and management tasks, the bindings must be closely maintained between the control and the network forwarding elements. The choices made while implementing such layering architectures can dramatically influence the performance and scalability of the network. In the following, we address some such scalability concerns and go over some proposals that aim on overcoming these challenges. We leave a more detailed discussion on the application layer and the implementation of services and policy enforcement to Section VI-C.

1) Control Scalability: An initial concern that arises when offloading control from the switching hardware is the scalability and performance of the network controller(s). The original Ethane [START_REF] Casado | Ethane: Taking control of the enterprise[END_REF] controller, hosted on a commodity desktop machine, was tested to handle up to 11,000 new flow requests per second and responded within 1.5 milliseconds. A more recent study [START_REF] Tootoonchian | On controller performance in software-defined networks[END_REF] of several OpenFlow controller implementations (NOX-MT, Maestro, Beacon), conducted on a larger emulated network with 100,000 endpoints and up to 256 switches, found that all were able to handle at least 50,000 new flow requests per second in each of the tested scenarios. On an eightcore machine, the multi-threaded NOX-MT implementation handled 1.6 million new flow requests per second with an average response time of 2 milliseconds. As the results show, a single controller is able to handle a surprising number of new flow requests, and should be able to manage all but the largest networks. Furthermore, new controllers under development such as McNettle [START_REF] Voellmy | Scalable software defined network controllers[END_REF] target powerful multicore servers and are being designed to scale up to large data center workloads (around 20 million flows requests per second and up to 5000 switches). Nonetheless, multiple controllers may be used to reduce latency or increase fault tolerance.

A related concern is the controller placement problem [START_REF] Heller | The controller placement problem[END_REF], which attempts to determine both the optimal number of controllers and their location within the network topology, often choosing between optimizing for average and worst case latency. The latency of the link used for communication between controller and switch is of great importance when dimensioning a network or evaluating its performance [START_REF] Curtis | Devoflow: scaling flow management for high-performance networks[END_REF]. That was one of the main motivations behind the work in [START_REF] Phemius | Openflow: Why latency does matter[END_REF] which evaluated how the controller and the network perform with bandwidth and latency issues on the control link. This work concludes that bandwidth in the control link arbitrates how many flows can be processed by the controller, as well as the loss rate when under saturation conditions. The switchto-control latency on the other hand, has a major impact on the overall behavior of the network, as each switch cannot forward data until it receives the message from the controller that inserts the appropriate rules in the flow table. This interval can grow with the link latency and impact dramatically the performance of network applications.

Also, control modeling greatly impacts the network scalability. Some important scalability issues are presented in [START_REF] Yeganeh | On scalability of software-defined networking[END_REF], along with a discussion about scalability trade-offs in softwaredefined network design.

2) Control models: In the following, we go over some of these SDN design options and discuss different methods of controlling a software-defined network, many of which are interrelated:

• Centralized vs. Distributed Although protocols such as OpenFlow specify that a switch is controlled by a controller and therefore appears to imply centralization, software-defined networks may have either a centralized or distributed controlplane. Though controller-to-controller communication is not defined by OpenFlow, it is necessary for any type of distribution or redundancy in the control-plane.

A physically centralized controller represents a single point of failure for the entire network; therefore, Open-Flow allows the connection of multiple controllers to a switch, which would allow backup controllers to take over in the event of a failure. Onix [START_REF] Koponen | Onix: A distributed control platform for large-scale production networks[END_REF] and HyperFlow [START_REF] Tootoonchian | Hyperflow: A distributed control plane for openflow[END_REF] take the idea further by attempting to maintain a logically centralized but physically distributed control plane. This decreases the look-up overhead by enabling communication with local controllers, while still allowing applications to be written with a simplified central view of the network. The potential downside are trade-offs [START_REF] Levin | Logically centralized?: state distribution trade-offs in software defined networks[END_REF] related to consistency and staleness when distributing state throughout the control plane, which has the potential to cause applications that believe they have an accurate view of the network to act incorrectly.

A hybrid approach, such as Kandoo [START_REF] Hassas | Kandoo: a framework for efficient and scalable offloading of control applications[END_REF], can utilize local controllers for local applications and redirect to a global controller for decisions that require centralized network state. This reduces the load on the global controller by filtering the number of new flow requests, while also providing the data-path with faster responses for requests that can be handled by a local control application.

A software-defined network can also have some level of logical decentralization, with multiple logical controllers. An interesting type of proxy controller, called Flowvisor [START_REF] Sherwood | Carving research slices out of your production networks with openflow[END_REF], can be used to add a level of network virtualization to OpenFlow networks and allow multiple controllers to simultaneously control overlapping sets of physical switches. Initially developed to allow experimental research to be conducted on deployed networks alongside production traffic, it also facilitates and demonstrates the ease of deploying new services in SDN environments.

A logically decentralized control plane would be needed in an inter-network spanning multiple administrative domains. Though the domains may not agree to centralized control, a certain level of sharing may be appropriate (e.g., to ensure service level agreements are met for traffic flowing between domains).

• Control Granularity

Traditionally, the basic unit of networking has been the packet. Each packet contains address information necessary for a network switch to make routing decisions. However, most applications send data as a flow of many individual packets. A network that wishes to provide QoS or service guarantees to certain applications may benefit from individual flow-based control. Control can be further abstracted to an aggregated flow-match, rather than individual flows. Flow aggregation may be based on source, destination, application, or any combination thereof.

In a software-defined network where network elements are controlled remotely, overhead is caused by traffic between the data-plane and control-plane. As such, using packet level granularity would incur additional delay as the controller would have to make a decision for each arriving packet. When controlling individual flows, the decision made for the first packet of the flow can be applied to all subsequent packets of that flow. The overhead may be further reduced by grouping flows together, such as all traffic between two hosts, and performing control decisions on the aggregated flows.

• Reactive vs. Proactive Policies

Under a reactive control model, such as the one proposed by Ethane [START_REF] Casado | Ethane: Taking control of the enterprise[END_REF], forwarding elements must consult a controller each time a decision must be made, such as when a packet from a new flow reaches a switch. In the case of flow-based control granularity, there will be a small performance delay as the first packet of each new flow is forwarded to the controller for decision (e.g., forward or drop), after which future packets within that flow will travel at line rate within the forwarding hardware. While the delay incurred by the first-packet may be negligible in many cases, it may be a concern if the controller is geographically remote (though this can be mitigated by physically distributing the controller [START_REF] Tootoonchian | Hyperflow: A distributed control plane for openflow[END_REF]) or if most flows are short-lived, such as single-packet flows. There are also some scalability issues in larger networks, as the controller must be able to handle a larger volume of new flow requests. Alternatively, proactive control approaches push policy rules from the controller to the switches. A good example of proactive control is DIFANE [START_REF] Yu | Scalable flow-based networking with difane[END_REF], which partitions rules over a hierarchy of switches, such that the controller rarely needs to be consulted about new flows and traffic is kept within the data-plane. In their experiments, DIFANE reduces first-packet delay from a 10ms average round-trip time (RTT) with a centralized NOX controller to a 0.4ms average RTT for new single-packet flows. It was also shown to increase the new flow throughput, as the tested version of NOX achieved a peak of 50,000 single-packet flows per second while the DIFANE solution achieved 800,000 single-packet flows per second. Interestingly, it was observed that the OpenFlow switch's local controller implementation becomes a bottleneck before the central NOX controller. This was attributed to the fact that commercial OpenFlow switch implementations were limited to sending 60-330 new flows requests per second at the time of their publication (2010). As shown in Figure 5, a controller that acts as a network operating system must implement at least two interfaces: a "southbound" interface that allows switches to communicate with the controller and a "northbound" interface that presents an API to network control and high-level applications/services.

D. Southbound Communication: Controller-Switch

An important aspect of SDNs is the link between the data-plane and the control-plane. As forwarding elements are controlled by an open interface, it is important that this link remains available and secure.

The OpenFlow protocol can be viewed as one possible implementation of controller-switch interactions, as it defines the communication between the switching hardware and a network controller. For security, OpenFlow 1.3.0 provides optional support for encrypted Transport Layer Security (TLS) communication and a certificate exchange between the switches and the controller(s); however, the exact implementation and certificate format is not currently specified. Also outside the scope of the current specification are fine-grained security options regarding scenarios with multiple controllers, as there is no method specified to only grant partial access permissions to an authorized controller. We examine OpenFlow controller implementation options in greater detail in Section IV.

E. Northbound Communication: Controller-Service

External management systems or network services may wish to extract information about the underlying network or control an aspect of network behavior or policy. Additionally, controllers may find it necessary to communicate with each other for a variety of reasons. For example, an internal control application may need to reserve resources across multiple domains of control or a "primary" controller may need to share policy information with a backup, etc.

Unlike controller-switch communication, there is no currently accepted standard for northbound interactions and they are more likely to be implemented on an ad hoc basis for particular applications. We discuss this further in Section VI.

F. Standardization Efforts

Recently, several standardization organizations have been turning the spotlights towards SDN. For example, as previously mentioned, the IETF's Forwarding and Control Element Separation (ForCES) Working Group [START_REF] Doria | Forwarding and Control Element Separation (ForCES) Protocol Specification[END_REF] has been working on standardizing mechanisms, interfaces, and protocols aiming at the centralization of network control and abstraction of network infrastructure. The Open Network Foundation (ONF) [START_REF]Open networking foundation[END_REF] has been trying to standardize the OpenFlow protocol. As the control plane abstracts network applications from underlying hardware infrastructure, they focus on standardizing the interfaces between: (1) network applications and the controller (i.e. northbound interface) and ( 2) the controller and the switching infrastructure (i.e., southbound interface) which defines the OpenFlow protocol itself. Some of the Study Groups (SGs) of ITU's Telecommunication Standardization Sector (ITU-T) [49] are currently working towards discussing requirements and creating recommendations for SDNs under different perspectives. For instance, the SG13 focuses on Future Networks, including cloud computing, mobile and next generation networks, and is establishing requirements for network virtualization. Other ITU-T SGs such as the SG11 for protocols and test specifications started, in early 2013, requirements and architecture discussions on SDN signaling. The Software-Defined Networking Research Group (SDNRG) at IRTF [50] is also focusing on SDN under various perspectives with the goal of identifying new approaches that can be defined and deployed, as well as identifying future research challenges. Some of their main areas of interest include solution scalability, abstractions, security and programming languages and paradigms particularly useful in the context of SDN.

These and other working groups perform important work, coordinating efforts to evolve existing standards and proposing new ones. The goal is to facilitate smooth transitions from legacy networking technology to the new protocols and architectures, such as SDN Some of these groups, such as ITU-T's SG13, advocate the establishment of a Joint Coordination Activity on SDN (JCA-SDN) for collaboration and coordination between standardizing efforts and also taking advantage of the work performed by the Open Source Software (OSS) community, such as OpenStack [51] and OpenDayLight [52] as they start developing the building blocks for SDN implementation.

IV. SDN DEVELOPMENT TOOLS

SDN has been proposed to facilitate network evolution and innovation by allowing rapid deployment of new services and protocols. In this section, we provide an overview of currently available tools and environments for developing SDN-based services and protocols.

A. Emulation and Simulation Tools

Mininet [START_REF] Lantz | A network in a laptop: rapid prototyping for software-defined networks[END_REF] allows an entire OpenFlow network to be emulated on a single machine, simplifying the initial development and deployment process. New services, applications and protocols can first be developed and tested on an emulation of the anticipated deployment environment before moving to the actual hardware. By default Mininet supports OpenFlow v1.0, though it may be modified to support a software switch that implements a newer release.

The ns-3 [START_REF] Henderson | Network simulations with the ns-3 simulator[END_REF] network simulator supports OpenFlow switches within its environment, though the current version only implements OpenFlow v0.89.

B. Available Software Switch Platforms

There are currently several SDN software switches available that can be used, for example, to run an SDN testbed or when developing services over SDN. Table I presents a list of current software switch implementations with a brief description including implementation language and the OpenFlow standard version that the current implementation supports.

C. Native SDN Switches

One of the main SDN enabling technologies currently being implemented in commodity networking hardware is the Open-Flow standard. In this section we do not intend to present a detailed overview of OpenFlow enabled hardware and makers, but rather provide a list of native SDN switches currently available in the market and provide some information about them, including the version of OpenFlow they implement.

One clear evidence of industry's strong commitment to SDN is the availability of commodity network hardware that are OpenFlow enabled. Table II lists commercial switches that are currently available, their manufacturer, and the version of OpenFlow they implement.

Software Switch

Implementation Overview Version Open vSwitch [START_REF]Open vswitch and ovs-controller[END_REF] C/Python Open source software switch that aims to implement a switch platform v1.0 in virtualized server environments. Supports standard management interfaces and enables programmatic extension and control of the forwarding functions. Can be ported into ASIC switches. Pantou/OpenWRT [START_REF]Pantou: Openflow 1.0 for openwrt[END_REF] C Turns a commercial wireless router or Access Point into an OpenFlow-enabled switch. v1.0 ofsoftswitch13 [START_REF]ofsoftswitch13 -cpqd[END_REF] C/C++ OpenFlow 1.3 compatible user-space software switch implementation. v1.3 Indigo [START_REF]Indigo: Open source openflow switches[END_REF] C Open source OpenFlow implementation that runs on physical switches and uses v1.0 the hardware features of Ethernet switch ASICs to run OpenFlow.

D. Available Controller Platforms

Table III shows a snapshot of current controller implementations. To date, all the controllers in the table support the OpenFlow protocol version 1.0, unless stated otherwise. This table also provides a brief overview of the listed controllers.

Included in Table III are also two special purpose controller implementations: Flowvisor [START_REF] Sherwood | Carving research slices out of your production networks with openflow[END_REF], mentioned previously, and RouteFlow [START_REF] Nascimento | Virtual routers as a service: the routeflow approach leveraging softwaredefined networks[END_REF]. The former acts as a transparent proxy between OpenFlow switches and multiple OpenFlow controllers. It is able to create network slices and can delegate control of each slice to a different controller, also promoting isolation between slices. RouteFlow, on the other hand, is an open source project to provide virtualized IP routing over OpenFlow capable hardware. It is composed of an OpenFlow Controller application, an independent server, and a virtual network environment that reproduces the connectivity of a physical infrastructure and runs IP routing engines. The routing engines generate the forwarding information base (FIB) into the Linux IP tables according to the routing protocols configured (e.g., OSPF, BGP). An extension of RouteFlow is presented in [START_REF] Esteve Rothenberg | Revisiting routing control platforms with the eyes and muscles of software-defined networking[END_REF], which discusses Routing Control Platforms (RCPs) in the context of OpenFlow/SDN. They proposed a controller-centric networking model along with a prototype implementation of an autonomous-system-wide abstract BGP routing service.

E. Code Verification and Debugging

Verification and debugging tools are vital resources for traditional software development and are no less important for SDN. Indeed, for the idea of portable network "apps" to be successful, network behavior must be thoroughly tested and verified.

NICE [START_REF] Canini | A nice way to test openflow applications[END_REF] is an automated testing tool used to help uncover bugs in OpenFlow programs through model checking and symbolic execution.

Anteater [START_REF] Mai | Debugging the data plane with anteater[END_REF] takes a different approach by attempting to check network invariants that exist in the data plane, such as connectivity or consistency. The main benefit of this approach is that it is protocol-agnostic; it will also catch errors that result from faulty switch firmware or inconsistencies with the control plane communication. VeriFlow [START_REF] Khurshid | Veriflow: verifying network-wide invariants in real time[END_REF] has a similar goal, but goes further by proposing a real-time verification tool that resides between the controller and the forwarding elements. This adds the potential benefit of being able to halt bad rules that will cause anomalous behavior before they reach the network.

Other efforts proposed debugging tools that provide insights gleaned from control plane traffic. OFRewind [START_REF] Wundsam | Ofrewind: enabling record and replay troubleshooting for networks[END_REF] allows network events (control and data) to be recorded at different granularities and later replayed to reproduce a specific scenario, granting the opportunity to localize and troubleshoot the events that caused the network anomaly. ndb [START_REF] Handigol | Where is the debugger for my softwaredefined network?[END_REF] implements breakpoints and packet-backtraces for SDN. Just as with the popular software debugger gdb, users can pinpoint events that lead to error by pausing execution at a breakpoint, or, using a packet backtrace, show the sequence of forwarding actions seen by that packet. STS [START_REF]Sdn troubleshooting simulator[END_REF] is a software-defined network troubleshooting simulator. It is written in python and depends on POX. It simulates the devices in a given network allowing for testing cases and identifying the set of inputs that generates a given error.

V. SDN APPLICATIONS

Software-defined networking has applications in a wide variety of networked environments. By decoupling the controland data planes, programmable networks enable customized control, an opportunity to eliminate middleboxes, as well as simplified development and deployment of new network services and protocols. Below, we examine different environments for which SDN solutions have been proposed or implemented.

A. Enterprise Networks

Enterprises often run large networks, while also having strict security and performance requirements. Furthermore, different enterprise environments can have very different requirements, characteristics, and user population, For example, University networks can be considered a special case of enterprise networks: in such an environment, many of the connecting devices are temporary and not controlled by the University, further challenging security and resource allocation. Additionally, Universities must often provide support for research testbeds and experimental protocols.

Adequate management is critically important in Enterprise environments, and SDN can be used to programmatically enforce and adjust network policies as well as help monitor network activity and tune network performance.

Additionally, SDN can be used to simplify the network by ridding it from middleboxes and integrating their functionality within the network controller. Some notable examples of middlebox functionality that has been implemented using SDN include NAT, firewalls, load balancers [START_REF] Handigol | Plug-n-serve: Load-balancing web traffic using openflow[END_REF] [75], and network access control [START_REF] Nayak | Resonance: Dynamic access control for enterprise networks[END_REF]. In the case of more complex middleboxes with functionalities that cannot be directly implemented without performance degradation (e.g., deep packet inspection), SDN can be used to provide unified control and management [START_REF] Gember | Toward softwaredefined middlebox networking[END_REF].

The work presented in [START_REF] Reitblatt | Abstractions for network update[END_REF] addresses the issues related to consistent network updates. Configuration changes are a common source of instability in networks and can lead to outages, security flaws, and performance disruptions. In [START_REF] Reitblatt | Abstractions for network update[END_REF], a set of high-level abstractions are proposed that allow network administrators to update the entire network, guaranteeing that every packet traversing the network is processed by exactly one consistent global network configuration. To support these abstractions, several OpenFlow-based update mechanisms were developed.

As discussed in earlier sections, OpenFlow evolved from Ethane [START_REF] Casado | Ethane: Taking control of the enterprise[END_REF], a network architecture designed specifically to address the issues faced by enterprise networks.

B. Data Centers

Data centers have evolved at an amazing pace in recent years, constantly attempting to meet increasingly higher and rapidly changing demand. Careful traffic management and policy enforcement is critical when operating at such large scales, especially when any service disruption or additional delay may lead to massive productivity and/or profit loss. Due to the challenges of engineering networks of this scale and complexity to dynamically adapt to application requirements, it is often the case that data centers are provisioned for peak demand; as a result, they run well below capacity most of the time but are ready to rapidly service higher workloads.

An increasingly important consideration is energy consumption, which has a non-trivial cost in large-scale data centers. Heller et al. [START_REF] Heller | Elastictree: Saving energy in data center networks[END_REF] indicates that much research has been focused on improved servers and cooling (70% of total energy) through better hardware or software management, but the data center's network infrastructure (which accounts for 10-20% of the total energy cost) still consumed 3 billion kWh in 2006. They proposed ElasticTree, a network-wide power manager that utilizes SDN to find the minimum-power network subset which satisfies current traffic conditions and turns off switches that are not needed. As a result, they show energy savings between 25-62% under varying traffic conditions. One can imagine that these savings can be further increased if used in parallel with server management and virtualization; one possibility is the Honeyguide [START_REF] Shirayanagi | Honeyguide: A vm migration-aware network topology for saving energy consumption in data center networks[END_REF] approach to energy optimization which uses virtual machine migration to increase the number of machines and switches that can be shutdown.

However, not all SDN solutions may be appropriate in high performance networks. While simplified traffic management and visibility are useful, it must be sensibly balanced with scalability and performance overhead. Curtis et al. [START_REF] Curtis | Devoflow: scaling flow management for high-performance networks[END_REF] believe that OpenFlow excessively couples central control and complete visibility, when in reality only "significant" flows need to be managed; this may lead to bottlenecks as the controldata communication adds delay to flow setup while switches are overloaded with thousands of flow table entries. Though aggressive use of proactive policies and wild-card rules may resolve that issue, it may undermine the ability of the controller to have the right granularity to effectively manage traffic and gather statistics. Their framework, DevoFlow, proposes some modest design changes to keep flows in the data plane as much as possible while maintaining enough visibility for effective flow management. This is accomplished by pushing responsibility over most flows back to the switches and adding more efficient statistics collection mechanisms, through which "significant" flows (e.g. long-lived, high-throughput) are identified and managed by the controller. In a load-balancing simulation, their solution had 10-53 times fewer flow table entries and 10-42 times fewer control messages on average over OpenFlow.

A practical example of a real application of the SDN concept and architecture in the context of data centers was presented by Google in early 2012. The company presented at the Open Network Summit [START_REF]Inter-datacenter wan with centralized te using sdn and openflow[END_REF] a large scale implementation of an SDN-based network connecting its data centers. The work in [START_REF] Jain | B4: Experience with a globally-deployed software defined wan[END_REF] presents in more detail the design, implementation, and evaluation of B4, a WAN connecting Google's datacenters world wide. This work describes one of the first and largest SDN deployments. The motivation was the need for customized routing and traffic engineering and the fact that the level of scalability, fault tolerance, cost efficiency and control required, could not be achieved by means of a traditional WAN architecture. A customized solution was proposed and an OpenFlow-based SDN architecture was built to control individual switches. After three years in production, B4 is shown to be efficient in the sense that it drives many links at near 100% utilization while splitting flows among multiple paths. Furthermore, the experience reported in the work shows that the bottleneck resulting from control-plane to data-plane communication and overhead in hardware programming are important issues to be considered in future work.

C. Infrastructure-based Wireless Access Networks

Several efforts have focused on ubiquitous connectivity in the context of infrastructure-based wireless access networks, such as cellular and WiFi.

For example, the OpenRoads project [START_REF] Yap | Blueprint for introducing innovation into wireless mobile networks[END_REF], [START_REF] Yap | Openroads: Empowering research in mobile networks[END_REF] envisions a world in which users could freely and seamlessly move across different wireless infrastructures which may be managed by various providers. They proposed the deployment of an SDNbased wireless architecture that is backwards-compatible, yet open and sharable between different service providers. They employ a testbed using OpenFlow-enabled wireless devices such as WiFi APs and WiMAX base stations controlled by NOX-and Flowvisor controllers and show improved performance on handover events. Their vision provided inspiration for subsequent work [START_REF] Li | Toward software-defined cellular networks[END_REF] that attempts to address specific requirements and challenges in deploying a software-defined cellular network.

Odin [START_REF] Suresh | Towards programmable enterprise wlans with odin[END_REF] introduces programmability in enterprise wireless LAN environments. In particular, it builds an access point abstraction on the controller that separates the association state from the physical access point, enabling proactive mobility management and load balancing without changes to the client.

At the other end of the spectrum, OpenRadio [START_REF] Bansal | Openradio: a programmable wireless dataplane[END_REF] focuses on deploying a programmable wireless data plane that provides flexibility at the PHY and MAC layers (as opposed to layer-3 SDN) while meeting strict performance and time deadlines. The system is designed to provide a modular interface that is able to process traffic subsets using different protocols such as WiFi, WiMAX, 3GPP LTE-Advanced, etc. Based on the idea of separation of the decision and forwarding planes, an operator may express decision plane rules and corresponding actions, which are assembled from processing plane modules (e.g., FFT, Viterbi decoding, etc); the end result is a state machine that expresses a fully-functional protocol.

D. Optical Networks

Handling data traffic as flows, allows software-defined networks, and OpenFlow networks in particular, to support and integrate multiple network technologies. As a result, it is possible to provide also technology-agnostic unified control for optical transport networks and facilitating interaction between both packet and circuit-switched networks. According to the Optical Transport Working Group (OTWG) created in 2013 by the Open Network Foundation (ONF), the benefits from applying SDN and the OpenFlow standard in particular to optical transport networks include: improving optical transport network control and management flexibility, enabling deployment of third-party management and control systems, and deploying new services by leveraging virtualization and SDN [START_REF]Optical transport working group otwg[END_REF].

There has been several attempts and proposals to control both circuit switched and packet switched networks using the OpenFlow protocol. In [START_REF] Gudla | Experimental demonstration of openflow control of packet and circuit switches[END_REF] a NetFPGA [START_REF]Netfpga platform[END_REF] platform is used in the proposal of a packet switching and circuit switched networks architectures based on Wavelength Selective Switching (WSS), using the OpenFlow protocol. Another control plane architecture based on OpenFlow for enabling SDN operations in optical networks was proposed in [START_REF] Dimitra | Software defined optical networks technology and infrastructure: Enabling software-defined optical network operations[END_REF], which discusses specific requirements and describes implementation of OpenFlow protocol extensions to support optical transport networks.

A proof-of-concept demonstration of an OpenFlow-based wavelength path control in transparent optical networks is presented in [START_REF] Liu | Openflow-based wavelength path control in transparent optical networks: A proof-of-concept demonstration[END_REF]. In this work, virtual Ethernet interfaces (veths) are introduced. These veths, are mapped to physical interfaces of an optical node (e.g. photonic cross-connect -PXC), and enable an SDN controller (e.g. the NOX controller in this case) to operate the optical lightpaths (e.g., via the OpenFlow protocol). In their experimental setup, they quantitatively evaluate network performance metrics, such as the latency of lightpath setup and release, and verify the feasibility of routing and wavelength assignment, and the dynamic control of optical nodes in an OpenFlow-based network composed by four PXCs nodes in a mesh topology.

A Software Defined Optical Network (SDON) architecture is introduced in [START_REF] Patel | Qos-aware optical burst switching in openflow based software-defined optical networks[END_REF] and a QoS-aware unified control protocol for optical burst switching in OpenFlow-based SDON is developed. The performance of the proposed protocol was evaluated with the conventional GMPLS-based distributed protocol and the results indicate that SDON offers an infrastructure to support unified control protocols to better optimize network performance and improve capacity.

E. Home and Small Business

Several projects have examined how SDN could be used in smaller networks, such as those found in the home or small businesses. As these environments have become increasingly complex and prevalent with the widespread availability of lowcost network devices, the need for more careful network management and tighter security has correspondingly increased. Poorly secured networks may become unwitting targets or hosts for malware, while outages due to network configuration issues may cause frustration or lost business. Unfortunately, it is not practical to have a dedicated network administrator in every home and office.

Calvert et al. [START_REF] Calvert | Instrumenting home networks[END_REF] assert that the first step in managing home networks is to know what is actually happening; as such, they proposed instrumenting the network gateway/controller to act as a "Home Network Data Recorder" to create logs that may be utilized for troubleshooting or other purposes.

Feamster [START_REF] Feamster | Outsourcing home network security[END_REF] proposes that such networks should operate in a "plug in and forget" fashion, namely by outsourcing management to third-party experts, and that this could be accomplished successfully through the remote control of programmable switches and the application of distributed network monitoring and inference algorithms used to detect possible security problems.

In contrast, Mortier et al. [START_REF] Mortier | Control and understanding: Owning your home network[END_REF] believe that users desire greater understanding and control over their networks' behavior; rather than following traditional policies, a home network may be better managed by their users who better understand the dynamics and needs of their environment. Towards this goal, they created a prototype network in which SDN is used to provide users a view into how their network is being utilized while offering a single point of control.

Mehdi et al. [START_REF] Mehdi | Revisiting traffic anomaly detection using software defined networking[END_REF] argues that an Anomaly Detection System (ADS) implemented within a programmable home network provides a more accurate identification of malicious activity as compared to one deployed at the ISP; additionally, the implementation would be able to operate at line rate with no performance penalty, while, at the same time, offloading the ISP from having to monitor these large number of networks. The ADS algorithm could operate alongside other controller services, such as a HomeOS that may react to suspicious activity and report anomalies to the ISP or local administrator.

VI. RESEARCH CHALLENGES AND FUTURE DIRECTIONS

As SDN becomes more widely adopted and protocols such as OpenFlow are further defined, new solutions are proposed and new challenges arise. In this section we discuss various challenges posed by SDN as well as future research directions, namely: (1) controller and switch design, (2) scalability and performance in SDNs, (3) controller-service interfacing, (4) virtualization and cloud service applications, (5) information centric networking, and ( 6) enabling heterogeneous networking with SDN.

A. Controller and Switch Design SDN raises significant scalability, performance, robustness, and security challenges. Below we review a number of research efforts focusing on addressing these issues at the switch-and controller design level.

In DIFANE [START_REF] Yu | Scalable flow-based networking with difane[END_REF], flow entries are proactively pushed to switches in an attempt to reduce the number of requests to the controller. Devoflow [START_REF] Curtis | Devoflow: scaling flow management for high-performance networks[END_REF] proposes to handle "short-lived" flows in switches and "long-lived" flows in the controller to mitigate flow setup delay and controller overhead. The work proposed in [START_REF] Mogul | Hey, you darned counters!: get off my asic![END_REF] advocates replacing counters on ASIC by a stream of rule-matching records and processing them in the CPU to allow efficient access to counters. FLARE [START_REF] Nakao | Flare : Open deeply programmable network node architecture[END_REF] is a new network node model focusing on "deeply programmable networks" that provides programmability for the data plane, the control plane, as well as the interface between them. The work presented in [START_REF] Bifulco | A practical experience in designing an openflow controller[END_REF] discusses important aspects in controller design including hierarchical control, data model, scalability, and extensibility.

As far as performance and scalability, the study presented in [START_REF]Controller performance comparisons[END_REF] showed that one single controller can handle up to 6 million flows per second. A more recent study [START_REF] Erickson | The beacon openflow controller[END_REF], focusing on the Beacon controller, showed that a controller can handle 12.8 million new flows per second in a 12 cores machine, with an average latency of 24.7 us for each flow. However, for increased scalability and especially for reliability and robustness purposes, it has been recognized that the logically-centralized controller must be physically distributed. Onix [START_REF] Koponen | Onix: A distributed control platform for large-scale production networks[END_REF], Kando [START_REF] Hassas | Kandoo: a framework for efficient and scalable offloading of control applications[END_REF], and HyperFlow [START_REF] Tootoonchian | Hyperflow: A distributed control plane for openflow[END_REF] use this approach to achieve robust and scalable control plane. In [START_REF] Levin | Logically centralized?: state distribution trade-offs in software defined networks[END_REF], tradeoffs related to control distribution, such as staleness versus optimality and application logic complexity versus robustness to inconsistency are identified and quantified. In [START_REF] Heller | The controller placement problem[END_REF], the controller placement problem is discussed in terms of the number of controllers needed and where to place them in the network. In more recent work on distributed control, the need for dynamic assignment of switches to controllers is addressed in [START_REF] Dixit | Towards an elastic distributed sdn controller[END_REF], which proposes an algorithm to increase or decrease the pool of controllers based on controllers' load estimates. They also propose a mechanism to dynamically handover switches from one controller to another as needed.

In [START_REF] Casado | Fabric: a retrospective on evolving sdn[END_REF] an SDN variant inspired by MPLS was proposed along with the notions of edge controllers and fabric controllers: the former control ingress and egress switches and handle the host-network interface, while the latter handle fabric switches and the operator-network interface.

Although control and measurement are two important components of network management, little thought has gone into designing APIs for measurement. The work presented in [START_REF] Yu | Software defined traffic measurement with opensketch[END_REF] proposes a software-defined traffic measurement architecture, which separates the measurement data plane from the control plane.

B. Software-Defined Internetworking

The Internet has revolutionized the way we, as individuals and as a society, live, work, conduct business, socialize, get entertainment, etc. As a result, the Internet is now considered part of our society's critical infrastructure much like the power, water, and transportation grids.

Scalability and performance requirements from increasingly complex applications have posed a variety of challenges difficult to address with the current Internet architecture. This has led the research community to examine "clean-slate" solutions [START_REF] Feldmann | Internet clean-slate design: what and why?[END_REF]. As the Internet has grown beyond the point at which a "flag day", such as the one used to "upgrade" the ARPANET with the TCP/IP protocol suite, would be realistic, another considerable challenge is evolving its physical infrastructure and protocols. A notable example is the deployment of IPv6: despite over a decade in the standards track and two worldwide deployment events, IPv4 still makes up the majority of Internet traffic.

Much of the current work on SDN examines or proposes solutions within the context of a single administrative domain which matches quite well SDN's logically centralized control model. However, environments whose administration is inherently decentralized, like the Internet, call for a control plane that is logically distributed. This will allow participating autonomous systems (ASes) to be controlled independently by their own (logically centralized and possibly physically distributed) controller. To-date, a few efforts have explored the idea of a Software-Defined Internet. For example, the work in [START_REF] Barath Raghavan | Software-defined internet architecture: decoupling architecture from infrastructure[END_REF] proposed a software-defined Internet architecture that borrows from MPLS the distinction between network edge and core to split tasks between inter-domain and intradomain components. As only the boundary routers and their associated controller in each domain are involved in interdomain tasks, changes to inter-domain service models would be limited to software modifications at the inter-domain controllers rather than the entire infrastructure. Examples of how this architecture could be used to realize new Internet services such as information-centric networking, and middlebox service sharing are explored.

Another approach to inter-AS routing [START_REF] Bennesby | An inter-as routing component for software-defined networks[END_REF] uses NOX and OpenFlow to implement BGP-like functionality. Alternatively, an extensible session protocol [START_REF] Kissel | Driving software defined networks with xsp[END_REF] supports applicationdriven configuration of network resources across domains.

C. Controller-Service Interaction

While controller-switch ("southbound") interaction is fairly well defined in protocols such as OpenFlow and ForCES, there is no standard for interactions between controllers and network services or applications ("northbound"). One possible explanation is that the northbound interface is defined entirely in software, while controller-switch interactions must enable hardware implementation.

If we think of the controller as a "network operating system", then there should be a clearly defined interface by which applications can access the underlying hardware (switches), co-exist and interact with other applications, and utilize system services (e.g. topology discovery, forwarding), without requiring the application developer to know the implementation details of the controller. While there are several controllers that exist, their application interfaces are still in the early stages and independent from each other. Some proposals (e.g., Procera [START_REF] Voellmy | Procera: a language for high-level reactive network control[END_REF], Frenetic [START_REF] Foster | Frenetic: a network programming language[END_REF], FML [START_REF] Hinrichs | Practical declarative network management[END_REF], Nettle [START_REF] Voellmy | Nettle: taking the sting out of programming network routers[END_REF]) advocate the use of a network configuration language to express policies. For example, Procera [START_REF] Voellmy | Procera: a language for high-level reactive network control[END_REF] builds a policy layer on top of existing controllers to interface with configuration files, GUIs, and external sensors; the proposed policy layer is responsible for converting highlevel policies to flow constraints given to be used by the controller. In [START_REF] Kim | Improving network management with software defined networking[END_REF], network configuration and management mechanisms are proposed that focus on enabling changes to network condition and state, supporting network configuration and policy definitions, and providing visibility and control over tasks for network diagnostics and troubleshooting. The specification of a northbound interface via a policy layer and a high level language such as Procera is discussed.

Additionally, the northbound API should allow applications to apply different policies to the same flow (e.g. forwarding by destination and monitoring by source IP). The work in [START_REF] Monsanto | Composing software-defined networks[END_REF] proposed modularization to ensure that rules installed to perform one task do not override other rules. This was accomplished by means of an abstraction layer implemented with a language based on Frenetic.

Until a clear northbound interface standard emerges, SDN applications will continue to be developed in an "ad hoc" fashion and the concept of flexible and portable "network apps" may have to wait.

D. Virtualization and Cloud Services

The demand for virtualization and cloud services has been growing rapidly and attracting considerable interest from industry and academia. The challenges it presents include rapid provisioning, efficient resource management, and scalability which can be addressed using SDN's control model.

For example, FlowVisor [START_REF] Sherwood | Carving research slices out of your production networks with openflow[END_REF] and AutoSlice [START_REF] Bozakov | Autoslice: automated and scalable slicing for software-defined networks[END_REF] create different slices of network resources (e.g., bandwidth, topology, CPU, forwarding table), delegate them to different controllers, and enforce isolation between slices. Other SDN controllers can be used as a network backend to support virtualization in cloud operating systems, such as Floodlight for OpenStack [START_REF]Floodlight, an open sdn controller[END_REF] and NOX for Mirage [116]. FlowN [START_REF] Drutskoy | Scalable network virtualization in software-defined networks[END_REF] aims to offer a scalable solution for network virtualization by providing an efficient mapping between virtual and physical networks and by leveraging scalable database systems.

In [START_REF] Ghorbani | Walk the line: consistent network updates with bandwidth guarantees[END_REF], an algorithm for efficient migration with bandwidth guarantees using OpenFlow was proposed. LIME [START_REF] Keller | Live migration of an entire network (and its hosts)[END_REF] is an SDN-based solution for live migration of Virtual Machines, which handles the network state during migration and automatically configures network devices at new locations. NetGraph [START_REF] Raghavendra | Dynamic graph query primitives for sdn-based cloudnetwork management[END_REF] provides a set of APIs for customers to access its virtual network functions such as real-time monitoring and diagnostics.

On the context of cloud data centers providing Infrastructure as a Service (IaaS), [START_REF] Wang | Livecloud: A lucid orchestrator for cloud datacenters[END_REF] presents a management framework for resources in cloud data centers and addresses multiple management issues. In this paper, authors proposed a datacentric and event-driven architecture with open management interfaces, that leverages SDN techniques to integrate network resources into datacenter orchestration and service provision-ing with the aim of improving service-level agreements and faster service delivery.

E. Information-Centric Networking

Information-Centric Networking (ICN) is a new paradigm proposed for the future architecture of the Internet, which aims to increase the efficiency of content delivery and content availability. This new concept has been popularized recently by a number of architecture proposals, such as Content-Centric Networking (CCN), also known as the Named Data Networking (NDN) project [START_REF] Jacobson | Networking named content[END_REF]. Their driving motivation is that the current Internet is information-driven, yet networking technology is still focused on the idea of location-based addressing and host-to-host communication.By proposing an architecture that addresses named data rather than named hosts, content distribution is implemented directly into the network fabric rather than relying on the complicated mapping, availability, and security mechanisms currently used to map content to a single location.

The separation between information processing and forwarding in ICN is aligned with the decoupling of the data plane and control plane in SDN. The question then becomes how to combine ICN with SDN towards "Software-Defined Information-Centric Networks". A number of projects [START_REF] Nguyen | Efficient caching in Content-Centric Networks using OpenFlow[END_REF], [START_REF] Veltri | Supporting information-centric functionality in software defined networks[END_REF], [START_REF] Blefari-Melazzi | An openflow-based testbed for information centric networking[END_REF], [START_REF] Suh | Cflow: Content-oriented networking over openflow[END_REF], [START_REF] Syrivelis | Pursuing a software defined information-centric network[END_REF], [START_REF] Nguyen | Software defined networking in wireless mesh network[END_REF] have proposed using SDN concepts to implement ICNs. As OpenFlow expands to support customized header matchings, SDN can be employed as a key enabling technology for ICNs.

F. Heterogeneous Network Support

Future networks will become increasingly more heterogeneous, interconnecting users and applications over networks ranging from wired, infrastructure-based wireless (e.g., cellular-based networks, wireless mesh networks), to infrastructure-less wireless networks (e.g. mobile ad-hoc networks, vehicular networks). In the meantime, mobile traffic has been increasing exponentially over the past several years, and is expected to increase 18-fold by 2016, with more mobile-connected devices than the world's population, which is already a reality [START_REF]Cisco visual networking index: Global mobile data traffic forecast update[END_REF]. As mobile devices with multiple network interfaces become commonplace, users will demand high quality communication service regardless of location or type of network access. Self-organizing networks (e.g., wireless multi-hop ad-hoc networks) may form to extend the range of infrastructure-based networks or handle episodic connectivity disruptions. Self-organizing networks may thus enable a variety of new applications such as cloud-based services, vehicular communication, community services, healthcare delivery, emergency response, and environmental monitoring, to name a few. Efficient content delivery over wireless access networks will become essential, and self-organizing networks may become a prevalent part of the future hybrid Internet.

A major challenge facing future networks is efficient utilization of resources; this is especially the case in wireless multi-hop ad-hoc networks as the available wireless capacity is inherently limited. This is due to a number of factors including the use of shared physical medium compounded, wireless channel impairments, and the absence of managed infrastructure. Though these self-organizing networks can be used to supplement or "fill the gaps" in an overburdened infrastructure [START_REF] Rais | Towards truly heterogeneous internets: Bridging infrastructure-based and infrastructureless networks[END_REF], their lack of dedicated resources and shifting connectivity makes capacity sharing difficult. The heterogeneous characteristics of the underlying networks (e.g., physical medium, topology, stability) and nodes (e.g., buffer size, power limitations, mobility) also add another important factor when considering routing and resource allocation.

SDN has the potential to facilitate the deployment and management of network applications and services with greater efficiency. However, SDN techniques to-date, such as Open-Flow, largely target infrastructure-based networks. They promote a centralized control mechanism that is ill-suited to the level of decentralization, disruption, and delay present in infrastructure-less environments.

While previous work has examined the use of SDN in wireless environments, the scope has primarily focused on infrastructure-based deployments (e.g., WiMAX, Wi-Fi access points). A notable example is the OpenRoads project [START_REF] Yap | Blueprint for introducing innovation into wireless mobile networks[END_REF], which envisioned a world in which users could freely move between wireless infrastructures while also providing support to the network provider. Other studies such as [START_REF] Nguyen | Software defined networking in wireless mesh network[END_REF], [START_REF] Coyle | A frequency control algorithm for a mobile adhoc network[END_REF], [START_REF] Dely | Openflow for wireless mesh networks[END_REF] have examined OpenFlow in wireless mesh environments.

VII. CONCLUDING REMARKS

In this paper, we provided an overview of programmable networks and, in this context, examined the emerging field of Software-Defined Networking (SDN). We look at the history of programmable networks, from early ideas until recent developments. In particular we described the SDN architecture in detail as well as the OpenFlow [START_REF] Mckeown | Openflow: enabling innovation in campus networks[END_REF] standard. We presented current SDN implementations and testing platforms and examined network services and applications that have been developed based on the SDN paradigm. We concluded with a discussion of future directions enabled by SDN ranging from support for heterogeneous networks to Information Centric Networking (ICN).

Fig. 1 .

 1 Fig. 1. The SDN architecture decouples control logic from the forwarding hardware, and enables the consolidation of middleboxes, simpler policy management, and new functionalities. The solid lines define the data-plane links and the dashed lines the control-plane links.

Fig. 4 .

 4 Fig. 4. The Floodlight architecture as an example of an OpenFlow controller.

Fig. 5 .

 5 Fig. 5. A controller with a northbound and southbound interface.

TABLE I CURRENT

 I SOFTWARE SWITCH IMPLEMENTATIONS COMPLIANT WITH THE OPENFLOW STANDARD.

	Controller	Implementation	Open Source	Developer	Overview
	POX [59]	Python	Yes	Nicira	General, open-source SDN controller written in Python.
	NOX [17]	Python/C++	Yes	Nicira	The first OpenFlow controller written in Python and C++.
					OpenFlow controller that has a C-based multi-threaded infrastructure
	MUL [60]	C	Yes	Kulcloud	at its core. It supports a multi-level north-bound interface
					(see Section III-E) for application development.
					A network operating system based on Java; it provides interfaces
	Maestro [21]	Java	Yes	Rice University	for implementing modular network control applications and for them to
					access and modify network state.
	Trema [61]	Ruby/C	Yes	NEC	A framework for developing OpenFlow controllers written in Ruby and C.
	Beacon [22]	Java	Yes	Stanford	A cross-platform, modular, Java-based OpenFlow controller that
					supports event-based and threaded operations.
	Jaxon [62]	Java	Yes	Independent Developers	a Java-based OpenFlow controller based on NOX.
	Helios [24]	C	No	NEC	An extensible C-based OpenFlow controller that provides a
					programmatic shell for performing integrated experiments.
	Floodlight [38]	Java	Yes	BigSwitch	A Java-based OpenFlow controller (supports v1.3), based on the Beacon
					implementation, that works with physical-and virtual-OpenFlow switches.
	SNAC [23]	C++	No	Nicira	An OpenFlow controller based on NOX-0.4, which uses a web-based, user-friendly
					policy manager to manage the network, configure devices, and monitor events.
					An SDN operating system that aims to provide logically centralized control
	Ryu [63]	Python	Yes	NTT, OSRG group	and APIs to create new network management and control applications.
					Ryu fully supports OpenFlow v1.0, v1.2, v1.3, and the Nicira Extensions.
	NodeFlow [64]	JavaScript	Yes	Independent Developers	An OpenFlow controller written in JavaScript for Node.JS [65].
					A simple OpenFlow controller reference implementation with Open vSwitch
	ovs-controller [55]	C	Yes	Independent Developers	for managing any number of remote switches through the OpenFlow protocol;
					as a result the switches function as L2 MAC-learning switches or hubs.
	Flowvisor [48]	C	Yes	Stanford/Nicira	Special purpose controller implementation.
	RouteFlow [66]	C++	Yes	CPqD	Special purpose controller implementation.

TABLE III CURRENT

 III CONTROLLER IMPLEMENTATIONS COMPLIANT WITH THE OPENFLOW STANDARD.

	Maker	Switch Model	Version
	Hewlett-Packard	8200zl, 6600, 6200zl,	v1.0
		5400zl, and 3500/3500yl
	Brocade	NetIron CES 2000 Series	v1.0
	IBM	RackSwitch G8264	v1.0
	NEC	PF5240 PF5820	v1.0
	Pronto	3290 and 3780	v1.0
	Juniper	Junos MX-Series	v1.0
	Pica8	P-3290, P-3295, P-3780 and P-3920	v1.2

TABLE II MAIN

 II CURRENT AVAILABLE COMMODITY SWITCHES BY MAKERS, COMPLIANT WITH THE OPENFLOW STANDARD.

ACKNOWLEDGMENTS

The authors would like to thank the reviewers for their careful examination of the manuscript and valuable comments which helped to considerably improve the quality of the paper. This work is partly funded by the Community Associated Team between INRIA and UCSC and the French ANR under the "ANR-13-INFR-013" project, and by NSF grant CNS 1150704.