MQTT[1] (initialement Message Queuing Telemetry Transport[2],[3]) est un protocole de messagerie publish-subscribe basé sur le protocole TCP/IP.
Il a été initialement développé par Andy Stanford-Clark (IBM) et Arlen Nipper (EuroTech). Il est conçu pour les connexions avec des sites distants où la bande passante du réseau est limitée.
MQTT 3.1.1 est un standard OASIS, la version 5 de la spécification est maintenant publiée depuis le 7 mars 2019[4].
Depuis 2013, le terme MQTT n'est plus un acronyme[3] car contrairement au nom "Message Queuing Telemetry Transport" aucun mécanisme de file n'est mis en place dans le protocole.
Andy Stanford-Clark (IBM) et Arlen Nipper (Arcom, Eurotech et Cirrus Link) sont les auteurs de la première version du protocole en 1999 qui a servi à surveiller un oléoduc dans le désert. L'objectif était d'avoir un protocole efficace en bande passante, léger et utilisant peu d'énergie de batterie, car la liaison satellite qu'ils utilisaient était très coûteuse à cette époque.
Les agents MQTT sont des logiciels ou des composants qui fonctionnent en tant que clients MQTT ou brokers MQTT dans une architecture MQTT. Voici une explication des deux types d'agents MQTT :
Il est important de noter que dans une architecture MQTT typique, il peut y avoir plusieurs clients MQTT et un ou plusieurs brokers MQTT. Les clients peuvent publier des messages sur différents sujets, et les brokers sont responsables de la distribution de ces messages aux clients abonnés aux sujets correspondants. Cette architecture distribuée et légère fait de MQTT un choix populaire pour les applications IoT et les systèmes de messagerie en temps réel.
Les principaux agents open-source sont :
De très nombreuses bibliothèques sont disponibles pour programmer des clients MQTT, pour la plupart des langages (C, C++, Java, JavaScript, PHP, Python…) et sur la plupart des plates-formes (GNU/Linux, Windows, iOS, Android, Arduino…).
Les projets Eclipse Paho (en) ainsi que wolfSSL offrent des implémentations libres et open-source des protocoles de messagerie ouverts et standards destinés aux applications nouvelles et émergentes du M2M (machine-to-machine) et de l'Internet des objets.
De nombreux projets mettent en œuvre MQTT :
Dans un livre rouge intitulé Building Smarter Planet Solutions with MQTT and IBM WebSphere MQ Telemetry et paru en 2012, IBM décrit plusieurs exemples d'applications dans le domaine de la santé et de l'énergie[8].
Le protocole MQTT utilise par défaut le port TCP 1883 pour communiquer de manière non chiffrée.
Cependant, il est possible de chiffrer la communication à l'aide de SSL/TLS. Dans ce cas le port par défaut sera TCP 8883.
Il est important de noter que les brokers MQTT peuvent être configurés pour utiliser d'autres ports en fonction des besoins spécifiques de l'infrastructure et des politiques de sécurité. Par exemple, certains déploiements MQTT peuvent utiliser des ports non standard pour des raisons de sécurité ou de compatibilité avec d'autres systèmes. Dans de tels cas, il est essentiel de consulter la documentation spécifique du broker MQTT pour connaître les ports configurés sur le système.
Il est possible d'encapsuler le protocole MQTT dans HTTPS (HTTP sécurisé). Cela implique généralement d'utiliser une passerelle ou un proxy qui agit en tant que pont entre les clients MQTT et le serveur MQTT, en utilisant HTTPS comme protocole de transport sécurisé.
Voici un exemple d'application :
De même, les réponses du serveur MQTT peuvent être encapsulées dans des messages HTTPS et renvoyées au client MQTT via la même passerelle ou le même proxy.
Cette approche peut être utile dans les cas où une communication sécurisée est requise entre les clients MQTT et le serveur MQTT, par exemple lorsque les messages MQTT sont envoyés via Internet et qu'une couche de sécurité supplémentaire est nécessaire pour protéger les données sensibles contre les interceptions ou les manipulations. Cependant, il convient de noter que l'encapsulation de MQTT dans HTTPS peut ajouter un surcoût en termes de latence et de charge de traitement, en raison du processus de décodage et de retransmission des messages.