title: protocol-app-mqtt-v5-introduce
date: 2020-02-09 22:17:01
categories:
tags:
- mqtt
- protocol
背景
MQTT v3.1.1 作為一個經典的版本,一般能夠滿足大部分需求;為了避免落后,我們也介紹一下 v5 版本。(僅介紹特性)
作為 MQTT 3.1.1 的后續版本,為什么版本號直接變成了 5.0?因為 3.1.1 在 CONNECT 的時候指定的 Protocol Version 為 4,所以后續版本只有使用 5 了。
MQTT的新版本(v5.0)在 v3的基礎上,增加了以下的特性:
協議上,增加了一個 Property字段,正是這個字段,使得 MQTT 5.0 可以支持眾多的新特性。而在MQTT 3.1.1中,MQTT沒有任何可以拓展的地方,限制了MQTT拓展功能的可能性。
會話過期
把清理會話標志拆分成新開始標志(指示會話應該在不使用現有會話的情況下開始)和會話過期間隔標志(指示連接斷開之后會話保留的時間)。會話過期間隔時間可以在斷開時修改。把新開始標志設置為1且會話過期間隔標志設置為0,等同於在MQTT v3.1.1中把清理會話(Clean Session)設置為1。
消息過期
允許消息在發布時設置一個過期間隔。
所有確認報文原因碼
更改所有響應報文以包含原因碼,包括CONNACK,PUBACK,PUBREC,PUBREL,PUBCOMP,SUBACK,UNSUBACK,DISCONNECT和AUTH,以使得調用方確定請求的函數是否成功。
所有確認報文原因字符串
更改大部分報文以包含原因碼同時也允許一個可選的原因字符串。這是為問題定位而設計的,並且不應由接收端所解析。
服務端斷開
允許服務端發送DISCONNECT報文,以指示連接被關閉的原因。
載荷格式和內容類型
允許在消息發布時指定載荷格式(二進制、文本)和MIME樣式內容類型。這些信息被轉發到消息的接收端。
請求/響應
規定MQTT請求/響應模式,提供響應主題和對比數據屬性,以使得響應消息被路由回請求的發布者。此外,為客戶端添加從服務端獲取獲取關於構造響應主題的配置信息的能力。
共享訂閱
添加對共享訂閱的支持,以允許多個訂閱消費者進行負載均衡。
訂閱標識符
允許在SUBSCRIBE報文中指定一個數字訂閱標識符,並在消息分發時返回此標識符。這使得客戶端收到分發的消息時確定此消息是由哪個或哪些訂閱導致的。
主題別名
通過將主題名縮寫為小整數來減小MQTT報文的開銷大小。客戶端和服務端分別指定它們允許的主題別名的數量。
流量控制
允許客戶端和服務端分別指定未完成的可靠消息(QoS>0)的數量。發送端可以暫停發送此類消息以保持消息數量低於配額。這被用於限制可靠消息的速率和某一時刻的傳輸中(in-flight)消息數量。
用戶屬性
為大多數報文添加用戶屬性。PUBLISH報文的用戶屬性由客戶端應用程序定義。PUBLISH報文和遺囑報文的用戶屬性由服務端轉發給應用消息的接收端。CONNECT,SUBSCRIBE和UNSUBSCRIBE報文的用戶屬性由服務端實現定義。CONNACK,PUBACK,PUBREC,PUBREL,PUBCOMP,SUBACK,UNSUBACK和AUTH報文的用戶屬性由發送端定義,且對發送端具有唯一性。MQTT規范不定義用戶屬性的意義。
最大報文長度
允許客戶端和服務端各自指定它們支持的最大報文長度。會話參與方發送更大的報文將造成錯誤。
可選的服務端功能可用性
提供定義一組服務端不允許的功能,並告知客戶端的機制。可以使用這種方式指定的功能包括:最大QoS等級,保留可用,通配符訂閱可用,訂閱標識符可用和共享訂閱可用。客戶端使用服務端通知了(不可用)的功能將造成錯誤。
在早期版本的MQTT協議中,服務端沒有實現的功能通過未授權告知客戶端。當客戶端使用其中一種(不可用的)功能時,此功能允許服務端告知客戶端,並添加特定的原因碼。
增強的認證
提供一種機制來啟用包括互相認證在內的質詢/響應風格的認證。這允許在客戶端和服務端都支持的情況下使用SASL風格的認證,包括客戶端在連接中重新認證的功能。
訂閱選項
提供主要用於定義允許消息橋接應用的訂閱選項。包括不要把消息發送給消息源客戶端(非本地)的選項和訂閱時處理保留消息的選項。
遺囑延遲
提供指定遺囑消息在連接中斷后延時發送的能力。設計此特性是為了在會話的連接重建的情況下不發送遺囑消息。此特性允許連接短暫中斷而不通知其他客戶端。
服務端保持連接
允許服務端指定其希望客戶端使用的保持連接值。此特性允許服務端設置最大允許的保持連接值並被客戶端使用。
分配客戶標識符
服務端分配了客戶標識符的情況下,向客戶端返回此客戶標識符。服務端分配客戶標識符只能用於新開始標志為1的連接。
服務端參考
允許服務端使用CONNACK或DISCONNECT報文指定備用服務端。此特性被用於(服務端)重定向或做准備。