在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

深度剖析MQTT協議的整個通信流程

單片機愛好者 ? 來源:單片機愛好者 ? 作者:劉韶軒 ? 2017-11-27 16:28 ? 次閱讀

MQTT,目前物聯網的最主要的協議,基本所有收費的云平臺都是基于MQTT協議,比如機智云,和所有的開放云平臺比如中國移動的oneNet、百度的云平臺也都支持MQTT的接入。雖然MQTT很火,但是目前對MQTT的很少,尤其是在如何移植到嵌入式上來。大部分的平臺商的做法都是跟模塊商合作把MQTT協議集成到WiFi模塊跟GPRS模塊里面,捆綁一銷售,不讓用戶過多的了解物聯網最核心的東西。

在還沒有深入去了解MQTT協議之前,總以為是非常復雜的東西,畢竟之前一直想深入,但無奈在浩淼的網絡里居然找不到太多實質的資料。隨時自己對物聯網的不斷探索,越來越了解整個物聯網的架構,對MQTT了解越來越深入。在這篇文章中將帶大家先了解MQTT的協議,在后面的文章,再帶大家怎么移植MQTT到STM32上,再到怎么搭建自己的MQTT服務器。

MQTT的基礎知識這些大家通過百度知道都可以了解到,這里主要深入去剖析MQTT協議的整個通信流程。但是如果只是看文字話,大家很難理解。因此我們借助Windows下的MQTT客戶端MQTT.fx跟網絡抓包工具Wireshark來一步步分析MQTT。

名字 流向 描述
CONNECT 1 C->S 客戶端請求與服務端建立連接
CONNACK 2 S->C 服務端確認連接建立
PUBLISH 3 CóS 發布消息
PUBACK 4 CóS 收到發布消息確認
PUBREC 5 CóS 發布消息收到
PUBREL 6 CóS 發布消息釋放
PUBCOMP 7 CóS 發布消息完成
SUBSCRIBE 8 C->S 訂閱請求
SUBACK 9 S->C 訂閱確認
UNSUBSCRIBE 10 C->S 取消訂閱
UNSUBACK 11 S->C 取消訂閱確認
PING 12 C->S 客戶端發送PING(連接保活)命令
PINGRSP 13 S->C PING命令回復
DISCONNECT 14 C->S 斷開連接

上面是MQTT的主要的通信協議,MQTT是基于TCP長連接,首先是先跟MQTT服務器建立TCP連接,然后發送登錄請求,要保持長連接,還要定時發心跳包跟服務保持連接。我們先用MQTT.fx來登錄開源的MQTT服務看看。

安裝好MQTT.fx(注意MQTT.fx是java開發的,電腦要安裝JDK才能安裝打開),一打開里面就默認有一個開源的MQTT服務M2M Eclipse。點開旁邊的齒輪(設置按鈕)可以看服務器的域名m2m.eclipse.org,端口號1833(MQTT的默認端口號),下面還有個Keep Alive Interval就是心跳的時間。再打開Wireshark,選擇要捕獲的網絡接口,然后再過濾器輸入tcp.port==1883后回車,只捕獲1883這個端口號的數據包。再點下MQTT.fx的Connect連接服務器,就可以看到Wireshark捕到的數據


可以看到MQTT協議中本地給服務器發送了一個Connect登錄請求,然后,服務器回應一個ACK,表示登錄成功。再雙擊Connect Command這條數據包,我們可以看到詳細的數據包數據

上面的解析出來的MQTT協議包的內部,下面是對應的二進制數據,這里我們可以對照附件上資料去了解協議的內容。看這里,大家想是不是如果自己用TCP,再封裝發送下面的二進制數據就可以完成MQTT的登錄了呢?拿出網絡調試助手來,ping下m2m.eclipse.org得到IP地址,用端口號1883連接,然后發送Wireshark捕到的MQTT登錄協議的二進制數據,可以看到到服務器回應了20 02 00 00表示登錄成功。

再往下Wireshark捕到的數據包,可以看到每隔一定的時間,本地向服務器發送Ping Request心跳包,相應的服務器也會回應Ping Response。

接下來看MQTT最核心的傳輸協議Subcribe(定閱)和Publish(推送)。簡單來說就是客戶端口(比如物聯網硬件)Subcribe一個topic(主題)后,其它的客戶端(比如手機)向服務器往這個topic推送Payload(有效數據),服務器就會把Payload轉發給定閱這個topic的客戶端(硬件)。

這樣就實現了客戶端(手機)通過服務器(MQTT)遠程發送數據給客戶端(物聯網硬件)。一樣用MQTT.fx來實驗。先點Subscribe然后面下面輸入led再點旁邊的Subscribe按鈕來定閱led這個topic。然后回到Publish,一樣在輸入框輸入led這個topic,下面大框就是輸入要推送的數據,輸入on,再點Publish按鈕,就把數據推送出去了。再回到Subcribe界面來可以看到右邊已經收到有推送過來的數據。如果這是硬件收到這個指令,就可以去控制點亮LED,我們就實現遠程控制LED燈。

想深入了解MQTT這一個過程的話,我們再回到Wireshark,來看看捕獲到的數據

具體的就不詳細的分析了,大家看附件的文檔來對照就可以很容易了解到。

最后來了解下QoS(定閱等級),分0、1、2三個等級,簡單來說是等級越高越可靠。QoS0,就是推送之后就完事了,至于對方有沒有收到,收到是什么,數據有沒有丟失,都不管。

QoS1的話就是你收到推送后,你還得返回一個puback給對方,告訴對方收到了,不然對方會以為你沒收到,隔一段時間后重新給你推送,直到你給對方返回一個Puback為止。

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

    關注

    2928

    文章

    46029

    瀏覽量

    389605
  • MQTT
    +關注

    關注

    5

    文章

    673

    瀏覽量

    23558

原文標題:物聯網核心之MQTT

文章出處:【微信號:gh_dae0718828df,微信公眾號:gh_dae0718828df】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    RK3568-MQTT通信協議案例

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

    TLT507-MQTT通信協議案例

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

    MQTT協議通信 - 第1節

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

    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

    資料共享:嵌入式網絡那些事LwIP協議深度剖析與實戰演練

    嵌入式網絡那些事LwIP協議深度剖析與實戰演練
    發表于 06-12 13:43

    C語言深度剖析

    C語言深度剖析[完整版].pdfC語言深度剖析[完整版].pdf (919.58 KB )
    發表于 03-19 05:11

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

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

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

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

    MQTT協議的相關資料分享

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

    MQTT協議的相關資料推薦

    本篇目標一、學習MQTT協議二、發送溫度濕度到OneNET準備材料感覺麻煩的小伙伴請移步到文末,里面有整個工程的鏈接。一、合泰例程鏈接:https://leoeinstein.lanzous.com
    發表于 01-25 06:19

    mqtt-v3.1.1版協議

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

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

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

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

    隨著智能汽車的發展,車云通信的功能場景及數據量也逐漸增多,具有輕量化、可靠性等特點的MQTT協議成為很多OEM車云通信協議的選擇。本文主要介紹。 什么是
    的頭像 發表于 01-08 10:24 ?951次閱讀
    基于<b class='flag-5'>MQTT</b><b class='flag-5'>協議</b>的車云<b class='flag-5'>通信</b>設計
    主站蜘蛛池模板: 台湾一级毛片 | 国产无圣光高清一区二区 | xxxx黄色| 欧美一级视频在线观看 | 天天插狠狠干 | 91成人午夜性a一级毛片 | 在线天堂bt中文www在线 | 乌克兰毛片| 可以免费观看的黄色网址 | 精品卡1卡2卡三卡免费视频 | 三级精品| 色综合成人 | 久久久久久久国产视频 | 激情五月婷婷综合网 | 国产免费久久精品 | 四虎影在永久地址在线观看 | 天天涩综合 | 狠狠涩| 男啪女色黄无遮挡免费观看 | 在线a免费观看最新网站 | 午夜伦y4480影院中文字幕 | 亚州国产精品精华液 | 曰本裸色私人影院噜噜噜影院 | 日韩欧美一区二区三区不卡视频 | 波多野吉衣一区二区三区在线观看 | 婷婷综合丁香 | 久久亚洲国产精品五月天 | 美女黄色在线看 | 757福利影院合集3000 | 色婷婷视频在线 | 欧美黄色免费大片 | 亚洲亚洲人成网站在线观看 | 免费人成在线 | 免费一区二区视频 | 久久综合久久88 | 能可以直接看的av网址 | 免费观看黄a一级视频日本 免费观看黄色网页 | 欧美网站黄 | 久久精品草 | 国内精品视频免费观看 | 欧洲成人r片在线观看 |