【MQTT-協議原理】

MQTT-協議原理

  • ■ MQTT-協議原理
  • ■ MQTT-服務器 稱為"消息代理"(Broker)
  • ■ MQTT協議中的訂閱、主題、會話
    • ■ 一、訂閱(Subscription)
    • ■ 二、會話(Session)
    • ■ 三、主題名(Topic Name)
    • ■ 四、主題篩選器(Topic Filter)
    • ■ 五、負載(Payload)
  • ■ MQTT協議數據包結構
    • ■ (1)固定報頭(Fixed header)
      • ■ 1.1 MQTT控制報文的類型
      • ■ 1.2 報文類型標志位
      • ■ 1.3 剩余長度
    • ■ (2)可變報頭(Variable header)
    • ■ (3)消息體(Payload)

■ MQTT-協議原理

MQTT協議中有三種身份: 發布者(Publish)、 代理(Broker)(服務器)、 訂閱者(Subscribe)。
MQTT傳輸的消息分為: 主題(Topic) 負載(payload)

■ MQTT-服務器 稱為"消息代理"(Broker)

MQTT服務器以稱為"消息代理"(Broker),可以是一個應用程序或一臺設備。
它是位于消息發布者和訂閱者之間,它可以:
(1)接受來自客戶的網絡連接;
(2)接受客戶發布的應用信息;
(3)處理來自客戶端的訂閱和退訂請求;
(4)向訂閱的客戶轉發應用程序消息。

■ MQTT協議中的訂閱、主題、會話

■ 一、訂閱(Subscription)

訂閱包含主題篩選器(Topic Filter)和最大服務質量(QoS)。訂閱會與一個會話(Session)關聯。一個會話可以包含多個訂閱。每一個會話中的每個訂閱都有一個不同的主題篩選器。

■ 二、會話(Session)

每個客戶端與服務器建立連接后就是一個會話,客戶端和服務器之間有狀態交互。會話存在于一個網絡之間,也可能在客戶端和服務器之間跨越多個連續的網絡連接。

■ 三、主題名(Topic Name)

連接到一個應用程序消息的標簽,該標簽與服務器的訂閱相匹配。服務器會將消息發送給訂閱所匹配標簽的每個客戶端。

■ 四、主題篩選器(Topic Filter)

一個對主題名通配符篩選器,在訂閱表達式中使用,表示訂閱所匹配到的多個主題。

■ 五、負載(Payload)

消息訂閱者所具體接收的內容。

■ MQTT協議數據包結構

在MQTT協議中,一個MQTT數據包由:固定報頭(Fixed header)、可變報頭(Variable header)、消息體(payload)三部分構成。MQTT數據包結構如下:

(1)固定報頭(Fixed header)。存在于所有MQTT數據包中,表示數據包類型及數據包的分組類標識。
(2)可變報頭(Variable header)。存在于部分MQTT數據包中,數據包類型決定了可變頭是否存在及其具體內容。
(3)消息體(Payload)。也是效載荷 存在于部分MQTT數據包中,表示客戶端收到的具體內容。
在這里插入圖片描述

■ (1)固定報頭(Fixed header)

固定包頭包含
控制報文類型
控制報文標志位
剩余長度
在這里插入圖片描述
剩余長度是可變的 1-4 個字節

■ 1.1 MQTT控制報文的類型

在這里插入圖片描述
在這里插入圖片描述

■ 1.2 報文類型標志位

[3-0]包含每個 MQTT 控制報文類型特定的標志
在這里插入圖片描述
DUP1 =控制報文的重復分發標志
QoS2 = PUBLISH 報文的服務質量等級
RETAIN3 = PUBLISH 報文的保留標志

■ 1.3 剩余長度

位置: 從第 2 個字節開始。
剩余長度(Remaining Length) 表示當前報文剩余部分的字節數, 包括可變報頭和負載的數據。
剩余長度 不包括用于編碼剩余長度字段本身的字節數。

剩余長度字段 使用一個變長度編碼方案:
對小于 128 的值它使用單字節編碼。
更大的值按下面的方式處理。低 7 位有效位用于編碼數據,最高有效位用于指示是否有更多的字節。
因此每個字節可以編碼 128 個數值和一個延續位(continuation bit) 。
剩余長度字段最大 4 個字節。
在這里插入圖片描述
例如:剩余長度字節長度是64 剩余長度填充的值就是一個字節表示64。
答 :對小于 128 的值它使用單字節編碼。

例如:剩余長度是321 剩余長度填充的值 如下:
答 :大于 128 低 7 位有效位用于編碼數據
計算原理
321-128 = 193 //193又大于128 在減去
193-128 = 65

第一個字節: 193
第二個字節: 2 // 321 / 128 = 2 相當于上面減去兩次128

假如 第二個字節又大于128 在進行上面計算原理。

■ (2)可變報頭(Variable header)

可變報頭的內容根據報文類型的不同而不同。
可變報頭的報文標識符(Packet Identifier) 字段存在于在多個類型的報文里。
控制報文的可變報頭部分包含兩字節的報文標識符字段。
在這里插入圖片描述
在這里插入圖片描述

■ (3)消息體(Payload)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77706.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77706.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77706.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker容器安裝的可道云掛接宿主機的硬盤目錄:解決群暉 威聯通 飛牛云等nas的硬盤掛接問題

基于Docker部署可道云(KodCloud)時,通過掛載宿主機其他磁盤目錄可實現高效、安全的數據管理。具體而言,使用綁定掛載(Bind Mounts)將宿主機目錄(如/data/disk2)映射到容器內的可道云…

go語言內存泄漏的常見形式

go語言內存泄漏 子字符串導致的內存泄漏 使用自動垃圾回收的語言進行編程時,通常我們無需擔心內存泄漏的問題,因為運行時會定期回收未使用的內存。但是如果你以為這樣就完事大吉了,哪里就大錯特措了。 因為,雖然go中并未對字符串…

es6學習02-let命令和const命令

一、let命令 1.let塊級作用域: let關鍵字 VS var關鍵字 2.for循環計數器很適合let命令 var:整個for循環中一直都是同一個i在做1,最后輸出的就是10; let:每循環一次都是多一個i的賦值,最后輸出是可以調出…

MySQL深分頁問題

在項目中有一個數據導出的需求,原來的實現方式也比較簡單,根據查詢條件分頁查所有的數據,然后轉成csv的格式一行一行寫進文件存儲中。 實際上線之后,發現出現了慢查詢,具體的sql如下: select * from tabl…

前端面試寶典---創建對象的配置

Object.create 對整個對象的多個屬性值進行配置 創建對象 不可更改屬性值 // 創建對象 不可更改屬性值 let obj Object.create({}, {name: {value: lisi,writable: false,},age: {value: 20,writable: true,} })console.log(初始化obj, obj) obj.name wangwu console.log(…

數據結構:C語言版嚴蔚敏和解析介紹,附pdf

《數據結構:C語言版(第2版)》嚴蔚敏李冬梅吳偉民.pdf 《數據結構:C語言版》嚴蔚敏,李冬梅.pdf 《數據結構C語言第2版習題解析與實驗指導》李冬梅.pdf 「《數據結構:C語言版(第2版 )》…

深入理解 v-for 指令及其使用方法

在 Vue.js 中,v-for 是用于渲染列表的核心指令,它允許你通過循環渲染數據源中的每一項。通過 v-for,你可以輕松地將數組、對象或其他可迭代的數據渲染成 HTML 元素。本文將詳細介紹 v-for 的基本用法、常見的應用場景、最佳實踐及性能優化&am…

VIRT, RES,SHR之間的關系

VIRT、RES 和 SHR 是進程內存使用的三個關鍵指標,它們之間的關系反映了進程的內存分配和使用情況。以下是它們的定義和關系: VIRT(虛擬內存):表示進程分配的虛擬內存總量,包括所有代碼、數據、共享庫、堆棧…

2025屆藍橋杯JavaB組個人題解(暫時不全,沒題目)

2025 屆藍橋杯 Java B 組題解 第一次參加藍橋杯,輸入輸出都用的BufferedReader和PrintWriter,怕輸入輸出不對或者內存超限,也怕出現小錯誤運行不了的,比如Main打成Mian什么的,但還是希望能拿省一,這里給出自…

在Vue項目的引入meting-js音樂播放器插件

開源項目:https://github.com/swzaaaaaaa/NBlog 1、開源項目中音樂播放插件的使用流程 步驟1:下載meting-js相關文件 在MetingJS官方倉庫或其他可靠的CDN獲取meting-js的JavaScript文件以及相關依賴(如APlayer的文件)。將它們下…

HTML應用指南:利用GET請求獲取全國漢堡王門店位置信息

在當今快節奏的都市生活中,餐飲品牌的門店布局不僅反映了其市場策略,更折射出消費者對便捷、品質和品牌認同的追求。漢堡王(Burger King)作為全球知名的西式快餐品牌之一,在中國市場同樣占據重要地位。自進入中國市場以…

使用 Function 來編寫策略模式:優雅而高效的設計模式實踐

引言:為什么選擇策略模式? 策略模式(Strategy Pattern)是行為設計模式中的經典之一,它允許我們定義一系列的算法或操作,并使得它們可以互換使用。策略模式的關鍵思想是將算法的實現與使用它們的上下文分離…

Windows 系統中安裝 Git 并配置 GitHub 賬戶

由于電腦重裝系統,重新配置了git. 以下是在 Windows 系統中安裝 Git 并配置 GitHub 賬戶的詳細步驟: 1. 安裝 Git 訪問 Git 官網下載頁面下載 Windows 版本的 Git 安裝程序運行安裝程序,使用默認選項即可 2. 配置 Git 用戶信息 打開命令…

MergeX亮相GTC2025:開啟全球廣告流量交易新篇章

全球流量盛宴GTC2025深圳啟幕,共探出海新藍海 2025年4月24日至25日,GTC2025全球流量大會將在深圳福田會展中心9號館隆重召開。作為跨境出海領域內規模最大、資源最豐富、產業鏈最完備的年度盛會,此次大會將匯聚眾多行業精英,共同探…

kubernetes》》k8s》》Volume 數據卷 PVC PV NFS

為啥需要數據卷 容器磁盤上的文件的生命周期是短暫的,這就使得在容器中運行重要應用時會出現一些問題。首先,當容器崩潰時,kubelet會重啟它,但是容器中的文件將丟失——容器以干凈的狀態(鏡像最初的狀態)重…

第十六屆藍橋杯 省賽C/C++ 大學B組

編程題目現在在洛谷上都可以提交了。 未完待續,寫不動了。 C11 編譯命令 g A.cpp -o A -Wall -lm -stdc11A. 移動距離 本題總分:5 分 問題描述 小明初始在二維平面的原點,他想前往坐標 ( 233 , 666 ) (233, 666) (233,666)。在移動過程…

谷歌怎么設置在新標簽頁中打開網頁

按圖示操作即可,藏得真深啊,無語,而且就算打開了,點收藏夾,頂部快捷欄里的網站,網站里的連接,打開也還是覆蓋原來的,呵呵呵呵呵呵呵,有沒有人管管 另外我的edge不知咋滴…

【企業級數據安全】掌握高性能Log4j2敏感信息脫敏方案

前言 在數據安全合規日益嚴格的今天,日志中的敏感信息保護已成為企業IT建設的必備環節。本文帶您深入了解如何打造一套高性能、可實時配置的Log4j2日志脫敏插件,輕松應對各類敏感數據保護需求,讓您的系統既滿足合規要求,又不犧牲…

Linux中的tar -P選項

tar -P選項 Linux中的tar命令可用于文件和目錄的歸檔以及壓縮解壓縮。而其中的-P選項是什么含義呢?下面我們就來看一看 1、不添加-P選項 對于如下壓縮命令: tar -czvf pkg.tar.gz /opt/software執行該命名,控制臺首行輸出將會提示&#xf…

【2025年泰迪杯數據挖掘挑戰賽】B題 詳細解題思路+數據預處理+代碼分享

目錄 2025年泰迪杯B題詳細解題思路問題一問題分析數學模型Python代碼Matlab代碼 問題二問題分析數學模型Python代碼Matlab代碼 問題三問題分析數學模型Python代碼Matlab代碼 問題四問題分析數學模型Python代碼Matlab代碼 2025年泰迪杯B題詳細解題思路 初步分析整理了B題的賽題分…