Message Queuing Telemetry Transport(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はコネクテッドカーの一般的な標準となっています。Hypertext Transfer Protocol(HTTP)とは異なり、MQTTは、自動車が通信圏外のエリアに出入りする場合や、接続先の携帯電話基地局が切り替わる場合でも、永続的なセッションを維持できます。また、MQTTは双方向通信にも対応しているため、自動車とクラウドアプリケーションは、相手からの応答を待たずにデータを送受信しやすくなります。

HTTPとMQTTの違いとは?

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

HTTP

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

MQTT

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

モノのインターネット(IoT)でMQTTを使用する理由

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

  • 軽量性 – MQTTはコードのフットプリントが小さく、センサーなど、処理能力やメモリが限られたデバイスに適しています。
  • 高い信頼性 – 多くのIoTデバイスは、セルラーネットワーク経由で接続します。MQTTは、データ使用量の少ないコンパクトなメッセージが求められる低帯域幅ネットワークに適したプロトコルです。そのため、ネットワーク帯域幅が限られている場合や不安定な場合でも、MQTTは高い信頼性を発揮します。
  • スケーラブル – パブリッシュ/サブスクライブモデルは、デバイスやバックエンドシステムの追加に応じて容易に拡張できます。1台のデバイスから2つの異なるバックエンドネットワーク(サブスクライバー)にデータをパブリッシュする例として、住宅用スマートメーターがあります。このメーターは、請求処理のために電力会社のシステムへ使用量データを送信すると同時に、住宅所有者が自宅のエネルギー使用量を確認できる顧客向けアプリケーションにも送信します。
  • セキュア – MQTTメッセージは、標準のTransport Layer Security(TLS)で暗号化でき、認証に使用できる資格情報にも対応しています。そのためMQTTは、さまざまな医療機器から取得したヘルスモニターの測定値など、機密情報を扱うIoTアプリケーションに適したセキュアなメッセージングプロトコルです。

MQTTが使用するトランスポートプロトコル

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

TCP/IPが信頼性と効率性に優れているとされる理由はいくつかあります。

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

最も一般的なのはTCP/IPですが、MQTTメッセージの転送手段はTCP/IPだけではありません。MQTTプロトコルは、User Datagram Protocol(UDP)やWebSockets上でも動作します。