Legacy IP networks are complex, difficult to manage and are also vertically integrated i.e. the control and data planes are bundled together. The concept behind Software Defined Networks (SDN) is to break the vertical integration, by separating the network control logic from its underlying hardware, (routers and switches) promoting (logical) centralization of network control, and introducing the ability to program the network. In this paper, we start by introducing the motivation for SDN, its architecture and how it differs from traditional networking. Open flow is discussed next and SDN simulation tools are also discussed. The applications and main ongoing research efforts and challenges of SDN are also mentioned.