Comprimento máximo das credenciais (nome de usuário, senha, cliente) no MQTT v3.1.1

O pacote CONNECT

O pacote de Controlo MQTT CONNECT contém sempre uma carga útil. É o primeiro pacote, que o cliente deve enviar para o servidor após a conexão ser estabelecida.

Ele só pode ser enviado uma vez pelo cliente, se um segundo pacote CONNECT for enviado, o servidor (corretor) deve processá-lo como uma violação do protocolo e desconectar o cliente.

A carga útil pode conter vários campos diferentes:

  • identificador único de Cliente (clientid) - sempre presente
  • tema do testamento
  • mensagem de vontade
  • nome de utente
  • senha (requer que o nome do usuário também esteja presente!)

O cliente é obrigatório, os outros campos são opcionais. A presença dos campos opcionais é determinada por bandeiras no cabeçalho.

imagem

Imagem da tela: OASIS Open MQTT v3.1.1 spec

Limites

Aqui estão os limites que devem ser suportados pelos corretores cumpridores:

  • clientid: 23 bytes codificados UTF-8
  • nome do usuário no máximo. 655535 bytes após a codificação (codificado UTF-8)
  • senha: 0 a 65535 bytes de dados binários
  • tamanho limite de mensagem: 268435455 bytes

Os seguintes caracteres para a identificação do cliente são necessário a ser suportado por qualquer corretor que se reúna com o MQTT v3.1.1 spec:

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Outros caracteres e identificações de clientes mais longas podem ser suportados opcionalmente pelo corretor.

23 caracteres é muito. Lembre-se, estes não são pedaços, mas personagens. Se você usar base58 codificação, por exemplo, você obtém 58^23 combinações ~ 3,62E+40 ~ 362112779466767850000000000000000000000000000000000 combinações. Se você não o fizer - então ainda mais.

Opcionalmente os clientes com comprimento de zero bytes podem ser suportados pelo corretor. Neste caso, o corretor deve designar um cliente único para o cliente. Nem todos os corretores suportam isto ("MAIO" de acordo com a especificação).

O nome do usuário deve ser uma cadeia codificada UTF-8. A senha pode ser de dados binários.

A mensagem também pode ser dados binários.

 

Limites crescentes

Para aumentar o limite de cliente no VerneMQ, você pode definir uma opção, max_client_id_id_size:

https://docs.vernemq.com/configuration/nonstandard

o valor padrão é 23.

A identificação do cliente deve ser única

No MQTT normalmente os clientes devem ter clientes distintos, mesmo que tenham nomes de utilizador diferentes.

Se dois clientes compartilham a identificação do cliente, eles acabarão em um ping-pong de tentativas de conexão e desconexão, pois o corretor normalmente não permite conexões para dois clientes com o mesmo cliente.

(Acredito que a VerneMQ tem essa opção, mas também acredito que ela seja depreciada; de qualquer forma, é melhor não projetar com isso em mente, para permanecer compatível com outros corretores!)

Ref