MQTT
IoT機器向けの軽量なメッセージングプロトコル。TCPの上で動き、送信者(パブリッシャ)と受信者(サブスクライバ)が、ブローカーと呼ばれるサーバを介してメッセージをやり取りする(パブリッシュ/サブスクライブ型)。
イマシルちゃんの解説
MQTTは、掲示板みたいな仕組みなんだ。
温度センサーは、「部屋1の温度」っていう掲示板に、測った温度を貼り出すだけ。
その温度を知りたいスマホやサーバは、「部屋1の温度」の掲示板を見張っておくと、新しい情報が貼られるたびに届けてもらえる。
センサーは「誰が見ているか」を気にしなくていいから、とってもシンプルなんだよ!
より深い解説
定義
MQTT(Message Queuing Telemetry Transport)は、OASISで標準化された、パブリッシュ/サブスクライブ型のメッセージングプロトコルである。ヘッダーが最小2バイトと小さく、処理能力やバッテリーの限られたIoT機器や、不安定な回線での利用を想定して設計されている。通常はTCPの1883番ポート(TLSを使う場合は8883番)を使う。
パブリッシュ/サブスクライブ型
| 役割 | 内容 |
|---|---|
| パブリッシャ | メッセージをトピック(例:factory/line1/temperature)を付けてブローカーに送る |
| ブローカー | メッセージを受け取り、そのトピックを購読しているサブスクライバに配る |
| サブスクライバ | 関心のあるトピックをブローカーに登録(購読)し、メッセージを受け取る |
送信者と受信者が互いを直接知る必要がなく、1対多の配信や、機器の追加・削除がしやすい。
QoS(配信の保証レベル)
| QoS | 意味 | 内容 |
|---|---|---|
| 0 | At most once | 最大1回。届かないこともある(確認しない) |
| 1 | At least once | 少なくとも1回。確認応答を待ち、届かなければ再送する(重複の可能性あり) |
| 2 | Exactly once | ちょうど1回。4回のやり取りで、重複なく届ける |
CoAPとの比較
| MQTT | CoAP | |
|---|---|---|
| トランスポート | TCP | UDP |
| 通信モデル | パブリッシュ/サブスクライブ(ブローカー経由) | リクエスト/レスポンス(HTTPに似たRESTの方式) |
| メッセージの形式 | バイナリ | バイナリ(固定ヘッダー4バイト) |
| 信頼性の確保 | TCPと、MQTTのQoS | 確認応答付きのメッセージ(CON)で再送 |
| 向いている場面 | 多数の機器からデータを集める、通知を配る | 小電力の機器を直接操作する、制約の厳しいネットワーク |
どちらもIoT向けの軽量なプロトコルだが、「パケット損失が起きやすい環境の、小電力の機器向けで、UDPの上で動くRESTのプロトコル」はCoAPである。
その他の機能
| 機能 | 内容 |
|---|---|
| Retain | トピックの最後のメッセージをブローカーが保持し、新しいサブスクライバにすぐ送る |
| Will(遺言) | 機器が不意に切断されたとき、あらかじめ登録したメッセージをブローカーが配信する |
| Keep Alive | 定期的に通信して、接続が生きていることを確認する |