Quando uma conexão de soquete TCP/IP é estabelecida entre o cliente e o intermediário, é requerida uma sessão de nível de protocolo. É assumido que a direção da conexão é do cliente para o intermediário e que o cliente suporta a funcionalidade de listener do intermediário.
O cabeçalho fixo mostrado na tabela abaixo.
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
byte 1 | Tipo de Mensagem (1) | Sinalizador DUP | Nível de QoS | RETAIN | ||||
0 | 0 | 0 | 1 | x | x | x | x | |
byte 2 | Comprimento Restante |
Os sinalizadores DUP, QoS e RETAIN não são utilizados na mensagem CONNECT.
Comprimento Restante é o comprimento do cabeçalho variável (12 bytes) e o comprimento da Carga Útil. Este pode ser um campo com vários bytes.
Um exemplo do formato do cabeçalho variável é mostrado na tabela abaixo.
Descrição | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
Nome do Protocolo | |||||||||
byte 1 | Comprimento MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
byte 2 | Comprimento LSB (6) | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
byte 3 | 'M' | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
byte 4 | 'Q' | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
byte 5 | 'I' | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
byte 6 | 's' | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 |
byte 7 | 'd' | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
byte 8 | 'p' | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
Número da Versão do Protocolo | |||||||||
byte 9 | Versão (3) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Sinalizadores Connect | |||||||||
byte 10 | Will RETAIN (0) |
x | x | 0 | 0 | 1 | 1 | 1 | x |
Cronômetro de Atividade | |||||||||
byte 11 | Atividade de MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
byte 12 | Atividade de LSB (10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
A primeira cadeia codificada por UTF. O Identificador do Cliente (ID do Cliente) possui entre 1 e 23 caracteres e identifica exclusivamente o cliente no intermediário. Ele deve ser exclusivo em todos os clientes que se conectam com um único intermediário e é a chave no tratamento de IDs de Mensagens com QoS níveis 1 e 2. Se o ID do Cliente contiver mais do que 23 caracteres, o intermediário responderá à mensagem CONNECT com um código de retorno 2 do CONNACK: Identificador Rejeitado.
A segunda cadeia codificada por UTF. A Mensagem Will é publicada no Tópico Will. O nível de QoS é definido pelo campo Will QoS e o status de RETAIN é definido pelo sinalizador Will RETAIN no cabeçalho variável.
A terceira cadeia codificada por UTF. A Mensagem Will definirá o conteúdo da mensagem que é publicado no Tópico Will se o cliente for desconectado inesperadamente.
Embora a Mensagem Will seja codificada por UTF na mensagem CONNECT, quando ela for publicada no Tópico Will, apenas os bytes da mensagem serão enviados, não os primeiros dois bytes de comprimento. A mensagem enviada quando o intermediário executa a Mensagem Will é ASCII bruta, não codificada por UTF.
O intermediário envia uma mensagem CONNACK em resposta a uma mensagem CONNECT de um cliente.
Se o cliente não receber uma mensagem CONNACK do intermediário em um período de tempo "razoável", o cliente fechará a conexão do soquete TCP/IP e iniciará novamente a sessão, abrindo um soquete para o intermediário e emitindo uma mensagem CONNECT. Um período de tempo "razoável" depende do tipo de aplicativo e da infra-estrutura de comunicação.