connack資料報是伺服器響應從客戶端收到的connect資料報傳送的資料報。從伺服器傳送到客戶端的第乙個資料報必須是connack資料報 [mqtt-3.2.0-1]。
如果客戶端在合理的時間內沒有從伺服器收到connack資料報,則客戶端應該關閉網路連線。「合理」的時間量取決於應用程式的型別和通訊基礎設施。
固定報頭格式如圖3.8所示 - connack packet固定報頭。
圖3.8 - connack packet固定頭
位
7
6
5
4
3
2
1
0
位元組1mqtt控制包型別(2)
保留的001
0000
0位元組2
剩餘長度(2)00
0000
10剩餘長度 字段
這是變數頭的長度。對於connack packet,其值為2。
可變報頭格式如圖3.9所示 - connack packet變數報頭。
圖3.9 - connack packet變數頭
描述
7
6
5
4
3
2
1
0
連線確認標誌 connect acknowledge flags
保留的sp 1
位元組1000
0000
x連線返回**
位元組2connect return codexx
***x
xx3.2.2.1 connect acknowledge flags 連線確認標誌
位元組1是「connect acknowledge flags」。位7-1保留,必須設定為0. 位0(sp 1)是會話存在標誌。
3.2.2.2 session present
位置:connect acknowledge flags的第0位。
如果伺服器接受將cleansession設定為1的連線,則除了在connack資料報 [mqtt-3.2.2-1]中設定零返回碼之外,伺服器必須在connack資料報中將session present設定為0。
如果伺服器接受將cleansession設定為0的連線,則session present中設定的值取決於server是否已為所提供的客戶端id儲存了session狀態。如果伺服器已儲存會話狀態,則它必須在connack資料報 [mqtt-3.2.2-2] 中將session present設定為1 。 如果伺服器沒有儲存的會話狀態,它必須在connack資料報中將session present設定為0。這是在connack資料報中設定零返回碼的補充[mqtt-3.2.2-3]
。session present標誌使客戶端能夠確定客戶端和伺服器是否具有關於是否已儲存會話狀態的一致檢視。
完成會話的初始設定後,具有儲存會話狀態的客戶端將期望伺服器保持其儲存的會話狀態。如果客戶端從伺服器收到的會話存在的值不符合預期,則客戶端可以選擇是繼續會話還是斷開連線。客戶端可以通過斷開連線,將clean session設定為1然後再次斷開連線來丟棄客戶端和伺服器上的會話狀態。
如果伺服器傳送包含非零返回碼的connack資料報,則必須將session present設定為0 [mqtt-3.2.2-4]
。3.2.2.3 connect return code 連線返回碼
變數頭中的位元組2。
表3.1 - 連線返回**值中列出了單位元組無符號連線返回**欄位的值。如果伺服器收到格式良好的connect資料報,但伺服器由於某種原因無法處理它,則伺服器應該嘗試從該錶傳送包含相應的非零連線返回碼的connack資料報。如果伺服器傳送包含非零返回碼的connack資料報,則它必須關閉網路連線[mqtt-3.2.2-5]。
表3.1 - 連線返回**值
值
返回**響應
描述0
0x00連線已接受
接受連線
10x01連線拒絕,不可接受的協議版本
伺服器不支援客戶端請求的mqtt協議級別
20x02連線被拒絕,識別符號被拒絕
客戶端識別符號是正確的utf-8,但伺服器不允許
30x03拒絕連線,伺服器不可用
已建立網路連線但mqtt服務不可用
40x04連線被拒絕,使用者名稱或密碼錯誤
使用者名稱或密碼中的資料格式不正確
50x05連線被拒絕,未經授權
客戶端無權連線
6-255
保留供將來使用
如果表3.1 - 連線返回**值中 列出的返回**均不適用,則伺服器必須關閉網路連線而不傳送connack [mqtt-3.2.2-6]
。connack資料報沒有payload。
IOT MQTT協議 控制資料報 PING
pingreq資料報從客戶端傳送到伺服器。它可以用於 在沒有任何其他控制資料報從客戶端傳送到伺服器的情況下,向伺服器指示客戶端處於活動狀態。請求伺服器響應以確認它處於活動狀態。練習網路以指示網路連線處於活動狀態。此資料報用於keep alive處理,有關詳細資訊,請參閱第3.1.2.10節。圖3.3...
ICMP協議資料報捕獲
今天使用wireshark除錯乙個ping功能,使用icmp過濾串,發現ping本地子網乙個不存在的ip位址,wireshark沒有捕獲到任何的icmp資料報。而當ping另外乙個子網不存在的ip位址,wireshark捕獲到了icmp資料。分析如下 一.ping本地子網的ip位址 1.獲取目標ip...
python UDP 資料報協議
基於udp協議通訊的套接字 服務端1 from socket import 23 server socket af inet,sock dgram sock dgram 資料報協議 4 server.bind 127.0.0.1 8080 56 print start.7while true 8 d...