衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MQTT協議通信過程

汽車電子技術 ? 來源:物聯網IoT開發 ? 作者:杰杰mcu ? 2023-02-28 16:07 ? 次閱讀

MQTT連接服務器

客戶端到服務器的網絡連接建立后,客戶端發送給服務器的第一個報文必須是CONNECT報文

在一個網絡連接上,客戶端只能發送一次CONNECT報文,如果出現第二個CONNECT 報文,按照協議標準,服務器會將第二個CONNECT報文當作協議違規處理并斷開客戶端的連接。

對于正常的連接請求,服務器必須產生應答報文,如果無法建立會話,服務器應該在應答報文中報告對應的錯誤代碼。

圖片

mqtt007

MQTT訂閱主題

客戶端向服務器發送SUBSCRIBE報文用于創建一個或多個訂閱。

在服務器中,會記錄這個客戶關注的一個或者多個主題,當服務器收到這些主題的PUBLISH報文的時候,將分發應用消息到與之匹配的客戶端中。

SUBSCRIBE報文支持通配符,也為每個訂閱指定了最大的QoS等級,服務器根據這些信息分發應用消息給客戶端。

SUBSCRIBE報文擁有固定報頭、可變報頭、有效載荷。

當服務器收到客戶端發送的一個SUBSCRIBE報文時,必須向客戶端發送一個SUBACK報文響應,同時SUBACK報文必須和等待確認的SUBSCRIBE報文有相同的報文標識符。

如果服務器收到一個SUBSCRIBE報文,報文的主題過濾器與一個現存訂閱的主題過濾器相同,那么必須使用新的訂閱徹底替換現存的訂閱。新訂閱的主題過濾器和之前訂閱的相同,但是它的最大QoS值可以不同。與這個主題過濾器匹配的任何現存的保留消息必須被重發,但是發布流程不能中斷。

圖片

mqtt008

SUBSCRIBE報文的有效載荷包含了一個主題過濾器列表,它們表示客戶端想要訂閱的主題,SUBSCRIBE報文有效載荷中的主題過濾器列表必須是UTF-8字符串。

服務器應該支持包含通配符的主題過濾器。如果服務器選擇不支持包含通配符的主題過濾器,必須拒絕任何包含通配符過濾器的訂閱請求。

每一個過濾器后面跟著一個字節,這個字節被叫做服務質量要求(Requested QoS)。它給出了服務器向客戶端發送應用消息所允許的最大QoS等級。

MQTT發布消息

PUBLISH控制報文是指從客戶端向服務器或者服務器向客戶端發送一個應用消息。其實從服務器分發的報文給訂閱者,也是屬于PUBLISH控制報文。

服務質量等級 QoS

QoS的值表示應用消息分發的服務質量等級保證,在不同的服務質量等級中,PUBLISH控制報文的處理方式也是不同的,而且PUBLISH報文的接收者(可以是服務器,也可以是客戶端)必須按照根據PUBLISH報文中的QoS等級發送對應的應答報文。

PUBLISH報文固定報頭的bit2-bit1位表示服務質量等級:

圖片

MQTT按照這里定義的服務質量 (QoS) 等級分發應用消息。服務器分發應用消息給多個客戶端(訂閱者)時,每個客戶端獨立處理。從發布者發布消息到接受者,分發的消息服務質量可能是不同的,這取決于訂閱者訂閱主題時指定的服務質量等級。而對于發布者而言,發布消息時就指定了服務質量等級。

QoS0的PUBLISH控制報文

消息的分發依賴于底層網絡的能力。服務器不會發送響應,發布者也不會重試,它在發出這個消息的時候就立馬將消息丟棄,這個消息可能送達一次也可能根本沒送達。

發布者必須發送QoS等于0,DUP等于0的PUBLISH報文。

在服務器接受PUBLISH報文時要將消息分發給訂閱該主題(消息)的訂閱者。

圖片

mqtt009

QoS1的PUBLISH控制報文

服務質量確保消息至少送達一次,甚至可能被多次處理。QoS1的PUBLISH報文的可變報頭中包含一個報文標識符,需要PUBACK報文確認。

發布者在每次發送新的應用消息都必須分配一個未使用的報文標識符,在發布消息的同時將消息存儲起來,等待服務器的應答,直到從接收者那收到對應的PUBACK報文。發送的PUBLISH報文必須包含報文標識符且QoS等于1,DUP等于0。

一旦發布者收到來自服務器的PUBACK報文后,這個報文標識符就可以重復使用。

接收者響應的PUBACK報文必須包含一個報文標識符,這個標識符來自接收到的PUBLISH報文。在發送了PUBACK報文之后,接收者必須將任何包含相同報文標識符的入站PUBLISH報文當作一個新的消息,并忽略它的DUP標志的值。

圖片

mqtt010

QoS2的PUBLISH控制報文

這是最高等級的服務質量,必須保證有且只有處理一次消息,消息丟失和重復都是不可接受的。使用這個服務質量等級會有額外的開銷。

QoS2的消息可變報頭中有報文標識符。

QoS2的PUBLISH報文的接收者使用一個兩步確認過程來確認收到。

發送者必須給要發送的新應用消息分配一個未使用的報文標識符。發送的PUBLISH報文必須包含報文標識符且報文的QoS等于2,,DUP等于0。

在消息發出去后,需要將這個消息存儲起來,而且必須將這個PUBLISH報文看作是未確認的,直到從接收者那收到對應的PUBREC報文。

當發布者收到的PUBREC報文后必須發送一個PUBREL報文。PUBREL報文必須包含與原始PUBLISH報文相同的報文標識符。

而且發布者還必須必須將這個PUBREL報文看作是未確認的,直到從接收者那收到對應的PUBCOMP報文。一旦發送了對應的PUBREL報文就不能重發這個PUBLISH報文。

所以就如下圖所示,在發布消息的時候,立馬存儲消息,在收到PUBREC報文后必須將存儲的消息丟棄掉,然后存儲報文標識符,與此同時還要將PUBREL報文發送出去,最后在收到PUBCOMP報文后,才丟棄存儲的報文標識符。

圖片

mqtt011

當然啦,對應分發消息也是比較復雜的,它一般有兩種處理方案,每一種方案都要確保消息有且只有處理一次。

接收者(此處指服務器)響應的PUBREC報文必須包含報文標識符,這個標識符來自接收到的PUBLISH報文。

發送PUBREC報文后,在收到對應的PUBREL報文之前,接收者可以將消息分發給訂閱者,但是必須要存儲報文標識符(方案1)。

當然,它在這種情況下,也可以存儲消息,直到收到PUBREL報文才將消息分發到訂閱者(方案2)。

而當它收到PUBREL報文后,它必須發送PUBCOMP報文響應發布者,該報文必須包含與PUBREL報文相同的標識符。

與此同時,它可以丟棄存儲的報文標識符(方案1),而不必再分發應用消息給訂閱者。

如果此前沒有分發應用消息給訂閱者(方案2),那么此時需要分發應用消息給訂閱者,然后丟棄消息。

在接收者發送PUBCOMP報文之后,接收者必須將包含相同報文標識符的任何后續PUBLISH報文當作一個新的發布。

取消訂閱

客戶端發送UNSUBSCRIBE報文給服務器,用于取消訂閱主題。

UNSUBSCRIBE報文固定報頭的第3,2,1,0位是保留位且必須分別設置為0,0,1,0。否則服務器必須認為任何其它的值都是不合法的并關閉網絡連。具體的描述可以看協議文檔。

UNSUBSCRIBE報文的有效載荷包含客戶端想要取消訂閱的主題過濾器列表。UNSUBSCRIBE報文中的主題過濾器必須是連續打包的UTF-8編碼字符串。

UNSUBSCRIBE報文的有效載荷必須至少包含一個主題過濾器列表,而且這個主題過濾器是已經被客戶端訂閱的,否則的話沒有訂閱也就沒有取消訂閱一說了。如果一個UNSUBSCRIBE報文沒有有效載荷是違反協議的標準的,服務器也不會去處理它。

而對于服務器刪除了一個訂閱,那么它將不會再分發該主題的消息到這個客戶端中。而且它必須完成分發任何已經開始往客戶端發送的QoS1和QoS2的消息,以保證消息的服務質量。

然后服務器必須發送UNSUBACK報文來響應客戶端的UNSUBSCRIBE請求。UNSUBACK報文必須包含和UNSUBSCRIBE報文相同的報文標識符。即使沒有刪除任何主題訂閱(客戶端取消訂閱的主題未被訂閱),服務器也必須發送一個UNSUBACK響應。

圖片

mqtt012

斷開連接

DISCONNECT報文是客戶端發給服務端的最后一個控制報文。表示客戶端正常斷開連接。

DISCONNECT報文的固定報頭保留位必須全為0。

客戶端發送DISCONNECT報文之后必須關閉網絡連接,不能通過那個網絡連接再發送任何控制報文。

服務端在收到DISCONNECT報文時必須丟棄任何與當前連接關聯的未發布的遺囑消息。而且當客戶端沒有關閉網絡連接的時候服務器應該主動去關閉網絡連接。

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網絡
    +關注

    關注

    14

    文章

    7599

    瀏覽量

    89241
  • 客戶端
    +關注

    關注

    1

    文章

    290

    瀏覽量

    16761
  • Connector
    +關注

    關注

    0

    文章

    13

    瀏覽量

    8627
收藏 人收藏

    評論

    相關推薦

    C語言代碼封裝MQTT協議報文,了解MQTT協議通信過程

    MQTT是一種輕量級的通信協議,適用于物聯網(IoT)和低帶寬網絡環境。它基于一種“發布/訂閱”模式,其中設備發送數據(也稱為 “發布”)到經紀人(稱為MQTT代理),這些數據被存儲,并在需要時被
    的頭像 發表于 05-17 09:24 ?3540次閱讀

    RK3568-MQTT通信協議案例

    RK3568-MQTT通信協議案例
    的頭像 發表于 01-19 15:31 ?1903次閱讀
    RK3568-<b class='flag-5'>MQTT</b><b class='flag-5'>通信協議</b>案例

    TLT507-MQTT通信協議案例

    TLT507-MQTT通信協議案例
    的頭像 發表于 01-26 10:06 ?931次閱讀
    TLT507-<b class='flag-5'>MQTT</b><b class='flag-5'>通信協議</b>案例

    MQTT協議通信 - 第1節

    通信MQTT協議
    充八萬
    發布于 :2023年09月01日 14:37:46

    MQTT協議通信 - 第4節

    通信MQTT協議
    充八萬
    發布于 :2023年09月01日 14:40:16

    MQTT協議通信 - 第11節

    通信MQTT協議
    充八萬
    發布于 :2023年09月01日 14:46:07

    MQTT協議通信 - 第13節

    通信MQTT協議
    充八萬
    發布于 :2023年09月01日 14:47:48

    MQTT協議通信 - 第14節

    通信MQTT協議
    充八萬
    發布于 :2023年09月01日 14:48:38

    請問MQTT協議的整個通信流程是怎樣的?

    請問MQTT協議的整個通信流程是怎樣的?
    發表于 10-27 06:27

    如何利用mqtt協議實現的通信服務?

    如何利用mqtt協議實現的通信服務?
    發表于 10-27 06:41

    MQTT協議學習過程記錄

    學習mqtt協議(一)介紹1--6步內容第一步 了解全局第二步 確定范圍第三步 定義目標第四步 尋找資源第五步 創建學習計劃第六步 篩選資源總結介紹采用10步學習法學習mqtt協議,根
    發表于 01-07 06:32

    MQTT協議的相關資料分享

    前言搞智能家居就不得不說到網絡通信,因為我們需要通過各種終端去控制我們的智能家居設備,所以網絡通信這方面是必備的.而在市面上比較流行的網絡通訊協議就是MQTT
    發表于 01-20 07:11

    mqtt-v3.1.1版協議

    mqtt-v3.1.1版協議,英文版,時間2014.10.29,物聯網通信協議MQTT
    發表于 10-29 11:22 ?0次下載

    MQTT 協議:機器對機器通信的解決方案?

    MQTT 協議:機器對機器通信的解決方案?
    的頭像 發表于 01-05 09:43 ?887次閱讀

    基于MQTT協議的車云通信設計

    隨著智能汽車的發展,車云通信的功能場景及數據量也逐漸增多,具有輕量化、可靠性等特點的MQTT協議成為很多OEM車云通信協議的選擇。本文主要介紹。 什么是
    的頭像 發表于 01-08 10:24 ?244次閱讀
    基于<b class='flag-5'>MQTT</b><b class='flag-5'>協議</b>的車云<b class='flag-5'>通信</b>設計
    百家乐官网赌博博彩赌博网| 百家乐有公式| 百家乐官网巴黎| 扶风县| 世界顶级赌场排名| 威尼斯人娱乐城是波音| 百家乐英皇娱乐城| 百家乐平台要多少钱| 澳门百家乐自杀| 单机百家乐官网的玩法技巧和规则| 大发888开户注册平台| 百家乐作弊| 百家乐光纤冼牌机| 百家乐网络赌博网| 乐天堂百家乐娱乐平台| 澳门百家乐有没有假| 百家乐赌场破解方法| 网上百家乐骗局| 7人百家乐桌子| 做百家乐网上投注| 百家乐官网台布哪里有卖| 澳门百家乐官网技巧经| 百家乐官网百胜注码法| 百家乐官网赌场策略| 百家乐官网2号技术| 百家乐官网大西洋城| 怎么看百家乐官网的路| 百家乐娱乐城代理| 承德市| 百家乐官网视频游戏账号| 赌博百家乐官网判断决策| 百家乐官网真人百家乐官网赌博| 真人百家乐官网开户须知| 百家乐官网半圆桌| 玩百家乐官网的玩法技巧和规则 | 百家乐官网赌博在线娱乐| 澳门百家乐官网赌| 百家乐路单免费下载| 德晋百家乐的玩法技巧和规则 | 丽都百家乐的玩法技巧和规则| 玩百家乐新2娱乐城|