MQTT とは何ですか?

MQTT は、マシン間の通信に使用される標準ベースのメッセージングプロトコル、または一連のルールです。スマートセンサー、ウェアラブル、および他のモノのインターネット (IoT) デバイスは通常、帯域幅が制限されたリソースに制約のあるネットワークを介してデータを送受信する必要があります。これらの IoT デバイスは、実装が簡単で、IoT データを効率的に通信できるため、MQTT を使用してデータを送信します。MQTT は、デバイスからクラウドへ、およびクラウドからデバイスへのメッセージングをサポートします。

MQTT プロトコルが重要なのはなぜですか?

MQTT プロトコルには次のメリットがあるため、IoT データ送信の標準となっています。

軽量で効率的

IoT デバイスでの MQTT の実装に必要なリソースは最小限であるため、小さなマイクロコントローラーでも使用できます。例えば、最小限の MQTT コントロールメッセージは、わずか 2 データバイトです。MQTT メッセージヘッダーも小さいため、ネットワーク帯域幅を最適化できます。

スケーラブル

MQTT の実装に必要なのは、操作でほとんど電力を消費しない最小限のコードだけです。このプロトコルには、多数の IoT デバイスとの通信をサポートする機能も組み込まれています。したがって、MQTT プロトコルを実装して、何百万ものこれらのデバイスに接続できます。

信頼性

多くの IoT デバイスは、帯域幅が狭くレイテンシーが大きい、信頼性の低いセルラーネットワークを介して接続しています。MQTT には、IoT デバイスがクラウドに再接続するのにかかる時間を短縮する機能が組み込まれています。また、IoT のユースケースの信頼性を確保するために、3 つの異なるサービスの質のレベル (最大 1 回 (0)、少なくとも 1 回 (1)、および厳密に 1 回 (2)) を定義しています。

セキュア

MQTT を使用すると、デベロッパーは、OAuth、TLS 1.3、カスタマーマネージド証明書などの最新の認証プロトコルを使用して、メッセージを暗号化し、デバイスとユーザーを簡単に認証できます。

充実したサポート

Python などのいくつかの言語は、MQTT プロトコルの実装を幅広くサポートしています。したがって、デベロッパーは、あらゆるタイプのアプリケーションにおいて、最小限のコーディングで迅速に実装できます。

MQTT プロトコルの背後にはどのような歴史がありますか?

MQTT プロトコルは、石油およびガス業界で使用するために 1999 年に発明されました。エンジニアは、衛星経由で石油パイプラインをモニタリングするために、帯域幅を最小限にし、バッテリーの損失を最小限に抑えるプロトコルを必要としていました。当初、プロトコルは Message Queuing Telemetry Transport として知られていました。これは、初期フェーズを最初にサポートした IBM 製品の MQ シリーズに由来します。2010 年、IBM は MQTT 3.1 を誰でも実装できる無料のオープンプロトコルとしてリリースし、2013 年に構造化情報標準促進協会 (OASIS、rganization for the Advancement of Structured Information Standards) 仕様機関にメンテナンスのために提出しました。2019 年に、アップグレードされた MQTT バージョン 5 が OASIS によってリリースされました。現在、MQTT は頭字語ではなく、プロトコルの正式名称と考えられています。 

MQTT の背後にある原則は何ですか?

MQTT プロトコルは、パブリッシュ/サブスクライブモデルの原則に基づいて機能します。従来のネットワーク通信では、クライアントとサーバーは互いに直接通信します。クライアントはサーバーにリソースまたはデータをリクエストし、サーバーは処理してレスポンスを返します。他方、MQTT はパブリッシュ/サブスクライブパターンを使用して、メッセージの送信者 (パブリッシャー) をメッセージの受信者 (サブスクライバー) から分離します。代わりに、メッセージブローカーと呼ばれる 3 番目のコンポーネントが、パブリッシャーとサブスクライバー間の通信を処理します。ブローカーの仕事は、パブリッシャーからのすべての着信メッセージをフィルタリングし、サブスクライバーに正しく配信することです。ブローカーは、以下のようにパブリッシャーとサブスクライバーを分離します。

空間の分離

パブリッシャーとサブスクライバーは、互いのネットワークの場所を認識せず、IP アドレスやポート番号などの情報をやり取りしません。

時間の分離

パブリッシャーとサブスクライバーは同時に実行されず、または同時にネットワークに接続されません。

同期の分離

パブリッシャーとサブスクライバーの両方が、互いに中断することなくメッセージを送受信できます。例えば、サブスクライバーはパブリッシャーがメッセージを送信するのを待つ必要はありません。

MQTT コンポーネントとは何ですか?

MQTT は、以下のようにクライアントとブローカーを定義することにより、パブリッシュ/サブスクライブモデルを実装します。

MQTT クライアント

MQTT クライアントは、サーバーから MQTT ライブラリを実行するマイクロコントローラーまでの任意のデバイスです。クライアントがメッセージを送信している場合はパブリッシャーとして機能し、メッセージを受信している場合は受信者として機能します。基本的に、ネットワーク上で MQTT を使用して通信するデバイスはすべて、MQTT クライアントデバイスと呼ぶことができます。

MQTT ブローカー

MQTT ブローカーは、異なるクライアント間でメッセージを調整するバックエンドシステムです。ブローカーの役割には、メッセージの受信とフィルタリング、各メッセージをサブスクライブしているクライアントの識別、それらのクライアントへのメッセージの送信が含まれます。また、次のような他のタスクも実行します。

  • MQTT クライアントの承認と認証
  • さらなる分析のためにメッセージを他のシステムに渡すこと
  • 受信できなかったメッセージとクライアントセッションの処理

MQTT 接続

クライアントとブローカーは、MQTT 接続を使用して通信を開始します。クライアントは、CONNECT メッセージを MQTT ブローカーに送信して接続を開始します。ブローカーは、CONNACK メッセージで応答することにより、接続が確立されたことを確認します。MQTT クライアントとブローカーの両方が、通信するために TCP/IP スタックを必要とします。クライアントは互いに接続することはなく、ブローカーとのみ接続します。

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

MQTT の仕組みの概要を以下に示します。 

  1. MQTT クライアントは、MQTT ブローカーとの接続を確立します。
  2. 接続すると、クライアントはメッセージをパブリッシュするか、特定のメッセージをサブスクライブするか、またはその両方を行うことができます。
  3. MQTT ブローカーがメッセージを受信すると、関心のあるサブスクライバーにそのメッセージを転送します。

さらに理解を深めるために、詳細を確認しましょう。

MQTT トピック

「トピック」という用語は、MQTT ブローカーが MQTT クライアントのメッセージをフィルタリングするために使用するキーワードをいいます。トピックは、ファイルやフォルダのディレクトリと同様に、階層的に編成されています。例えば、各フロアに異なるスマートデバイスがある複数階建ての家で動作するスマートホームシステムを考えてみましょう。その場合、MQTT ブローカーはトピックを次のように編成する場合があります。

ourhome/groundfloor/livingroom/light

ourhome/firstfloor/kitchen/temperature

MQTT パブリッシュ

MQTT クライアントは、トピックとデータをバイト形式で含むメッセージをパブリッシュします。クライアントは、テキストデータ、バイナリデータ、XML、または JSON ファイルなどのデータ形式を決定します。例えば、スマートホームシステムの照明は、トピック livingroom/light に対してメッセージをパブリッシュする場合があります。

MQTT サブスクライブ

MQTT クライアントは、SUBSCRIBE メッセージを MQTT ブローカーに送信して、関心のあるトピックに関するメッセージを受信します。このメッセージには、一意の識別子とサブスクリプションのリストが含まれています。例えば、スマートフォンのスマートホームアプリで、家の中でいくつの照明が点灯しているかを表示させたいとします。トピック light をサブスクライブし、すべてのメッセージに対するカウンターを増やします。 

MQTT over WSS とは何ですか?

MQTT over WebSockets (WSS) は、ウェブブラウザで直接データを受信するための MQTT 実装です。MQTT プロトコルは、ブラウザに WSS サポートを提供する JavaScript クライアントを定義します。この場合、プロトコルは通常どおりに機能しますが、WSS プロトコルもサポートするために、MQTT メッセージにヘッダーがさらに追加されます。これは、WSS エンベロープでラップされた MQTT メッセージペイロードと考えることができます。

MQTT は安全ですか?

MQTT 通信は SSL プロトコルを使用して、IoT デバイスによって送信される機密データを保護します。SSL 証明書やパスワードを使用して、クライアントとブローカーの間で ID、認証、および許可を実装できます。通常、MQTT ブローカーは、クライアントのパスワードと、各クライアントに割り当てる一意のクライアント識別子を使用してクライアントを認証します。ほとんどの実装では、クライアントは証明書または DNS ルックアップを使用してサーバーを認証します。MQTT を使用して暗号化プロトコルを実装することもできます。 

MQTT は RESTful ですか?

MQTT は RESTful ではありません。Representational State Transfer (REST) は、メッセージの送信者と受信者の間の通信のリクエスト-レスポンスパターンを使用する、ネットワーク通信に対するアーキテクチャアプローチです。対照的に、MQTT は、アプリケーションレイヤーでパブリッシュ/サブスクライブモデルの通信を使用し、メッセージをプッシュ方式で送信するために常時 TCP 接続を必要とします。ただし、MQTT バージョン 5 では、REST と同様の方法で機能する新しいリクエスト/レスポンスメソッドが追加されています。パブリッシャーは、受信者が処理して適切なレスポンスを生成する特別なレスポンストピックをアタッチできます。

AWS は MQTT の実装をどのようにサポートできますか?

AWS IoT Core は、数十億の IoT デバイスを接続し、何兆ものメッセージを AWS のサービスにルーティングできるフルマネージド型のサービスです。利用可能な機能:

  • サーバーをプロビジョニングまたは管理することなく、デバイスフリートを簡単かつ確実に接続、管理、およびスケールします。
  • MQTT、HTTPS、MQTT over WSS、LoRaWAN など、お好みの通信プロトコールをお選びいただけます。
  • 相互認証とエンドツーエンド暗号化を使用して、デバイスの接続とデータを保護します。
  • 定義したビジネスルールに基づいて、デバイスデータを迅速にフィルタリング、変換、活用できます。

今すぐ無料のアカウントを作成して、AWS で MQTT の使用を開始しましょう。

AWS MQTT の次のステップ

無料のアカウントにサインアップする

AWS 無料利用枠にすぐにアクセスできます。 

サインアップ 
コンソールで構築を開始する

AWS マネジメントコンソールで、AWS を使って構築を開始しましょう。

サインイン