Software Defined Networking (SDN) is an emerging architecture which decouples networks control plane and data plane physically. It makes control plane programmable trough a centralized controller, and builds intelligent and flexible networks. The OpenFlow is one of the most famous SDN protocols, which acts as a southbound interface between control plane and data plane. In this survey, SDN implementation approaches and different southbound interfaces, beside different version of OpenFlow, are introduced. In addition to general architecture of SDN, different wireless architectures are discussed. Here, also potential SDN's applications and research areas including hot topics such as Information Centric Networks, Cloud and datacenters, multimedia, wireless and mobile networks over SDN are reviewed.