Quando si stabilisce una connessione socket TCP/IP tra il client e il broker, è richiesta una sessione a livello di protocollo. Si presuppone che la direzione della connessione sia dal client al broker e che il client supporti la funzionalità listener del broker.
Il formato dell'intestazione fissa è mostrato nella seguente tabella.
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
byte 1 | Tipo messaggio (1) | Indicatore DUP | Livello QoS | RETAIN | ||||
0 | 0 | 0 | 1 | x | x | x | x | |
byte 2 | Lunghezza rimanente |
Gli indicatori DUP, QoS e RETAIN non sono utilizzati nel messaggio CONNECT.
La Lunghezza rimanente è la lunghezza dell'intestazione variabile (12 byte) e la lunghezza del Payload. Questo può essere un campo a più byte.
Nella tabella di seguito viene mostrato un esempio del formato dell'intestazione variabile.
Descrizione | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
Nome protocollo | |||||||||
byte 1 | MSB della lunghezza (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
byte 2 | LSB della lunghezza (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 |
Numero versione protocollo | |||||||||
byte 9 | Versione (3) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Indicatori Connect | |||||||||
byte 10 | RETAIN Will (0) |
x | x | 0 | 0 | 1 | 1 | 1 | x |
Timer Keep Alive | |||||||||
byte 11 | MSB Keep Alive (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
byte 12 | LSB Keep Alive (10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
La prima stringa codificata UTF. L'ID Client (Identificativo Client) ha una lunghezza compresa tra 1 e 23 caratteri e identifica in modo univoco il client per il broker. Esso deve essere univoco tra tutti i client che si connettono ad un singolo broker ed è l'elemento chiave nella gestione dei messaggi di ID messaggio con livelli QoS 1 e 2. Se l'ID client contiene più di 23 caratteri, il broker risponde al messaggio CONNECT con un codice di ritorno CONNACK 2: identificativo respinto.
La seconda stringa codificata UTF. Il messaggio Will è pubblicato nell'argomento Will. Il livello QoS è definito dal campo QoS di Will e lo stato RETAIN è definito dall'indicatore RETAIN Will nell'intestazione variabile.
La terza stringa codificata UTF. Il messaggio Will definisce il contenuto del messaggio pubblicato nell'argomento Will se il client è inaspettatamente scollegato.
Sebbene il messaggio Will sia codificato UTF nel messaggio CONNECT, quando è pubblicato nell'argomento Will vengono inviati solo i byte del messaggio, non i primi due byte della lunghezza. Il messaggio inviato quando il broker esegue il messaggio Will è ASCII non elaborato, non codificato UTF.
Il broker invia un messaggio CONNACK in risposta ad un messaggio CONNECT da parte di un client.
Se il client non riceve un messaggio CONNACK dal broker entro un periodo di tempo "ragionevole", il client chiude la connessione socket TCP/IP e riavvia la sessione aprendo un socket per il broker e inoltrando un messaggio CONNECT. Un periodo di tempo "ragionevole" dipende dal tipo di applicazione e dall'infrastruttura delle comunicazioni.