MQTTコーデック
MQTTプロトコルパケットのエンコードとデコード
Wireshark、ネットワークアナライザー、またはブローカーログからキャプチャしたMQTTパケットデータを貼り付け
サンプルパケット
デコード結果
パケットデータを入力してデコードをクリックすると結果が表示されます
バイトビューア
エンコード結果
パラメータを設定して「パケットを生成」をクリックしてください
バイトビューア
パケット構造プレビュー
MQTTパケットタイプ参照
| コード | 名前 | 方向 | 説明 |
|---|---|---|---|
| 0x10 | CONNECT | C→S | クライアント接続要求 |
| 0x20 | CONNACK | S→C | 接続確認 |
| 0x30 | PUBLISH | C↔S | メッセージ発行 |
| 0x40 | PUBACK | C↔S | 発行確認(QoS 1) |
| 0x50 | PUBREC | C↔S | 発行受信(QoS 2 第1段階) |
| 0x60 | PUBREL | C↔S | 発行解放(QoS 2 第2段階) |
| 0x70 | PUBCOMP | C↔S | 発行完了(QoS 2 第3段階) |
| 0x80 | SUBSCRIBE | C→S | 購読要求 |
| 0x90 | SUBACK | S→C | 購読確認 |
| 0xA0 | UNSUBSCRIBE | C→S | 購読解除要求 |
| 0xB0 | UNSUBACK | S→C | 購読解除確認 |
| 0xC0 | PINGREQ | C→S | Ping要求(キープアライブ) |
| 0xD0 | PINGRESP | S→C | Ping応答 |
| 0xE0 | DISCONNECT | C→S | クライアント切断 |
MQTTプロトコルガイド
MQTTプロトコルの理解
MQTT(Message Queuing Telemetry Transport)はTCP/IP上に構築された軽量メッセージングプロトコルです。1999年にIBMが衛星リンク監視用に開発し、現在ではIoT通信のデファクトスタンダードとなっています。クライアントは中央ブローカーを通じてパブリッシュ-サブスクライブパターンで通信し、不安定なネットワークやリソース制約のあるデバイスに最適です。
パケットバイナリ構造
すべてのMQTTパケットは固定ヘッダー(1-5バイト)で始まり、オプションの可変ヘッダーとペイロードが続きます。最初のバイトのビット7-4がパケットタイプ、ビット3-0がタイプ固有のフラグです。残り長さフィールドは可変長エンコーディングを使用します。
| ビット範囲 | フィールド名 | 説明 |
|---|---|---|
| 7-4 | パケットタイプ | 制御パケットタイプ(1-15) |
| 3-0 | フラグ | タイプ固有フラグ(PUBLISHのDUP、QoS、RETAIN) |
可変長エンコーディング
MQTTは残り長さフィールドにコンパクトなエンコーディングを使用します。各バイトは7ビットのデータと1ビットの継続フラグを使用します。0-127は1バイト、128-16383は2バイト、最大4バイトで268,435,455まで表現可能です。
| バイト数 | 最小値 | 最大値 |
|---|---|---|
| 1 | 0 | 127 |
| 2 | 128 | 16,383 |
| 3 | 16,384 | 2,097,151 |
| 4 | 2,097,152 | 268,435,455 |
CONNECTパケットの詳細
CONNECTパケットはTCP接続確立後に最初に送信されます。プロトコルバージョン、キープアライブ間隔、クライアントID、オプションの認証情報を含みます。接続フラグはクリーンセッション、遺言メッセージ設定、認証を含むセッション動作を制御します。
PUBLISHパケットのメカニズム
PUBLISHパケットはアプリケーションメッセージを運びます。固定ヘッダーのフラグはQoSレベル、保持動作、重複ステータスを示します。QoS 0は「発火して忘れる」、QoS 1は少なくとも1回の配信を保証、QoS 2は4ウェイハンドシェイクで厳密に1回の配信を保証します。
QoS配信保証
実用アプリケーション
- Wiresharkやtcpdumpからのパケットキャプチャをデバッグ用に分析
- MQTTブローカーやクライアント実装を検証するテストパケットを構築
- 実際のパケット検査を通じてMQTTプロトコル内部を学習
- IoTデバイスの接続とメッセージ配信の問題をトラブルシューティング
- 自動テストシナリオ用のサンプルパケットを生成
プロトコルバージョン
3つの主要なMQTTバージョンが使用されています:MQTT 3.1(プロトコルレベル3)、MQTT 3.1.1(プロトコルレベル4、ISO/IEC 20922:2016)、拡張機能を持つMQTT 5.0(プロトコルレベル5)。このツールは主に最も広く展開されているMQTT 3.1.1を対象としています。