MQTTクライアントチュートリアルの開発

導入事例

モノのインターネット(IoT)の急速に進化する風景の中で、効率的で信頼性の高いMQTTを開発 クライアント IoTデバイス間のシームレスな通信を可能にすることは不可欠です。 MQTT の顧客はインターフェイスとして役立つ お問い合わせ MQTTブローカーに接続し、メッセージの送信と受信を可能にします。 このガイドでは、MQTT プロトコルの OASIS 規格に従って MQTT クライアントを開発する方法について説明します。

MQTTの基本

MQTT クライアントを開発するプロセスにジャンプする前に、MQTT クライアントについて知るMQTTの基本お問い合わせ

MQTT(メッセージキューイングテレメトリートランスポート)は、公開サブスクリプションで動作する軽量プロトコルです。 モデル。 ブローカーとクライアント間の接続を管理し、スムーズなコミュニケーションを実現します。 プロトコルから お問い合わせ 公開サブスクリプションモデルでは、デバイスがメッセージの送信と受信を両立させることができます。 この機能は、 MQTTは、M2M(機械・機械・機械・モノのインターネット(IoT))に理想的な選択肢です。 小規模なコードのフットプリントが不可欠であり、ネットワークの帯域幅を節約することが重要です。

MQTTとMQTTの主要機能の詳細については、以下の記事を参照してください。

プレビルドMQTT クライアント

あらゆるIoTシステムでは、デバイスは、互いにやりとりし、サーバーと通信する方法が必要です。 MQTT クライアントが来ています。 MQTT クライアントは、デバイスが接続できるようにするソフトウェアです。MQTTブローカーお問い合わせ ブローカーは、1つのデバイスから別のデバイスにデータ(メッセージ)を指示するトラフィックコントローラのように機能します。 ただ、 トラフィックコントローラは、スムーズなトラフィックフローを保証します。ブローカーは、メッセージが配信されるようにします。 任意の混雑なしで右の加入者. MQTT クライアントがなければ、デバイスは公開できません 更新を受け取るデータまたは購読 リアルタイムでのコミュニケーションが不可能になる

このプロセスを簡素化するため、さまざまなMQTTクライアントをさまざまなMQTTクライアントに接続するための包括的なドキュメントを提供 クラウドホストMQTTブローカー。 これらの文書では、さまざまなMQTTクライアントを当社と統合する方法について説明します。クラウドホストMQTTブローカーお問い合わせ 各ガイドは、さまざまなニーズに合った詳細な説明とインサイトを提供します。 埋め込まれたシステム、モバイル機器、クラウドプラットフォームなど、プロジェクトのニーズ。 ステップバイステップで 指導、あなたの建物に焦点を合わせることができます ブローカーとのシームレスなコミュニケーションを確保しながらアプリケーション。

さまざまなMQTTクライアントをMQTTブローカーに接続するためのドキュメントのリストは次のとおりです。

  • トピックス- PythonでMQTTアプリケーションを迅速かつ効率的に開発するため
  • ログイン- JavaプラットフォームでエンタープライズレベルのMQTTアプリケーションを構築する
  • パホC- Cを使用して低電力または埋め込まれた装置を接続するため
  • ESP32の特長- マイクロコントローラベースのIoTデバイスでMQTTを統合するため
  • ドットネット- 拡張可能で安全なMQTTアプリケーションを作成するために。 NETフレームワーク
  • サイトマップ- WebアプリケーションにおけるMQTT通信の実装
  • ノードJS- ノードJSを用いたリアルタイムMQTTアプリケーションの開発
  • アンドロイド- Androidデバイス上でMQTTベースのアプリケーションを構築する
  • iOS版- Appleエコシステム内でMQTT対応アプリを開発

これらのガイドを利用することで、開発プロセスを合理化し、統合時間を最小限に抑えることができます。 建物に集中できる 革新的な機能とアプリケーションの機能を強化します。

MQTTクライアントはどのようになるべきか?

MQTT クライアントの原則使用は、MQTT ブローカーとトピックを購読するための接続を容易にすることです お問い合わせ 投稿だけでなく、メッセージを受信する。 ここにいくつかあります すべてのMQTTクライアントが保有すべき特定の特性:

  • MQTT クライアントは、ユーザーが設定を容易に調整し、クライアント認証をサポートし、クライアントの認証を許す必要があります。 証明書と異なるオプションのセットアップ 接続、出版、およびサブスクライブのため。
  • 利用可能なすべての機能との相互作用を高めるスムーズなユーザーインターフェイスを提供する必要があります。
  • 複数のオペレーティングシステムと互換性があります。
  • クライアントは、ユーザーが他のデバイスやサービスに素早く簡単にメッセージを送信できるようにする必要があります。
  • クライアントは、ユーザーが信頼できる方法を選ぶことを可能にする、メッセージ配信のための異なるオプションを提供する必要があります 送信したいメッセージです。

下記の内容を調べてご覧ください。

3つのメインセクションに編成しました。 MQTTのデータ表現,MQTTの特長 制御パケット フォーマット、および MQTT 制御パケット。

1。 MQTTの特長 データ表現

MQTT はバイナリベースのプロトコルです。 制御要素はテキスト文字列ではなく、バイナリバイトです。 すべて MQTT コマンドは関連する承認を持っています。

1.1ビット

ビットを説明します。 バイト内のこれらのビットは7から0までフラグが付けられます。 ビット番号 0はあります 少なくとも 重要なビットとビット番号7は、最も重要なビットです。

1.2 2つのバイト整数

MQTT は 2 つのバイト整数のデータ値を定義します。 お問い合わせ より高い順序バイト (MSB-Most) 重要なビット)は、下位バイト(LSB-Least の重要なビット)に従っています。

上位注文バイト(MSB-Most重要ビット)は、次の順に続きます。 より高い順序 バイト (MSB-Most 重要ビット), 続いて次の高値バイト (MSB-Most 重要バイト), フォロー 下の順序バイト(LSB-LeastSignificant Bit)によって。

1.3 四バイト整数

MQTT は 32 ビット符号なし整数を大きいendian 順序で記述します 2 バイト整数 データ値。 お問い合わせ 上位順バイト(MSB-Most 重要ビット)は、次の上位順に続く バイト (MSB-Most の重要なビット) は、次の上位順バイト (MSB-Most の重要なバイト) に従って、続いて によって 下の順序バイト(LSB-Least重要なビット)。

1.4 UTF-8 エンコードされた文字列構造

UTF-8はUnicodeの暗号化方式です。 任意のUnicodeを翻訳できます。 キャラクターから 一致することができるユニークなバイナリ文字列と、バイナリ文字列をUnicode文字に戻すことができます。 ザ・オブ・ザ・ UTF-8 エンコードされた文字列の最大サイズは65,535バイトであり、0から65,535バイトの範囲です。 テキスト フィールド 後で説明したMQTT制御パケットは、UTF-8文字列として暗号化されます。 具体的には、文字 データデータ U+D800 と U+DFFF のコードポイントの暗号化や、null の文字を含むべきではありません。 暗号化の暗号化 コードポイントはU+0000です。 クライアントまたはサーバーが誤ってMQTT制御パケットを受信した場合 生成された UTF-8 は false パケットと見なされます。 このMQTTクライアント開発ガイドは、明確に提供します UTF-8のビュー エンコード 文字列構造。

  • U+0001.U+001の特長 F制御文字
  • U+007F.U+009 F制御文字
  • Unicode 仕様で定義されるコードポイントは非文字(U+0FFFF など)です。
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 弦長 MSB
バイト 2 弦長 LSB
バイト3 ... UTF-8 文字データをエンコードし、長さが > 0。
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 弦長 MSB (0x00)
バイト 2 弦の長さ LSB (0x05)
1 1
バイト 3 ‘A’ (0x41)
1 1
バイト 4 (0xF0)
1 1 1 1
バイト 5 (0xAA)
1 1 1 1 1
バイト 7 (0x94)
1 1 1
1.5マイル 可変バイト整数サイズ

単一のバイト値が 127 まで使用されます。 Encoding Scheme を使うと変数 バイト整数 このMQTTクライアント開発ガイドではエンコードが明確に説明されています。 LSBでは、各バイトの7ビットがエンコードされます。 データとデータ MSBについて 表現中のバイトが以下のように指定するために使用されます。 したがって、各バイトは128をエンコードします バリュー 「継続ビット」です。 変数バイト整数フィールドでは、バイトの最大数が4つです。 使用条件 コードされた値を示すために必要最小バイト数。

ディジット 詳しくはこちら お問い合わせ
1 0 (0x00) 127 (0x7F)
2 128 (0x80、0x01) 16,383 (0xFF, 0x7F)
3 16,384 (0x80、0x80、0x01) 2,097,151 (0xFF, 0xFF, 0x7F)
3 2,097,152 (0x80, 0x80, 0x80, 0x01) 268,435,455 (0xFF, 0xFF, 0xFF, 0x7F)

1.6 バイナリデータ

バイナリデータは、2つのバイトのフル長で示されます。 電話番号 データのバイト数、その後のバイト数。 したがって、バイナリデータの長さは0から0の範囲です 65,535円 バイト。

2.MQTT 制御パケット形式

2.1 パケット構造

MQTTプロトコルは、定義された方法で連続したMQTT制御パケットを交換することで動作します。 このセクション これらのパケットの形式について説明します。 MQTT 制御パケット構造は 3 つの部分で構成され、 お問い合わせ 以下の表に示します。

MQTT制御パケット構造

すべてのMQTT制御パケットに存在する固定ヘッダー 変数ヘッダ、あるMQTT制御のパケットに提示して下さい ペイロード、いくつかのMQTTコントロールパケットに提示
packet Structure

2.1.1固定ヘッダー

下記の表は各々に含まれていることができる固定ヘッダーで構成されます MQTTの特長 制御パケット。

固定ヘッダー形式

ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ 各MQTT制御パケットタイプに固有のフラグ
バイト2 ... 残り長さ

2.1.2 MQTTの特長 制御パケットタイプ

固定ヘッダのバイト1のビット[7-4]は、制御パケットを含む タイプ。 MQTTで 制御パケットタイプは4ビット符号なし値として表されます。これらの値は以下に示されます。 テーブル。

MQTT制御パケットタイプ

お名前 (必須) バリュー 流れの方向 コンテンツ
2018年1月1日 免責事項 2018年1月1日
コネクタ 1 サーバーへのクライアント 接続リクエスト
コンセプト 2 クライアントへのサーバー 認証の接続
パブリッシュ 3 クライアントからサーバーまたは クライアントへのサーバー メッセージを公開する
パブリッシュ 3 クライアントからサーバーまたは クライアントへのサーバー メッセージを公開する
フィードバック 3 クライアントからサーバーまたは クライアントへのサーバー 出版承認(QoS 1)
PUBRECについて 5月5日 クライアントからサーバーまたは クライアントへのサーバー 公開受信(QoS 2配信パート1)
アクセサリー 5月5日 クライアントからサーバーまたは クライアントへのサーバー 公開リリース(QoS 2配信パート2)
PUBCOMPの特長 7月7日 クライアントからサーバーまたは クライアントへのサーバー 公開完了 (QoS 2 配信部 3)
サブスクライブ 8月8日 サーバーへのクライアント 購読リクエスト
フィードバック 9月9日 サーバーへのクライアント 会員資格
免責事項 10月10日 サーバーへのクライアント 退会リクエスト
フォロー 11月11日 クライアントへのサーバー 退会承認
ピンレック 12月12日 サーバーへのクライアント ピンリクエスト
ピンレスプ 13 日 クライアントへのサーバー PINGレスポンス
ディスコネクト 14 日 クライアントからサーバーまたは クライアントへのサーバー 通知の切断
アウス 14 日 クライアントからサーバーまたは クライアントへのサーバー 認証交換

2.1.3 フラグ

バイト1のビット[3-0]は、特定のフラグを含む固定ヘッダーです。 すべて 以下に示すようにMQTT制御パケット。 フラグビットが「保存」としてマークされている場合は、 ミッション リストされた値を使用して設定します。 無効なフラグが受け取った場合、false パケットと見なされます。

MQTTの特長 制御パケット 固定ヘッダーフラグ ビット 3 ビット2 ビット 1 ビット 0
コネクタ 2018年1月1日
コンセプト 2018年1月1日
パブリッシュ MQTT v5.0で使用される ディップ QoSについて ログイン
フィードバック 2018年1月1日
PUBRECについて 2018年1月1日
アクセサリー 2018年1月1日 1
PUBCOMPの特長 2018年1月1日
サブスクライブ 2018年1月1日 1
フィードバック 2018年1月1日
免責事項 2018年1月1日 1
フォロー 2018年1月1日
ピンレック 2018年1月1日
ピンレスプ 2018年1月1日
ディスコネクト 2018年1月1日
アウス 2018年1月1日

2.1.4 残り長さ

バイトでポジションが始まります 2。 残りの長さは可変バイトです 整数を明確に ここでは、現在の制御パケットに残っているバイト数を参照します。 データデータ 変数ヘッダーおよびペイロード。 残り長さをエンコードするためにバイトは使用しません。 総数 インフォメーション MQTT 制御パケットのバイトは、固定ヘッダーの長さと等しいパケットサイズです。 お問い合わせ 残りの長さ。

2.2 変数ヘッダー

MQTT 制御パケットには、変数ヘッダーコンポーネントがあります。 これは、 固定 ヘッダーとペイロード。 変数ヘッダーの内容は、パケットの種類によって異なります。 ザ・オブ・ザ・ 変数ヘッダーのパケット識別子フィールドは、多くのパケットタイプに共通します。

2.2.1 パケット識別子

多くのMQTT制御パケットの可変ヘッダーコンポーネントには、2バイトの整数パケット識別子フィールドが含まれています。これらのMQTT制御パケットは、PUBLISH、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACKです。以下の表に示すパケット識別子を含むMQTT制御パケットです。

MQTTの特長 制御パケット パケット識別子フィールド
コネクタ お問い合わせ
コンセプト お問い合わせ
パブリッシュ はい (QoSの場合 > 0)
フィードバック お問い合わせ
PUBRECについて お問い合わせ
アクセサリー お問い合わせ
PUBCOMPの特長 お問い合わせ
サブスクライブ お問い合わせ
フィードバック お問い合わせ
免責事項 お問い合わせ
フォロー お問い合わせ
ピンレック お問い合わせ
ピンレスプ お問い合わせ
ディスコネクト お問い合わせ
アウス お問い合わせ

公開パケットには、QOS 値が設定されている場合、パケット識別子がないか 0. それぞれ クライアントが新しいSUBSCRIBE、UNSUBSCRIBE、またはPUBLISH MQTT制御パケット(QoS>0)を送信します。 お問い合わせ 現在、ゼロパケット識別子を使用していません。 サーバーが新しいPUBLISH MQTT制御パケットをサーバーに送り出すたびに (QoS>0) は、現在未使用のゼロパケット識別子を割り当てる必要があります。

パケット識別子は、送信元がアクティブ化した後に再使用するために利用できます 対応する承認パケットは以下の通りです。 QoS1 PUBLISHの場合、対応する フィードバック; QoS2のリリースでは、128以上の理由でPUBCOMPまたはPUBRECのいずれかです。 これは、 バックアップまたは SUBSCRIBEとUNSUBSCRIBEに関するUNSUBACK。 PUBACK、PUBRELまたはPUBCOMPパケットは同じでなければなりません パッケージ 元の PUBLISH パケットとして識別子。 SUBACK および UNSUBACK には、使用しているパケット識別子が必要です。 お問い合わせ 対応するSUBSCRIBEとUNSUBSCRIBE。


クライアント サーバー
パブリッシュ パケット識別子=0x1234 —>
<-PUBLISH(パブリッシュ) パケット識別子=0x1234
フィードバック パケット識別子=0x1234 —>
<--PUBACK(プバック) パケット識別子=0x1234

PUBLISH、SUBSCRIBE、およびUNSUBSCRIBEで使用されるパケット識別子 パケット 1つのセッションでクライアントとサーバーを別々に統合した識別子を生成します。 お問い合わせ 時間, パケット識別子は複数のコマンドで使用できません。 クライアントとサーバーはパケットを割り当てます それぞれを独立して識別します。 その結果、クライアントサーバのペアが参加できます。 同時通訳 同じパケット識別子を使用してメッセージング。

2.2.2 プロパティ

プロパティセットは、MQTT コントロールの変数ヘッダーの最後のフィールドです。 パケット 、CONNACK、PUBLISH、PUBACK、PUBREC、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBEのような、 インタビュー 接続、およびAUTH。 CONNECT パケットでは、ペイロード付きの Will プロパティ フィールドがあります。 オプションのプロパティのセットとして考慮されます。 プロパティのセットは、プロパティの長さから構成されます。 フォロー プロパティで。

2.2.2.1 プロパティ

プロパティの長さ変数はバイト整数としてエンコードされます。 プロパティ 長さはしません 自身を暗号化するだけでなく、属性の長さのバイトを含む。 ない場合 プロパティ プロパティの長さをゼロに追加することで、デノットする必要があります。

2.2.2.2.2.2 プロパティ

プロパティには、その使用とデータタイプを定義する識別子があります。 値。 ザ・オブ・ザ・ ID は変数 バイトとしてエンコードされます。 制御パケットが無効な場合、false パケットは 識別子 パケットの種類や、特定のデータ型の値がない場合 取得した場合、CONNACK または Reason コード (0X81) でパケットを無効なパケットとして記述します。 重要ではない お問い合わせ 異なる識別子を持つプロパティの順序。

プロパティ :

識別子 氏名(ふりがな) タイプ: パケット / ウィルプロパティ
12月12日 ログイン
1 0x01の ペイロード形式インジケータ バイテ PUBLISH は、特性をします
2 0x02の メッセージの有効期限インターバル 四バイト整数 PUBLISH は、特性をします
3 0x03の コンテンツの種類 UTF-8 エンコードされた文字列 PUBLISH は、特性をします
8月8日 0x08の 応答トピック UTF-8 エンコードされた文字列 PUBLISH は、特性をします
9月9日 0x09の 相関データ UTF-8 エンコードされた文字列 PUBLISH は、特性をします
6月6日 0x03の コンテンツの種類 バイナリデータ PUBLISH は、特性をします
11月11日 0x0Bの サブスクリプション識別子 変数バイト整数 パブリッシュ、サブスクライブ
17 日 0x11の セッション ツアー インターバル 四バイト整数 接続、コンソール、接続解除
18歳 0x12の クライアント識別子の割り当て UTF-8 エンコードされた文字列 コンセプト
19 歳 0x13の コンテンツの種類 2つのバイト整数 コンセプト
21日 0x15の 認証方法 UTF-8 エンコードされた文字列 接続、コンソール、AUTH
22 日 0x16の 認証データ バイナリデータ 接続、コンソール、AUTH
23 日 0x17の 問題情報のリクエスト バイテ コネクタ
24 日 0x18の 遅延インターバル 四バイト整数 プロパティ
25 日 0x19の 要求の応答情報 バイテ コネクタ
26 日 0x1A 応答情報 UTF-8 エンコードされた文字列 コンセプト
27 日 0x1Cの サーバー参照 UTF-8 エンコードされた文字列 ナビゲーション、ディスクコネクト
31日 0x1Fの Reason 文字列 UTF-8 エンコードされた文字列 、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBACK、UNSUBACK、DICONNECT、AUTHSの衝撃
33 日 0x21の 受け取る最大 2つのバイト整数 接続、コンソール
34 . 0x22の Topic 別名で最高 2つのバイト整数 接続、コンソール
35 日 0x23の トピック 別名で 2つのバイト整数 パブリッシュ
38 人 0x26の ユーザープロパティ UTF-8 ストリングペア CONNECT、CONNACK、PUBLISH、ウィルの特性、PUBACK、PUBREC、PUBCOMP、SUBSCRIBE、 フィードバック UNSUBSCRIBE, UNSUBACK, DICONNECT, AUTH, UNSUBACK, UNSUBACK, DISCONNECT, AUTH, UNSUBSCRIBE, UNSUBACK, UNSUBACK, DISCONNECT, AUTH, UNSUBSCRIBE, UNSUBACK, UNSUBACK, DISCONNECT, AUTH, UNSUBACK, UNSUBACK, DISCONNECT, AUTH, UNSUBSCRIBE, UNSUBSCRIBE, UNSUBACK, UNSUBACK, DISCONNECT, AUTH, AUTH, UNSUBSCRIBE, UNSUBSCRIBE, UNSUBSCRIBE, UNSUBACK, UNSUBACK, UNSUBACK, UNSUBACK, UNSUBACK, DISCONNECT, AUTH, AUTH, UNSUBACK, UNSUBSCRIBE, UNSUBSCRIBE, UNSUBACK, UNSUBACK, UNSUBACK, UNSUBACK, UNSUBACK, UNSUBACK, UNSU, UNSU, UNSUBACK, UNSUBACK, UNSUBSCRIBE, DISCONNECT, UNSUBACK, AUTH, UNSUBSCRIBE, UNSUBSCRIBE, AUTH
39 人 0x27の 最高のパケット サイズ 四バイト整数 接続、コンソール
40 日 0x28の ワイルドカードサブスクリプション 利用できる バイテ コンセプト
41 位成人 0x29の サブスクリプション識別子 利用できる バイテ コンセプト
42,321 x2Aの 共有サブスクリプション 利用できる バイテ コンセプト

2.3ペイロード

ペイロードはMQTT制御の一部のパケットの最終部分です パケット。 お問い合わせ PUBLISHパケット、ペイロードはアプリケーションメッセージです。 ペイロードが必要なMQTT制御パケット。

MQTTの特長 制御パケット ペイロード
コネクタ お問い合わせ
コンセプト なし
パブリッシュ オプション
フィードバック なし
PUBRECについて なし
アクセサリー なし
PUBCOMPの特長 なし
サブスクライブ お問い合わせ
フィードバック お問い合わせ
免責事項 お問い合わせ
フォロー お問い合わせ
ピンレック なし
ピンレスプ なし
ディスコネクト なし
アウス なし

2.4 理由コード

レイソン コードは1バイトの符号なし値です。 理由コードは結果を示します お問い合わせ 操作。 0x80未満のReasonコードは、動作の成功した完了を指定します。 ノーマル 理由 成功のためのコードは 0 です。 0x80 より大きいコードは失敗を示します。 MQTT制御の一部 パケットは持っています CONNACK、PUBACK、PUBREC、PUBREL、PUBCOMPのような可変的なヘッダーの一部として単一の理由コード、 接続、およびAUTH。 2つのMQTT制御パケットには、1つ以上のReasonコードのリストが含まれています。 ペイロード、 SUBACK と UNSUBACK です。

スケジュール HEXの特長 お名前 (必須) パケット
0x00の 成功事例 在庫、PUBACK、PUBREC、PUBREL、PUBCOMP、UNSUBACK、AUTH
3。 MQTT制御パケット

MQTT制御パケットは15個あります。MQTTv5の特長

1。 CONNECT - MQTTクライアントとブローカー間の接続確立

2. CONNACK – リクエストの通知

3。 PUBLISH – 公開メッセージ

4. PUBACK – 出版承認

5. PUBREC – 公開受領(QoS 2 公開)

6. PUBREL – 公開リリース(QoS 2 公開)

7. PUBCOMP – 完全公開

8. サブスクライブ – トピックを購読

9月9日 SUBACK - 購読承認

10月10日 UNSUBSCRIBE – トピックから退会

11月11日 UNSUBACK - 承認の解除

12. PINGREQ – ピンリクエスト

13. PINGRESP - PINGレスポンス

14。 DISCONNECT - MQTTクライアントとブローカー間の接続解除

15 . . AUTH – 認証交換

3.1 接続

クライアントがサーバーにネットワーク接続を確立した後、最初に 送信されたパケット クライアントからサーバーへの接続パケットでなければなりません。 クライアントは CONNECT パケットのみを送信できます。 お問い合わせ ネットワーク接続を介して。

3.1.1 接続 固定ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ (1) 2018年1月1日
1
バイト2 ... 残り長さ

レンダリング長さ - これは、変数ヘッダーの長さとの長さです ペイロード。 変数バイト整数としてエンコードされます。

3.1.2 接続 可変ヘッダー

接続パケットの変数ヘッダーには、次のフィールドが含まれます。 プロトコル 名前、プロトコルレベル、フラグを接続し、生き続ける、プロパティを保ちます。

3.1.2.1 プロトコル お名前 (必須)

コンテンツ 7月7日 6月6日 5月5日 3 3 2 1
プロトコル名
バイト 1 全長 MSB (0)
バイト 2 長さ LSB (4) 1
バイト 3 「M」 1 1 1 1
バイト 4 「Q」 1 1 1
バイト 5 1 1 1
バイト 6 1 1 1

複数のプロトコルをサポートするサーバーは、プロトコル名を使用して決定します。 かどうか データはMQTTです。 プロトコル名は「MQTT」を表すUTF-8エンコードされた文字列でなければなりません。

3.1.2.2 プロトコルバージョン
コンテンツ 7月7日 6月6日 5月5日 3 3 2 1
プロトコルレベル
バイト 7バージョン(5) 1

複数のバージョンをサポートするサーバーMQTTの特長 プロトコルプロトコルを使用する MQTT クライアントがどのバージョンを使用するかを判断するバージョン。

3.1.2.3の特長 フラグを接続する

フラグを接続すると、ペイロードのフィールドの存在または欠如を指定します。

ビット 7月7日 6月6日 5月5日 3 3 2 1
ユーザー名 フラグ パスワードの旗 保持する ウィル・QoS ウィルフラグ クリーンスタート 2018年1月1日
バイト 8
3.1.2.4 リリース クリーンスタート

クリーンなスタートは、Connect Flags バイトのビット1です。 接続パケットの場合 きれいにして下さい start は 1 に設定されます。クライアントとサーバーは既存のセッションを拒否し、新しいセッションを開始します。

3.1.2.5 フラグ

ウィールフラグはコネクトフラグのビット2です。 Will Flag が 1 に設定されている場合は、 インフォメーション つまり、メッセージサーバに格納され、セッションとコアの相関関係を伴います。 ザ・ウィル メッセージ Will プロパティが含まれている、 話題になり、CONNECTペイロードのフィールドをペイロードします。 意志 メッセージ 以下に示す、いくつかの状況で公開されます。

  • 検出されたサーバー I / Oエラーまたはネットワーク障害。
  • クライアントは、ライブを続けながら通信できなかった。
  • クライアントは、Reason で最初に接続されていないパケットを送信せずにネットワーク接続を閉じます コードコード 0x00 (デフォルト切断)。
  • サーバは、Reason コードで接続されていないパケットを受信せずにネットワーク接続を閉じます 0x00の (デフォルト切断)。
3.1.2.6 は QoS を

ウィールQoSはコネクトフラグのビット4と3です。 メッセージがメッセージのとき 出版情報 その後、QoS レベルを指定する2ビットが使用されます。 Will Flag が 1 に設定されている場合は、 お問い合わせ 多分 0 (0x00), 1 (0x01), または 2 (0x02).

3.1.2.7の特長 保持する

ウィール・リーンはコネクト・フラグのビット5にあります。 Will Flag が 1 に設定されている場合 そして、 Will Retain は 1 に設定されます。サーバーは Will メッセージを以下のように公開します。保存されたメッセージ。

3.1.2.8の特長 ユーザー名 フラグ

ユーザー名 フラグは、Connect フラグのビット 7 にあります。 ユーザー名は、 ペイロード ユーザー名 フラグが 1 に設定されている場合。

3.1.2.9の特長 パスワードの旗

パスワードフラグはコネクトフラグのビット6です。 パスワードはパスワードでなければならない ペイロード パスワードフラグが1に設定されている場合。

3.1.2.10 生き続ける
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 9 生きているMSBを保って下さい
バイト 10 生きているLSBを保って下さい

MQTT クライアントは、定義された Keep Alive 内の制御パケットを送信しなければなりません。 値。 ザ・オブ・ザ・ お問い合わせ Alive 値は、クライアントの制御パケットトランザクションの有効期間に依存します。

3.1.2.11 接続 プロパティ:

プロパティの長さ –プロパティの長さ お問い合わせ MQTT CONNECT 制御パケット。

セッション調査インターバル –セッションの指標 有効期限インターバルは17(0X11)バイトです。 セッション Expiry Interval が複数回使用されている場合は、 プロトコルエラーと見なされます。 0 に設定すると、ネットワーク接続時にセッションが終了します。 お問い合わせ 0XFFFFFFFF にセットされているか、セッションが終了しないか。

受け取る最大 – –受信インジケータ 最高はあります 33(0X21) バイト。 ネットワーク接続が開いている場合にのみ適用されます。 受信の最大値が0の場合、 お問い合わせ デフォルトは65,535となります。

最高のパケットサイズ –最大の指標 パケット サイズは39(0X27)バイトです。 パケットサイズが上限の場合、パケットサイズに制限はありません。

トピック エイリアス 最大 -トピックの表示器 アリアス 最大34(0X22)バイトです。 Topic Alias Maxが一度以上使用されていれば、 は、 プロトコルエラー。

要求の応答情報 – –インジケーター リクエスト 応答情報は25(0X29)バイトです。 値 0 は、要求の応答情報が コメントはありません。 プレゼント。

問題情報のリクエスト –インジケーター リクエスト 問題情報は23(0X17)バイトです。 値が1の場合、パケットはパケットに存在しません。

ユーザープロパティ –ユーザープロパティのインジケータは 38(0X26) バイト。 同一の名称で1回以上ご利用可能です。

認証方法 –インジケーター 認証方法は21(0X15)バイトです。 一度以上使われた場合は、 プロトコル エラー。 認証方法値が0の場合、延長認証は実行されません。

認証データ – –インジケーター 認証データは22(0X16)バイトです。 認証データが未使用時 認証 メソッドは、プロトコルエラーとして考慮されます。 パケットに1回以上使用しません。 ザ・オブ・ザ・ CONNECT プロパティは、この MQTT クライアントのチュートリアルで説明されています。

変数ヘッダー例
コンテンツ 7月7日 6月6日 5月5日 3 3 2 1
プロトコル名 バイト 1 全長 MSB (0)
バイト 2 長さ LSB (4) 1
バイト 3 「M」 1 1 1
バイト 4 「Q」 1 1
バイト 5 1 1 1
バイト 6 1 1 1
コンテンツ 7月7日 6月6日 5月5日 3 3 2 1
バイト 7 バージョン (5) 1
バイト8 ユーザー名 フラグ (1) パスワードフラグ (1) 保有する(0) ウィル・QoS (01) ウィル・フラグ (1) クリーンスタート(1) 1 1 1 1 1
生き続ける
バイト 9 生きているMSBを保って下さい (0)
バイト 10 生きているLSBを保って下さい (10) 1 1
プロパティ
バイト11の長さ (5) 1 1
バイト 12 セッション有効期限インターバル識別子 (17) 1
バイト 13 セッション ツアー インターバル (10)
バイト 14
バイト 15
バイト 16 1 1
3.1.3 接続 ペイロード

CONNECT パケットのペイロードには、1つ以上の長さが含まれている - プレフィックス フィールド、フィールド 変数ヘッダーのフラグによって決定される存在。 これらのフィールドが存在する場合、 クライアントは、Will プロパティ、Will Topic、Will Payload、ユーザー名、パスワードが表示されることを識別します

クライアント識別子(クライアントID) –クライアント識別子 必須 UTF-8 エンコードされた文字列になります。 サーバに接続するクライアントは、独自のクライアント ID を持っています。 このMQTT セッション クライアントとサーバー間では、MQTT クライアントが保持するポジションを識別するために使用する必要があります。

ウィル・プロパティ –Will プロパティは 次へ ペイロードのフィールド、それが1に設定されている場合。 Will プロパティフィールドは、アプリケーションメッセージを定義します 意志メッセージと意志メッセージ時に定義するプロパティで送信されるべき属性 公開すべきです。 A Will プロパティには、プロパティの長さとプロパティがあります。

プロパティの長さ –それは長さを定義します Willのプロパティフィールドのプロパティ。

遅延インターバル –ウィルの表示器 デレイ インターバルは34(0X22)バイトです。 Will Delay Interval が複数回使用されている場合は、 は、 プロトコルエラー。 遅延間隔がない場合、遅延はありません。

ペイロード形式インジケーター –インジケーター ペイロード形式は1(0X01)バイトです。 0(0X00)バイトはペイロード形式を送信しないと同等です メッセージが特定されていないバイトであることを示す指標。 一度以上使用している場合、それは プロトコルエラーとして考えられます。

メッセージ有効期限インターバル –インジケーターの メッセージ 有効期限インターバルは2(0X02)バイトです。 パケットで一度以上使用している場合 プロトコル エラー。 4つのバイトの値は、Will Messageの寿命時間と出力に存在する場合 サーバがWill Messageをリリースしたときに期限が切れます。 サーバがリリースしたときに存在していない場合 任意メッセージは、メッセージの有効期限間隔は送られません。

コンテンツタイプ –コンテンツタイプの表示器 お問い合わせ 3(0X03) バイト。 コンテンツタイプは、プロトコルとみなされるパケットに一度以上含まれています エラー。 送信および受信アプリケーションは、コンテンツタイプの値です。

応答トピック – –応答の表示器 トピックは 8(0X08) バイト。 応答トピックが不在の場合、Will メッセージをリクエストとして識別します。

相関データ – –インジケーター コンサルティング データは9(0X09)バイトです。 要求メッセージの送信者によって相関データは識別するために使用されます お問い合わせ 応答メッセージが送信されたときに受信されました。 クライアントのリクエストは要求しません 不在時の相関データ。

ユーザープロパティ –ユーザープロパティの表示器 お問い合わせ 38(0X26) バイト。 このプロパティは、同じ名前で複数回使用することができます。

トピック – –Will Topicは、次のフィールドです。 お問い合わせ ペイロード、Will フラグが 1 に設定されている場合。 UTF-8 エンコードされた文字列でなければなりません

ペイロード – –ウィルペイロードは次です フィールド ペイロード、Will フラグが 1 に設定されている場合。 Will Payload は、アプリケーションメッセージのペイロードを定義します。 お問い合わせ ウィール・トポックが発行しました。

ユーザー名Username は、次のフィールドです。 Username フラグが 1 に設定されている場合は、ペイロード サーバによる認証に使用できます。

パスワード –パスワードは、次のフィールドです お問い合わせ パスワードフラグが1に設定されている場合、ペイロード。 資格情報を運ぶのに使用できます。

3.2 ナビゲーション

コンセプト Packet は、サーバーが CONNECT に対応するパケットです。 パッケージ クライアントから受け取った。 サーバーは 0X00 (成功) Reason で CONNACK を送信しなければなりません 前のコード メール AUTH以外の他のパケット。 サーバは、複数の接続認証を送らない お問い合わせ ネットワーク接続

ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTTの特長 制御パケットタイプ (2) 2018年1月1日
1
バイト 2 残り長さ
3.2.2 コンセプト 可変ヘッダー

CONNECT はフラグを認識し、 CONNECT の理由コードとプロパティはフィールドです お問い合わせ CONNACK パケットの可変ヘッダー。

CONNECT はフラグを認識します。バイトでこのフィールドを設定する 1。 ビット7〜1は予約され、ゼロに設定されます。

セッションプレゼンセッションの位置 プレゼント CONNECT のビット 0 はフラグを認識します。 セッションの現在のフラグはクライアントに通知します。 サーバは クライアントID の以前の接続からサーバーのステータスを使用します。 これにより、クライアントとサーバーがクライアントとサーバーを お問い合わせ セッション状態の一貫したビュー。 サーバが 1 をクリーンなスタートで受け入れた場合、サーバは最も設定されます。 お問い合わせ CONNACKパケットのReason Code 0X00(success)と、セッション状態を 0 または 1 に設定します。 コンセプト パケット。

コネクタ 理由コード –変数ヘッダでは、バイト 2 です。 CONNECT の理由コード。 サーバが CONNECT パケットを 128 以上の Reason コードで送信する場合。 それが必要 ネットワーク接続を閉じます。 下記の CONNECT Reason の 1 つで CONNACK パケットを送信しているサーバー コード。

バリュー ログイン Reason コード名 コンテンツ
0x00の 成功事例 接続は受け付けております。
128 の 0x80の 不特定エラー サーバは、障害の理由を明らかにしたくない、または他の理由のどれも コード お問い合わせ
129の 0x81の 変形したパケット CONNECT パケット内のデータは正しく解析できません。
130円 0x82の プロトコルエラー CONNECT パケットのデータはこの仕様に合致しません。
131の 0x83の 実装固有のエラー CONNECT は有効ですが、このサーバーでは受け入れられません。
132の 0x84の サポートされていないプロトコルバージョン Server は、クライアントが要求する MQTT プロトコルのバージョンをサポートしていません。
133の 0x85の クライアント識別子が有効でない クライアント識別子は有効な文字列ですが、サーバーでは許可されていません。
134の 0x86の 悪いユーザー名またはパスワード サーバは、クライアントが指定したユーザー名またはパスワードを受け入れません。
135の 0x87の 許可されていない クライアントは接続できません。
136 の 0x88の サーバーが利用できなくなった MQTTサーバーは利用できません。
137の 0x89の サーバーの忙しい サーバは多忙です。 もう一度お試しください。
138の 0x8Aの 禁止事項 このクライアントは管理行動によって禁止されています。 サーバー管理者に連絡する
140 円 0x8Cの 悪い認証方法 認証方法がサポートされていないか、認証方法に一致しない 現在位置: 使用。
144の 0x90の トピック名 無効 ウィールトピック 名前は誤字ではなく、このサーバーでは受け入れられません。
149 の 0x95の パケットが大きすぎる CONNECT パケットは、最大許容サイズを超えた。
151の 0x97の クォータは超過しました 実装または管理対象の制限が超過されました。
153の 0x99の ペイロード形式 無効 ウィールペイロードは指定されたペイロードフォーマットインジケータに一致しません。
154 の 0x9A 未サポート Server は保持メッセージをサポートせず、Will Retain は 1 に設定されました。
155の 0x9Bの QoSはサポートしていません Server は、Will QoS で設定した QoS をサポートしていません。
156の 0x9Cの 別のサーバーを使用する クライアントは、別のサーバーを一時的に使用する必要があります。
157の 0x9Dの サーバーの移動 クライアントは、別のサーバーを永続的に使用する必要があります。
159の 0x9Fの 接続速度が超過 接続速度制限が超過されました。
3.2.3 コンソール プロパティ

CONNACK プロパティの一部は CONNECT プロパティと似ています。 お問い合わせ 特性の長さ、セッション有効期限インターバル、受信最大、最大パケットサイズ、トピック最大値、 ユーザー登録 プロパティ、認証方法、認証データ。 詳細はセクションを参照してください。 3.1.2.11

最高のQoS -最大QoSのインジケータは 36(0X24) エラーを追加する 最大QoSが利用できない場合は、クライアントは最大QoSを使用します 2。 PUBLISH パケットでは、サーバーが QoS 1 や QoS 2 をサポートしていない場合は、最大 QoS を 送信する必要があります。 コンセプト パケットは、サポートできるQoSの最高値を示します。 QoS 1 や QoS 2 が公開されていないサーバー パケットは、リクエストされたQoSが0、1、または2を含むサブスクリプションパケットを受け入れます。

利用できる保持–インジケーター ログイン 37(0X25)バイト サーバがWill Messageが設定されている接続パケットを受信した場合 は、 保持メッセージをサポートしていない場合は、サーバーは接続リクエストを反映しなければなりません。 それは、 理由コード 0X9A で CONNACK を送信し、ネットワーク接続を閉じる必要があります。

クライアント識別子の割り当て – –インジケーター 割り当てられたクライアント識別子は18(0X12)バイトです。クライアントがゼロ長クライアントを使用して接続する場合 識別子 サーバは、接続と指定されたクライアント識別子に応答しなければなりません。 割り当てられたクライアント 識別子 サーバ上の他のセッションで現在使用されていない新しいクライアント識別子でなければなりません。

Reason 文字列 –理由の指標 文字列は 31 (0X1F) バイト。 UTF-8 エンコードされた文字列です。 それは検出可能のために設計されている人間読みやすい文字列であり、 クライアントから差別化されるべきではありません。 サーバは、この値を使用して追加 クライアントへの情報。 クライアントがその規模を増加させると、サーバーはこのアセットを送らない 指定された最大パケットサイズを超えてパケットを消費します。

ワイルドカードサブスクリプションが利用可能 -インジケーター お問い合わせ ワイルドカードサブスクリプションは40(0X28)バイトです。 値が0の場合、ワイルドカードのサブスクリプションは、 サポート 値が1の場合、サポートされます。 ワイルドカードのサブスクリプションは、一度以上含まれています お問い合わせ 0 または 1 以外のパケットと値がプロトコルエラーであると考えられます。

利用可能なサブスクリプション識別子 -ザ・オブ・ザ・ インジケーター サブスクリプション識別子は41(0X19)バイトです。 値が0の場合、サブスクリプション識別子は コメントはありません。 サポート 値が 1 の場合、サブスクリプション ID がサポートされます。 お問い合わせ 0 または 1 以外の値はプロトコルと見なされます。

利用可能な共有サブスクリプション –インジケーター お問い合わせ 利用可能な共有サブスクリプションは42(0X2A)バイトです。 値が0の場合、サブスクリプション識別子は コメントはありません。 サポート 値が 1 の場合、サブスクリプション ID がサポートされます。 お問い合わせ 0 または 1 以外の値はプロトコルと見なされます。

サーバは生き続ける –インジケーター サーバー Keep-Aliveは19(0X13)バイトです。 Server が CONNACK パケットに Keep-Alive を送る場合、この値は お問い合わせ CONNECT Packet で送信された Client Keep-Alive 値の代わりに使用されます。 サーバが送信されていない場合 Server は、Connect パケットの Client によって設定された保留値を使用します。 サーバーの場合 Keep-Alive は、プロトコルエラーと見なされます。

応答情報 – –インジケーター フィードバック 情報は26(0X1A)バイトです。 UTF-8 エンコードされた文字列です。 応答を作成するために主に使用されます トピック。 一度以上含まれている場合は、プロトコルエラーとして考慮する必要があります。

サーバー参照 –サーバーの表示器 参照は28 (0X1C)バイトです。 UTF-8 エンコードされた文字列です。 パケットに1回以上含まれている場合 プロトコルエラーと見なされます。 Server は、接続または接続内のサーバー参照を使用します。 Reason のコード 0X9C (別のサーバーを使用して下さい) または理由コード 0X9D (サーバー) が付いているパケットの切断 移動)。

3.2.4 コンソール ペイロード

制御パケットCONNACKはペイロードがありません。

3.3 スペイン語

PUBLISHパケットはクライアントからサーバーまたはその逆に転送され、 ログイン アプリケーションメッセージ

ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ (3) DUP フラグ QoSレベル ログイン
1 1
バイト2 ... 残り長さ

ドープ –重複フラグの位置は バイト 1 ビット 3。 DUP フラグが 0 に設定されている場合は、これが初めての場合、クライアントまたは Server は 試み PUBLISH パケットを送信します。 DUP フラグが 1 に設定されている場合は、それが再配布される可能性があることを示します。 お問い合わせ パケットを送信する前の試み

QoS -QoSの位置はバイト1、ビット 2-1. このフィールドは、アプリケーションメッセージの配信保証を示します。

QoS値 ビット2 ビット 1 コンテンツ
一度配達で
1 1 少なくとも一度配達
2 1 一度の配達
– – 1 1 予約 - 使用しないでください

残り -保持フラグの位置は バイト1、ビット 0. RETAIN フラグが 1 に設定されている場合は、クライアントがサーバーに送信した公開パケットで、サーバーはサーバーがサーバーにインストールする必要があります。 トピックの既存のメッセージを置換し、アプリケーションメッセージを保存します。 RETAIN フラグが 0 の場合 お問い合わせ クライアントからサーバーに送信されたPUBLISHパケットは、サーバーはメッセージが保持されず、 既存の保持メッセージを削除します。

残り長さ –変数ヘッダーを定義します。 そして、 ペイロードの長さ。

3.3.2 パンブ 可変ヘッダー

トピック名、パケット識別子、プロパティは変数のフィールドです ヘッダーの PUBLISH パケット。

トピック名 –ペイロードデータはトピックを識別します ご担当者名 公開された情報チャネル。 PUBLISH パケット変数ヘッダーのトピック名は、 はじめて フィールド。 これはUTF-8エンコードされた文字列でなければなりません。 PUBLISHパケットのトピック名には含まれていません。 ワイルドカード文字。 サーバが送信したPUBLISHパケットのトポイック名をサブスクライブクライアントへ 必須 購読者のトピックフィルターにマッチする

パケット識別子 – –PUBLISH パケットで パッケージ 識別子フィールドは、QoS レベル 1 または 2 のみ表示されます。

PUBLISH プロパティ –PUBLISH パケット プロパティ お問い合わせ CONNECTとCONNACKに似ています。 プロパティはプロパティの長さ、ペイロードフォーマットインジケータです。 メッセージ 有効期限間隔、トピックの別名、応答のトピック、相関データ、ユーザープロパティ、サブスクリプション識別子、 そして、 コンテンツタイプ 詳細については、セクションを参照してください。–3.1.2.11, 3.2.3.

3.3.3 PUBLISHペイロード

ペイロードに公開されているアプリケーションメッセージがあります。 コンテンツ そして、 アプリケーションに応じてデータの形式。 変数の長さの違い ヘッダー 固定ヘッダーの残りの長さフィールドはペイロードの長さです。 有効なのは ゼロ長ペイロードで公開されたパケット。

3.3.4 PUBLISHアクション
QoSレベル 期待される応答
カオス 0 なし
QoS 1 PUBACKパケット
QoS 2の特長 PUBREC パケット
3.4 PUBACK - PUBLISHアクノレッジメント

QoS 1のPUBLISHパケットの応答はPUBACKパケットです。

3.4.1 プッシュバック 固定ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ (1) 2018年1月1日
1
バイト2 ... 残り長さ
3.4.2 プッシュバック 可変ヘッダー

PUBLISHのパケット、PUBACKの理由からのパケット識別子 コード, プロパティ 長さ、および プロパティは、PUBACKパケットの変数ヘッダーのフィールドです

ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 パケット識別子 MSBについて
バイト 2 パケット識別子 LSBシリーズ
バイト 3 フィードバック 理由コード
バイト 4 プロパティの長さ
3.4.2.1 バック 理由コード

バイト3のPUBACK Reasonコード 理由コードと値はありません の (0X00) 残りの長さが2の場合に使用されます。

バリュー ログイン Reason コード名 コンテンツ
0x00の 成功事例 接続は受け付けております。
128 の 0x80の 不特定エラー サーバは、障害の理由を明らかにしたくない、または他の理由のどれも コード お問い合わせ
129の 0x81の 変形したパケット CONNECT パケット内のデータは正しく解析できません。
130円 0x82の プロトコルエラー CONNECT パケットのデータはこの仕様に合致しません。
131の 0x83の 実装固有のエラー CONNECT は有効ですが、このサーバーでは受け入れられません。
132の 0x84の サポートされていないプロトコルバージョン Server は、クライアントが要求する MQTT プロトコルのバージョンをサポートしていません。
133の 0x85の クライアント識別子が有効でない クライアント識別子は有効な文字列ですが、サーバーでは許可されていません。
134の 0x86の 悪いユーザー名またはパスワード サーバは、クライアントが指定したユーザー名またはパスワードを受け入れません。
135の 0x87の 許可されていない クライアントは接続できません。
136 の 0x88の サーバーが利用できなくなった MQTTサーバーは利用できません。
137の 0x89の サーバーの忙しい サーバは多忙です。 もう一度お試しください。
138の 0x8Aの 禁止事項 このクライアントは管理行動によって禁止されています。 サーバー管理者に連絡する
140 円 0x8Cの 悪い認証方法 認証方法がサポートされていないか、認証方法に一致しない 現在位置: 使用。
144の 0x90の トピック名 無効 ウィールトピック 名前は誤字ではなく、このサーバーでは受け入れられません。
149 の 0x95の パケットが大きすぎる CONNECT パケットは、最大許容サイズを超えた。
151の 0x97の クォータは超過しました 実装または管理対象の制限が超過されました。
153の 0x99の ペイロード形式 無効 ウィールペイロードは指定されたペイロードフォーマットインジケータに一致しません。
3.4.2.2 バック プロパティ

プロパティの長さ –PUBACKパケット変数 ヘッダー プロパティの長さは、可変バイト整数としてエンコードされます。 残りの長さが4未満の場合、 プロパティには長さがなく、値 0 が使われます。

ユーザープロパティ –ユーザープロパティは、 オファー クライアントへの追加情報 詳細については、セクションを参照してください。 – 3.1.3

理由の文字列 –すべてのものを提供するのに使用されています ネットワーク接続が閉じられている理由についてクライアントに情報。 理由についてもっと詳しく 文字列 セクションを参照してください。 – 3.2.3

3.4.3 PUBACKのペイロード

PUBACK制御パケットはペイロードがありません。

3.4.4 プッシュバック アクション

QoS 1デリバリープロトコルでは、送信者はPUBLISHパケットを処理する必要があります お問い合わせ 対応するPUBACKパケットが受信機から受信されるまで「未確認」と見なされます。 インスタグラム お問い合わせ QoS 1デリバリープロトコルは、クライアントがアプリケーションメッセージの権利を受け入れ、対応する フィードバック PUBLISH パケットの受信からパケット識別子を含むパケット。 PUBACKパケットを送信した後 お問い合わせ 受信機は、同じパケット識別子をユーティリティとして含んだ PUBLISH パケットの受信を検討する必要があります。 DUP フラグの構造に関係なく、メッセージ。

3.5 PUBREC – PUBLISH 受領

QoS 2のPUBLISHパケットは、PUBRECパケットの応答です。 QoS 2で プロトコル PUBRECの交換は2番目のパケットです。

3.5.1 PUBRECの特長 固定ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ (5) DUP フラグ QoSレベル ログイン
1 1
バイト2 ... 残り長さ
3.5.2 PUBREC 可変ヘッダー
QoS値 ビット2 ビット 1 コンテンツ
一度配達で
1 1 少なくとも一度配達
2 1 一度の配達
– – 1 1 予約 - 使用しないでください
3.5.2.1 PUBRECの特長 理由コード
バリュー ログイン Reason コード名 コンテンツ
0x00の 成功事例 接続は受け付けております。
128 の 0x80の 不特定エラー サーバは、障害の理由を明らかにしたくない、または他の理由のどれも コード お問い合わせ
129の 0x81の 変形したパケット CONNECT パケット内のデータは正しく解析できません。
130円 0x82の プロトコルエラー CONNECT パケットのデータはこの仕様に合致しません。
131の 0x83の 実装固有のエラー CONNECT は有効ですが、このサーバーでは受け入れられません。
132の 0x84の サポートされていないプロトコルバージョン Server は、クライアントが要求する MQTT プロトコルのバージョンをサポートしていません。
133の 0x85の クライアント識別子が有効でない クライアント識別子は有効な文字列ですが、サーバーでは許可されていません。
134の 0x86の 悪いユーザー名またはパスワード サーバは、クライアントが指定したユーザー名またはパスワードを受け入れません。
135の 0x87の 許可されていない クライアントは接続できません。
136 の 0x88の サーバーが利用できなくなった MQTTサーバーは利用できません。
137の 0x89の サーバーの忙しい サーバは多忙です。 もう一度お試しください。
138の 0x8Aの 禁止事項 このクライアントは管理行動によって禁止されています。 サーバー管理者に連絡する
140 円 0x8Cの 悪い認証方法 認証方法がサポートされていないか、認証方法に一致しない 現在位置: 使用。
144の 0x90の トピック名 無効 ウィールトピック 名前は誤字ではなく、このサーバーでは受け入れられません。
149 の 0x95の パケットが大きすぎる CONNECT パケットは、最大許容サイズを超えた。
151の 0x97の クォータは超過しました 実装または管理対象の制限が超過されました。
153の 0x99の ペイロード形式 無効 ウィールペイロードは指定されたペイロードフォーマットインジケータに一致しません。
3.5.2.2 リリース プロパティ

プロパティの長さ– PUBREC パケット変数ヘッダプロパティの長さはエンコードされます として 変数 バイト整数。 残りの長さが4未満の場合、プロパティは長さと値0がありません お問い合わせ 使用。

ユーザープロパティ- ユーザープロパティは、より多くの追加情報を提供するために使用されています お問い合わせ クライアント。 詳細については、セクションを参照してください。 – 3.1.3

レイソン文字列– – すべての情報をクライアントに提供するために使用される なぜ ネットワーク接続は終了いたしました。 理由の詳細については 文字列 セクションを参照してください。 3.2.3

3.5.3 PUBREC ペイロード

PUBRECパケットの制御パケットはペイロードがありません。

3.5.4 PUBREC アクション
QoSレベル 期待される応答
カオス 0 なし
QoS 1 PUBACKパケット
QoS 2の特長 PUBREC パケット
3.6 PUBREL – PUBLISHリリース

PUBRECパケットの応答はPUBRELパケットです。 QoS 2プロトコル 取引所の取引 3番目のパケットはPUBLISH Releaseパケットです。

ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ (6) 2018年1月1日
1
バイト2 ... 残り長さ

固定ヘッダーのビット3,2,1と0は、PUBRELパケットに割り当てられます。 必須 それぞれ0,0,1,0に設定します。 変数ヘッダーの長さ – 変数ヘッダーの長さ。

3.6.2 プブレーキ 可変ヘッダー

PUBRECパケット、PUBREL Reason コード、および プロパティ PUBREL パケットの変数ヘッダーのフィールド。

ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 パケット識別子 MSBについて
バイト 2 パケット識別子 LSBシリーズ
バイト 3 アクセサリー 理由コード
バイト 4 プロパティの長さ
3.6.2.1 プラグ 理由コード

バイト3のPUBREL Reasonコード 理由コードと値がない (0X00) 残りの長さが2の場合に使用されます。 クライアントまたはサーバーは、PUBRELパケットを送らなければならない お問い合わせ PUBREL Reason コードの1つの値。

バリュー ログイン Reason コード名 コンテンツ
0x00の 成功事例 メッセージを公開しました。
146の 0x92の パケット識別子が見つかりません パケット識別子は知られていません。 これは回復中にエラーではありませんが、他の時に インフォメーション クライアントとサーバー上のセッションの状態の不一致。
3.6.2.2 プラグ プロパティ

プロパティの長さ– PUBREL パケット変数ヘッダー 特性の長さはとして刻まれます は、 変数 バイト整数。 残りの長さが4未満の場合、プロパティは長さがなく、値0が 使用。

ユーザープロパティ- ユーザープロパティは、より多くの提供に使用されます 追加の情報 クライアント。 詳細については、セクションを参照してください。 – 3.1.3

レイソン文字列– – すべてのものを提供するのに使用されています クライアントに関する情報について なぜ ネットワーク接続は終了いたしました。 理由の詳細については 文字列 セクションを参照してください。 3.2.3

3.6.3 PUBRELの特長 ペイロード

PUBRELパケットの制御パケットはペイロードがありません。

3.6.4 プブレーキ アクション
QoSレベル 期待される応答
カオス 0 なし
QoS 1 PUBACKパケット
QoS 2の特長 PUBREC パケット
3.7 PUBCOMP – PUBLISHコンプリート

PUBRELパケットの応答はPUBCOMPパケットです。 QoS 2プロトコル 取引所の取引 4つ目と最後のパケットは、PUBLISHコンプリートパケットです。

3.7.1 PUBCOMPの特長 固定ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ (1) 2018年1月1日
1
バイト2 ... 残り長さ
3.7.2 PUBCOMPの特長 可変ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 パケット識別子 MSBについて
バイト 2 パケット識別子 LSBシリーズ
バイト 3 フィードバック 理由コード
バイト 4 プロパティの長さ
3.7.2.1 PUBCOMPの特長 理由コード

PUBCOMPについて バイト3の理由コード 理由コードと値はありません の (0X00) 残りの長さが2の場合に使用されます。 クライアントまたはサーバーは、PUBCOMP を送信する必要があります パケット PUBCOMPの理由コードの1つの値を使って。

バリュー ログイン Reason コード名 コンテンツ
0x00の 成功事例 メッセージを公開しました。
146の 0x92の パケット識別子が見つかりません パケット識別子は知られていません。 これは回復中にエラーではありませんが、他の時に クライアントとサーバーのセッション状態の不一致を示します。
3.7.2.2 PUBCOMPの特長 プロパティ

プロパティの長さ –PUBCOMP パケット変数 ヘッダプロパティの長さは、可変バイト整数としてエンコードされます。 残りの長さが4未満の場合 プロパティは長さがなく、値 0 が使用されます。

ユーザープロパティ –ユーザープロパティは、 オファー クライアントへの追加情報 詳細については、セクションを参照してください。 – 3.1.3

理由の文字列 –すべてのものを提供するのに使用されています ネットワーク接続が閉じられている理由についてクライアントに情報。 理由についてもっと詳しく 文字列 セクションを参照してください。 – 3.2.3

QoSレベル 期待される応答
カオス 0 なし
QoS 1 PUBACKパケット
QoS 2の特長 PUBREC パケット
3.8 サブスクライブ

SUBSCRIBE パケットは、クライアントからサーバーに 1 つまたは 1 つを生成します。 もっと詳しく サブスクリプション 各サブスクリプションは、クライアントの興味を 1 つのサブスクリプションまたは複数のサブスクリプションに保存します。 トピック。 サーバは、PUBLISHパケットをクライアントに送信し、アプリケーションメッセージを最大で渡します。 QoSについて これらのサブスクリプションと互換性のあるトピック。

ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ (8) 2018年1月1日
1
バイト2 ... 残り長さ

固定ヘッダーのビット3,2,1と0はSUBSCRIBEパケットに割り当てられます。 必須 それぞれ0,0,1,0に設定します。 変数ヘッダの長さとペイロードの長さの長さの維持。

3.8.2 サブスクライブ 可変ヘッダー

パケット識別子とプロパティは、変数ヘッダのフィールドです。 お問い合わせ SUBSCRIBE パケット。

コンテンツ 7月7日 6月6日 5月5日 3 3 2 1
パケット識別子
バイト 1 パケット識別子 MSB (0)
バイト 2 パケット識別子 LSB (10) 1 1
バイト 3 特性の長さ (0)
3.8.2.1 サブスクライブ プロパティ

プロパティの長さ –SUBSCRIBEパケット 変数ヘッダー プロパティの長さは、可変バイト整数としてエンコードされます。

サブスクリプション識別子 – –インジケーター サブスクリプション識別子は11(0X0B)バイトです。サブスクリプション識別子が0として値を持っている場合、それは パケットに含まれていると、プロトコルエラーとして考慮されることになります。 それは持っていますことができます バリュー から 1 へ 268,435,455.

ユーザープロパティ –ユーザープロパティは、 詳しくはこちら クライアントへの追加情報。 詳細については、セクションを参照してください。 – 3.1.3

3.8.3 サブスクライブ ペイロード

SUBSCRIBE パケットペイロードには、特定するトピックフィルタのリストが含まれています お問い合わせ クライアントが購読したいトピック。 トピックフィルタの後にサブスクリプションオプションのバイト。 ザ・オブ・ザ・ トピック フィルタはUTF-8エンコードされた文字列です。 SUBSCRIBEのペイロードには、少なくとも1つのトピックフィルタと1つが含まれている必要があります。 カップル サブスクリプションオプション。

3.8.3.1 サブスクリプションオプション

最大QoSフィールドは、サブスクリプションオプションのビット0と1で表されます。 お問い合わせ QoS フィールドの最大値が 3 の場合、プロトコルエラーとして考慮されます。 ローカルオプションはありません タイトル サブスクリプションオプションのビット2。 ローカルビットが1に設定されていない場合、プロトコルエラーとみなされます。 として保持して下さい 公開オプションは、サブスクリプションオプションのビット3で表されます。 RETAIN フラグが 0 に設定されている場合は、 お問い合わせ アプリケーションメッセージは、これらのサブスクリプションオプションを使用して転送されます。 RETAINが1に設定されている場合は、メッセージの保持サブスクリプションオプションが起動したときに送信されます。 処理オプションの保持 タイトル ビット4と5のサブスクリプションオプション。 サブスクリプションが確立されると、保持されたメッセージ お問い合わせ 送信する。 Retain 処理オプションの値は 3 で、プロトコルエラーです。 値と値 コンテンツ サブスクリプションオプションは、

0 = 保持された送信 サブスクリプション中のメッセージ。

1 = サブスクリプションがない場合のみ、Retained Messages を送信 プレゼント。

2 = サブスクリプション中に保持メッセージを送信しないでください。

サブスクリプションオプションのペイロード形式:

コンテンツ 7月7日 6月6日 6月6日 3 3 2 1
トピックフィルタ
バイト 1 長さ MSB
バイト 2 長さ LSB
バイト 3..N トピックフィルタ
サブスクリプションオプション
2018年1月1日 保持の処理 ラップ NLの QoSについて

RAP – 公開として保持.
NL - ローカルなし

ペイロードバイトフォーマット:

コンテンツ 7月7日 6月6日 5月5日 3 3 2 1
トピックフィルタ
1 長さ )
2 長さ ) 1 1
3 「a」 1 1 1
3 . . . 1 1 1 1 1
5月5日 「b」 1 1 1
サブスクリプション
6月6日 サブスクリプションのオプト ) 1
トピックフィルタ
7月7日 長さ )
8月8日 長さ ) 1 1
9月9日 「c」 1 1 1 1
. . . 1 1 1 1 1
1 「d」 1 1 1
サブスクリプション
2 サブスクリプションのオプト 1
3.8.4 サブスクライブ アクション

サーバは、SUBSCRIBE を受信したときに SUBACK パケットに応答しなければなりません パッケージ クライアントから。 SUBSCRIBEとSUBACKパケットのパケット識別子は同じです。

3.9 バックアップ – SUBSCRIBE Acknowledgement

Server は、受信の確認のために、クライアントに SUBACK パケットを送信します。 そして、 クライアントから送信されたSUBSCRIBEパケットの処理。 SUBACKに含まれている理由コードのリスト パッケージ SUBSCRIBE が要求する最大 QoS レベルを指定します。

3.9.1 SUBACK固定ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ (8) 2018年1月1日
1
バイト2 ... 残り長さ
3.9.2 バックアップ 可変ヘッダー

SUBSCRIBE パケットとプロパティのパケット識別子は、フィールド内のフィールドです。 お問い合わせ SUBACK変数ヘッダーのパケット。

ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 パケット識別子 MSBについて
バイト 2 パケット識別子 LSBシリーズ
バイト 3 フィードバック 理由コード
バイト 4 プロパティの長さ
3.10 サブスクライブ

一部のトピックから退会するには、クライアントはUNSUBSCRIBEリクエストを送信します。 サーバ。

3.10.1 サブスクライブ 固定ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ (8) 2018年1月1日
1
バイト2 ... 残り長さ
3.10.2 免責事項 可変ヘッダー

パケット識別子とプロパティは変数のフィールドです ヘッダーのヘッダー UNSUBSCRIBE 制御パケット。

3.10.2.1 サブスクライブ プロパティ

プロパティの長さ –UNSUBSCRIBE パケット 変数 header プロパティの長さは変数バイト整数としてエンコードされます。

ユーザープロパティ –ユーザープロパティは提供するために使用されます もっと詳しく クライアントへの追加情報。 詳細については、セクションを参照してください。 – 3.1.3

3.10.3 サブスクライブ ペイロード

UNSUBSCRIBEパケットペイロードには、識別するトピックフィルタのリストが含まれています お問い合わせ クライアントが購読したいトピック。 トピックフィルタの後にサブスクリプションオプションのバイト。 ザ・オブ・ザ・ トピック フィルタはUTF-8エンコードされた文字列です。 UNSUBSCRIBE 制御パケットペイロードには、1つのトピックフィルタが含まれている必要があります。 お問い合わせ UNSUBSCRIBE 制御パケットはペイロードがないので、プロトコルエラーです。

コンテンツ 7月7日 6月6日 5月5日 3 3 2 1
トピックフィルタ
バイト 1 全長 MSB (0)
バイト 2 長さ LSB (3) 1 1
バイト 3 'a' (0x61) 1 1 1
バイト 4 '/' (0x2F) 1 1 1 1 1
バイト 5 ‘b’ (0x62) 1 1 1
トピックフィルタ
バイト 6 全長 MSB (0)
バイト 7 長さ LSB (3) 1 1
バイト 8 ‘c’ (0x63) 1 1 1 1
バイト 9 '/' (0x2F) 1 1 1 1 1
バイト 10 'd' (0x64) 1 1 1
3.10.4 サブスクライブ アクション

UNSUBSCRIBE パケットで提供されるトプチフィルタは、 によって クライアントがサーバーに持っている現在のトピックフィルタ。 フィルターが正しくマッチすれば、 サブスクリプション 追加処理がない場合、削除する必要があります。

  • トピックフィルタと互換性のある新しいメッセージを追加するのを止め、 クライアント。
  • トピックフィルタと互換性のある QoS 1 または QoS 2 メッセージを完了する必要があります。 クライアントに届けられます。
  • 既存のメッセージをクライアントに提供し続けることができます。
3.11 UNSUBACK - UNSUBSCRIBE ACKNOWLEDGEMENT(アンスバック)

サーバはUNSUBACKパケットをクライアントに送信し、確認のために 領収書および クライアントから送信されるUNSUBSCRIBEパケットの処理。

3.11.1 不眠 固定ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT 制御のパケットのタイプ (11) 2018年1月1日
1
バイト2 ... 残り長さ
3.11.2 バックアップ 可変ヘッダー

UNSUBSCRIBE 制御パケットとプロパティのパケット識別子は、 UNSUBACKパケットの変数ヘッダ内のフィールド。

ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 パケット識別子 MSBについて
バイト 2 パケット識別子 LSBシリーズ
バイト 3 フィードバック 理由コード
バイト 4 プロパティの長さ
3.11.2.1 不眠 プロパティ

プロパティの長さ –UNSUBACKパケット 変数ヘッダー プロパティの長さは、可変バイト整数としてエンコードされます。

理由の文字列 –すべてのものを提供するのに使用されています ネットワーク接続が閉じられている理由についてクライアントに情報。 理由についてもっと詳しく 文字列 セクションを参照してください。 – 3.2.3

ユーザープロパティ –ユーザープロパティは、 詳しくはこちら クライアントへの追加情報。 詳細については、セクションを参照してください。 3.1.3

3.11.3 バックアップ ペイロード

UNSUBACK制御パケットペイロードは、Reasonのリストを運びます コード。 UNSUBSCRIBE パケットのトピックフィルタの順番は、その理由コードの順に一致します UNSUBACKパケット。 UNSUBACK 制御パケットペイロードには、それぞれの理由コードの1つが含まれている必要があります。 トピックフィルタ。

バリュー ログイン Reason コード名 コンテンツ
0x00の 成功事例 サブスクリプションは削除されます。
17 日 0x11の サブスクリプションが存在しません クライアントが使用する互換性のあるトポックフィルタはありません。
128 の 0x80の 不特定エラー 退会が完了できなかったり、サーバーが理由を開示したくない その他 理由コードは適用しなかった。
131の 0x83の 実装固有のエラー サーバは、有効な UNSUBSCRIBE パケットを受け入れません。
135の 0x87の 許可されていない クライアントが許可されていないサブスクリプションを作成するには、許可されていないものはありません。
143 の 0x8Fの トピックフィルタ無効 トピックフィルタは、このクライアントでは許可されていませんが、正しく形成されます。
145の 0x91の 使用中のパケット識別子 指定されたパケット識別子は既に使用中です。
3.12 PINGREQ - ピンリクエスト

PINGREQ 制御パケットは、クライアントからサーバーに送信されます。 利用目的 ピンレック パケットは、他のMQTT制御パケットが送信されず、クライアントが生きているサーバーに示します。 から クライアントをサーバへ。 サーバをリクエストして、サーバーが稼働していることを確認してください。 ネットワーク演習 ネットワーク接続が生きていることを識別します。 PINGREQ 制御パケットは処理に使用されます お問い合わせ生き続ける. . 詳細については、セクションを参照してください。 3.1.2.10

3.12.1 ピンレック 固定ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ (12) 2018年1月1日
1
バイト2 ... 残り長さ
3.12.2 ピンレック 可変ヘッダー

PINGREQ 制御パケットに変数ヘッダはありません。

3.12.3 ピンレック ペイロード

PINGREQコントロールパケットにペイロードはありません。

3.12.4 ピンレック アクション

サーバは PINGRESP パケットをクライアントに送信しました。 PINGRESP制御パケットは お問い合わせ PINGREQ パケットの応答

3.13 ピンレスプ – ピンレス

PINGRESP 制御パケットは、クライアントからサーバーに送信されます。 指定する サーバをアクティブに。 PINGREQ 制御パケットの応答です。 PINGRESP 制御パケットは、 お問い合わせ 保留中の処理。 詳細については、セクションを参照してください。 3.1.2.10

3.13.13.1ピンレスプ 固定ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT 制御のパケットのタイプ (13) 2018年1月1日
1
バイト2 ... 残り長さ
3.13.2ピンレスプ 可変ヘッダー

PINGRESP 制御パケットに変数ヘッダはありません。

3.13.3ピンレスプ ペイロード

PINGRESP制御パケットにペイロードはありません。

3.13.4 ピンレスプ アクション

クライアントは、この PINGRESP 制御パケットを取得しても動作しません。

3.14 ディスコネクト

最終的な MQTT 制御パケットは、から送信される DISCONNECT パケットです クライアント サーバへ。 ネットワーク接続が閉じられている理由を指定します。 MQTT クライアントがこれを送った ネットワーク接続を閉じる前のパケット。 理由コード 0X00 で DISCONNECT パケットを送信する前に (正常な接続)ネットワーク接続が閉じられ、接続には、 出版情報 詳細は 3.1.2.5 を参照してください。

3.14.1ディスコネクト 固定ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT制御パケットタイプ (8) 2018年1月1日
1
バイト2 ... 残り長さ

クライアントまたはサーバーは、予約されたビットが 0 に設定されていることを確認します。 ザ・オブ・ザ・ スタッフ紹介 bits の値は 0X81 という理由で、disconnect パケットを送信します。 詳しくはこちらをご覧ください。 セクション 3.13。

変数ヘッダーの長さ – 変数ヘッダーの長さ。

3.14.2 ディコネクト 可変ヘッダー
コンテンツ 7月7日 6月6日 5月5日 3 3 2 1
Reason コードを切断する
バイト 1
バイト 2 長さ (5) 1 1
バイト 3 セッション有効期限インターバル識別子 (17) 1
バイト 4 セッション調査インターバル (0)
バイト 5
バイト 6
バイト 7
3.14.2.1 ディスクコネクト 理由コード

DISCONNECT の理由コードは、変数ヘッダの byte 1 です。 値 0X00 使用している 残りの長さ値が1未満の場合 バイト符号なしの理由コードフィールドの値が表示されます お問い合わせ

バリュー ログイン Reason コード名 投稿ナビゲーション コンテンツ
0x00の 通常の切断 クライアントまたはサーバー 接続は普通閉まります。 送信されません。
3 0x04の ウィルメッセージとの接続解除 クライアント クライアントは接続を解除したいが、サーバーは意志メッセージを公開する必要があります。
128 の 0x80の 不特定エラー クライアントまたはサーバー 接続が閉じられ、サーバーが理由やその他の開示を望んでいません 理由コード 応募しなかった。
129の 0x81の 変形したパケット クライアントまたはサーバー この仕様は、受信したパケットが確認されません。
130円 0x82の プロトコルエラー クライアントまたはサーバー 注文パケットの予期しない、またはアウトを受けました。
131の 0x83の 実装固有のエラー クライアントまたはサーバー この実装では処理できませんが、受信したパケットは有効です。
135の 0x87の 許可されていない サーバー サーバのリクエストは承認されたものではありません。
137の 0x89の サーバーの忙しい サーバー このクライアントからの処理リクエストを続行し、サーバーも忙してしまうことはありません。
139 の 0x8Bの サーバのシャットダウン サーバー サーバをシャットダウン。
141の 0x8Dの 続ける – 生きているタイムアウト サーバー パケットはなく、1.5倍のキープが受け継がれています。 タイムアウト。 ですから、接続は閉じます。
142人 0x8Eの セッションは終了しました サーバー 同じクライアント ID との別の接続が添付されているため、この接続を閉じます。
143 の 0x8Fの トピックフィルタ無効 サーバー トピックフィルタは正しく形成されますが、このSeverによって受け入れられません。
144の 0x90の トピック名 無効 クライアントまたはサーバー このクライアントまたはサーバーでは、トプチフィルタは許可されていませんが、正しく形成されます。
147の 0x93の 受け取る 最高は超過しました クライアントまたはサーバー クライアントまたはサーバーは、受信した最大出力以上を受信しました。 フィードバック または PUBCOMP。
148の 0x94の トピック 別名で無効 クライアントまたはサーバー PUBLISH コントロール パケットには、トピックよりも大きい Topic Alias が含まれています。 alias 値 クライアントやサーバーから受け継がれ、CONNECT OR CONNACK コントロールに送信 パケット。
149 の 0x95の パケットが大きすぎる クライアントまたはサーバー パケットサイズの値は、このクライアントの最大のパケットサイズよりも大きいか サーバー。
150円 0x96の メッセージ率が高すぎる クライアントまたはサーバー クライアントやサーバーから受け取ったデータレートが高すぎます。
151の 0x97の クォータは超過しました クライアントまたはサーバー 実行または管理限界を超えた。
152号 0x98の 管理行動 クライアントまたはサーバー 管理行動により接続がクローズされます。
153の 0x99の ペイロード形式 無効 クライアントまたはサーバー 指定されたペイロード形式インジケータはペイロード形式と一致しません
154 の 0x9A 未サポート サーバー 保持されたメッセージはサーバーによってサポートされません。
155の 0x9Bの QoSはサポートしていません サーバー CONNACK 制御パケットでは、クライアントは QoS よりも大きい QoS を指定しました。 で指定された 最高QoS。
156の 0x9Cの 別のサーバーを使用する サーバー サーバは一時的に変更されます。
157の 0x9Dの サーバーの移動 サーバー サーバの場所は永続的に変更されます。
158の 0x9Eの 共有サブスクリプションがサポートされていない サーバー 共有サブスクリプションはサーバーによってサポートされていません。
159の 0x9Fの 接続速度が超過 サーバー クローズド接続のため、接続率が高すぎます。
160円 0xA0の 最大接続時間 サーバー この接続の承認された最大接続時間が超過されました。
161号 0xA1の サブスクリプション識別子がサポートされていない サーバー 共有サブスクリプションはサーバーによってサポートされていません。
162円 0xA2 ワイルドカードサブスクリプションはサポートされていません サーバー ワイルドカードのサブスクリプションはサーバーによってサポートされていません。
3.15 AUTH -認証交換

AUTH パケットはクライアントからサーバーまたはその逆にクライアントから送られます。 応答認証などの延長認証の交換 クライアントまたはサーバー AUTH パケットの送信 お問い合わせ CONNECT パケットが同じ認証方法を持っていない場合、プロトコルエラー。

3.15.1 AUTH 固定ヘッダー
ビット 7月7日 6月6日 5月5日 3 3 2 1
バイト 1 MQTT 制御パケットタイプ (15) 2018年1月1日
1
バイト2 ... 残り長さ
3.15.2オース 可変ヘッダー

Reason コードとプロパティは、変数ヘッダーのフィールドです。 AUTH 制御パケット。

3.15.2.1の特長 Reason コードを認証

認証の理由コードは変数ヘッダのバイト0です。 値が バイト 符号化されていない認証理由のコードフィールドは以下のとおりです。 認証理由コードの1つ AUTH 制御パケットの送信者によって使用される。

バリュー ログイン Reason コード名 投稿ナビゲーション コンテンツ
0x00の 成功事例 サーバー 成功した認証
24 日 0x18の 認証を続行 クライアントまたはサーバー 認証は別のステップを継続します。
25 日 0x19の 再認証 クライアント 再認証開始

Reason コードが 0x00 (成功) で、属性がない場合、理由 コードコード プロパティの長さは省略できます。 この場合、AUTH の残りの長さは 0 です。

3.15.2.2 オース プロパティ

プロパティの長さ –AUTH パケット変数 ヘッダー プロパティの長さは、可変バイト整数としてエンコードされます。

理由の文字列 –すべてのものを提供するのに使用されています ネットワーク接続が閉じられている理由についてクライアントに情報。 理由についてもっと詳しく ストリング セクションを参照してください。 – 3.2.3.

ユーザープロパティ –ユーザープロパティは提供するために使用されます もっと詳しく クライアントへの追加情報。 詳細は、– 3.1.3を参照してください。

認証方法 –本人確認 使用方法 認証方法がいくつかあります。 詳細は、セクション3.1.2.11を参照してください。

認証データ – –ユーザー名とパスワード お問い合わせ クライアントまたはサーバーにそのアイデンティティを証明する必要があります。 詳しくはこちら セクションを参照してください。 3.1.2.11

3.15.3 AUTHペイロード

AUTH 制御パケットにペイロードはありません。

3.15.4 AUTH アクション

詳細は、拡張認証に関するセクション4.12を参照してください。

4. 操作上の行動
4.1 セッション状態

QoS 1とQoS 2プロトコルを有効にするには、クライアントとサーバーを接続する必要があります ステート クライアント識別子は、セッションレベルと呼ばれます。 サーバはサブスクリプションを一部として保存します セッション状態。 セッションはネットワーク接続の順番で継続できます。 最後まで続く 最新情報 ネットワーク接続とセッションの有効期限間隔。
クライアントのセッション状態は次のとおりです。

  • QoS 1 と QoS 2 メッセージがサーバーに送信されましたが、完全に認識されていない (一部) 認定)。
  • QoS 2 メッセージはサーバーから受け取られましたが、サーバーから完全に受信されていない 免責事項 (部分的に認められた)

サーバのセッション状態は次のようになります。

  • 残りのセッション状態が空になっていても状態のセッションの存在。
  • サブスクリプション識別子を含むサブクライアントサブスクリプション。
  • QoS 1とQoS 2のメッセージがクライアントに送信されましたが、完全に認識されていません。
  • QoS 1とQoS 2のメッセージをクライアントとオプションでQoS 0メッセージを送信する 転送する クライアント。
  • QoS 2 クライアントから受け取ったメッセージ。 ただし、Will メッセージとWill 遅延間隔はありません。 スタッフ お問い合わせ
  • セッションが現在接続されていない場合、セッション状態が破棄されます。
4.1.1 セッション状態の保存

ネットワーク接続が開くと、クライアントとサーバーセッションのステータス お問い合わせ 捨てられません。 ネットワーク接続が閉じられ、セッションが切れた場合は、サーバーは破棄しなければなりません お問い合わせ セッションステータス

4.2 ネットワーク接続

ザ・オブ・ザ・MQTTの特長 プロトコル注文したストリームを配信するために基本的なトラフィックが必要です。 ロスレス, クライアントからサーバー、サーバー、クライアントにバイトを流します。

4.3 QoSとプロトコルフロー

QoS(サービスの品質)は、確実にメッセージが配信される方法を定義します。 それは保障します メッセージは、選択したレベルに応じて、送信者から受信機に適切に送信されます。 配達保証。 この機能の主な目標は、メッセージが成功していることを確認することです 1つのポイントから別のポイントに送信。 3つありますQoSのレベル, 名称: QoS 0, QoS 1, そしてQoS 2.

4.3.1 QoS 0: 一度に

メッセージは対応するクライアントに配信されましたが、返信は送信されません。 によって 受信機。 メッセージは、受取人に到着します。

ベンダーアクション 制御パケット 受信機の行為
PUBLISH QoS 0、DUP=0
———->
アプリケーションを配信 適切な受信者へのメッセージ
4.3.2 QoS 1: 少なくとも一度

メッセージは、送信者によって数回取得された 確認事項 取得しました。

ベンダーアクション MQTTの特長 制御パケット 受信機の行為
保存メッセージ
PUBLISH QoS 1のDUP=0を送って下さい、 ———->
アプリケーションメッセージ1のオンワード配信を開始
<——-< プッシュバック
メッセージを隠す
4.3.3 QoS 2: 正確に一度

送信者と受信機は、メッセージの1つのコピーだけを確実にするために従事しています 受け取られた。

ベンダーアクション MQTTの特長 制御パケット 受信機の行為
保存メッセージ
PUBLISH QoS 2のDUP=0
———->
ショップその後、アプリケーションメッセージ1のオンワード配信を開始
PUBRECについて
<——-<
捨てられたメッセージ、店 PUBREC は受け取りました
アクセサリー
———->
マスタード
PUBCOMPを送る
<——-<
保存状態を破棄
4.4 メッセージ受信

サーバが受信するアプリケーションメッセージの所有権を取るとき、 追加する クライアントの互換性のあるサブスクリプションのセッション。

4.5 メッセージの注文
  • クライアントが公開されたパケットを返すとき、元の PUBLISH パケットは、 お問い合わせ 送信された注文(QoS 1とQoS 2のメッセージに適用できます)。
  • クライアントは、PUBLISHパケットを受け取った順番にPUBACKパケットを送信しなければなりません お問い合わせ 送信者(QoS 1メッセージ)
  • クライアントは、関連するパケットが受け取った順番にPUBRECパケットを送信しなければなりません お問い合わせ 送信者 (QoS 2 メッセージ).
  • クライアントは、関連するPUBRECパケットが受信された順番にPUBRELパケットを送信しなければなりません (QoS) 2 メッセージ)
4.6 トピック名とトピックフィルタ
4.6.1 トピックワイルドカード

トピック名を分離するために、トピックレベルの分離器が使用されます。 お問い合わせ 分割する いくつかの「トピックレベル」によるタイトル。 サブスクリプショントピックフィルタには、特別なワイルドカード文字が含まれる場合があります。 ということ クライアントが複数のトピックを同時に購読できるようにします。 ワイルドカード文字はトピックで使用できます トピック名ではなく、フィルタ。

4.6.1.1 トピックレベルの分離器

フォワードスラッシュ('/' U+002F)は、トピック内の各レベルを分けるために使用されます ツリーと トピック名に階層構造を提供する。 トピックレベルの分離器の使用はあります 重要なポイント トピックフィルタの2つのワイルドカード文字の1つは、サブスクライブクライアントによって表されます。 トピック レベルセパレータは、トピックフィルタやトピック名でどこでも表示できます。

4.6.1.2 マルチレベルワイルドカード

数字記号('#' U+0023)は、任意のために適用されるワイルドカード文字です ポジション トピック。 マルチレベルのワイルドカードは、親と子の両方のレベルを表します。 マルチレベルのワイルドカード キャラクター 自身で指定するか、トピックレベルのセパレータに従う必要があります。 どちらの場合も、それは最後のものでなければなりません トピックフィルタで指定された文字。

4.6.1.3の特長 シングルレベルワイルドカード

シングルレベルのワイルドカードは、ヘッダフィルタの任意のレベルで使用できます。 どこにあるか 使用すると、フィルタのサイズ全体を占める必要があります。 トピックの複数のレベルで使用できる フィルター マルチレベルのワイルドカードと組み合わせて使用できます。

4.6.2 $で始まるトピック

トピック名は $ 文字で始まりますが、 # または + で始まりません キャラクター。 ザ・オブ・ザ・ サーバーは、トピック名を使用して、クライアントが他のクライアントとメッセージを交換しないようにする必要があります。 先頭の $ 文字で始まります。

4.6.3 トピックのセマンティックおよび使用法
  • 各トピック名とトピックフィルタは、少なくとも1つの長い文字を含む必要があります。
  • トピック名とトピックフィルタには、スペースの文字とケースに敏感な文字を含むことができます。
  • トピック名とトピックフィルタには、Null 文字 (Unicode U+0000) が含まれておらず、Null 文字を含まないでください。 暗号化 以上65,535バイト。
  • リードまたは後方 ‘/’ は、ユニークなトピック名またはトピックフィルタを作成します。
  • 文字のみのトピック名またはトピックフィルタは有効です

サブスクリプションを作成するとき、サーバーと互換性のあるサーバーは、任意の トピック名またはトピックフィルタのデフォルトまたは無許可文字の変更または変更

4.7 サブスクリプション

MQTT は 2 つのタイプのサブスクリプションを提供します。

  • 非共有サブスクリプション
  • 共有サブスクリプション
4.7.1 非共有サブスクリプション

非共有サブスクリプションでは、各クライアントは特定のトピックを購読しました 受け取る 同じ購読されたトピックに公開されているすべてのメッセージのコピー。 セッションは1つだけある 同じトピックフィルタで非共有サブスクリプションなので、トピックフィルタはキーとして使用できます インフォメーション そのセッションのサブスクリプション。 複数のクライアントが独自の非共有サブスクリプションを持っている場合 お問い合わせ トピックは、各クライアントが、購読されたトピックに関するアプリケーションメッセージの公開された独自のコピーを取得します。 お問い合わせ 共有されていないサブスクリプションは、複数の間でアプリケーションメッセージの残高をロードすることができません 各購読者が各メッセージで提供される場合、クライアントを消費します。

4.7.2 共有サブスクリプション

共有サブスクリプションでは、各メッセージを購読者にのみ配信されます。 トピック クライアント。 共有サブスクリプションは、MQTT の複数のサブスクライブセッションに関連付けられています。 いいね! 非共有サブスクリプションである未共有サブスクリプションで、トピックフィルタとサブスクリプションもあります。 オプション。 しかし、そのトピックフィルタと互換性のある問題は、その1つにのみ送信されます サブスクリプションセッション。 共有サブスクリプションは、複数の消費クライアントが共有する便利な場所です 加工プロセス 並行して出版物の。

Topic Filterの特別なスタイルの形式は、共有を識別します サブスクリプションは : : :

ドル 共有/{ShareName}/{filter}

お問い合わせ

$Share - 共有サブスクリプションのトピックを表す文字のシーケンス フィルター。

{共有名} – "/", "+" または "#" のない文字列。

{filter} の 文字列の残りの部分には、同じ構文とセマティクスが含まれている トピック 非共有サブスクリプションでフィルタリングします。

4.8 フロー制御

MQTTクライアント間でデータの伝送速度の最適化が行われる 流れによって 制御。 クライアントとサーバーの制御と受信数の最大値を使用して 未認識のPUBLISHパケット。 受信最大は、割り当てを送信する最大1つを確立します。 お問い合わせ PUBLISH QoSの個数を制御するために使用 > PUBACKを受信せずに送信できる0パケット(QoSの場合) 1) 1 または PUBCOMP (QoS 2)のため。 クライアントまたはサーバーは、初期の send quota 値を設定します。 受信最大。 PUBLISH パケットをそれぞれ送信する際には、 quota 値が減少します。 もし、 送信する quota 値がゼロになり、クライアントやサーバーが QoS>0 で PUBLISH パケットを送信できません。 さらに、 お問い合わせ クライアントまたはサーバーはプロセスを継続し、実際には2つの方法で、 quota の値を送信します。

  • PUBACK または PUBCOMP パケットのリトリーバルがエラーコードを運んだたびに。
  • 毎回、PUBRECパケットのリトリーバルを0X80以上の理由コードで行います。

send quota は、初期の send quota 値に既に等しいので、 ニュース 値。 上記の場合に quota の送信値を増大させる試みは、再送信を引き起こす可能性があります。 お問い合わせ 新しいネットワーク接続を設定した後、PUBRELパケット。

4.9 リクエスト/応答

特定のトピックへのメッセージは、MQTT クライアントによって公開されます。 ザ・オブ・ザ・ 応答トピックを持つアプリケーションメッセージは、リクエストメッセージと見なされます。 別の MQTT クライアント (予定) 対応するMQTTクライアントのトピック名に一致するトピックフィルタを購読しました (ベンダー) リクエストメッセージが公開されたときに使われます。 その結果、リクエストメッセージを受信しました。 または かもしれません このトピック名を購読している複数の回答者ではありません。 回答者が適切な行動を取る ベース メッセージリクエストで、応答トピックプロパティのトピック名に返信メッセージを発行します リクエストメッセージにまとめました。 通常の使用では、リクエストは応答メッセージを受信します。 お問い合わせ 購読された応答トピック。 他のクライアントが同じ応答トピックを購読している場合、クライアント 応答メッセージの処理と受信。

4.10 サーバーのリダイレクト

サーバは、クライアントが別のサーバーを転送して別のサーバーを転送することができます MQTTの特長 Reason のコード 0X9C か 0X9D とパケットを制御して下さい。 これらのReasonコードを使用して サーバー Server Reference プロパティーを使用して、クライアントの場所で使用されます。 サーバーの参照はあります UTF-8の特長 符号化された文字列。 Reason コード 0X9C は、クライアントの暫定的に別のものにリダイレクトすることを示します。 サーバ。 Reason コード 0X9D は、クライアントが別のサーバーに永続的にリダイレクトされることを示しています。

4.11 高められた認証

MQTT CONNECT パケットをユーザー名とパスワードフィールドでサポートします。 ネットワーク接続の認証 高められた認証はこの基礎を拡大しますMQTTの特長 認証お問い合わせ チャレンジ/レスポンススタイル認証 認証はMQTTクライアント間での資産です。 もし、 サーバは、メソッドをサポートしていない認証メソッドを受信し、CONNACKを送信できます。 Reason コード 0X8C または 0X87 でパケットを制御し、ネットワーク接続を閉じます。

4.11.1 再認証

クライアントが CONNECT コントロールで認証方法を提供している場合 パケット、 CONNACKコントロールパケットを受信した後、いつでも再認証できます。 これは、送信することによって行われます アウス Reason コード 0X19 (再認証) を含むパケット。 クライアントは値を認証する セット ネットワークを認証するために最初に使用した認証方法と同じ値に 接続。 サーバは 0X00 の Reason コードを含む AUTH パケット (成功 - 再認証 クライアントまたはサーバーから送信された再認証リクエストがAUTHで承認される 0X18のReasonコードを含むパケット(認証の詳細は必要となります)。 この流れ 続く 再認証が完了するか、失敗するまで。 再認証が失敗した場合は、MQTT クライアント 関連するReasonコードを含むDICONNECT制御パケットを送信し、ネットワークを閉じる必要があります 接続。

4.12 エラーの処理
4.12.1 変形したパケットとプロトコルエラー

一部のエラーケースは、MQTT クライアントの実装のサイズです。 常に誤解を招くパケットを処理する能力、および結果。 送信者の場合 この識別に従うと、Malformedパケットを送信したり、プロトコルエラーが発生することはありません。 しかし、 お問い合わせ クライアントは、CONNACK を受信する前に MQTT 制御パケットを送信し、プロトコルエラーが発生する可能性があります。 お問い合わせ サーバー機能の誤認識につながります。

変形したパケットとプロトコルエラー 理由コードは、

  • 0x81 変形パケット
  • 0x82 プロトコルエラー
  • 0x93の 受け取る最大を超過
  • 0x95 パケット あまりにも 大きい
  • 0x9A 保持されていない
  • 0x9Bの QoSはサポートされていません
  • 0x9Eの 共有サブスクリプションはサポートされていません
  • 0xA1 サブスクリプション 識別子はサポートされていません
  • 0xA2 ワイルドカード サブスクリプションはサポートされていません

サーバがマルフォームされたパケットまたはプロトコルエラーを検出し、 理由コード 仕様では、ネットワーク接続を閉じる必要があります。

4.12.2 その他のエラー

malformed パケットとプロトコルエラー以外のエラーは想定できません。 お問い合わせ 送信者は送信者と通信することから受取人が有する可能性があるため、送信者。 受諾の顧客か サーバは、メモリ不足などの不安定なエラーに遭遇する可能性があり、 実行 個々のMQTT制御パケット。 0X80以上の理由コードを含むAcknowledgementパケット お問い合わせ PUBACK、PUBREL、PUBCOMP、SUBACK、受信したパケットがエラーを検出することを指定するUNSUBACK 使用方法 パケット識別子。

5。 WebSocketをネットワーク輸送として利用

以下の条件が適用されます。MQTTの特長輸送される Webソケット 接続:

  • MQTT 制御パケットは websocket バイナリデータフレームで送信する必要があります。 その他のデータの種類 受信者はネットワーク接続を閉じる必要があります。
  • 単一の websocket データフレームは、複数のまたは部分的な MQTT 制御パケットを含む場合があります。 受信機 MQTT 制御パケットが websocket フレーム境界内で整列されていると仮定しないでください。
  • クライアントは、提供するWebSocketサブプロトコルのリストに「mqtt」を追加する必要があります
  • WebSocket のサブプロトコル名は、サーバー “mqtt” で選択して撤退しなければなりません。

スタートビル!

MQTT 実装のヘルプが必要ですか?

チームとつながることで、独自の要件を話し合い、探求する プロジェクト目標に合ったカスタマイズされたMQTTソリューション。