1、接入ip和port為:
正式環境:183.230.40.16:8883(tls加密端口,必須加密)
MQTT協議是構建于tcp/ip協議的一種應用層協議,它的全稱是(Message Queuing Telemetry Transport)。我們常見的http就是一種應用層協議。MQTT協議的優點在于可以使用極少的代碼和有限的帶寬去傳輸信息,因為其低開銷,低帶寬占用的及時通訊特點使其在物聯網,小型設備直接的通訊等中十分常見。
當用戶使用mqtt協議進行通訊時,會先和服務器進行連接也就是訂閱,成功連接后就會展開會話環節,在會話時我們會產生一個主題的概念,我們會告訴服務器我們的主題,服務器也會通過主題來給我們發送信息。
MQTT協議
每條MQTT的消息都包含一個固定的報頭,有些消息會攜帶一個可變報文頭和一個負荷。
MQTT協議分為三部分:固定頭,可變頭和負載。其中固定頭是必須包含的,可變頭與負載視使用者的情況而定。
固定頭和可變頭的主要作用有為設置消息的類型,用戶只會接收到想接收到的消息,負載則為確切的信息。
物聯網
固定頭顧名思義就是每個mqtt消息頭部都要包含的頭部,它最少可為兩字節。
固定頭格式
上表為我們展示了固定頭的格式。
字節一:
訊息類型占了第一個字節中的第7位到第4位,
訊息類型
DUP標志占字節一中的第3位。
當客戶端或服務器嘗試重新傳遞PUBLISH,PUBREL, SUBSCRIBE或UNSUBSCRIBE消息時,將設置此標志。這適用于QoS值大于零(0)且需要確認的消息。當DUP位置1時,變量頭包括消息ID。
接收者應將此標志視為有關消息是否先前已被接收的提示。不應依靠它來檢測重復項。
QoS等級占了第2到第1位,它表示了此PUBLISH消息傳遞的服務質量。
Qos等級
保留位于第0位,如果用戶在發送給服務端的信息中將該位置“1”,服務器就會保留發給給客戶端的信息。
字節二:
此字節表示當前消息中剩余的字節數,包括變量頭和有效載荷中的數據。
一個字節可最多表示127個字節的消息,這里可能就有人問了一個字節最大是1111 1111按道理來說應該是256才對啊?但因為mqtt協議最多可以以4字節的形式來表示剩余消息中的字節數,所以每個字節的第8位數字表示是否需要再使用一個字節來表示剩下消息中的字節數,如果在第8位置“1”就表示再使用一個字節,置“0”就表示不調用。
下表顯示了變量頭的格式示例:
可變頭
協議名稱(Protocol Name)
協議名稱位于MQTT CONNECT消息的變量標頭中 。此字段是UTF編碼的字符串。
協議版本(Protocol Version Number)
該字段是一個8位無符號值,表示客戶端使用的協議的修訂級別。
連接標志(Connect Flags)
Clean session,Will,Will QoS和保留標志存在于CONNECT消息的變量標頭中。
清理會話標志(Clean Session)
位置:連接標志字節的位1。
如果設置為(0),則服務器必須在斷開連接后存儲客戶端的訂閱。這包括繼續存儲已訂閱主題的QoS 1和QoS 2消息,以便在客戶端重新連接時可以傳遞它們。服務器還必須在連接斷開時保持正在傳送的運行中消息的狀態。在客戶端重新連接之前,必須保留此信息。
如果設置為(1),則服務器必須丟棄有關客戶端的任何先前維護的信息,并將連接視為“干凈”。當客戶端斷開連接時,服務器還必須放棄任何狀態。
預設置標志(Will flag)
位置:連接標志字節的位2。
Will消息定義當服務器在與客戶端通信期間遇到I / O錯誤,或者客戶端無法在Keep Alive計時器計劃內進行通信時,服務器將代表客戶端發布消息。服務器從客戶端接收到DISCONNECT消息后,不會觸發發送Will消息的操作。
如果設置了Will標志,則Will QoS和Will Retain字段必須出現在Connect標志字節中,而Will Topic和Will Message字段必須出現在有效負載中。
QoS
位置:連接標志字節的第4位和第3位。
如果客戶端非自愿斷開連接,則連接的客戶端在Will消息的Will QoS字段中指定QoS級別。Will消息在CONNECT消息的有效負載中定義。
如果設置了Will標志,則Will QoS字段為必填字段,否則其值將被忽略。
Will QoS的值為0(0x00),1(0x01)或 2(0x02)。下表顯示了Will QoS標志。
將保留標志(will retain)
位置:連接標志字節的第5位。
Will Retain標志表示客戶端是否意外斷開連接時,服務器是否應保留由服務器代表客戶端發布的Will消息。
如果設置了Will標志,則Will Retain標志是必需的,否則將被忽略。
用戶名和密碼標志(username and password flag)
位置:連接標志字節的第6位和第7位。
連接客戶端可以指定用戶名和密碼,并且設置標志位表示CONNECT消息的有效負載中包括用戶名和可選的密碼。
如果設置了“用戶名”標志,則“用戶名”字段是必填字段,否則將忽略其值。如果設置了密碼標志,則密碼字段是必填字段,否則其值將被忽略。在不提供用戶名的情況下提供密碼是無效的。
保持活動計時器(Keep Alive timer)
保持活動計時器(以秒為單位)定義了從客戶端收到的消息之間的最大時間間隔。它使服務器能夠檢測到與客戶端的網絡連接已斷開,而不必等待長時間的TCP / IP超時。客戶有責任在每個“保持活動”時間段內發送消息。在此時間段內沒有數據相關消息的情況下,客戶端會發送PINGREQ消息,服務器會通過PINGRESP消息進行確認 。
保持活動計時器可以通過MSB和LSB的順序進行設置,它們分別占有2個字節。
負荷
以下類型的MQTT命令消息具有有效負載:
連接
有效負載包含一個或多個UTF-8編碼的字符串。他們為客戶端指定了一個無歧義的標識符,一個Will主題和消息以及要使用的用戶名和密碼。除了第一個以外的所有都是可選的,它們的存在是根據變量頭中的標志確定的。
訂閱
有效負載包含客戶端可以訂閱的主題名稱和QoS級別的列表。這些字符串是UTF編碼的。
后退
有效負載包含已授權QoS級別的列表。這些是服務器管理員已允許客戶端訂閱特定主題名稱的QoS級別。授予的QoS級別以與相應的SUBSCRIBE消息中的主題名稱相同的順序列出。
那么,這就介紹完啦!
想要獲取更多物聯網相關信息的可以給作者留個關注哦。