MQTT控制報文格式 -- CONNACK (Acknowledge connection request)連接請求應答

該報文由服務端收到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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章