Aller au contenu

MQTT

MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie publish/subscribe conçu pour des équipements aux ressources limitées et des réseaux instables — le contexte typique de l’IoT (capteurs, objets connectés) où il est devenu le standard de facto.

Contrairement à HTTP (un client demande, un serveur répond), MQTT repose sur un broker central et des topics (canaux nommés, hiérarchiques : maison/salon/temperature) :

  • Un client publie un message sur un topic, sans savoir qui (ni combien de clients) le recevra.
  • Un client s’abonne à un ou plusieurs topics (avec des jokers : maison/+/temperature ou maison/#) et reçoit automatiquement tout message publié dessus.
  • Le broker se charge de router chaque message publié vers tous les abonnés du topic concerné.

Ce découplage permet à un capteur de publier une mesure sans jamais connaître les systèmes qui la consomment — on peut ajouter un nouveau consommateur (un tableau de bord, une alerte) sans toucher au capteur.

  • En-tête minimal (2 octets au minimum) : overhead très faible comparé à HTTP, important sur des réseaux bas débit (LoRa, réseaux cellulaires IoT) ou des microcontrôleurs à mémoire très limitée.
  • Trois niveaux de qualité de service (QoS) adaptés à des connexions instables :
    • QoS 0 : envoi au mieux, sans garantie (fire and forget).
    • QoS 1 : livraison garantie, mais possibilité de doublons.
    • QoS 2 : livraison garantie exactement une fois (le plus coûteux en échanges).
  • Last Will and Testament (LWT) : un client peut définir à l’avance un message que le broker publiera automatiquement s’il se déconnecte de façon anormale — utile pour détecter qu’un capteur est tombé en panne ou a perdu sa connexion.
  • Sessions persistantes : un client peut se déconnecter et retrouver, à sa reconnexion, les messages publiés entre-temps sur les topics auxquels il est abonné (selon le QoS).

MQTT tourne au-dessus de TCP (port 1883 en clair, 8883 avec TLS). L’authentification de base (identifiant/mot de passe) est envoyée en clair sans TLS — sur un déploiement IoT exposé, TLS n’est pas optionnel. Une variante, MQTT over WebSocket, permet à des clients web navigateur de s’abonner directement à des topics.