The rise in Internet of Things (IoT) devices with inadequate resources resulted in the emergence of the fog-computing, an extension of the cloud computing paradigm. In cloud computing, the network edge contains all fog cells that cause a reduction in the latency. It enables the implementation of IoT applications on the resources of computational Fog. IoT implementation aims to optimize the need for quality service (QoS) while maximizing fog resource utilization. Fog computing also enables a new generation of services and applications by extending the Cloud Computing paradigm to the network edge. Fog is defined with the help of the characteristics such as Mobility, location awareness and low latency, a significant number of nodes, major wireless access role, extensive geographical, prevalent real-time applications, and streaming. In this study, comprehensive taxonomy is proposed, a comparison between cloud and fog computing has been highlighted, the key features of Fog Computing, also Fog-based applications is presented in detail. Moreover, it is argued that Fog is a suitable platform for various IoT applications. These characteristics include Actuators Networks, Wireless sensors, smart cities, smart Grid, and connected vehicles. At last, the paper elaborates the potential trends of Fog Computing.