MQTT

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
MQTT
Mqtt-hor.svg
MQTTロゴ
スターテス公開済み
年が始まった1999年
最新バージョン5.0 [1]
2019年3月7日
組織オアシス
委員会OASISメッセージキューテレメトリトランスポート技術委員会[2]
編集者Andrew Banks(IBM)、Ed Briggs(Microsoft)、Ken Borgendale(IBM)、Rahul Gupta(IBM)[1]
関連規格MQTT-SN [3]
Webサイトmqtt .org

MQTT(元々はMessage Queuing Telemetry Transportの初期は、デバイス間でメッセージを転送する軽量のパブリッシュ/サブスクライブネットワークプロトコルです。プロトコルは通常TCP / IPを介して実行されますが、順序付けられたロスレスの双方向接続を提供するネットワークプロトコルは、MQTTをサポートできます。[1]リソースの制約が存在する、またはネットワーク帯域幅が制限されているリモートロケーションとの接続用に設計されています。このプロトコルは、オープンなOASIS標準であり、ISO推奨事項(ISO / IEC 20922)です。

歴史

Andy Stanford-ClarkIBM)とArlen Nipper(当時はEurotech、Inc。で働いていた)が1999年にプロトコルの最初のバージョンを作成しました。[5]これはSCADA産業用制御システム内の石油パイプラインを監視するために使用されました。[6]目標は、帯域幅効率が高く、軽量で、バッテリー電力をほとんど使用しないプロトコルを作成することでした。これは、デバイスが当時非常に高価だった衛星リンクを介して接続されていたためです。[7]

歴史的に、「MQTT」の「MQ」は、「MessageQueue」を表すIBM MQ(当時は「MQSeries」)製品ラインに由来していました。ただし、このプロトコルはパブリッシュアンドサブスクライブメッセージングを提供します(名前に関係なく、キューはありません)。[8] IBMがバージョン3.1として公開した仕様では、プロトコルは「MQTelemetryTransport」と呼ばれていました。[9] [10] OASISによってリリースされた後続のバージョンでは、プロトコルを厳密に「MQTT」と呼んでいますが、技術委員会自体は「OASISメッセージキューテレメトリトランスポート技術委員会」と呼ばれています。[2] 2013年以降、「MQTT」は何の意味もありません。[11] [8]

2013年、IBMはMQTT v3.1をOASIS仕様書に提出し、仕様のわずかな変更のみを受け入れることができるようにした憲章を提出しました。[2] IBMから標準の保守を引き継いだ後、OASISは2014年10月29日にバージョン3.1.1をリリースしました。[12] [13] MQTTバージョン5へのより実質的なアップグレードで、いくつかの新機能が追加されました[14]がリリースされました。 2019年3月7日。[1]

MQTT-SN(センサーネットワークのMQTT)は、Zigbeeなどの非TCP / IPネットワーク[15]上のバッテリー駆動の組み込みデバイスを対象としたメインプロトコルのバリエーションです。[16]

概要

MQTTプロトコルは、メッセージブローカーと多数のクライアントの2種類のネットワークエンティティを定義します。MQTTブローカーは、クライアントからすべてのメッセージを受信し、メッセージを適切な宛先クライアントにルーティングするサーバーです。[17] MQTTクライアントは、MQTTライブラリを実行し、ネットワークを介してMQTTブローカーに接続する任意のデバイス(マイクロコントローラーから本格的なサーバーまで)です。[18]

情報はトピックの階層に編成されています。パブリッシャーが配布する新しいデータアイテムを持っている場合、パブリッシャーは接続されたブローカーにデータを含む制御メッセージを送信します。次に、ブローカーは、そのトピックにサブスクライブしているすべてのクライアントに情報を配布します。パブリッシャーは、サブスクライバーの数や場所に関するデータを持っている必要はありません。また、サブスクライバーは、パブリッシャーに関するデータを使用して構成する必要はありません。

ブローカーが現在のサブスクライバーがいないトピックに関するメッセージを受信した場合、メッセージの発行者がメッセージを保持メッセージとして指定しない限り、ブローカーはメッセージを破棄します。保持されたメッセージは、保持されたフラグがtrueに設定された通常のMQTTメッセージです。ブローカーは、最後に保持されたメッセージと、選択したトピックに対応するQoSを保存します。保持されたメッセージのトピックに一致するトピックパターンをサブスクライブする各クライアントは、サブスクライブした直後に保持されたメッセージを受信します。ブローカーは、トピックごとに1つの保持されたメッセージのみを保管します。[19]これにより、トピックへの新規サブスクライバーは、パブリッシャーからの次の更新を待つのではなく、最新の値を受け取ることができます。

パブリッシングクライアントが最初にブローカーに接続するときに、パブリッシングクライアントが予期せずブローカーから切断されたことをブローカーが検出した場合に、サブスクライバーに送信されるデフォルトのメッセージを設定できます。

クライアントはブローカーとのみ対話しますが、システムには、現在のサブスクライバーのトピックに基づいてデータを交換する複数のブローカーサーバーが含まれている場合があります。

最小限のMQTT制御メッセージは、わずか2バイトのデータにすることができます。制御メッセージは、必要に応じて約256メガバイトのデータを伝送できます。クライアントをブローカーに接続および切断し、データを公開し、データの受信を確認し、クライアントとサーバー間の接続を監視するために使用される、14の定義済みメッセージタイプがあります。

MQTTは、データ送信をTCPプロトコルに依存しています。バリアントMQTT-SNは、UDPやBluetoothなどの他のトランスポートで使用されます。

MQTTは接続クレデンシャルをプレーンテキスト形式で送信し、セキュリティや認証のための手段は含まれていません。これは、TLSを使用して、転送された情報を暗号化し、傍受、変更、または偽造から保護することで提供できます。

デフォルトの暗号化されていないMQTTポートは1883です。暗号化されたポートは8883です。[20]

MQTTブローカー

MQTTブローカーは、コンピューター上で実行される(オンプレミスまたはクラウドで実行される)ソフトウェアの一部であり、自己構築することも、サードパーティによってホストされることもあります。オープンソースとプロプライエタリの両方の実装で利用できます。

ブローカーは郵便局として機能します。MQTTクライアントは、目的の受信者の直接接続アドレスを使用しませんが、「トピック」と呼ばれる件名を使用します。サブスクライブする人は誰でも、そのトピックのすべてのメッセージのコピーを受け取ります。複数のクライアントが単一のブローカー(1対多の機能)からトピックにサブスクライブでき、単一のクライアントが複数のブローカー(多対1)のトピックにサブスクリプションを登録できます。

各クライアントは、公開とサブスクライブの両方でデータを生成および受信できます。つまり、デバイスはセンサーデータを公開し、構成情報または制御コマンドを受信できます(MQTTは双方向通信プロトコルです)。これは、データの共有、デバイスの管理と制御の両方に役立ちます。クライアントは同じデータをさまざまなトピックにブロードキャストすることはできず、ブローカーに複数のメッセージを公開する必要があります。各メッセージには単一のトピックが指定されています。

MQTTブローカーアーキテクチャを使用すると、クライアントデバイスとサーバーアプリケーションが分離されます。このようにして、クライアントはお互いの情報を知らないようになります。MQTTは、ユーザー名とパスワードで保護された接続でTLS暗号化を使用します。オプションで、接続には、クライアントが提供する証明書ファイルの形式での証明書が必要な場合があり、サーバーのコピーと一致する必要があります。

障害が発生した場合、ブローカーソフトウェアとクライアントは自動的に冗長/自動バックアップブローカーに引き継ぐことができます。バックアップブローカーは、オンサイト、クラウド、またはこれらの組み合わせで複数のサーバー間でクライアントの負荷を共有するように設定することもできます。

ブローカーは、Sparkplugなどの準拠仕様の標準MQTTとMQTTの両方をサポートできます。[21]これは、同じサーバーで、同時に、同じレベルのセキュリティで実行できます。

ブローカーは、「永続セッション」と呼ばれる機能で、デバイスのオンとオフが切り替わるときにすべてのセッションの情報を追跡します。この状態では、ブローカーは各クライアントの接続情報、各クライアントがサブスクライブしているトピック、およびQoSが1または2のトピックのメッセージの両方を保存します。[22]

MQTTブローカーの主な利点は次のとおりです。

  1. 脆弱で安全でないクライアント接続を排除します
  2. 単一のデバイスから数千まで簡単に拡張できます
  3. セキュリティクレデンシャルと証明書を含む、すべてのクライアント接続状態を管理および追跡します
  4. セキュリティを損なうことなくネットワークの負担を軽減(セルラーネットワークまたは衛星ネットワーク)

メッセージタイプ

接続

接続、パブリッシュ/サブスクライブ、および切断を使用したMQTT接続(QoS 0)の例。クライアントBからの最初のメッセージは、保持フラグのために保存されます。

サーバーとの接続が確立されるのを待ち、ノード間にリンクを作成します。

切断

MQTTクライアントが実行する必要のある作業をすべて終了し、TCP / IPセッションが切断されるのを待ちます。

公開

MQTTクライアントにリクエストを渡した後、すぐにアプリケーションスレッドに戻ります。

バージョン5.0

2019年、OASISは公式のMQTT5.0標準をリリースしました。[1]バージョン5.0には、次の主要な新機能が含まれています。[23]

  • 理由コード:確認応答は、失敗の理由を提供するリターンコードをサポートするようになりました。
  • 共有サブスクリプション:クライアント間で負荷のバランスを取り、負荷の問題のリスクを軽減します
  • メッセージの有効期限:メッセージには有効期限を含めることができ、この期間内に配信されない場合は削除されます。
  • トピックエイリアス:トピックの名前は単一の番号に置き換えることができます

サービス品質

ブローカーへの各接続は、サービス品質(QoS)測定値を指定できます。[24]これらはオーバーヘッドの昇順で分類されます。

  • 最大で1回–メッセージは1回だけ送信され、クライアントとブローカーは配信を確認するための追加の手順を実行しません(ファイアアンドフォーゲット)。
  • 少なくとも1回–確認応答が受信されるまで、メッセージは送信者によって複数回再試行されます(確認済み配信)。
  • 正確に1回–送信者と受信者は2レベルのハンドシェイクを実行して、メッセージのコピーが1つだけ受信されるようにします(確実な配信)。

このフィールドは、基盤となるTCPデータ送信の処理には影響しません。MQTT送信者と受信者の間でのみ使用されます。

アプリケーション

たとえば、いくつかのプロジェクトでMQTTが実装されています。

も参照してください

参考文献

  1. ^ a b c d e "MQTTバージョン5.0"OASIS2019-03-07 2020年12月15日取得
  2. ^ a b c "OASISメッセージキューテレメトリトランスポート(MQTT)技術委員会憲章"OASIS 2020年12月15日取得
  3. ^ 「MQTTSN小委員会」OASIS 2020年12月15日取得
  4. ^ W. Richard Stevens、 TCP / IP Illustrated、Volume 1:The Protocols、Addison Wesley、1994、ISBN0-201-63346-9。
  5. ^ 「10歳の誕生日パーティー」MQTT.org2009年7月。2015年3月15日のオリジナルからアーカイブ2015年4月25日取得
  6. ^ 「IBMポッドキャストのトランスクリプト」(PDF)IBM.com2011年11月2021年1月7日取得
  7. ^ 「MQTT入門」HiveMQ。2020-04-24。
  8. ^ a b チーム、HiveMQ。「MQTTプロトコルの紹介-MQTTEssentials:パート1」www.hivemq.com 2021年9月26日取得
  9. ^ 「MQTTv3.1とMQTTv3.1.1の違い」OASISメッセージキューテレメトリトランスポート(MQTT)TC。2015年2月12日2021年8月19日取得
  10. ^ 「MQTTV3.1プロトコル仕様」Eurotech、International Business Machines Corporation(IBM)。2010 2020年12月15日取得
  11. ^ 「2013年4月25日木曜日の電話会議のOASISMQTT技術委員会議事録」(PDF) {{cite web}}: CS1 maint: url-status (link)
  12. ^ 「MQTTバージョン3.1.1」2014-10-29 2020年12月16日取得
  13. ^ 「新しいMQTT3.1.1バージョンにアップグレードする価値がある6つの事実」2014-10-30 2020年12月16日取得
  14. ^ 「3.1.1と5.0の違い」
  15. ^ スタンフォードクラーク、アンディ; Hong Linh Truong(2013年11月14日)。「MQTTForSensor Networks(MQTT-SN)プロトコル仕様バージョン1.2」(PDF)oasis-open.orgOASISメッセージキューテレメトリトランスポート(MQTT)技術委員会。p。28 2020年12月15日取得
  16. ^ 「MQTT-SN(センサーネットワーク用のMQTT)の概要」2020年9月16日取得
  17. ^ 元、マイケル。「MQTTを知る」IBMDeveloper 2019年10月13日取得
  18. ^ 「クライアント、ブローカー/サーバーおよび接続の確立-MQTT Essentials:パート3」hivemq.com 2019年10月13日取得
  19. ^ 「保持されたメッセージ-MQTTEssentials:パート8」hivemq.com 2019年10月13日取得
  20. ^ 「FAQ-よくある質問| MQTT」2020年3月19日取得
  21. ^ 「MQTTスパークプラグ/タフ」www.cirrus-link.com 2019年11月5日取得
  22. ^ コープ、スティーブン(2020)。完全な初心者のためのMQTTp。17. ISBN 9798779030762
  23. ^ 「MQTTとは何ですか?定義と詳細」www.paessler.com 2020年6月9日取得
  24. ^ 「IBMナレッジセンター-IBMMQ-IBM IntegrationBusでのMQTTの使用-サービス品質と接続管理」www.ibm.com 2018年1月30日取得
  25. ^ Saxena、S。; ジャイナ教、S。; アロラ、D。; Sharma、P。(2020年2月13日)。「HomeAssistantとOpenHABを使用したIoTベースのデバイス自動化のためのMQTT接続プロトコルの意味」2019年第6回持続可能なグローバル開発のためのコンピューティングに関する国際会議(INDIACom):475–480。
  26. ^ 「MQTT-バインディング」www.openhab.org 2020年11月10日取得
  27. ^ ブラザーズ、レジナルド(2016年1月25日)。「S&Tのモノのインターネットパイロットは「実用的な状態」を示しています" 。dhs.gov。p。12016年3月31取得
  28. ^ コミュニティスタッフライター(2016年6月14日)。「バージョン0.14がリリースされました」nodered.org/blogノード-RED 2016年7月6日取得TLSをサポートするMQTT
  29. ^ ホームアシスタントコミュニティ(2015年8月7日)。「MQTT」home-assistant.ioホームアシスタントコミュニティ2017年8月4日取得
  30. ^ 「ホームアシスタントアドオン:MosquittoBroker」GitHub2021年12月25日取得
  31. ^ ProcessOne、Marek Foss(2019-02-26)。"ejabberd 19.02:MQTTEdition"ProcessOne —ブログ2019年3月4日取得
  32. ^ イーストバーン、ジョシュ(2020-08-24)。「自動化データをMQTT-SparkplugBと統合する方法」製造業技術2020年9月1日取得
  33. ^ ギンドン、クリストファー(2020-01-29)。「よくある質問」Eclipseスパークプラグ2020年9月1日取得
  34. ^ 「APIとプロトコル」慰め2021-04-08を取得
  35. ^ 「MQTT5.0サポート🎉」慰めのコミュニティ2021-04-08を取得

外部リンク