バイ Ponlakshmi
MQTTプロトコル(メッセージキューイングテレメトリートランスポート)は、転送用に特別に設計されたTCPベースのメッセージングプロトコルです エッジデバイスからセントラルサーバーへのテレメトリーデータ。 Publish/Subscribeモデルを継承し、MQTTを有効にする クライアントは、中央MQTTブローカーを通じてデータを効率的に送受信します。 1999年の発明以来、MQTTはIoT導入の最も広く採用されたプロトコルになりました。 軽量な自然と信頼性。 一方、MQTT-SN(Sensor Network)はプロトコルを拡張します。 エッジまたは周辺機器、 Bluetoothのような低電力接続媒体上のデバイスとゲートウェイ間の通信。 それにもかかわらず 潜在的なMQTT-SNは、コアMQTTプロトコルのような広範な採用を得ていません。 多くのMQTTが 導入は市場ですぐに利用できます、 根本的な概念の深い理解を持つことは重要です。 この知識は、あなたが活用することを可能にします これらの実装は効果的に、高機能、障害のあるIoTアプリケーションを構築することができます。
MQTT デバイスと MQTT サーバ間の公開サブスクリプションのやり取りは、一組のセットで容易に行えます。 定義済みのメッセージ。 シンプルさのために、発信と着信メッセージの両方が同じ標準に従う。 高いレベルで、MQTTプロトコル パケットは、より良い理解のために2つのタイプに分類することができます
MQTT プロトコル パケットを超えて、処理方法の世話をする他のいくつかの仕様があります。 セッション, 最後のメッセージとそれが非常にあるので、この記事でもカバーされる切断を保持する MQTTの実装について理解することが重要です。
データパケットは、実際のデータをその間に転送するのに役立ちますMQTTブローカーMQTTクライアント 公開と購読は、MQTT クライアントがその意思を送信し、聴くための主要なデータパケットです。 トピックとサーバーは、要件に基づいてデータを公開します。 コネクトパケットをこのリストに追加したいのは、その一部としてデータのセットとして送信されます。
MQTTの特長 上記の3つのメッセージのパケット形式構造には、固定ヘッダー、変数ヘッダー、および ペイロード。
制御パケットは、MQTTプロトコルにおけるデータ転送の成功を確実にするために不可欠です。 明確な理解 パケットの制御とMQTTサービスの品質(QoS) レベル効果的な実装には不可欠です。 ほとんどの制御パケットは、MQTT クライアントやサーバーに依存するコア実装層で管理されます。 利用、配信状態の保存、アクセシビリティの処理、メッセージの再送信などのタスクの管理 アプリケーションレベルで。
MQTTの特長 パケットは、固定ヘッダ、可変ヘッダ、ペイロードの3つの部分に広く分けられます。 お問い合わせ 実装を上回るスタンダード MQTTクライアント, この情報は必要なくない場合. 但し、方法の理解のため クライアントを使用するには、適切な API を使用します。このハンズオンを使用できます。 固定ヘッダフィールドは制御で構成されています フラグ; 変数ヘッダーには、パケットの長さが含まれている。 ペイロードは、セットされた長さと等しい 変数ヘッダー。 パケット長フィールドの最小サイズは1バイトで、メッセージは127未満です。 バイト。
最小のパケットサイズは2バイトで、コントロールフィールドと1つのパケット長フィールドしか存在しません。 最大パケットサイズは256MBです。 127バイト未満のパケットは1バイトのパケット長フィールドを持ちます。 ザ・オブ・ザ・ 127 以下、16383 未満のパケットは 2 バイトを使用します。 8ビットで使われる7ビットは 継続ビット。
8ビット制御フィールドは、2バイトの固定ヘッダーのメインバイトです。 2つに分けられます 4ビットフィールドとすべてを含む プロトコルコマンドとレスポンス。 最初の4つの最も重要なビットは、コマンドまたは 残りが残っている間メッセージのタイプ フィールド、 4ビットは制御フラグとして使用されます。
16 個の可能なフラグがありますが、ビット数の制限が使用されます。 公開メッセージは最も多くなります 使用方法 これらのフラグ。
Remaining の長さは変数ヘッダーを含む現在のパケットに残されたバイトの数です ペイロードデータ。 Remaining の長さは、Remaining の長さをエンコードするために使用されるバイトを除外します。 維持の長さはあります 値アップのために1バイトを使用する可変長エンコード方式でエンコード 127 へ。 少なくとも7 各バイトの重要なビットはデータをエンコードし、そこにあることを示すために最も重要なビットが使用されます 次のバイトで 表現。 したがって、各バイトは128値と1つの「継続ビット」をエンコードします。 最大の数 残りのバイト 長さフィールドは4つです。
MQTT 制御パケットには、変数ヘッダコンポーネントがあります。 可変長ヘッダーフィールドは MQTTに常に存在しません メッセージ。 一部のMQTTメッセージタイプまたはコマンドは、このフィールドに追加の制御情報を運ぶ必要があります。 その間に残っている 固定ヘッダーとペイロード。 パケットタイプにより、変数ヘッダーは異なります。
例として、詳細を見てみましょうMQTTクライアントコネクトメッセージ。
MQTT プラットフォームで TCP レベルの接続を確立した後、最初のパケットは、 CONNECT パケット。 コネクタ パケットは、ネットワーク接続を経由して送信する必要があります。 MQTT が送信する 2 番目の CONNECT パケット クライアントは無視され、切断されます。
変数ヘッダーは固定ヘッダーの横に置き、ヘッダの部分として4つの主要な部品があります。 彼らは、 プロトコル名 バイト、プロトコルレベル、フラグを接続し、キープアライブします。 これらの各部品はあらかじめ定義されています バイトサイズとそれらが存在する順序。
これらのバイトはプロトコル名を保存します。 プロトコル名はそのまま保存されます。MQTTの特長で 4 バイト。 これらのフィールドの他の文字は、サーバーからクライアントの接続を解除します。
プロトコルバージョンを定義します。 MQTTブローカーのプロトコルレベルは、MQTT 3.1/3.1.1と5の4つです。 お問い合わせMQTT 5バージョンお問い合わせ その他送信 値が切断につながる。 MQTTブローカーは、サポートしているバージョンに基づいてクライアントを切断することもできます。
これは単一のバイトフィールドで、ペイロード内のデータの存在または欠如を表します。MQTT認証(ユーザー名とユーザー名) パスワードお問い合わせ ウィール保持やクリーンなセッションのような他のフィールドはどちらかになります true または false と QoS フィールドは、WILL Message に続く QoS レベルを指定します。
MQTTの特長 生き続けるのは2バイトのパケットで、保存する最大時間は65535秒(18)です。 営業時間 ただし、要件に基づいて30秒または分程度保つことをお勧めします。 MQTTの特長 クライアントは、定義された値を超えていない間隔で制御パケット(PINGREQ)を送信する必要があります アライブ。 ザ・キープ Alive 値は、クライアントによる制御パケットの送信時間に依存します。
ペイロードにはMQTTクライアントが含まれています 認証(ユーザー名、パスワード)。 クライアント ID は、クライアントごとにユニークでなければなりません。 クライアントがクライアント ID を指定しない場合、ブローカーはクライアントごとに固有のクライアント ID に応答します。 お問い合わせ クライアント ID を空のフィールドに送信します。 クライアントは 拒否。 クライアントID、 トピックは、メッセージ, ユーザー名、パスワード。
Connect パケットのすべてのフィールドは、文字列の形式になります。 TCPレベルの確立後 接続、クライアントはMQTT Connectを送信する必要があります 合理的な時間内で。 接続パケットが届かない場合は、MQTT ブローカーはクライアントを切断します。 アフター 成功した検証、ブローカーはどちらか エラーがいくつかある場合は、ゼロペイロードまたは切断でCONNACKパケットに応答 接続。 成功した関係の後で、 ブローカーは、接続されたリストに新しいクライアントを追加し、セッションは維持され、監視されます データパケットだけでなく、生き続ける。
あなたがゼロから構築している場合は、フォローしてください完全なMQTTクライアント開発者ガイドそしてそれをよりよく理解し、実現する指定。
非常に成功したMQTTアプリケーションについては、MQTTプロトコルを超えて追加の記事を読んでください。