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パケットを再送します。
コメント