LoginSignup
1
1

More than 1 year has passed since last update.

MQTTってなんだ?

Posted at

はじめに

3分で読める記事です。

IoTデバイスのセキュリティの勉強してます。
その一環でIoTネットワークに使われているプロトコルの勉強してみました。

4行で説明

・アプリケーション層プロトコル

・省電力/軽量(IoTデバイスに向いてる)

・Publish/Subscribe型

・ちゃんとパスワード設定しよう!!!

もうちょっと詳しく

IoTデバイスによく使われるデータ伝送プロトコルの代表です。
昔はHTTPが主流だったのですが、IoTデバイスの小型化・増加に伴いこっちが使われるようになりました。
(他にも、MQTTを高機能化したAMQPや産業向けのCoAPとかもあります。)

HTTPとMQTTの比較

HTTPとMQTTの比較をおおまかに表にしてみます。

HTTPとMQTT.PNG

短いヘッダ長によって、HTTP通信の10分の1程度の消費電力を実現しています。[1]
(状況によって大幅に変わります)
そのヘッダ長は驚きの2バイトです。(後で詳しくみます)
また、Publish/Subscribe型というネットワーク構成によって一対多・双方向・非同期通信を実現してます(これも後で詳しくみます)

Publish/Subscribe型って?

Publisher(データを送るデバイス)、Broker(データを中継するサーバ)、Subscriber(データを受け取るデバイス)の3つから構成されるネットワークです。
Brokerさんがデータを中継してくれるお陰で、Subscriberはすぐにデータを受け取らなくていいし(非同期通信)、色んなデバイスが同じ情報を受け取ることができます(1対多の通信)。また、PublisherとSubscriberの関係は入れ替わることもできます(双方向通信)。

もう少し正確に

0.SubscriberはBrokerと接続を確立し、受け取るtopicを指定する
1.Publisherが配信したいデータをtopic名をつけてBrokerに送信する
2.Brokerは受け取ったデータのtopicを確認して、そのtopicを指定しているSubscriberに送信する
----------------------------

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3130303838312f66323936346532632d373735612d626634652d333565382d3533663561666436633830622e6a706567.jpg

ヘッダの中身

MQTTヘッダ.PNG
(参考[2])

2バイトって逆に何が入ってるねんって感じなんですけど、基本的に上の3つです。

メッセージタイプ

Connect、Subscribeなどメッセージの形式の指定

固有フラグ

メッセージタイプがPublishの時以外あまり関係ないです。
Publishのときは、以下のようにフラグが設定されます。

bit3 bit2 bit1 bit0
DUP QoS QoS RETAIN

DUP:パケットが重複しているか否かのフラグ。何らかの要因でパケットを再配信するときはDUPフラグが1になる
QoS:送信の品質を3段階で指定します。[3]
 QoS0:パケットを一度だけ送信する(到達保障なし)
 QoS1:パケットが到達したことを確認する(重複して到達する可能性あり)
 QoS2:パケットを正確に1度だけ送信する(到達の確認の確認を行う)
RETAIN:フラグが1になっているものでtopicごとに最新のものだけ、Brokerで保持されます。新たなSubscriberが登録されたとき、要求されたtopicごとに最新のものが自動的に送信されます。

残りの長さ

読んで字のごとく、固定ヘッダを除いたパケットの長さです。

MQTTの課題(セキュリティ面)

MQTTはTLSで暗号化することができるので、通信面で脆弱性は持っていません。(その分伝送効率悪くなるけど…)
ただし、Brokerサーバがパスワードがかけられずに放置されている例が非常に多いです。(『Shodan』というサイトで確認可能)
Brokerサーバは中継地点であるため、行き来するすべての情報が読めてしまいます。

パスワード設定しよう!!!

最近の研究

セキュリティに関する研究はあんまなかったです。。
ほとんどHTTPやWebsocketとの性能比較の研究ばっかりのイメージ
軽量暗号に関する研究くらい?
あれば教えてくださいm(_ _)m

おわりに

読んでいただきありがとうございました。
おおまかにしか書きませんでしたので、間違っていましたら指摘いただけると嬉しいです。
正確な情報が知りたい方は参考文献[2]をご参照ください。

参考文献

[1]かもめエンジニアリング『MQTTとは
[2]MQTT Version 3.1.1
[3]さきブログ『QoSとは?MQTTにおける通信の種類!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1