  Nowadays, all sectors utilize devices that are part of the Internet of Things
(IoT) for the purpose of connecting and exchanging information with other
devices and systems over the Internet. This increases the diversity of devices
and their working environments, which, in turn, creates new challenges, such as
real-time interaction, security, interoperability, performance, and robustness
of IoT systems. To address these, many applications protocols were adopted and
developed for devices with constrained resources. This paper surveys
communication protocols divided according to their goals along with their
merits, demerits, and suitability towards IoT applications. We summarize the
challenges of communication protocols as well as some relevant solutions.
