In the last post, we discussed the difference between MQTT and LwM2M and which protocol to use in your IoT solutions. In this post, I will shed some light on another popular protocol - CoAP and compare it with MQTT.
What are Communication Protocols?
If you haven’t read the previous post, here’s a brief explanation of what protocols mean for IoT solutions. Protocols are simply a set of rules that help send data from one device to another or to other systems. This standardizes the data sharing, making it safer and more efficient for IoT systems.
What is MQTT?
MQTT stands for MQ Telemetry Transport and was built by IBM specifically for M2M and IoT message transfer. It transfers data over TCP.
What is CoAP?
CoAP stands for Constrained Application Protocol and was developed by the IEFT group. CoAP is similar to HTTP where it is a document transfer protocol, but the difference is that CoAP was designed specifically for constrained devices.
Architecture
MQTT
MQTT has a publisher-subscriber model and supports many to many communication. The sender and receiver of the messages are decoupled. There are two basic components in this architecture.
-
Client
-
Broker
Clients can publish messages on a topic to the broker. The subscribing client can fetch messages from that topic through the broker. Thus the broker decouples the publisher and the subscriber. The broker is responsible for receiving all messages, filtering the messages, determining who is subscribed to each message, and sending the message to these subscribed clients.
CoAP
CoAP has a client server architecture and supports 1:1 communication. Like MQTT, this protocol also has two components.
-
Client
-
Server
Clients can make requests to servers to serve data in the stated format. The Servers then interpret the request and send data accordingly. CoAP is built like HTTP so supports requests like GET, POST, PUT and DELETE and provides interoperability with HTTP and RESTful APIs using proxies.
Security
MQTT
MQTT uses TCP/IP and can leverage Transport Layer Security (TLS) to encrypt the whole connection. Brokers may need authentication keys from clients to be able to connect with them.
CoAP
CoAP uses DTLS or IPSec and provides strong security. As CoAP is built on top of UDP, SSL and TLS are not available.
Use Cases
MQTT
MQTT is useful where you have streaming data or event based data. MQTT is used for sending payload for low-power and constrained applications, thus making it a favorite choice for many IoT applications. MQTT brokers are a big component of cloud-based IoT solutions.
CoAP
As CoAP is a 1:1 document sharing protocol, the connection with the server is not always on. Through CoAP, a resource can be set to "Observe" which makes it ideal for state transition messages by sending a GET message just once. CoAP is more efficient where there are resources with multiple and/or nested parameters and the client needs only specific information. Here we can use query parameters the same way we would use them in a HTTP request.
Implementation
MQTT
An MQTT client can be any device that runs the MQTT library and connects to the MQTT broker. An MQTT client connects to the broker using keys for authentication. The main component of the client is the script to publish messages to a topic and then send them to the broker. There are several MQTT client libraries available depending on your preferred programming language.
An MQTT broker is the heart of this protocol and can handle millions of MQTT clients depending on the implementation. The broker receives, filters and forwards all messages to the clients that subscribe to it. There are several implementations of the MQTT broker available as open-source or paid.
CoAP
The sensor nodes are usually the servers when we use CoAP. This makes it necessary for sensor modules to handle receiving and translation of messages coming from the client. The client can be any resource that needs the sensor information. There are several server and client implementations for CoAP available in mainly C but also other languages. It also has browser and smartphone based client implementations available.
Conclusion
Depending on the complexity and volume of the data as well as the architecture of your solutions, you may want to use either of the protocols for your solution.
As an example, if your solution has a dashboard component which only monitors change in a sensor value, you might want to use CoAP as it gives you HTTP like extraction of data from the resource as well as the provision to only monitor change of state. If you have multiple nodes interacting with each other depending on the value of their sensors, it might be useful to use MQTT.
If power consumption is your main constraint, MQTT transfers data on TCP while CoAP transfers data on UDP. This also makes a huge difference in the power consumption of these two protocols where MQTT consumes more power than CoAP as it has to keep the connection between the Client and the Broker in an "always ON" condition.
Thus you need to make an in depth assessment of your requirements to decide on the protocol you want to use in your solution.
Hope this helps you make the right choice for your IoT solution. And if you wish to know more about protocols and IoT check out our Comprehensive Guide to IoT Protocols. Until then, Stay Connected!
Shruti Kuber
Shruti Kuber is a Developer Advocate and Community Manager at emnify.