デバイス通信プロトコルを選択する
IoT Hub によって、デバイスはデバイス側の通信に次のプロトコルを使うことができるようになります。
- MQTT
- WebSocket 経由の MQTT
- Advanced Message Queuing Protocol (AMQP)
- AMQP over WebSocket
- HTTPS
Note
IoT Hub では、MQTT の機能のサポートが制限されています。 ソリューションに MQTT v3.1.1 または v5 のサポートが必要な場合は、Azure Event Grid での MQTT サポートをお勧めします。 詳細については、IoT Hub と Event Grid での MQTT サポートの比較に関するページを参照してください。
これらのプロトコルがサポートしている具体的な IoT Hub 機能については、「device-to-cloud 通信に関するガイダンス」と「cloud-to-device 通信に関するガイダンス」をご覧ください。
プロトコル選択に関する高度な推奨事項には次のようなものがあります。
Protocol | そのプロトコルを選択しなければならない場合 |
---|---|
MQTT WebSocket 経由の MQTT |
同じ TLS 接続で (それぞれがデバイス独自の資格情報を有する) 複数のデバイスに接続する必要がないすべてのデバイスで使用します。 |
AMQP AMQP over WebSocket |
デバイスを多重化する接続を活用するために、フィールド ゲートウェイとクラウド ゲートウェイで使用します。 |
HTTPS | その他のプロトコルをサポートできないデバイスに使用します。 |
デバイス側の通信用プロトコルを選択する場合、次の点を考慮してください。
C2D のパターン。 HTTPS には、サーバー プッシュを実装する効率的な方法がありません。 そのため、HTTPS を使うと、デバイスは IoT Hub に対して cloud-to-device メッセージのポーリングを行います。 この方法は、デバイスと IoT Hub の両方で非効率的です。 現在の HTTPS ガイドラインでは、各デバイスによるメッセージのポーリングの間隔は 25 分以上となっています。 HTTPS 受信の発行が多くなれば、IoT Hub で要求が調整されます。 MQTT と AMQP では、C2D メッセージを受信する場合のサーバー プッシュがサポートされています。 IoT Hub からデバイスへのメッセージも即座にプッシュできます。 配信の待機時間が問題となる場合は、MQTT または AMQP が使用に最適なプロトコルです。 頻繁に接続されないデバイスの場合は、HTTPS でも対応できます。
フィールド ゲートウェイ。 MQTT と HTTPS でサポートされるデバイス ID (デバイス ID と資格情報) は、TLS 接続ごとに 1 つだけです。 このような理由から、IoT Hub への単一接続、またはアップストリーム接続のプール全体で、複数のデバイス ID を使用したメッセージの多重化を必要とするフィールド ゲートウェイのシナリオでは、これらのプロトコルがサポートされません。 そのようなゲートウェイでは、アップストリーム トラフィックの接続ごとに複数のデバイス ID をサポートするプロトコル (AMQP など) を使用してください。
リソースの少ないデバイス。 MQTT および HTTPS ライブラリのフットプリントは、AMQP ライブラリの場合より小さくなります。 そのため、リソースが限られたデバイス (RAM が 1 MB 未満など) の場合、これらのプロトコルが実装可能な唯一のプロトコルとなります。
ネットワーク トラバーサル。 標準の AMQP プロトコルはポート 5671 を使用し、MQTT はポート 8883 をリッスンします。 これらのポートを使うと、ネットワークが HTTPS 以外のプロトコルに限定されている場合、問題が発生する可能性があります。 このようなシナリオの場合は、MQTT over WebSockets、AMQP over WebSockets、または HTTPS を使ってください。
ペイロードのサイズ。 MQTT と AMQP はバイナリ プロトコルであり、HTTPS よりもペイロードが小さくなります。
警告
HTTPS を利用する場合、各デバイスがクラウドからデバイスへのメッセージを確認する間隔はせいぜい 25 分に 1 回にしてください。 開発中は、必要に応じて、各デバイスでもっと頻繁にポーリングできます。
重要
X.509 証明機関 (CA) の認証を使用するデバイスの次の機能は、まだ一般提供されていません。また、プレビュー モードを有効にする必要があります。
- HTTPS、WebSocket 経由の MQTT、WebSockets プロトコル経由の AMQP。
- ファイルのアップロード (すべてのプロトコル)。
これらの機能は、X.509 拇印認証を使用するデバイスで一般提供されています。 IoT Hub での X.509 認証の詳細については、「サポートされている X.509 証明書」を参照してください。
ポート番号
デバイスは、さまざまなプロトコルを使用して Azure の IoT Hub と通信できます。 通常、プロトコルの選択は、ソリューションの特定の要件によって左右されます。 次の表に、デバイスが特定のプロトコルを使用できるようにするために開く必要がある送信ポートを示します。
プロトコル | [ポート] |
---|---|
MQTT | 8883 |
WebSocket 経由の MQTT | 443 |
AMQP | 5671 |
AMQP over WebSocket | 443 |
HTTPS | 443 |
IoT ハブの IP アドレスは、予告なしに変更される可能性があります。 IoT ハブの IP アドレス変更が IoT ソリューションとデバイスに及ぼす影響を軽減する方法については、「IoT Hub IP アドレス」の「ベスト プラクティス」セクションを参照してください。
次のステップ
IoT Hub による MQTT プロトコルの実装方法の詳細については、「MQTT プロトコルを使用した IoT ハブとの通信」をご覧ください。