MQTTについて調べる機会があり、せっかくなのでまとめてみました。
MQTTとは、二者間の非同期通信をサポートするプロトコルであり、メッセージの送信側と受信側を空間という点でも、時間という点でも切り離すことができるプロトコルである。
そのために、信頼できないネットワーク環境内でスケーラブルな性質を発揮する。
パブリッシュ/サブスクライブ・モデルに従っており、ブローカーで仲介して、送信、受信どちらにも一対多の通信を確立することができる。
MQTTのシーケンス
MQTTの特徴
・固定ヘッダが最小2バイトと軽量プロトコルも簡易である
・Pub/Subモデルにより、一対多・多対多でメッセージのやり取りが可能
・階層型トピックとワイルドカードにより柔軟に通信相手を選定できる
・通信の切断をトリガーにしてメッセージ(will)を送信できる
・必要な到達可能性(QoS)を設定できる
・最後に送られたメッセージを受け取ることができる(Retain)
最後の切断中に送られたメッセージを後から受けとれる(pesistent Session)
という特徴があり、以上のことから
・クライアントが低い計算能力しか持たない場合でも実装できる
・通信の際の消費電力も少なくて済む(軽量なので)
・非同期でのメッセージのやり取りが可能
・サーバー側からのプッシュ通信が可能
・コネクションが切断されたことを検知できる
というのが利点があることがわかる
HTTPとの比較
一般に使用されることが多いプロトコルHTTPと比較したとき
HTTP通信は、最初に3ウェイハンドシェイクを実行してコネクションを確立する必要がある。その後GET,POST等を使ってデータを送り、コネクションを閉じる。このためセンサーデータなど短いデータを送る場合はオーバーヘッドが目立ってしまう等の特徴があり、IoTでは使用する場面が限定されることが予想できる
下図はHTTPのシーケンスのイメージである
データの送信と受信が切り離されていないことや、通信に手間がかかることがわかる
これと比較してMQTT通信は
・3ウェイハンドシェイクをしないため通信開始までの時間が短い
(TCP/IP上に実装されていますので、3ウェイハンドシェイクを行っています)
・サーバー側からのプッシュ通信が可能
・コネクションが切断されたことを検知できる
等のメリットがある。
Topicの階層
MQTTはTopicと呼ばれるキーを用いてメッセージングを行っており、Topicは「/」で区切られた階層構造になっている
つまりTopicはメッセージの送り先を示す文字列になっている。さらにTopicは+と#というワイルドーカードを使用することができる
+でその階層のすべて、#でその以下の階層のすべてを指定する
(例)foo/+/foobar
QoSについて
Quality of Serviceの略でメッセージの到達可能性を明示している
メッセージごとの到達可能性を3種類のQoSから選択することができる
QoS1 : 最高1回、届くかは保証しない
QoS2 : 少なくとも1回、重複可能性がある
QoS3 : 正確に1回
QoS3が一番正確だがサーバーとクライアントどちらの処理も重くなり、負荷がかかる。処理が多くなるために遅くなるので状況に応じて使い分ける必要が出てくる
セキュリティについて
クライアントの接続時にユーザー名とパスワードを指定することが多いが、
そのままで送信するとパスワードが平文で送られること、ペイロードの暗号化については仕様で定義していないことが多いのでTLSと組み合わせ使用することが多い
TLS(Transport Layer Security)
TLSとはTCP/IPを使った様々なサーバーとクライアントの通信で、セキュアなチャンネル(通信路)を使用できるようにする仕組みで以前はSSLと呼んでいた
ライブラリ
ライブラリはweb上に情報がたくさんあるので使用するときに調べるとよいと思われる
phao-MQTTが有名である。
使用例
IoT,M2M,人工衛星、FacebookMessengerなどに使用されている
###まとめと感想
MQTTはヘッダーが軽量なこと、通信が不安定なところでもスケールすることができるのでIoTの通信に向いていると考えられる。だがセキュリティに関しては深く考える必要があり、特に何かを操作しようと考えている際にはしっかりとリスクを把握したうえで使用する必要があると考えられる。
実験に使用する程度であれば実装は簡単なので実装する際はこちらのサイトも参考にしてみてください
http://blog.shinrinakamura.jp/dgh34280/2018/11/02/environment1/
参考情報
Web+DB PRESS vol88 2015年9月25日 初版第一刷発行 株式会社技術評論社
日経ITエンジニアスクール IoT最高の指南書 2018年5月21日発行 日経BP社