MQTT - MQTT

MQTT
Mqtt-hor.svg
Logotipo MQTT
Status Publicados
Ano começou 1999
Última versão 5.0
7 de março de 2019
Organização OÁSIS
Comitê Comitê Técnico de Transporte de Telemetria de Enfileiramento de Mensagens OASIS
Editores Andrew Banks (IBM), Ed Briggs (Microsoft), Ken Borgendale (IBM), Rahul Gupta (IBM)
Padrões relacionados MQTT-SN
Local na rede Internet mqtt .org

MQTT é um protocolo de rede leve de publicação-assinatura que transporta mensagens entre dispositivos. O protocolo geralmente é executado sobre TCP / IP , no entanto, qualquer protocolo de rede que forneça conexões bidirecionais ordenadas, sem perdas , pode suportar MQTT. Ele é projetado para conexões com locais remotos onde existem restrições de recursos ou a largura de banda da rede é limitada. O protocolo é um aberta OÁSIS padrão e um ISO recomendação (ISO / IEC 20922).

História

Andy Stanford-Clark ( IBM ) e Arlen Nipper (então trabalhando para a Eurotech, Inc. ) foram os autores da primeira versão do protocolo em 1999. Ele foi usado para monitorar oleodutos dentro do sistema de controle industrial SCADA . O objetivo era ter um protocolo que economizasse banda, fosse leve e usasse pouca bateria, pois os aparelhos eram conectados via satélite que, na época, era extremamente caro.

Historicamente, o "MQ" em "MQTT" veio da linha de produtos MQ do IBM MQ (então 'MQSeries'), onde significa "Fila de mensagens". No entanto, o protocolo fornece mensagens de publicação e assinatura (sem filas, apesar do nome). Na especificação aberta pela IBM como versão 3.1, o protocolo foi referido como "MQ Telemetry Transport". Versões subsequentes lançadas pelo OASIS referem-se estritamente ao protocolo apenas como "MQTT", embora o próprio comitê técnico seja denominado "Comitê Técnico de Transporte de Telemetria de Enfileiramento de Mensagens OASIS". Desde 2013, "MQTT" não significa mais nada.

Em 2013, a IBM submeteu o MQTT v3.1 ao corpo de especificação OASIS com um regulamento que garantiu que apenas pequenas mudanças na especificação pudessem ser aceitas. Depois de assumir a manutenção do padrão da IBM, o OASIS lançou a versão 3.1.1 em 29 de outubro de 2014. Uma atualização mais substancial para a versão 5 do MQTT, adicionando vários novos recursos, foi lançada em 7 de março de 2019.

MQTT-SN (MQTT para Redes de Sensores) é uma variação do protocolo principal voltado para dispositivos embarcados alimentados por bateria em redes não TCP / IP, como Zigbee .

Visão geral

O protocolo MQTT define dois tipos de entidades de rede: um intermediário de mensagem e vários clientes. Um broker MQTT é um servidor que recebe todas as mensagens dos clientes e, em seguida, roteia as mensagens para os clientes de destino apropriados. Um cliente MQTT é qualquer dispositivo (de um microcontrolador até um servidor completo) que executa uma biblioteca MQTT e se conecta a um broker MQTT em uma rede.

As informações são organizadas em uma hierarquia de tópicos. Quando um publicador tem um novo item de dados para distribuir, ele envia uma mensagem de controle com os dados para o corretor conectado. O corretor então distribui as informações para todos os clientes que se inscreveram nesse tópico. O editor não precisa ter nenhum dado sobre o número ou localização dos assinantes, e os assinantes, por sua vez, não precisam ser configurados com nenhum dado sobre os editores.

Se um broker receber uma mensagem sobre um tópico para o qual não há assinantes atuais, o broker descarta a mensagem, a menos que o publicador da mensagem designou a mensagem como uma mensagem retida. Uma mensagem retida é uma mensagem MQTT normal com o sinalizador retido definido como verdadeiro. O broker armazena a última mensagem retida e o QoS correspondente para o tópico selecionado. Cada cliente que assina um padrão de tópico que corresponde ao tópico da mensagem retida recebe a mensagem retida imediatamente após a assinatura. O broker armazena apenas uma mensagem retida por tópico. Isso permite que novos assinantes de um tópico recebam o valor mais atual, em vez de esperar pela próxima atualização de um editor.

Quando um cliente de publicação se conecta ao broker pela primeira vez, ele pode configurar uma mensagem padrão a ser enviada aos assinantes se o broker detectar que o cliente de publicação se desconectou inesperadamente do broker.

Os clientes interagem apenas com um corretor, mas um sistema pode conter vários servidores corretor que trocam dados com base nos tópicos de seus assinantes atuais.

Uma mensagem de controle MQTT mínima pode ter no mínimo dois bytes de dados. Uma mensagem de controle pode transportar quase 256 megabytes de dados, se necessário. Existem quatorze tipos de mensagens definidos usados ​​para conectar e desconectar um cliente de um corretor, para publicar dados, para confirmar o recebimento de dados e para supervisionar a conexão entre o cliente e o servidor.

MQTT depende do protocolo TCP para transmissão de dados. Uma variante, MQTT-SN, é usada em outros transportes, como UDP ou Bluetooth.

MQTT envia credenciais de conexão em formato de texto simples e não inclui nenhuma medida de segurança ou autenticação. Isso pode ser fornecido usando TLS para criptografar e proteger as informações transferidas contra interceptação, modificação ou falsificação.

A porta MQTT não criptografada padrão é 1883. A porta criptografada é 8883.

Corretor MQTT

O broker MQTT é um software em execução em um computador (em execução local ou na nuvem) e pode ser autoconstruído ou hospedado por terceiros. Ele está disponível em implementações de código aberto e proprietárias.

O corretor atua como uma agência postal, o MQTT não usa o endereço do destinatário pretendido, mas usa a linha de assunto chamada “Tópico” e qualquer pessoa que desejar uma cópia dessa mensagem assinará esse tópico. Vários clientes podem receber a mensagem de um único broker (capacidade de um para vários). Da mesma forma, vários editores podem publicar tópicos para um único assinante (muitos para um).

Cada cliente pode produzir e receber dados publicando e assinando, ou seja, os dispositivos podem publicar dados do sensor e ainda receber as informações de configuração ou comandos de controle (MQTT é um protocolo de comunicação bidirecional). Isso ajuda no compartilhamento de dados, gerenciamento e controle de dispositivos.

Com a arquitetura do broker MQTT, os dispositivos e aplicativos tornam-se desacoplados e mais seguros. MQTT usa criptografia Transport Layer Security (TLS) com nome de usuário, conexões protegidas por senha e certificações opcionais que requerem que os clientes forneçam um arquivo de certificado que corresponda ao do servidor. Os clientes não sabem o endereço IP uns dos outros.

No caso de uma única fonte de falha, o software do broker e os clientes têm uma transferência automática para o broker de backup redundante / automático. O corretor de backup também pode ser configurado para compartilhar a carga de clientes em vários servidores no local, nuvem ou a combinação de ambos.

O broker pode suportar tanto MQTT padrão quanto MQTT para especificações compatíveis, como Sparkplug, pode ser feito com o mesmo servidor, mesmo tempo e com os mesmos níveis de segurança.

O broker pode armazenar os dados na forma de mensagens retidas (precisa se inscrever com o cliente do banco de dados) para que novos assinantes do tópico possam obter o último valor imediatamente.

O corretor também mantém registro de todas as informações da sessão conforme os dispositivos são ligados e desligados, chamados de “sessões persistentes”.

As principais vantagens do corretor MQTT são:

  1. Elimina conexões de cliente vulneráveis ​​e inseguras
  2. Pode ser facilmente escalado de um único dispositivo para milhares
  3. Gerencia e rastreia todos os estados de conexão do cliente, incluindo credenciais e certificados de segurança
  4. Reduzida tensão de rede sem comprometer a segurança (rede celular ou satélite)

Tipos de mensagem

Conectar

Exemplo de uma conexão MQTT (QoS 0) com conectar, publicar / assinar e desconectar. A primeira mensagem do cliente B é armazenada devido ao sinalizador de retenção.

Espera que uma conexão seja estabelecida com o servidor e cria um link entre os nós.

desconectar

Espera que o cliente MQTT conclua qualquer trabalho que deva ser executado e que a sessão TCP / IP seja desconectada.

Publicar

Retorna imediatamente para o encadeamento do aplicativo após transmitir a solicitação ao cliente MQTT.

MQTT v5.0

Em 2019, o OASIS lançou o padrão oficial MQTT 5.0. A versão 5.0 inclui os seguintes novos recursos principais:

  • Códigos de razão: as confirmações agora oferecem suporte a códigos de retorno, que fornecem uma razão para uma falha.
  • Assinaturas compartilhadas: permitem que a carga seja equilibrada entre os clientes e, assim, reduz o risco de problemas de carga
  • Expiração da mensagem: as mensagens podem incluir uma data de validade e serão excluídas se não forem entregues dentro desse período.
  • Alias ​​do tópico: o nome de um tópico pode ser substituído por um único número

Qualidade de serviço (QoS)

Cada conexão com o corretor pode especificar uma medida de qualidade de serviço . Estes são classificados em ordem crescente de sobrecarga:

  • No máximo uma vez - a mensagem é enviada apenas uma vez e o cliente e o corretor não realizam nenhuma etapa adicional para confirmar a entrega (disparar e esquecer).
  • Pelo menos uma vez - a mensagem é tentada novamente pelo remetente várias vezes até que a confirmação seja recebida (entrega confirmada).
  • Exatamente uma vez - o remetente e o receptor se envolvem em um handshake de dois níveis para garantir que apenas uma cópia da mensagem seja recebida (entrega garantida).

Este campo não afeta o tratamento das transmissões de dados TCP subjacentes; ele é usado apenas entre remetentes e receptores de MQTT.

Formulários

Vários projetos implementam MQTT, por exemplo:

Veja também

Referências

links externos