O protocolo MQTT tem a sua devida importância por conta destes 5 benefícios:
Podendo ser usado em pequenos microcontroladores, a implementação do MQTT no dispositivo IoT requer recursos minimos.
Não é necessário uma grande quantidade de código para implementar o MQTT e, por conta disso, consome pouca energia nas operações.
O MQTT oferece facilidade para criptografar mensagens e autenticar dispositivos e usuários usando protocolos de autenticação modernos.
Muitos dispositivos IoT se conectam em redes celulares não confiáveis com baixa largura de banda e alta latência. O MQTT tem recursos integrados qu reduzem o tempo que o dispositivo IoT leva para se reconectar à nuvem.
Muitas linguagens tem um bom suporte para a implementação do protocolo. Por conta disso, os desenvolvedores podem implementa-lo rapidamente com codificação minima em qualquer tipo de aplicação.
Baixo custo de bateria: O MQTT não exige altos gastos da bateria dos dispositivos que o utilizam. Como um exemplo, o MQTT consome 170 vezes menos energia, em comparação ao HTTP, quando estabelecido em redes 3G.
Garantia de entrega das mensagens: O MQTT dispõe de uma ferramenta, Quality of Service, que tem a capacidade de oferecer garantias em relação à transmissão e ao recebimento dos pacotes de dados.
Segurança: O MQTT não possui mecanismo de segurança de forma integrada. O protocolo depende do TCP/IP para garantir segurança na comunicação, o que só proporciona medidas de segurança mais básicas, como encriptação e autenticação. Medidas adicionais podem ser implementadas, mas isso pode acrescentar maior complexidade à aplicação e pode não ser viável em todos os casos.
Dependência do Broker: O MQTT depende do Broker para manter a conexão entre os dispositivos, o que faz com que a vulnerabilidade do sistema se concentre em um único ponto. Caso o Broker fique offline, por exemplo, a conexão é rompida. É recomendado utilizar um Broker secundário como backup, além de mecanismos que possam lidar com possíveis desconexões.
Alto volume de dados: O MQTT não foi feito para lidar com um alto volume de dados, seus pacotes de dados tem um tamanho máximo de 256 MBytes. Enquanto essa capacidade pode ser suficiente para a maioria das aplicações IoT, as conexões podem ficar sobrecarregadas diante de um aumento significativo no número de dispositivos conectados ou na quantidade de dados sendo transmitidos.
Qualquer dispositivo que se comunique através do protocolo MQTT em uma rede é denominado cliente MQTT.
Os clientes MQTT podem desempenhar dois papeis distintos: publicadores (publish) e
assinantes (subscribe).
Os publicadores são responsáveis por “publicar” mensagens. Essas mensagens são identificadas por uma
palavra chave denominada tópico, de modo que, cada mensagem publicada, esteja vinculada
a um tópico adequado. Os assinantes, por sua vez, “assinam” os tópicos de interesse e recebem as mensagens
vínculadas ao tópico escolhido sempre que são publicadas.
Quando um cliente MQTT publica uma mensagem ele envia junto do conteúdo da mensagem o tópico a qual ela
está associada. Esse tópico é definido pelos desenvolvedores da aplicação, que devem escolher sua estrutura
e nomeclatura com base nos requisítos e lógica da aplicação.
A arquitetura utilizada no protocolo MQTT é a Arquitetura Publish-Subscribe. Diferente
da arquitetura cliente-servidor na qual clientes se comunicam diretamente com os servidores, realizando
requisições e recebendo as respostas dessas requisições diretamente dos servidores, na arquitetura
Publish-Subscribe essa comunicação não é realizada de forma direta, sendo mediada por uma entidade
intermediária denominado MQTT broker. Cada mensagem publicada é enviada para o MQTT
broker que a distribui aos clientes assinantes apropriados. Dentre as funções do MQTT broker, destaca-se:
O protocolo MQTT define pacotes de controle como unidades de dados que carregam consigo informações sobre
o tipo e a estrutura das mensagens enviadas ao MQTT Broker e recebidas dele. Atualmente, existem 15 diferentes
tipos de pacotes de controle, que podem ser organizados em 3 categorias: pacotes voltados à conexão, pacotes
voltados à publicação e pacotes voltados à inscrição.
No protocolo MQTT, os pacotes são compostos de três partes: (1) Fixed Header, (2) Variable Header e (3) Payload.
Desses três componentes, a única parte que está presente em todos os pacotes é a Fixed Header.
A Fixed Header consiste de três campos: MQTT Control Packet Type, Flags e Remaining Length.
O conteúdo da Variable Header depende do pacote que está sendo enviado. Na figura abaixo, temos o conteúdo da Variable Header
dos pacotes CONNECT.
O Payload é utilizado para armazenar informações relacionadas ao propósito central de determinado pacote de controle. No pacote PUBLISH, por exemplo, o Payload carrega a mensagem que deve ser transmitida ao MQTT broker, enquanto que no SUBSCRIBE, o Payload contém os tópicos disponíveis para inscrição, o que corresponde à tarefa principal do pacote.
No MQTT, uma mensagem retida pode ser definida como um pacote de controle PUBLISH com a flag Retain ativa.
Essa flag informa ao Broker que a mensagem que está sendo enviada pelo cliente deve ser armazenada sob
determinado tópico e garante que qualquer novo assinante daquele tópico receba a mensagem.
Quando a flag não está ativa, apenas os clientes já inscritos no tópico no momento do envio irão receber a
mensagem. Cada tópico tem a capacidade de armazenar somente uma mensagem por vez. Então quando a flag está
ativa, o Broker mantém apenas a mensagem mais recente.
Last Will and Testament é uma ferramenta que permite que os clientes definam uma mensagem que será
automaticamente enviada pelo Broker aos assinantes de um tópico caso a conexão entre publicador e
Broker seja interrompida de forma inesperada.
Quando um cliente se conecta a um Broker, uma mensagem “testamento” pode ser definida. O Broker armazena
essa mensagem até que identifique uma desconexão súbita do cliente. Uma vez que a desconexão é percebida,
o Broker transmite a mensagem a todos os inscritos do tópico em pauta. Caso a desconexão do cliente não seja
inesperada, a mensagem será descartada.
Esse recurso é de extrema importância na manutenção da integridade do sistema e na garantia de uma comunicação eficiente.
Para receber mensagens de um Broker, um servidor deve estabelecer uma conexão com o mesmo e se inscrever nos
tópicos de seu interesse. Em uma sessão não persistente, caso a conexão seja interrompida, o cliente perde todas
as suas inscrições e, quando se reconecta, precisa refazê-las. Para contornar essa situação, o cliente pode requisitar
uma sessão persistente ao se conectar com o Broker.
Sessões persistentes armazenam no Broker todas as informações do cliente consideradas relevantes, garantido que as
inscrições e as mensagens sejam mantidas mesmo diante de uma desconexão. Assim, no momento de reconexão todas essas
informações estarão imediatamente disponíveis.
Essa ferramenta contribui na redução da sobrecarga na reconexão entre cliente e Broker, especialmente em redes mais
instáveis onde desconexões estão mais suscetíveis a ocorrer.
O mecanismo de Qualidade de Serviço no MQTT está relacionado ao nível de garantia de entrega das mensagens que estão sendo transmitidas na rede. O cliente que publica uma mensagem define o QoS a ser usado durante a transmissão do pacote, enquanto os assinantes selecionam o QoS de sua conexão durante o processo de inscrição.
O protocolo disponibiliza três níveis de QoS:Embora o MQTT tenha sido projetado com foco na simplicidade e eficiência, o protocolo oferece alguns mecanismos de segurança. A segurança do protocolo MQTT pode ser abordada em várias camadas:
O fluxo de trabalho do protocolo MQTT envolve um série de etapas bem definidas e estruturadas, sendo elas:
Conexão inicial
O MQTT é um protocolo de mensagens leve e eficiente que é adequado para aplicativos de IoT. Seu suporte para transmissão eficiente de dados, entrega confiável e comunicação segura tornam uma escolha popular para uma ampla gama de aplicações, desde automação industrial até casas e edifícios inteligentes.
O MQTT foi criado para enfrentar os desafios do acesso massivo de dispositivos e gerenciamento de dispositivos em aplicativos de IoT, como ambientes de rede complexos e não confiáveis, pequena capacidade de memória e memória flash e capacidade de processamento limitada. Ele se tornou o protocolo preferido para a indústria de IoT devido às suas vantagens de leveza, eficiência, mensagens confiáveis, suporte de conexão maciço e comunicação bidirecional segura.
Em dispositivos móveis, o MQTT é particularmente útil devido ao seu baixo consumo de energia, baixos requisitos de largura de banda e capacidade de lidar com redes de alta latência e não confiáveis. Essas características o tornam uma escolha ideal para aplicativos móveis que exigem comunicação em tempo real,
A versão mais recente do protocolo de comunicação MQTT é a versão 5. Essa nova versão trás uma série de atualizações e novos recursos em relação a sua versão anterior 3, com foco especialmente em se adaptar para as demandas que virão da era da Internet das Coisas (IoT). Como exemplos de novos recursos, podemos citar:
MQTT é um protocolo de comunicação mantido pelo OASIS (Organization for the Advancement of Structured Information Standards) extremamente simples e leve projetado para dispositivos restritos e redes de baixa largura de banda, alta latência ou não confiáveis. Os princípios de design do protocolo visam minimizar a largura de banda da rede e os requisitos de recursos do dispositivo, ao mesmo tempo que tentam garantir a confiabilidade e algum grau de garantia de entrega.
Leveza, eficiência e escalável.
O protocolo MQTT é utilizado em diversas aplicações como Iot, automação industrial, casas e edifícios inteligentes, dentre outros.
Clientes publicadores, clientes assinantes e MQTT Broker.
Qualquer dispositivo que se comunique através do protocolo MQTT e que "publique" mensagens.
Qualquer dispositivo que se comunique através do protocolo MQTT e que "assine" mensagens.
É um agente centralizador que intermedia a comunicação entre clientes publicadores e clientes assinantes. Ao publicar uma mensagem, o cliente publicador a envia ao MQTT Broker. Este, por sua vez, a envia para os clientes assinantes.
O modelo Publish/Subscribe.
Uma mensagem é uma informação publicada por um cliente publicador. Ao publicar uma mensagem, ela é identificada por uma palavra chave denominada tópico. Dessa forma, cada mensagem é identificada por um tópico. Podemos ter mensagens diferentes associadas ao mesmo tópico e, nesse caso, temos mensagens que pertencem a um grupo comum.
Sim. O MQTT oferece 3 níveis de Qos: 0, 1 e 2.
Sim. A porta TCP/IP 1883 é reservada pela IANA para uso com MQTT. A porta TCP/IP 8883 também está registrada, para usar MQTT sobre SSL.
Sim. O MQTT permite passar um nome de usuário e uma senha com um pacote MQTT na V3.1 do protocolo. A criptografia na rede pode ser tratada com SSL, independentemente do próprio protocolo MQTT (vale a pena notar que SSL não é o mais leve dos protocolos e adiciona sobrecarga significativa à rede). Segurança adicional pode ser adicionada por um aplicativo que criptografa os dados que envia e recebe, mas isso não é algo incorporado ao protocolo, para mantê-lo simples e leve.
[1] - MQTT: o padrão para mensagens Iot. MQTT, © 2022. Disponível em https://mqtt.org/. Acesso em 22 abr. 2024.
[2] - BASUMALLICK, Chiradeep. What Is MQTT (MQ Telemetry Transport)? Working, Types, Importance, and Applications. Spiceworks, © 2006-2024. Disponível em https://www.spiceworks.com/tech/iot/articles/what-is-mqtt/. Acesso em 22 abr. 2024.
[3] - O que é MQTT?. AWS Amazon, © 2023. Disponível em https://aws.amazon.com/pt/what-is/mqtt/. Acesso em 23 abr. 2024.
[4] - What Is the MQTT Protocol: A Beginner's Guide. EMQX, © 2013-2024. Disponível em https://www.emqx.com/en/blog/the-easiest-guide-to-getting-started-with-mqtt. Acesso em 23 abr. 2024.
[5] - MQTT 5 Vs MQTT 3 - MQTT 5 Essentials Parte 2. HIVEMQ, © 2024. Disponível em https://www.hivemq.com/blog/mqtt5-essentials-part2-foundational-changes-in-the-protocol/. Acesso em 24 abr. 2024.
[6] - MQTT 5: Seven Reasons to Upgrade to it from MQTT 3.11 - MQTT 5 Essentials Parte 3. HIVEMQ, © 2024. Disponível em //www.hivemq.com/blog/mqtt5-essentials-part3-upgrade-to-mqtt5-now/. Acesso em 24 abr. 2024.
[7] - Conheça o MQTT, protocolo de mensagens mais usado em IoT. Networkking, © 2018. Disponível em https://network-king.net/pt-pt/conheca-o-mqtt-o-protocolo-de-mensagens-mais-usado-em-iot/#:~:text=MQTT%20%C3%A9%20um%20protocolo%20para,confi%C3%A1veis%20ou%20com%20alta%20lat%C3%AAncia . Acesso em 4 abr. 2024.
[8] - 7 Advantages of MQTT protocol for IoT Devices. Medium, © 2020. Disponível em https://medium.com/@esperso/7-benefits-of-mqtt-protocol-for-iot-e463f6a97100. Acesso em 28 mai. 2024.
[9] - Limitations of MQTT. Medium, © 2020. Disponível em https://blog.iotify.io/limitations-of-mqtt-bd61e8150bca. Acesso em 28 maio 2024.
[10] - MQTT Topic Alias – MQTT 5 Essentials Part 10. HIVEMQ, © 2024. Disponível em https://www.hivemq.com/blog/mqtt5-essentials-part10-topic-alias/. Acesso em 28 mai. 2024.
[11] - What is MQTT Quality of Service (QoS) 0, 1, & 2? – MQTT Essentials: Part 6. HIVEMQ, © 2024. Disponível em https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels/. Acesso em 02 jun. 2024.