Cos'è MQTT?
MQTT è un protocollo di messaggistica basato su standard, o un insieme di regole, utilizzato per la comunicazione tra macchine. I sensori intelligenti, i dispositivi indossabili e altri dispositivi di Internet delle cose (IoT) devono in genere trasmettere e ricevere dati su una rete con risorse limitate e larghezza di banda limitata. Questi dispositivi IoT utilizzano MQTT per la trasmissione dei dati, in quanto è facile da implementare e può comunicare i dati IoT in modo efficiente. MQTT supporta la messaggistica tra dispositivi e cloud e tra cloud e dispositivo.
Perché il protocollo MQTT è importante?
Il protocollo MQTT è diventato uno standard per la trasmissione dei dati IoT perché offre i seguenti vantaggi:
Leggerezza ed efficienza
L'implementazione di MQTT sul dispositivo IoT richiede risorse minime, quindi può essere utilizzato anche su microcontroller di piccole dimensioni. Ad esempio, un messaggio di controllo MQTT minimo può essere costituito da soli due byte di dati. Le intestazioni dei messaggi MQTT sono inoltre di dimensioni ridotte, in modo da poter ottimizzare la larghezza di banda della rete.
Scalabilità
L'implementazione di MQTT richiede una quantità minima di codice che consuma pochissima energia nelle operazioni. Il protocollo dispone anche di funzioni integrate per supportare la comunicazione con un gran numero di dispositivi IoT. È quindi possibile implementare il protocollo MQTT per connettersi con milioni di questi dispositivi.
Affidabilità
Molti dispositivi IoT si connettono su reti cellulari inaffidabili, con larghezza di banda ridotta e latenza elevata. MQTT dispone di funzioni integrate che riducono il tempo necessario al dispositivo IoT per riconnettersi al cloud. Definisce inoltre tre diversi livelli di qualità del servizio per garantire l'affidabilità dei casi d'uso IoT: al massimo una volta (0), almeno una volta (1) ed esattamente una volta (2).
Sicurezza
MQTT semplifica per gli sviluppatori la crittografia dei messaggi e l'autenticazione di dispositivi e utenti utilizzando i moderni protocolli di autenticazione, come OAuth, TLS1.3, Certificati gestiti dal cliente e altri ancora.
Buon supporto
Diversi linguaggi, come Python, dispongono di un ampio supporto per l'implementazione del protocollo MQTT. Pertanto, gli sviluppatori possono implementarlo rapidamente con una codifica minima in qualsiasi tipo di applicazione.
Qual è la storia del protocollo MQTT?
Il protocollo MQTT è stato inventato nel 1999 per essere utilizzato nell'industria petrolifera e del gas. Gli ingegneri avevano bisogno di un protocollo che offrisse una larghezza di banda minima e una perdita di batteria minima per monitorare gli oleodotti via satellite. Inizialmente, il protocollo era noto come Message Queuing Telemetry Transport, per via dei prodotti IBM della serie MQ che supportava nella sua fase iniziale. Nel 2010, IBM ha rilasciato MQTT 3.1 come protocollo libero e aperto per chiunque, che è stato poi sottoposto, nel 2013, all'organismo di specifica Organization for the Advancement of Structured Information Standards (OASIS) per la manutenzione. Nel 2019, OASIS ha rilasciato la versione 5 di MQTT aggiornata. Ora MQTT non è più un acronimo ma è considerato il nome ufficiale del protocollo.
Qual è il principio alla base di MQTT?
Il protocollo MQTT funziona secondo i principi del modello pubblica/sottoscrivi. Nella comunicazione di rete tradizionale, i client e i server comunicano direttamente tra loro. I client richiedono risorse o dati al server, che li elabora e invia una risposta. Tuttavia, MQTT utilizza uno schema pubblica/sottoscrivi per disaccoppiare il mittente del messaggio (editore) dal destinatario del messaggio (sottoscrittore). Invece, un terzo componente, chiamato broker di messaggi, gestisce la comunicazione tra editori e sottoscrittori. Il compito del broker è quello di filtrare tutti i messaggi in arrivo dagli editori e distribuirli correttamente ai sottoscrittori. Il broker disaccoppia gli editori e i sottoscrittori come segue:
Disaccoppiamento spaziale
L'editore e il sottoscrittore non sono a conoscenza dell'ubicazione delle rispettive reti e non si scambiano informazioni come indirizzi IP o numeri di porta.
Disaccoppiamento temporale
L'editore e il sottoscrittore non eseguono o non dispongono di connettività di rete nello stesso momento.
Disaccoppiamento di sincronizzazione
Sia gli editori che i sottoscrittori possono inviare o ricevere messaggi senza interrompersi a vicenda. Ad esempio, il sottoscrittore non deve aspettare che l'editore invii un messaggio.
Quali sono i componenti MQTT?
MQTT implementa il modello pubblica/sottoscrivi definendo client e broker come segue.
Client MQTT
Un client MQTT è un qualsiasi dispositivo, da un server a un microcontroller, che esegue una libreria MQTT. Se il client invia messaggi, agisce come editore, mentre se riceve messaggi, agisce come ricevitore. Fondamentalmente, qualsiasi dispositivo che comunichi utilizzando MQTT su una rete può essere definito un dispositivo client MQTT.
Broker MQTT
Il broker MQTT è il sistema backend che coordina i messaggi tra i diversi client. Le responsabilità del broker comprendono la ricezione e il filtraggio dei messaggi, l'identificazione dei client sottoscritti a ciascun messaggio e l'invio dei messaggi a questi. È inoltre responsabile di altri compiti quali:
- Autorizzare e autenticare i client MQTT
- Passare i messaggi ad altri sistemi per ulteriori analisi
- Gestire i messaggi persi e le sessioni dei client
Connessione MQTT
I client e i broker iniziano a comunicare utilizzando una connessione MQTT. I client iniziano la connessione inviando un messaggio CONNETTI al broker MQTT. Il broker conferma che è stata stabilita una connessione rispondendo con un messaggio CONNACK. Sia il client MQTT che il broker richiedono uno stack TCP/IP per comunicare. I client non si collegano mai tra loro, ma solo con il broker.
Come funziona MQTT?
Di seguito viene fornita una panoramica del funzionamento di MQTT.
- Un client MQTT stabilisce una connessione con il broker MQTT.
- Una volta connesso, il client può pubblicare messaggi, sottoscrivere messaggi specifici o fare entrambe le cose.
- Quando il broker MQTT riceve un messaggio, lo inoltra ai sottoscrittori interessati.
Analizziamo i dettagli per capire meglio.
Argomento MQTT
Il termine "argomento" si riferisce alle parole chiave che il broker MQTT utilizza per filtrare i messaggi per i client MQTT. Gli argomenti sono organizzati in modo gerarchico, come una directory di file o cartelle. Ad esempio, immagina un sistema di casa intelligente che opera in una casa a più piani con dispositivi intelligenti diversi ad ogni piano. In questo caso, il broker MQTT può organizzare gli argomenti come:
casanostra/pianoterra/soggiorno/luce
casanostra/primopiano/cucina/temperatura
Pubblicazione MQTT
I client MQTT pubblicano messaggi che contengono l'argomento e i dati in formato byte. Il client determina il formato dei dati, ad esempio dati di testo, dati binari, XML o file JSON. Ad esempio, una lampada del sistema casa intelligente può pubblicare un messaggio accesa sull'argomento soggiorno/luce.
Sottoscrizione MQTT
I client MQTT inviano un messaggio SOTTOSCRIVI al broker MQTT, per ricevere messaggi sugli argomenti di interesse. Questo messaggio contiene un identificatore unico e un elenco di sottoscrizioni. Ad esempio, l'applicazione casa intelligente sul telefono vuole visualizzare quante luci sono accese in casa. Si iscriverà all'argomento luce e aumenterà il contatore di tutti i messaggi accesa.
Che cos'è MQTT su WSS?
MQTT su WebSockets (WSS) è un'implementazione di MQTT per ricevere dati direttamente in un browser Web. Il protocollo MQTT definisce un client JavaScript per fornire il supporto WSS ai browser. In questo caso, il protocollo funziona come di consueto, ma aggiunge intestazioni supplementari ai messaggi MQTT per supportare anche il protocollo WSS. Si può immaginare che sia il payload del messaggio MQTT avvolto in una busta WSS.
MQTT è sicuro?
La comunicazione MQTT utilizza il protocollo SSL per proteggere i dati sensibili trasmessi dai dispositivi IoT. È possibile implementare l'identità, l'autenticazione e l'autorizzazione tra i client e il broker utilizzando certificati SSL e/o password. Il broker MQTT in genere autentica i client utilizzando le loro password e gli identificatori unici che assegna a ciascun client. Nella maggior parte delle implementazioni, il client autentica il server con certificati o ricerche DNS. È inoltre possibile implementare protocolli di crittografia con MQTT.
MQTT è RESTful?
MQTT non è RESTful. Il REST (Representational State Transfer) è un approccio architettonico alla comunicazione di rete che utilizza il modello richiesta-risposta per la comunicazione tra mittenti e destinatari di messaggi. Al contrario, MQTT utilizza il modello di comunicazione publish/subscribe nel livello applicativo e richiede una connessione TCP permanente per trasmettere messaggi in modalità push. Tuttavia, la versione 5 di MQTT aggiunge un nuovo metodo di richiesta/risposta che agisce in modo simile a REST, in cui l'editore può allegare un argomento di risposta speciale, che il ricevitore elabora e genera una risposta appropriata.
In che modo AWS può supportare l'implementazione di MQTT?
AWS IoT Core è un servizio completamente gestito che consente di collegare miliardi di dispositivi IoT e instradare migliaia di miliardi di messaggi ai servizi AWS. Puoi:
- Connetterti, gestire e dimensionare il tuo parco istanze di dispositivi in modo facile e affidabile senza provisioning o gestione di server.
- Scegli il tuo protocollo di comunicazione preferito, inclusi MQTT, HTTPS, MQTT su WSS e LoRaWAN.
- Proteggi le connessioni e i dati dei dispositivi con l'autenticazione reciproca e la crittografia end-to-end.
- Filtrare, trasformare e agire sui dati del dispositivo al volo, in base alle tue regole aziendali specifiche.
Inizia a usare MQTT su AWS oggi stesso creando un account gratuito!
Fasi successive di MQTT in AWS
Ottieni accesso istantaneo al piano gratuito di AWS.