MQTT ロゴ | |
| 状態 | 公開済み |
|---|---|
| 開始年 | 1999 |
| 最新バージョン | 5.0 [1] 2019年3月7日 |
| 組織 | |
| 委員会 | OASISメッセージキューイングテレメトリトランスポート技術委員会[4] |
| 編集者 | アンドリュー・バンクス(IBM)、エド・ブリッグス(マイクロソフト)、ケン・ボーゲンデール(IBM)、ラフル・グプタ(IBM)[1] |
| 関連規格 | MQTT-SN [5] |
| Webサイト | 翻訳元 |
MQTT(元々はMQ Telemetry Transport [a]の頭文字)は、メッセージキュー/メッセージキューイングサービスのための軽量なパブリッシュ/サブスクライブ型のマシンツーマシンネットワークプロトコルです。これは、モノのインターネット(IoT )など、リソースの制約やネットワーク帯域幅の制限があるデバイスがある遠隔地との接続用に設計されています。これは、順序付けられたロスレスの双方向接続を提供するトランスポートプロトコル(通常はTCP/IP )上で実行する必要があります。[1]これはオープンなOASIS標準であり、ISO勧告(ISO/IEC 20922) です。
歴史
アンディ・スタンフォード・クラーク(IBM)とアーレン・ニッパー(当時はユーロテック社に勤務)は、1999年にこのプロトコルの最初のバージョンを作成しました。 [6]これは、 SCADA産業用制御システム内で石油パイプラインを監視するために使用されました。 [7]デバイスは当時非常に高価だった衛星リンクを介して接続されていたため、帯域幅効率が高く、軽量で、バッテリー電力をほとんど消費しないプロトコルを実現することが目標でした。[8]
歴史的に、「MQTT」の「MQ」はIBM MQ(当時は「MQSeries」)製品ラインに由来し、「Message Queue」の略称である。しかし、このプロトコルはパブリッシュ・アンド・サブスクライブ・メッセージングを提供する(名前にもかかわらずキューは提供しない)。[9] IBMがバージョン3.1として公開した仕様では、このプロトコルは「MQ Telemetry Transport」と呼ばれていた。[10] [11] OASISがリリースしたその後のバージョンでは、このプロトコルは厳密に「MQTT」と呼ばれているが、技術委員会自体は「OASIS Message Queuing Telemetry Transport Technical Committee」と名付けられている。[4] 2013年以降、「MQTT」は何も表していない。[12] [9]
2013年、IBMは、仕様に対する軽微な変更のみが受け入れられることを保証する憲章を添えて、 MQTT v3.1をOASIS仕様団体に提出した。 [4] IBMから標準の保守を引き継いだ後、OASISは2014年10月29日にバージョン3.1.1をリリースした。[13] [14]いくつかの新機能を追加したMQTTバージョン5のより大幅なアップグレード[15]は、 2019年3月7日にリリースされた。[1]
MQTT-SN(MQTT for Sensor Networks)は、 Zigbeeなどの非TCP/IPネットワーク上のバッテリー駆動の組み込みデバイスを対象とした主要プロトコルのバリエーションです。 [ 16] [17]
概要
MQTTプロトコルは、メッセージブローカーと複数のクライアントという2種類のネットワークエンティティを定義します。MQTTブローカーは、クライアントからのすべてのメッセージを受信し、メッセージを適切な宛先クライアントにルーティングするサーバーです。[18] MQTTクライアントは、MQTTライブラリを実行し、ネットワーク経由でMQTTブローカーに接続する任意のデバイス(マイクロコントローラーから本格的なサーバーまで)です。[19]
情報はトピックの階層に整理されます。パブリッシャーが配布する新しいデータ項目を持つ場合、接続されたブローカーにデータを含む制御メッセージを送信します。ブローカーは、そのトピックをサブスクライブしているすべてのクライアントに情報を配布します。パブリッシャーはサブスクライバーの数や場所に関するデータを持つ必要はなく、サブスクライバーはパブリッシャーに関するデータで構成する必要もありません。
ブローカーが、現在サブスクライバーがいないトピックに関するメッセージを受信した場合、メッセージの発行者がそのメッセージを保持メッセージとして指定していない限り、ブローカーはそのメッセージを破棄します。保持メッセージは、保持フラグが true に設定された通常の MQTT メッセージです。ブローカーは、選択されたトピックの最後の保持メッセージとそれに対応するサービス品質(QoS) を保存します。保持メッセージのトピックと一致するトピック パターンをサブスクライブする各クライアントは、サブスクライブ後すぐに保持メッセージを受信します。ブローカーは、トピックごとに 1 つの保持メッセージのみを保存します。[20]これにより、トピックの新しいサブスクライバーは、発行者からの次の更新を待つのではなく、最新の値を受け取ることができます。
パブリッシング クライアントが最初にブローカーに接続するときに、ブローカーがパブリッシング クライアントが予期せずブローカーから切断されたことを検出した場合にサブスクライバーに送信される既定のメッセージを設定できます。
クライアントはブローカーとのみ対話しますが、システムには、現在のサブスクライバーのトピックに基づいてデータを交換する複数のブローカー サーバーが含まれる場合があります。
最小の MQTT 制御メッセージは、わずか 2 バイトのデータです。制御メッセージは、必要に応じて約 256 MB のデータを伝送できます。ブローカーからクライアントを接続および切断したり、データを公開したり、データの受信を確認したり、クライアントとサーバー間の接続を監視したりするために使用される 14 種類のメッセージ タイプが定義されています。
MQTT は、データ転送に TCP プロトコルに依存しています。その変種である MQTT-SN は、UDP や Bluetooth などの他のトランスポートで使用されます。
MQTT は接続資格情報をプレーンテキスト形式で送信し、セキュリティや認証の対策は講じていません。TLS を使用して転送された情報を暗号化し、傍受、改ざん、偽造から保護することで、セキュリティ や認証の対策が講じられます。
デフォルトの暗号化されていないMQTTポートは1883です。暗号化されたポートは8883です。[21]
MQTTブローカー
MQTT ブローカーは、コンピューター上で実行されるソフトウェア (オンプレミスまたはクラウドで実行) であり、自分で構築することも、サードパーティによってホストすることもできます。オープン ソースと独自の実装の両方で利用できます。
ブローカーは郵便局として機能します。MQTT クライアントは、対象受信者の直接接続アドレスを使用せず、「トピック」と呼ばれる件名を使用します。サブスクライブした人は誰でも、そのトピックのすべてのメッセージのコピーを受け取ります。複数のクライアントが単一のブローカーからトピックをサブスクライブでき (1 対多の機能)、単一のクライアントが複数のブローカーでトピックへのサブスクリプションを登録できます (多対 1)。
各クライアントは、パブリッシュとサブスクライブの両方によってデータの生成と受信の両方を行うことができます。つまり、デバイスはセンサー データをパブリッシュしながら、構成情報や制御コマンドを受信することができます (MQTT は双方向通信プロトコルです)。これは、データの共有、デバイスの管理と制御の両方に役立ちます。クライアントは、同じデータをさまざまなトピックにブロードキャストすることはできず、それぞれ 1 つのトピックを指定して、ブローカーに複数のメッセージをパブリッシュする必要があります。
MQTT ブローカー アーキテクチャでは、クライアント デバイスとサーバー アプリケーションが分離されます。このため、クライアントは互いの情報を認識できません。MQTT は、設定されている場合、証明書、ユーザー名、パスワードで保護された接続で TLS 暗号化を使用できます。オプションで、接続に証明書が必要な場合があります。証明書はクライアントが提供する証明書ファイルの形式で、サーバーのコピーと一致している必要があります。
障害が発生した場合、ブローカー ソフトウェアとクライアントは冗長/自動バックアップ ブローカーに自動的に引き継ぐことができます。バックアップ ブローカーは、オンサイト、クラウド、またはこれらの組み合わせの複数のサーバー間でクライアントの負荷を共有するように設定することもできます。
ブローカーは、標準MQTTとSparkplugなどの準拠仕様のMQTTの両方をサポートできます。[22]これは、同じサーバーで、同時に、同じレベルのセキュリティで実行できます。
ブローカーは、デバイスのオン/オフに応じて、すべてのセッション情報を追跡します。これは「永続セッション」と呼ばれる機能です。この状態では、ブローカーは各クライアントの接続情報、各クライアントがサブスクライブしているトピック、および QoS が 1 または 2 のトピックのメッセージの両方を保存します。[23]
MQTT ブローカーの主な利点は次のとおりです。
- 脆弱で安全でないクライアント接続を排除します (適切に構成されている場合)。
- 単一のデバイスから数千のデバイスまで簡単に拡張できます。
- セキュリティ資格情報と証明書(適切に構成されている場合)を含むクライアント接続状態の管理と追跡。
- セキュリティを損なうことなく、携帯電話や衛星ネットワークへの負担を軽減します (適切に構成されている場合)。
メッセージの種類
接続する

サーバーとの接続が確立されるのを待機し、ノード間のリンクを作成します。
切断
MQTT クライアントが実行する必要がある作業を完了し、TCP/IPセッションが切断されるまで待機します。
公開
リクエストを MQTT クライアントに渡した後、すぐにアプリケーション スレッドに戻ります。
バージョン 5.0
2019年、OASISは公式のMQTT 5.0標準をリリースしました。[1]バージョン5.0には、次の主要な新機能が含まれています。[24]
- 理由コード: 確認応答では、失敗の理由を示す戻りコードがサポートされるようになりました。
- 共有サブスクリプション: クライアント間で負荷を分散できるため、負荷の問題が発生するリスクが軽減されます。
- メッセージの有効期限: メッセージには有効期限を含めることができ、この期間内に配信されない場合は削除されます。
- トピックエイリアス: トピックの名前は 1 つの数字に置き換えることができます。
サービスの質
ブローカーへの各接続はQoSの尺度を指定することができる。[25]これらはオーバーヘッドの増加順に分類される。
- 最大 1 回 – メッセージは 1 回のみ送信され、クライアントとブローカーは配信を確認するための追加の手順を実行しません (ファイア アンド フォーゲット)。
- 少なくとも 1 回 – 確認応答が受信されるまで (確認済み配信)、送信者によってメッセージが複数回再試行されます。
- 正確に 1 回 – 送信者と受信者は 2 レベルのハンドシェイクを実行し、メッセージのコピーが 1 つだけ受信されるようにします (確実な配信)。
このフィールドは、基礎となる TCP データ転送の処理には影響しません。MQTT 送信者と受信者の間でのみ使用されます。
安全
MQTTプロトコルのセキュリティは2020年にイタリアの研究者によって侵害され[26]、このプロトコルに対して スローDoS攻撃が実行されました(CVE-2020-13849を参照)。
クラスタリング
MQTTクラスタリングは、MQTTの導入において高可用性、フォールトトレランス、スケーラビリティを確保するために用いられる技術です。[27]効率的で軽量なメッセージングプロトコルであるMQTTクラスタリングは、相互接続されたブローカーノードの回復力のあるネットワークの作成を可能にし、ハードウェア障害やネットワークの中断が発生した場合でも継続的で信頼性の高いメッセージ配信を保証します。
参照
- MQTT実装の比較
- 高度なメッセージ キュー プロトコル(AMQP)
- ストリーミングテキスト指向メッセージングプロトコル(STOMP)
- 制約付きアプリケーション プロトコル(CoAP)
- アパッチアクティブMQ
- ソレースパブサブ+ [28] [29]
- ラビットMQ
注記
- ^ MQ は IBM MQ製品名に由来する「メッセージ キュー」の略です。
参考文献
- ^ abcde 「MQTT バージョン 5.0」。OASIS。2019年3 月 7 日。2020 年 12 月 15 日閲覧。
- ^ 引用エラー: 名前付き参照
iec-standardが呼び出されましたが、定義されていません (ヘルプ ページを参照してください)。 - ^ 「ISO/IEC 20922:2016 情報技術 — メッセージキューイングテレメトリトランスポート (MQTT) v3.1.1」 。 2024年10月27日閲覧。
- ^ abc 「OASIS メッセージキューイングテレメトリトランスポート(MQTT)技術委員会憲章」。OASIS 。 2020年12月15日閲覧。
- ^ 「MQTT SN 小委員会」。OASIS。2020年 12 月 15 日閲覧。
- ^ 「10th birthday party」。MQTT.org 2009年7月。2015年3月15日時点のオリジナルよりアーカイブ。 2015年4月25日閲覧。
- ^ 「IBMポッドキャストのトランスクリプト」(PDF)IBM.com 2011年11月。2021年1月7日閲覧。
- ^ 「MQTT 入門」HiveMQ. 2020-04-24.
- ^ ab チーム、HiveMQ。「MQTT プロトコルの紹介 - MQTT の基本: パート 1」。www.hivemq.com。2021年 9 月 26 日閲覧。
- ^ 「MQTT v3.1 と MQTT v3.1.1 の相違点」。OASIS メッセージ キューイング テレメトリ トランスポート (MQTT) TC。2015 年 2 月 12 日。2021年8 月 19 日に閲覧。
- ^ 「MQTT V3.1 プロトコル仕様」。Eurotech、International Business Machines Corporation (IBM)。2010 年。2020 年 12 月 15 日閲覧。
- ^ 「OASIS MQTT 技術委員会 2013 年 4 月 25 日木曜日電話会議の議事録」(PDF)。
- ^ 「MQTT バージョン 3.1.1」。2014 年 10 月 29 日。2020 年 12 月 16 日閲覧。
- ^ 「最新の MQTT 3.1.1 バージョンにアップグレードする価値がある 6 つの事実」 2014 年 10 月 30 日. 2020 年 12 月 16 日閲覧。
- ^ 「3.1.1 と 5.0 の違い」。GitHub。
- ^ Stanford-Clark, Andy ; Hong Linh Truong (2013 年 11 月 14 日). 「MQTT For Sensor Networks (MQTT-SN) Protocol Specifications Version 1.2」(PDF) . oasis-open.org . OASIS Message Queuing Telemetry Transport (MQTT) Technical Committee. p. 28 . 2020 年 12 月 15 日閲覧。
- ^ 「MQTT-SN (センサーネットワーク向けMQTT) の紹介」。2017年1月25日。 2020年9月16日閲覧。
- ^ Yuan, Michael. 「MQTT を知る」IBM Developer . 2019 年10 月 13 日閲覧。
- ^ 「クライアント、ブローカー/サーバー、および接続の確立 - MQTT の基本: パート 3」。hivemq.com。2019年7 月 17 日。2019年10 月 13 日に閲覧。
- ^ 「保持メッセージ - MQTT の基本: パート 8」。hivemq.com。2015年 3 月 2 日。2019年10 月 13 日閲覧。
- ^ 「FAQ - よくある質問 | MQTT」。2020年3月19日閲覧。
- ^ “MQTT スパークプラグ/タフ”. www.cirrus-link.com 。2019 年11 月 5 日に取得。
- ^ Cope, Stephen (2020). MQTT 完全初心者向け. p. 17. ISBN 9798779030762。
- ^ 「MQTT とは? 定義と詳細」www.paessler.com 。2020年 6 月 9 日閲覧。
- ^ 「IBM Knowledge Center - IBM MQ - IBM Integration Bus での MQTT の使用 - サービス品質と接続管理」www.ibm.com 。 2018 年 1 月 30 日閲覧。
- ^ Vaccari, I., Aiello, M., & Cambiaso, E. (2020). SlowITe、MQTTに影響を与える新しいサービス拒否攻撃。センサー、20(10)、2932。
- ^ 「高可用性 MQTT クラスター - Bevywise Networks」www.bevywise.com . 2023 年 12 月 22 日閲覧。
- ^ 「API とプロトコル」。Solace。2021年4 月 8 日閲覧。
- ^ 「MQTT 5.0 サポート 🎉」。Solaceコミュニティ。2021 年 1 月 4 日。2021 年 4 月 8 日閲覧。
外部リンク
- 公式サイト
- 技術委員会の公式ウェブサイト
- MQTT仕様
- バージョン 5.0、2019-03-07: PDF 版、HTML 版
- バージョン 3.1.1 Plus Errata 01、2015-12-10: PDF 版、HTML 版
- バージョン 3.1.1、2014-10-29: PDF 版、HTML 版
- バージョン 3.1、2010: PDF 版 2022-12-04 にWayback Machineにアーカイブ、HTML 版
- MQTT-SN仕様
- バージョン 1.2、2013-11-14: PDF 版
