【図解でよくわかる】QoSとは?MQTTにおける通信保証

MQTTのQoSって何?

こんな疑問にイラストを使って分かりやすく説明します。

この記事でわかること

  • QoSとは
  • QoSの種類
  • QoSレベルの使い分け
目次

QoSとは

 QoSとは「Quality of Service」の略。Quality(品質)という語が示す通り、ネットワーク上のサービスにおいて、通信品質を保証するための技術です。
 MQTTではQoSを設定することで「メッセージの到達保証の度合い」を変更することができます。

QoSの種類

 MQTTにおけるQoSは「3段階」のレベルに分けられます。

QoS通信方式
QoS 0(At most once)最高1回届ける
QoS 1(At least once)最低1回届ける
QoS 2(Exactly once)正確に1回届ける

QoSレベルの使い分け

QoS 0(最高1回届ける)

 メッセージは1度だけ送信され、相手にメッセージが届いたかどうかは確認しません。最も軽量な通信ですが、メッセージが届かない可能性があります。

QoS 1(最低1回届ける)

 相手がメッセージを少なくとも1度は受信されるように送信します。メッセージの到達が確認されない場合、メッセージを再送信します。重複が発生する可能性がありますが、メッセージの損失を防止できます。

 メッセージの到達が確認されない(確認応答が来ない)場合は、パブリッシャがメッセージを再送します。

 QoS 1ではサブスクライバにメッセージを届けた後、ブローカからパブリッシャへの確認応答が通信異常などで届かない場合、パブリッシャからメッセージを再送します。この場合、メッセージの重複が発生します。

QoS 2(正確に1回届ける)

 メッセージは確実に1度だけ受信されるように送信します。メッセージの到達が確認されない場合、送信側はメッセージを再送信し、受信側は重複を検知して処理します。最も信頼性が高い通信ですが、オーバーヘッドが大きくなります。

 QoS 1と比較して、QoS 2でのサブスクライバからの応答は、PUBACKパケットではなくPUBRECパケットとなります。さらにPUBRELパケットPUBCOMPパケットが追加されています。
 メッセージに対するPUBRECパケットがサブスクライバから送信されるため、パブリッシャは受信を待ちます。PUBRECパケットが受信できない場合はメッセージを再送します。PUBRECパケットを受信するとパブリッシャから送るメッセージはもう必要ないため削除します。しかし、サブスクライバはパケットIDと呼ばれるメッセージごとの固有の番号を保持しておきます。これによりメッセージの重複を検知することができます
 PUBRECパケットを受信すると、パブリッシャはPUBRELパケットを送信します。PUBRELパケットを受信するとサブスクライバはパケットIDを削除します。PUBRELパケットに対応するPUBCOMPパケットがサブスクライバから送信されるため、パブリッシャは受信を待ちます。PUBCOMPパケットが受信できない場合は PUBRELパケットを再送します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ただのサラリーマン | PLC | 画像 | ロボット | 製造業のノウハウを発信しています |

コメント

コメントする

目次