該報文由服務端收到CONNECT數據包後發出,客戶端可以根據在合理的時間內是否收到該報文而決定是否斷開網絡連接。
該數據包不包含Payload部分,僅有FixedHeader 和 Variable Header,現對其詳述如下:
1. 固定包頭 FixedHeader
固定包頭共2個字節
byte1 = 0x20
byte2 = 0x02 剩餘長度共有2個字節
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
byte 1 |
MQTT Control Packet Type (2) |
Reserved |
||||||
|
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
byte 2 |
Remaining Length (2) |
|||||||
|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
2. 可變包頭Variable header
可變包頭包含兩個部分,應答標誌 ConnectAcknowledgement Flags和返回碼 Connect Return code,各佔一個字節
|
Description |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Connect Acknowledge Flags |
Reserved |
SP1 |
|||||||
byte 1 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
X |
Connect Return code |
|||||||||
byte 2 |
|
X |
X |
X |
X |
X |
X |
X |
X |
2.1 連接應答標誌 Connect Acknowledge Flags
該字節最低位(0bit)是會話存在標誌 Session Present Flag
如果服務端正常接受CleanSession=1 的CONNECT報文,則必須將此標誌設置爲0
如果服務單正常接受CleanSession=0 的CONNECT報文,則該標誌取決於服務端是否已經存儲所提供ClientId的會話狀態。如果已存儲,則SessionPresentFlag=1,如果沒有存儲則 SessionPresentFlag=0 。這是爲了確保客戶端和服務端的會話狀態一致。可以認爲是對返回碼的補充。
一旦會話的初始設置完成,具有存儲會話狀態的客戶端將期望服務器維持其存儲的會話狀態。 如果客戶端從服務器收到的 Session Present 值與預期不符,客戶端可以選擇是繼續會話還是斷開連接。 客戶端可以通過斷開連接、將 Clean Session 設置爲 1 的連接然後再次斷開連接來丟棄客戶端和服務器上的會話狀態。
如果服務器發送包含非零返回碼的 CONNACK 數據包,則它必須將會話存在設置爲 0
2.2 連接返回碼 Connect Return code
客戶端收到0x00 的返回碼才表示連接正常確認
枚舉值如下:
Value |
Return Code Response |
Description |
0 |
0x00 Connection Accepted |
Connection accepted |
1 |
0x01 Connection Refused, unacceptable protocol version |
The Server does not support the level of the MQTT protocol requested by the Client |
2 |
0x02 Connection Refused, identifier rejected |
The Client identifier is correct UTF-8 but not allowed by the Server |
3 |
0x03 Connection Refused, Server unavailable |
The Network Connection has been made but the MQTT service is unavailable |
4 |
0x04 Connection Refused, bad user name or password |
The data in the user name or password is malformed |
5 |
0x05 Connection Refused, not authorized |
The Client is not authorized to connect |
6-255 |
|
Reserved for future use |