Software-defined Networking (SDN) is a new networking paradigm also referred to as a “radical new idea in networking” [1]. The SDN enables network operators to make changes to the network infrastructure without sacrificing network availability and at the same time reduces network maintenance costs by providing a centralized point of control and one unified user configuration interface for switches, routers and middle-boxes1 from diverse vendors [2]. According to Sarah Sorensen, the author of the book of “The Sustainable Network”, “SDN tackles the barriers that constrain scale, automation, and agility by decoupling the forwarding layer from the control layer, which provides a central view and control over the network.”
The basic idea behind SDN is to decouple forwarding plane from control plane, therefore SDN- capable switches are merely responsible for forwarding traffic whereas software controllers are middlemen between network applications and SDN-capable switches. For example, a BGP2 network application can reside on a software controller and exchange its routing table with other routers. It also updates the flow-table of the SDN switch according to its routing-table by using the REST APIs of the software controller without knowing about switch specific vendor-specific capabilities. Software controllers also present a unified, centralized and abstract model of the whole network to the network applications. Software controllers are merely programs running on the