Devis 0 Devis
Logo du protocole MQTT

Définition et histoire du protocole MQTT

MQTT est l'abréviation de "MQ Telemetry Transport", bien qu'il ait d'abord été connu sous le nom de "Message Queing Telemetry Transport". Il s'agit d'un protocole de communication M2M (machine to machine) de type messagerie. Il s'appuie sur le TCP/IP comme base de communication. Dans le cas du protocole MQTT, chaque connexion est maintenue ouverte et est "réutilisée" dans chaque communication. C'est différent, par exemple, d'une demande HTTP 1.0 où chaque transmission se fait par une connexion. Le protocole MQTT a été créé par le Dr Andy Stanford-Clark d'IBM et Arlen Nipper d'Arcom (aujourd'hui Eurotech) en 1999 comme mécanisme de connexion des dispositifs utilisés dans l'industrie pétrolière. Bien qu'initialement d'un format propriétaire, il a été publié en 2010 et est devenu une norme en 2014 selon OASIS (Organization for the Advancement of Structured Information Standards).

Fonctionnement du protocole MQTT et service de messagerie push

Comment fonctionne le protocole MQTT

Le protocole MQTT fonctionne comme un service de messagerie push avec un modèle éditeur/abonné (pub-sub). Dans ce type d'infrastructure, les clients se connectent à un serveur central appelé broker (courrier). Afin de filtrer les messages qui sont envoyés à chaque client, les messages sont classés dans des sujets organisés de manière hiérarchique. Un client peut publier un message dans un certain sujet. D'autres clients peuvent s'abonner à ce sujet, et le broker leur enverra les messages souscrits.

Les clients établissent une connexion TCP/IP avec le broker, qui garde la trace des clients connectés. Cette connexion reste ouverte jusqu'à ce que le client y mette fin. Par défaut, le protocole MQTT utilise les ports 1883 et 8883 lorsqu'il fonctionne avec TLS. Pour ce faire, le client envoie un message CONNECT contenant les informations nécessaires (nom d'utilisateur, mot de passe, identifiant du client...). Le broker répond par un message CONNACK, qui contient le résultat de la connexion (accepté, rejeté, etc.).

Pour envoyer les messages, le client utilise des messages PUBLISH, qui contiennent le sujet et la charge utile. Pour s'abonner et se désabonner, on utilise des messages SUBSCRIBE et UNSUSCRIBE, auxquels le serveur répond par SUBACK et UNSUBACK. D'autre part, pour s'assurer que la connexion est active, les clients envoient périodiquement un message PINGREQ auquel le serveur répond par un PINGRESP. Enfin, le client se déconnecte en envoyant un message DISCONNECT.

Structure d'un message MQTT

L'une des composantes les plus importantes du protocole MQTT est la définition et la typologie des messages, car elles sont l'une des bases de l'agilité dans laquelle réside sa force. Chaque message est composé de trois parties :

  • Correction de l'en-tête : Il occupe de 2 à 5 octets, obligatoirement. Il se compose d'un code de contrôle, qui identifie le type de message envoyé, et de la longueur du message. La longueur est codée en 1 à 4 octets, dont les 7 premiers bits sont utilisés, et le dernier est un bit de continuité.
  • En-tête variable : Facultatif, il contient des informations supplémentaires qui sont nécessaires dans certains messages ou situations.
  • Contenu (charge utile) : Il s'agit du contenu réel du message. Il peut avoir un maximum de 256 Mo, bien que dans les mises en œuvre réelles, le maximum soit de 2 à 4 Ko.
Le protocole MQTT dispose du mécanisme QoS (Quality of Service)

QoS - Qualité de Service

Le protocole MQTT dispose d'un mécanisme de qualité de service (ou QoS), qui garantit la livraison des messages au client en cas de défaillance (par exemple, de la connectivité). Le protocole MQTT a trois niveaux de QoS possibles :

  • QoS 0 "At most once" : le message est envoyé une seule fois. En cas de défaillance, il se peut que certains ne soient pas livrés.
  • QoS 1 "At least once" : le message est envoyé jusqu'à ce que la livraison soit garantie. En cas d'échec, l'abonné peut recevoir des messages en double.
  • QoS 2 "Exactly once" : Chaque message est garanti d'être livré à l'abonné, et une seule fois.

L'utilisation d'un niveau ou d'un autre dépend des caractéristiques et des besoins de fiabilité de votre système. Logiquement, un niveau de QoS plus élevé nécessite un échange plus important de messages de vérification avec le client et, par conséquent, une charge plus importante sur le système.

La sécurité

La sécurité doit toujours être un facteur important à prendre en compte dans tout système de communication M2M. Le protocole MQTT comporte différentes mesures de sécurité que vous pouvez adopter pour protéger les communications. Cela inclut notamment le transport SSL/TLS et l'authentification par utilisateur et mot de passe ou par certificat. Toutefois, il convient de noter que de nombreux dispositifs IoT ont une faible capacité, de sorte que SSL/TLS peut représenter une surcharge de traitement importante. Dans de nombreux cas, l'authentification consiste en un mot de passe et un utilisateur qui sont envoyés en clair. Enfin, il est également possible de configurer le broker pour qu'il accepte les connexions anonymes. Tous ces éléments doivent être pris en compte lors de la mise en place d'un système MQTT, et les risques de chacun doivent être compris, ainsi que leur impact sur l'efficacité du système.

Les avantages du protocole MQTT

Le protocole MQTT présente plusieurs avantages en tant que système de communication M2M. D'une part, il y'a tous les avantages du modèle pub/sub tels que l'extensibilité, l'asynchronisme, et le découplage entre les clients.

En outre, le protocole MQTT offre un certain nombre de fonctionnalités qui lui ont permis de se démarquer des autres concurrents. Le principal avantage est sa simplicité et sa légèreté. Cela le rend adapté aux applications IoT, où des dispositifs à faible puissance sont souvent utilisés.

Cette moindre exigence en matière de ressources se traduit aussi par une moindre consommation d'énergie, ce qui est intéressant pour les appareils qui fonctionnent 24 heures sur 24 et 7 jours sur 7, et notamment pour les appareils alimentés par batterie ou bien les appareils connectés.

Une autre conséquence de la légèreté du protocole MQTT est qu'il nécessite une bande passante minimale, ce qui est important dans les réseaux sans fil, ou les connexions avec d'éventuels problèmes de qualité.

Pour finir, le protocole MQTT comporte des mesures supplémentaires importantes, telles que la sécurité et la qualité de service (QoS). Il s'agit donc d'une solution bien testée et bien établie, qui offre robustesse et fiabilité.

Nos solutions utilisant le protocole MQTT

Pour plus d'informations