Cuando se establece una conexión de socket TCP/IP entre el cliente y el intermediario, se requiere una sesión de nivel de protocolo. Se da por supuesto que la dirección de la conexión es del cliente al intermediario, que el cliente tiene soporte para la funcionalidad del escucha del intermediario.
El formato de cabecera fija aparece en la tabla que sigue.
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
byte 1 | Tipo de mensaje (1) | Indicador DUP | Nivel QoS | RETAIN | ||||
0 | 0 | 0 | 1 | x | x | x | x | |
byte 2 | Longitud restante |
Los indicadores DUP, QoS y RETAIN no se utilizan en el mensaje CONNECT.
La longitud restante es la longitud de la cabecera variable (12 bytes) y la longitud de la carga útil. Este campo puede ser de múltiples bytes.
En la tabla que sigue puede verse un ejemplo del formato de la cabecera variable.
Descripción | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
Nombre de protocolo | |||||||||
byte 1 | MSB de longitud (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
byte 2 | LSB de longitud (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 de versión del protocolo | |||||||||
byte 9 | Versión (3) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Indicadores de conexión | |||||||||
byte 10 | Will RETAIN (0) |
x | x | 0 | 0 | 1 | 1 | 1 | x |
Temporizador de actividad | |||||||||
byte 11 | MSB de actividad (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
byte 12 | LSB de actividad (10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
La primera serie de caracteres codificada en UTF. El identificador del cliente (ID de cliente) tiene entre 1 y 23 caracteres e identifica de forma exclusiva al cliente ante el intermediario. Debe ser exclusivo entre todos los clientes que se conecten a un solo intermediario y es la clave para manejar ID de mensajes con niveles de QoS 1 y 2. Si el ID de cliente contiene más de 23 caracteres, el intermediario responde al mensaje CONNECT con un código de retorno CONNACK 2: identificador rechazado.
La segunda serie de caracteres codificada en UTF. El mensaje Will se publica para el tema Will. El nivel QoS se define mediante el campo QoS de Will y el estado RETAIN se define mediante el indicador Will RETAIN en la cabecera variable.
La tercera serie de caracteres codificada en UTF. El mensaje Will define el contenido del mensaje que se publica para el tema Will si el cliente se desconecta inesperadamente.
Aunque el mensaje Will esté codificado en UTF en el mensaje CONNECT, cuando se publica para el tema Will, únicamente se envían los bytes del mensaje, no el primero de los dos bytes de longitud. El mensaje enviado cuando el intermediario ejecuta el mensaje Will está en ASCII puro, no codificado en UTF.
El intermediario envía un mensaje CONNACK en respuesta a un mensaje CONNECT de un cliente.
Si el cliente no recibe un mensaje CONNACK del intermediario dentro de un periodo de tiempo "razonable", el cliente cierra la conexión del socket TCP/IP y reinicia la sesión abriendo el socket para el intermediario y emitiendo un mensaje CONNECT. Un periodo de tiempo "razonable" depende del tipo de aplicación y de la infraestructura de comunicaciones.