MQTT初始篇筆記整理

MQTT簡介

  • MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸),基於TCP/IP 協議棧而構建,雖然叫消息隊列遙測傳輸,可是她與消息隊列毫無關係,她是一個IBM開發的客戶端服務端架構的 發佈/訂閱模式 的消息傳輸協議;她的設計思想是輕巧、開放、簡單、規範、易於實現,所以MQTT比較適合在物聯網環境(IoT,Internet of Things)以及機器與機器的通訊(M2M,Machine to Machine)等受限的環境下。

MQTT的優點

  • MQTT是一種輕量級、靈活的網絡協議,輕量級保證其可在嚴重受限的設備硬件和高延遲/帶寬有限的網絡上實現;她的靈活性使得IoT設備和服務的多樣化應用場景提供支持成爲可能
    • 一、使用發佈/訂閱消息模式,提供一對多的消息發佈,解除應用程序耦合;
    • 二、對負載內容屏蔽的消息傳輸;
    • 三、使用 TCP/IP 提供網絡鏈接;
    • 四、有三種消息發佈服務質量:
      • 「至多一次」 服務質量級別0 QoS0,消息將最多傳遞一次,消息發佈徹底依賴底層 TCP/IP 網絡。會發生消息丟失或重複。這一級別可用於以下狀況,環境傳感器數據,丟失一次讀記錄無所謂,由於不久後還會有第二次發送。她是最快的傳輸方式,有時成爲"觸發並忘記"。消息最多傳遞一次
      • 「至少一次」 服務質量級別1 QoS1,消息會始終至少傳遞一次,確保消息到達,但消息重複可能會發生。
      • 「只有一次」 服務質量級別2 QoS2,確保消息到達一次。這一級別可用於以下狀況,在計費系統中,消息重複或丟失會致使不正確的結果。她是最安全也是最慢的傳輸方式。
    • 五、小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以下降網絡流量;
    • 六、使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制; 

MQTT與其餘網絡協議的對比

  • 與HTTP協議對比
    • 1. HTTP 是一種同步協議。客戶端須要等待服務器響應。Web 瀏覽器具備這樣的要求,但它的代價是犧牲了可伸縮性。在 IoT 領域,大量設備以及極可能不可靠或高延遲的網絡使得同步通訊成爲問題。異步消息協議更適合 IoT 應用程序。傳感器發送讀數,讓網絡肯定將其傳送到目標設備和服務的最佳路線和時間。
    • 2. HTTP 是單向的。客戶端必須發起鏈接。在 IoT 應用程序中,設備或傳感器一般是客戶端,這意味着它們沒法被動地接收來自網絡的命令。
    • 3. HTTP 是一種 1-1 協議。客戶端發出請求,服務器進行響應。將消息傳送到網絡上的全部設備上,不但很困難,並且成本很高,而這是 IoT 應用程序中的一種常見使用狀況。
    • 4. HTTP 是一種有許多標頭和規則的重量級協議。它不適合受限的網絡。
  • 與AMQP對比
    • 企業中間件系統中使用的最流行的消息協議被稱爲 AMQP(高級消息排隊協議)。可是,在高性能環境中,計算能力和網絡延遲一般不是問題。AMQP 致力於在企業應用程序中實現可靠性和互操做性。它擁有龐大的特性集,但不適合資源受限的 IoT 應用程序。
  • 與XMPP對比
    • XMPP(Extensible Messaging and Presence Protocol,可擴展消息和狀態協議)是一種對等即時消息 (IM) 協議。它高度依賴於支持 IM 用例的特性,好比存在狀態和介質鏈接。與 MQTT 相比,它在設備和網絡上須要的資源都要多得多。 

發佈訂閱模型

  • MQTT 協議在網絡中定義了兩種實體類型:一個消息代理和一些客戶端。代理是一個服務器,它從客戶端接收全部消息,而後將這些消息路由到相關的目標客戶端。客戶端是可以與代理交互來發送和接收消息的任何事物。客戶端能夠是現場的 IoT 傳感器,或者是數據中心內處理 IoT 數據的應用程序。
    • 1.客戶端鏈接到代理。它能夠訂閱代理中的任何消息 「主題」。此鏈接能夠是簡單的 TCP/IP 鏈接,也能夠是用於發送敏感消息的加密 TLS 鏈接。
    • 2.客戶端經過將消息和主題發送給代理,發佈某個主題範圍內的消息。
    • 3.代理而後將消息轉發給全部訂閱該主題的客戶端。 
  • 由於 MQTT 消息是按主題進行組織的,因此應用程序開發人員能靈活地指定某些客戶端只能與某些消息交互。就是訂閱相應的主題後纔會收到相應的主題下的消息。 

MQTT 控制報文格式

  • 2.1 MQTT控制報文的結構 Structure of an MQTT Control Packet 
  • 2.2 固定報頭 Fixed header html

  • 2.2.1 MQTT控制報文的類型 MQTT Control Packet typegit

 

  • 2.2.2 標誌 Flags github

  • 控制報文字類型是從值區分爲0-15依次對應 Reserved Connect ConnAck Publish PubRec PubComp Subscribe SubAck Unsubscribe PingReq PingResp DisConnect Reserved 相應的Flags 有對應的數據瀏覽器

學習網址

若有不當之處 敬請指出 如需轉載請註明出處 謝謝

相關文章
相關標籤/搜索