MQTT

MQTTの概要

MQTTはIoTで利用される通信プロトコルです。
TCP上で動作します。

 

構成要素は次の3つです。
パブリッシャー:データの提供者
ブローカー:データの中継役
サブスクライバー:データの購読者

 

ネットワークスペシャリスト MQTT

 

パブリッシャーはデータを提供し、ブローカが受け取ります。
データはトピックで識別され、サブスクライバーは必要なトピックをブローカからサブスクライブ(購読)します。
ネットユーザーが必要なメルマガだけを購読することに似ています。

 

MQTTのQoS

MQTTでは送信側と受信側間の通信のQoSを指定できます。
QoSは0~2の間で設定でき、値が大きいほど、送信側から受信側に確実にメッセージを届けられます。
送信側と受信側の位置づけは次のようになります。ブローカは送信側にも受信側にもなります。

パブリッシャー(送信側)⇔ブローカ(受信側)
ブローカ(送信側)⇔サブスクライバー(受信側)

 

QoSレベル0

レベル0では受信側から送達確認を送りません。
送信側が送ったメッセージが消失する可能性があります。
ネットワークスペシャリスト MQTT QoSレベル0

 

QoSレベル1

レベル1では受信側が確認応答(PUBACK)を返します。(正常シーケンス)
メッセージが消失してPUBACKが返ってきた場合、再送することで消失を防ぎます。(再送シーケンス)
しかし、PUBACKが消失した場合でも再送するので、メッセージを2回処理してしまうという問題が起こります。(問題シーケンス)
ネットワークスペシャリスト MQTT QoSレベル1

 

QoSレベル2

レベル2ではPUBRELを受信してからメッセージを処理します。(正常シーケンス)
これにより、確認応答が消失した場合でも、確実に1回だけメッセージを処理することができます。(QoS1問題解消シーケンス)
ネットワークスペシャリスト MQTT QoSレベル2

午前問題の出題

午後問題の出題

平成30年度 午後Ⅱ 問1 設問2でMQTTを使ったメッセージ交換方式について出題されています。

 

(1)では、QoSレベル0の場合、TCPだけではメッセージの消失が防げないのはどのような場合かを問われています。
レベル0には再送機能がありません。
メッセージ送信中にTCPコネクションが切断されると、メッセージが消失し、再送もないので、届かないまま終わります。

解答例
TCP送信処理中にデバイスの電源断などでTCPコネクションが開放(切断)された場合

 

(2)では、QoSレベル2において、PUBRELを受信するまでメッセージを保留する目的が問われています。
目的は、上のQoSレベル2のシーケンス図に描いた通り、メッセージの処理が2回行われることを防ぐためです。

解答例
メッセージの重複を防止する。

 

(3)、(4)では、MQTTにおける各機器の位置づけや役割が穴埋めで問われています。
パブリッシャー⇔ブローカ⇔サブスクライバー
の関係を理解すれば比較的簡単に答えられる問題です。
解答例は割愛します。