メッセージ キューイング テレメトリ トランスポート (MQTT)は、インターネット経由でモノのインターネット (IoT) またはマシン間 (M2M) デバイスとアプリケーションを接続するのに最適な、人気の高い軽量のパブリッシュ/サブスクライブ メッセージング プロトコルです。 MQTT は、低帯域幅または低電力環境で効率的に動作するように設計されているため、多数のリモート クライアントを持つアプリケーションに最適です。 家電、自動車、輸送、製造、医療など、さまざまな業界で使用されています。

MQTT はどのように機能しますか?

MQTT 経由で接続されたデバイスまたはアプリケーションは、クライアントと呼ばれます。 これらのクライアントは、特定のトピックまたは複数のトピックに関するメッセージを公開および/またはサブスクライブします。 サブスクライブしたクライアントは、そのトピックに公開されたすべてのメッセージを受信し、多くのデバイスとサービス間で効率的かつフォールト トレラントなデータ交換を可能にします。

MQTT アーキテクチャの中心となるのはブローカーです。 ブローカーは、クライアント (およびクライアントがサブスクライブしているトピック) を追跡し、メッセージを処理し、それらのメッセージを適切なシステムにルーティングする役割を担うサーバーです。

MQTT プロトコルのバージョン

MQTT プロトコルのいくつかの主要なバージョンが標準として採用されています。 OASIS組織はプロトコルの改訂を管理し、各バージョンの完全な仕様を維持します。 MQTT の各リビジョンではプロトコルの機能セットが拡張されているため、デバイスとブローカーがどのバージョンの MQTT に準拠しているかを把握することが重要です。

MQTT メッセージのタイプと形式

MQTT メッセージにはいくつかの種類があり、各メッセージ タイプには、準拠するデバイスとアプリケーションが従う必要がある特定の形式が含まれています。 MQTT プロトコルの改訂は、形式とメッセージ タイプによって異なります。 メッセージ タイプの完全なリストは、 MQTT プロトコルの各仕様に記載されています。

最も一般的な 3 つのメッセージの種類は、CONNECT、PUBLISH、SUBSCRIBE です。 各 MQTT メッセージには、ヘッダー、ペイロード、およびオプションのフラグが含まれます。 メッセージの種類に応じて、ペイロードの長さは可変になります。 たとえば、PUBLISH メッセージでは、ペイロードにはすべてのサブスクライブデバイスに送信されるデータが含まれており、データ フィールドの長さはメッセージのサイズに直接影響します。  デフォルトでは、MQTT デバイスは、セキュリティ保護されていない方法でポート 1883 に接続し、SSL/TLS 暗号化が有効になっている場合はポート 8883 に接続します。

MQTT の実際の例は何ですか?

スマートカーは MQTT が実際に動作している素晴らしい例です。 自動車メーカーがリモート診断や車両管理から燃料支払いやエンターテイメントまであらゆるものをサポートする新機能を追加するにつれて、MQTT はコネクテッドカーの共通標準になりました。 ハイパーテキスト転送プロトコル (HTTP) プロトコルとは異なり、MQTT は、車がデッドゾーンに出入りしたり、接続が携帯電話基地局を変更したりした場合でも、永続的なセッションを維持できます。 MQTT は双方向通信もサポートしているため、車とクラウド アプリケーションは、相手からの応答を待たずにデータを送受信しやすくなります。

HTTP と MQTT の違いは何ですか?

HTTP と MQTT はどちらも、インターネット経由でデータを送信するために使用されるネットワーク プロトコルです。 それらの違いを見てみましょう。

ウェブ

  • クライアントがサーバーにリクエストを送信し、サーバーが要求されたデータで応答するリクエスト応答プロトコル。
  • 主に、Web サーバーとブラウザー間で Web コンテンツ (HTML ドキュメント、画像、フォーム データなど) を転送するために設計されています。
  • 例: Web ブラウザ (クライアント) は Web サーバーに要求を送信し、サーバーは Web ページの形式でデータで応答します。

翻訳

  • パブリッシュ/サブスクライブ、クライアントがトピックをサブスクライブし、他のクライアントによってそのトピックにパブリッシュされたメッセージを受信する軽量メッセージング プロトコル。
  • 低帯域幅、接続の安定性、電力消費が重要な考慮事項となるネットワーク トポロジとデバイス向けに設計されています。
  • 例: 上記のスマートカーのシナリオ。
モノのインターネット (IoT) で MQTT を使用する理由

MQTT の多くの機能により、IoT デバイス (IoT の「モノ」) とバックエンド システム間のメッセージングに最適なプロトコルとなっています。 ここでは、次の 4 つの機能に焦点を当てます。

  • 軽量 - MQTT はコード フットプリントが小さいため、センサーなどの処理能力とメモリが限られているデバイスでも適切に機能します。
  • 信頼性 - 多くの IoT デバイスはセルラー ネットワーク経由で接続します。 MQTT は、より少ないデータを使用してコンパクトなメッセージを必要とする低帯域幅ネットワークに適したプロトコルです。 これにより、ネットワーク帯域幅が制限されていたり不安定であったりする場合でも、MQTT の信頼性が向上します。
  • スケーラブル – パブリッシュ/サブスクライブ モデルは、デバイスやバックエンド システムを追加することで簡単に拡張できます。 単一のデバイスが 2 つの別々のバックエンド ネットワーク (サブスクライバー) に公開する例としては、住宅用スマート メーターが挙げられます。このスマート メーターは、請求目的でユーティリティ システムと、住宅所有者が自宅のエネルギー使用量を監視するためにアクセスできる顧客向けアプリケーションの両方にユーティリティ使用量データを送信します。
  • 安全 – MQTT メッセージは標準のトランスポート層セキュリティ (TLS) を使用して暗号化でき、認証に使用できる資格情報をサポートします。 これにより、MQTT は、さまざまな医療機器からの健康モニターの読み取り値などの機密情報を処理できる IoT アプリケーションにおける安全なメッセージング プロトコルになります。
MQTT はどのトランスポート プロトコルを使用しますか?

MQTT は、基盤となるトランスポート プロトコルとして、伝送制御プロトコル/インターネット プロトコル (TCP/IP) をサポートしています。 この広く使用されているネットワーク プロトコルにより、クライアントとブローカー間でメッセージが確実に送信されます。

TCP/IP が信頼性が高く効率的であると考えられる理由はいくつかあります。

  • エラー検出と訂正 - さまざまな技術により、データ パケットの整合性と、失われたパケットを回復するための再送信メカニズムが検証されます。
  • フロー制御 - データは特定のネットワークに最適な速度で送信され、送信の遅延を防ぎ、効率的な通信を促進します。
  • 多重化 – 複数のデータ ストリームを単一の接続で送信できるため、複数のアプリケーションが同時に同じ接続を使用できます。
  • 互換性 - さまざまなデバイスやオペレーティング システムで動作します。
  • スケーラビリティ - 大量のトラフィックを処理する場合でもパフォーマンスを低下させることなく、大規模で複雑なネットワークで動作するように設計されています。

TCP/IP は最も一般的ですが、MQTT メッセージの転送に唯一の選択肢というわけではありません。 MQTT プロトコルは、ユーザー データグラム プロトコル (UDP) および WebSocket でも動作します。

追加リソース

NGINX が MQTT ベースの IoT システムをどのように保護し、負荷分散し、高可用性を提供できるかを継続的に調査するために、以下の無料リソースを提供できることを誇りに思います。

ブログ

ドキュメント