IoT 七 MQTT協議詳解

2021-08-21 05:06:37 字數 1866 閱讀 8194

mqtt是哪一層的協議?

mqtt訊息格式

固定報文頭(fixed header)

可變報文頭(variable header)

有效負荷(payload)

mqtt的主要特性

mqtt的訊息型別(message type)

訊息質量(qos)

qos 1:至少分發一次。伺服器的訊息接收由puback訊息進行確認,如果通訊鏈路或傳送裝置異常,或者指定時間內沒有收到確認訊息,傳送端會重發這條在訊息頭中設定了dup位的訊息。

qos 2:只分發一次。這是最高端別的訊息傳遞,訊息丟失和重複都是不可接受的,使用這個服務質量等級會有額外的開銷。 

通過下面的例子可以更深刻的理解上面三個傳輸質量等級。

遺願標誌(will flag)

連線保活心跳機制(keep alive timer)

mqtt其他特點

非同步發布/訂閱實現

發布者和訂閱者不需要直接互動;

二進位制格式實現

mqtt的安全

客戶端和服務端的靜態資料可能是可訪問的(可能會被修改);

協議行為可能有***(如計時器攻擊);

拒絕服務攻擊;

通訊可能會被攔截、修改、重定向或者洩露;

虛假控制報文注入。

傳輸層:類似於https,mqtt基於tcp連線,也可以加上一層tls,傳輸層使用tls加密是確保安全的乙個好手段,可以防止中間人攻擊。客戶端證書不但可以作為裝置的身份憑證,還可以用來驗證裝置。

網路層:如果有條件的話,可以通過拉專線或者使用vpn來連線裝置與mqtt**,以提高網路傳輸的安全性。

認證傳輸層:傳輸層可以使用tls,除了加密通訊,還可以使用x509證書來認證裝置。

選擇使用者資料格式

十六進製制/二進位制

字串json

資料由逗號分隔;

花括號儲存物件;

方括號儲存陣列。

sprintf(buf, "", "hello world!", 12345);

xml小結

有關mqtt的雲平台和工具

支援mqtt的雲平台

mqtt伺服器

emq:emq 2.0,號稱百萬級開源mqtt訊息伺服器,基於erlang/otp語言平台開發,支援大規模連線和分布式集群,發布訂閱模式的開源mqtt訊息伺服器。

hivemq:乙個企業級的mqtt**,主要用於企業和新興的機器到機器m2m通訊和內部傳輸,最大程度的滿足可伸縮性、易管理和安全特性,提供免費的個人版。hivemq提供了開源的外掛程式開發包。

mosquitto:一款實現了訊息推送協議mqtt v3.1的開源訊息**軟體,提供輕量級的、支援可發布/可訂閱的訊息推送模式。

mqtt除錯工具

mqtt與其他協議

mqtt與tcp socket

mqtt與http

mqtt與xmpp

xmpp基於jid的點對點訊息傳輸;mqtt協議基於主題(topic)發布\訂閱模式,訊息路由更為靈活;

xmpp協議採用xml承載報文,二進位制必須進行base64編碼或其他方式處理;mqtt協議未定義報文內容格式,可以承載json、二進位制等不同型別報文,開發者可以針對性的定義報文格式;

mqtt協議支援訊息收發確認和qos保證,有更好的訊息可靠性保證;而xmpp主協議並未定義類似機制;

在嵌入式裝置開發中大多使用的是c語言開發,c語言解析xml是非常困難的。mqtt基於二進位制實現且未定義報文內容格式,可以很好的兼顧嵌入式c語言開發者;而xmpp基於xml,開發者需要配合協議格式,不能靈活開發。 

綜上所述,在嵌入式裝置中,由於需要乙個靈巧簡潔,對裝置開發者和服務端開發者都友好的協議,mqtt比xmpp更具有優勢。

mqtt與coap

小結

MQTT 物聯網 IoT 訊息推送協議

mqtt message queuing telemetry transport,訊息佇列遙測傳輸協議 是一種構建於tcp ip協議的 輕量級 訊息傳輸協議,它基於發布 訂閱 publish subscribe 模式,由ibm在1999年發布。對於需要較小 占用空間或網路頻寬有限的遠端連線非常有用,...

MQTT協議詳解及開發教程(一)MQTT協議概述

推薦一款穩定的基於c編寫的mqtt client開源庫 cmqtt mqtt協議目前在物聯網技術中應用非常廣泛,各種公有雲的iot平台通訊基本上都是按照該協議來實現的,這裡先簡單的做個總結 1 mqtt協議框架及內容比較標準,可以認為是 物聯網行業的modbus協議 2 不同廠家的mqtt 伺服器或...

MQTT詳解以及在IoT中的應用

mqtt message queuing telemetry transport,訊息佇列遙測傳輸 是ibm開發的乙個即時通訊協議,有可能成為物聯網的重要組成部分。該協議支援所有平台,幾乎可以把所有聯網物品和外部連線起來,被用來當做感測器和制動器的通訊協議。mqtt是基於客戶端 伺服器的二進位制的發...