The Basics of the MQTT Protocol

EMQ Technologies Inc.
The Basics of the MQTT Protocol
Illustration: © IoT For All

We will discuss the basics and how to get started with the MQTT protocol, with code examples. Beginners of the IoT and MQTT can utilize this information to understand MQTT-related concepts and quickly start developing MQTT services and applications.

MQTT (Message Queuing Telemetry Transport) is a lightweight, publish-subscribe-based messaging protocol designed for resource-constrained devices and low-bandwidth, high-latency, or unreliable networks. It is widely used in Internet of Things (IoT) applications, providing efficient communication between sensors, actuators, and other devices.

“MQTT (Message Queuing Telemetry Transport) is a lightweight, publish-subscribe based messaging protocol designed for resource-constrained devices and low-bandwidth, high-latency, or unreliable networks.”

Why Is MQTT the Best Protocol for IoT?

MQTT has emerged as one of the best IoT protocols due to its unique features and capabilities tailored to the specific needs of IoT systems. Some of the key reasons include:

  • Lightweight: IoT devices are often constrained in terms of processing power, memory, and energy consumption. MQTT’s minimal overhead and small packet size make it ideal for these devices, as it consumes fewer resources, enabling efficient communication even with limited capabilities.

  • Reliable: IoT networks can experience high latency or unstable connections. MQTT’s support for different QoS levels, session awareness, and persistent connections ensures reliable message delivery even in challenging conditions, making it well-suited for IoT applications.

  • Secure communications: Security is crucial in IoT networks as they often transmit sensitive data. MQTT supports Transport Layer Security (TLS) and Secure Sockets Layer (SSL) encryption, ensuring data confidentiality during transmission. Additionally, it provides authentication and authorization mechanisms through username/password credentials or client certificates, safeguarding access to the network and its resources.

  • Bi-directionality: MQTT’s publish-subscribe model allows for seamless bi-directional communication between devices. Clients can both publish messages to topics and subscribe to receive messages on specific topics, enabling effective data exchange in diverse IoT ecosystems without direct coupling between devices. This model also simplifies the integration of new devices, ensuring easy scalability.

  • Continuous, stateful sessions: MQTT allows clients to maintain stateful sessions with the broker, enabling the system to remember subscriptions and undelivered messages even after disconnection. Clients can also specify a keep-alive interval during connection, which prompts the broker to periodically check the connection status. If the connection is lost, the broker stores undelivered messages (depending on the QoS level) and attempts to deliver them when the client reconnects. This feature ensures reliable communication and reduces the risk of data loss due to intermittent connectivity.

  • Large-scale IoT device support: IoT systems often involve a large number of devices, requiring a protocol that can handle massive-scale deployments. MQTT’s lightweight nature, low bandwidth consumption, and efficient use of resources make it well-suited for large-scale IoT applications. The publish-subscribe pattern allows MQTT to scale effectively, as it decouples sender and receiver, reducing network traffic and resource usage. Furthermore, the protocol’s support for different QoS levels allows customization of message delivery based on the application’s requirements, ensuring optimal performance in various scenarios.

  • Language support: IoT systems often include devices and applications developed using various programming languages. MQTT’s broad language support enables easy integration with multiple platforms and technologies, fostering seamless communication and interoperability in diverse IoT ecosystems.

How Does MQTT Work?

To understand how MQTT works, you need to first master the basics for each concept: MQTT Client, MQTT Broker, Publish-Subscribe mode, Topic, and QoS:

MQTT Client

Any application or device running the MQTT client library is an MQTT client. For example, an instant messaging app that uses MQTT is a client, various sensors that use MQTT to report data are a client, and various MQTT testing tools are also a client.

MQTT Broker

The MQTT Broker handles client connection, disconnection, subscription, and unsubscription requests, and routing messages. A powerful MQTT broker can support massive connections and million-level message throughput, helping IoT service providers focus on business and quickly create a reliable MQTT application.

Publish–subscribe Pattern

The publish-subscribe pattern differs from the client-server pattern in that it separates the client that sends messages (publisher) from the client that receives messages (subscriber). Publishers and subscribers do not need to establish a direct connection, and the MQTT Broker is responsible for routing and distributing all messages.

The following diagram shows the MQTT publish/subscribe process. The temperature sensor connects to the MQTT server as a client and publishes temperature data to a topic (e.g., Temperature), and the server receives the message and forwards it to the client subscribed to the Temperature topic.

Topic

The MQTT protocol routes messages based on topic. The topic distinguishes the hierarchy by slash /, which is similar to URL paths, for example:

chat/room/1

sensor/10/temperature

sensor/+/temperature

MQTT topic supports the following wildcards: + and #.

  • +: indicates a single level of wildcards, such as a/+ matching a/x or a/y.
  • #: indicates multiple levels of wildcards, such as a/# matching a/xa/b/c/d.

For more details on MQTT topics, please check the blog Understanding MQTT Topics & Wildcards by Case.

Quality of Service (QoS)

MQTT provides three kinds of Quality of Service and guarantees messaging reliability in different network environments.

  1. QoS 0: The message is delivered at most once. If the client is not available currently, it will lose this message.
  2. QoS 1: The message is delivered at least once.
  3. QoS 2: The message is delivered only once.

The MQTT Workflow

Now that we understand the basics of MQTT, let’s see how the general workflow works:

  1. Clients initiate a connection to the broker using TCP/IP, with optional TLS/SSL encryption for secure communication. Clients provide authentication credentials and specify a clean or persistent session.

  2. Clients either publish messages to specific topics or subscribe to topics to receive messages. Publishing clients send messages to the broker while subscribing clients express interest in receiving messages on particular topics.

  3. The broker receives published messages and forwards them to all clients subscribed to the relevant topics. It ensures reliable message delivery according to the specified Quality of Service (QoS) level and manages message storage for disconnected clients based on the session type.
Author
EMQ Technologies Inc.
EMQ Technologies Inc.
EMQ is the world's leading provider of open-source IoT data infrastructure. Trusted by 400+ clients in mission-critical IoT/IoV scenarios.
EMQ is the world's leading provider of open-source IoT data infrastructure. Trusted by 400+ clients in mission-critical IoT/IoV scenarios.