MQTT(Message Queuing Telemetry Transport)について

■1.概要
・今の時代、PCとPCやサーバを通信するプロトコルはHTTP(HTTPS)が中心。FTPやSMTP、telnet、SNMP、SMBなど、本当はいくつかあるけどね。
・MQTTは、PCやスマホなどはなく、工場の機械やセンサーなどのIoT機器の通信に適したプロトコル。
・メッセージ(Message)を、送信者と受信者の溝を埋めるためにキューに蓄積(Queuing)しながら、 Telemetry(遠隔測定)をTransport(運搬)する。だが、実際にはQueueはしていない。IBM時代の名前の名残のようです。
http://mqtt.org/ にいろいろ書いてある。たとえば、MQTTは、M2MやIoTの接続に利用する軽量なプロトコルですと。
・HTTP(HTTPS)に比べてヘッダサイズが小さい(2バイトしかない)。でも、他のヘッダは同じだよ。
[イーサ][IP][TCP][HTTP][データ]
[イーサ][IP][TCP][MQTT][データ]
※HTTPヘッダが結構大きい。

・軽量(つまり、データ量が少なくてすむ)プロトコルなので、電池で動くIoTのセンサーなどにとって、電源容量が少ないのは望ましい。
・MQTTはセキュリティ機能(認証や暗号)もある→TLSを使う。
・Publisher(送信者)もSubscriber(受信者)もトピック名を設定してメッセージを送ったり、受け取ったりする。
・間にブローカが入ることで、1対1ではなく、1対多の通信が簡単に行える。
・仕組みはメルマガに似ている。該当のメルマガに登録した人だけがそのメルマガを読める
・MQTTの詳細な仕様は以下が参考になります。http://public.dhe.ibm.com/software/dw/jp/websphere/wmq/mqtt31_spec/mqtt-v3r1_ja.pdf

■2.登場人物
・ブローカー(サーバ)
・Publisher(送信者)
・Subscriber(受信者)

■3.通信の流れ
・送信者は受信者を意識することなく、好きな時にデータを送ることができる。受信者との仲介をするのがブローカー。
・MQTTの通信をする前段として、送信者と受信者はブローカーにアクセスする必要があります。
・以下に流れをまとめます。
(1)送信者
 .屮蹇璽に接続します(CONNECT)
 ▲肇團奪名を指定して、ブローカに対してメッセージを送信します(PUBLISH) 
(2)受信者
 .屮蹇璽に接続します(CONNECT)
 購読したいトピックに関して、ブローカに対してメッセージを送信します。(SUBSCRIBE)
 A信者のPUBLISHメッセージが届くようになる。

■4、実際にやってみよう。
Windowsでも簡単にできます。
(1)ソフトのダウンロード
ソフトは以下からダウンロードします。ブローカーとクライアントソフトの両方が使えます。
https://mosquitto.org/

ダウンロードページは以下です。私は、Windowsの64bit版
mosquitto-1.6.2-install-windows-x64.exe をダウンロートしてインストール
https://mosquitto.org/download/

(2)コマンドプロンプトから実行
コマンドプロンプトで、インストールされたフォルダに移動します。
c:\Program Files\mosquitto>

(3)ブローカーの起動
>mosquitto -v 
で起動。-vは詳細という意味なので、省略可能

ただ、今回は、ネット上のブローカ(test.mosquitto.org)を使うので、起動は不要。

(4)クライアント(購読者)を起動
もう一つコマンドプロンプトを立ち上げる
購読要求の(SUBSCRIBE)を実行する。
>mosquitto_sub -h test.mosquitto.org -d -t msg/network
-h:ブローカーのサーバを指定
-d:デバックメッセージの表示
-t:購読するトピック名

--------結果はこんな感じ
c:\Program Files\mosquitto>mosquitto_sub -h test.mosquitto.org -d -t msg/network

Client mosq/KydpkSJ1xV8n7irO7H sending CONNECT
Client mosq/KydpkSJ1xV8n7irO7H received CONNACK (0)
Client mosq/KydpkSJ1xV8n7irO7H sending SUBSCRIBE (Mid: 1, Topic: msg/network, Qo
S: 0, Options: 0x00)
Client mosq/KydpkSJ1xV8n7irO7H received SUBACK
Subscribed (mid: 1): 0
----------
このように、CONNECTとCONNACKによる接続と、msg/networkのTopiCを購読要求しています。

(5)クライアント(配信者)を起動
もう一つコマンドプロンプトを立ち上げる
メッセージの送信の(PUBLISH)を実行する。
mosquitto_pub -h test.mosquitto.org -d -t msg/network -m "I am a networkspecialist!"

-m:メッセージの内容

------------結果はこんな感じ
c:\Program Files\mosquitto>mosquitto_pub -h test.mosquitto.org -d -t msg/network
 -m "I am a networkspecialist!"
Client mosq/DQwypOw3cVO3Cstcfi sending CONNECT
Client mosq/DQwypOw3cVO3Cstcfi received CONNACK (0)
Client mosq/DQwypOw3cVO3Cstcfi sending PUBLISH (d0, q0, r0, m1, 'msg/network', .
.. (25 bytes))
Client mosq/DQwypOw3cVO3Cstcfi sending DISCONNECT
----------
また、さきほどの購読したプロンプトには、以下が表示される。

----------
Client mosq/KydpkSJ1xV8n7irO7H received PUBLISH (d0, q0, r0, m0, 'msg/network',
... (25 bytes))
I am a networkspecialist!
----------

ここまでで、6384bitでした。とても小さいですね。

■6.上記のパケットのキャプチャ
(1)CONNECT
mqtt_connect

(2)PUBLISH Messeage
mqtt

スポンサードリンク