3-MQTTプロトコル分析
3975 ワード
MQTTのプロトコルが必要であれば、その相互作用過程を見て、その原理を理解することを深めてもいいです。
1.新聞
固定報文フォーマット:タイプ+フラグビット
Bit
7-4
3-0
byte 1
MQTT制御メッセージの種類
制御の種類を指定するためのフラグビット
byte 2…
残りの長さ
1.1 MQTT制御メッセージの種類:
新聞の種類
フィールド値
データの方向
説明
保留
0
無効化
保留
CONNET
1
Cient->Server
クライアントがサーバに接続されています。
CONNIN ACK
2
Server->Cient
接続確認
PUBLISH
3
Cient Server
ニュースを発表する
PUBACK
4
Cient Server
リリースの確認
PUBRC
5
Cient Server
メッセージは受信されました(QoS 2第1段階)
PUBREL
6
Cient Server
メッセージリリース(QoS 2第2段階)
PUBCO MP
7
Cient Server
リリース終了(QoS 2第3段階)
SUBSCRIBE
8
Cient->Server
クライアント購読要求
SUBACK
9
Server->Cient
サービス購読の確認
UNSUBACRIBE
10
Cient->Server
クライアントの購読をキャンセルします。
UNSUBACK
11
Server->Cient
サービスで購読の確認をキャンセルします。
PINGREQ
12
Cient->Server
クライアントが心拍を送る
PINGRESP
13
Server->Cient
仕事を終えて心臓の鼓動を回復する。
DISCONECT
14
Cient->Server
クライアント切断接続要求
保留
15
無効化
保留
1.2制御アラームタイプのフラグビット:
制御メッセージ
固定ヘッダフラグ
Bit 3
Bit 2
Bit 1
Bit 0
CONNET
Reserved
0
0
0
0
CONNIN ACK
Reserved
0
0
0
0
PUBLISH
Used in MQTT 3.1.1
DUP
QoS
QoS
RETAIN
PUBACK
Reserved
0
0
0
0
PUBRC
Reserved
0
0
0
0
PUBREL
Reserved
0
0
1
0
PUBCO MP
Reserved
0
0
0
0
SUBSCRIBE
Reserved
0
0
1
0
SUBACK
Reserved
0
0
0
0
UNSUBSCRIBE
Reserved
0
0
1
0
UNSUBACK
Reserved
0
0
0
0
PINGREQ
Reserved
0
0
0
0
PINGRESP
Reserved
0
0
0
0
DISCONECT
Reserved
0
0
0
0上記のメッセージを見ると、PUBのQOSフラグは直接に「制御アラームタイプのフラグビット」の中にあるが、CONNETとSUBのQOSマークは頭にない。 トラッキングは、CONNETおよびSUBのQOSマークが後続のデータ内にあることを発見することができる 。 PINGときめきQOS設定がない 2.接続
新聞の種類
データの方向
説明
0 x 10
client->brook er
MQTT CONNET
0 x 20
brook->client
MQTT CONNIN ACK
値
リターンコード応答
説明
0
0 x 00接続は受け入れられました
接続はすでにサービスで受け入れられました。
1
0 x 01接続が拒否されました。サポートされていないプロトコルのバージョンです。
サービス側はクライアント要求のMQTTプロトコルレベルをサポートしていません。
2
0 x 02接続が拒否されました。不合格のクライアント識別子
クライアント識別子は正確なUTF-8符号化であるが、サービス端末は使用を許可しない。
3
0 x 03接続は拒否されました。サービスは利用できません。
ネットワーク接続は確立されましたが、MQTTサービスは利用できません。
4
0 x 04接続が拒否されました。無効なユーザ名またはパスワードです。
ユーザ名またはパスワードのデータフォーマットは無効です。
5
0 x 05接続は拒否されました。許可されていません。
クライアントはこのサーバに接続する権限がありません。
6-255
保留
前の表のすべての接続のリターンコードが不適切だと思うなら、サーバーは必須です。
3.ドキドキ
一つの鼓動には三つのカバンがあります。
新聞の種類
データの方向
説明
0 xc 0
client->brook er
MQTT PINGREQ
0 xd 0
brook->client
MQTT PINGRESP
client->brook er
TCP ACK
4.リリース
4.1 QOS=0の場合
新聞の種類
データの方向
説明
0 x 30
client->brook er
MQTT PUBLISH
brook->client
TCP ACK
4.2 QOS=1の場合
新聞の種類
データの方向
説明
0 x 32
client->brook er
MQTT PUBLISH
0 x 40
brook->client
MQTT PUBACK
4.3 QOS=2の場合
新聞の種類
データの方向
説明
0 x 34
client->brook er
MQTT PUBLISH
0 x 50
brook->client
MQTT PUBREEC
0 x 62
client->brook er
MQTT PUBREL
0 x 70
brook->client
TCP PUBCO MP
5.バッグをつかむ
【MQTT】Wirestrukを用いてMQTTプロトコルを分析する:https://blog.csdn.net/yannanxiu/article/details/71310723は最新バージョンに更新され、直接mqttの新聞文を解析することができます(1883ポートでなければ解析できません)。 ですが、mqttsの記事を解析することができません。BitTorrent(ビットストリーム) が表示されます。は、ポートフィルタ を使用することができます。
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html
1.新聞
固定報文フォーマット:タイプ+フラグビット
Bit
7-4
3-0
byte 1
MQTT制御メッセージの種類
制御の種類を指定するためのフラグビット
byte 2…
残りの長さ
1.1 MQTT制御メッセージの種類:
新聞の種類
フィールド値
データの方向
説明
保留
0
無効化
保留
CONNET
1
Cient->Server
クライアントがサーバに接続されています。
CONNIN ACK
2
Server->Cient
接続確認
PUBLISH
3
Cient Server
ニュースを発表する
PUBACK
4
Cient Server
リリースの確認
PUBRC
5
Cient Server
メッセージは受信されました(QoS 2第1段階)
PUBREL
6
Cient Server
メッセージリリース(QoS 2第2段階)
PUBCO MP
7
Cient Server
リリース終了(QoS 2第3段階)
SUBSCRIBE
8
Cient->Server
クライアント購読要求
SUBACK
9
Server->Cient
サービス購読の確認
UNSUBACRIBE
10
Cient->Server
クライアントの購読をキャンセルします。
UNSUBACK
11
Server->Cient
サービスで購読の確認をキャンセルします。
PINGREQ
12
Cient->Server
クライアントが心拍を送る
PINGRESP
13
Server->Cient
仕事を終えて心臓の鼓動を回復する。
DISCONECT
14
Cient->Server
クライアント切断接続要求
保留
15
無効化
保留
1.2制御アラームタイプのフラグビット:
制御メッセージ
固定ヘッダフラグ
Bit 3
Bit 2
Bit 1
Bit 0
CONNET
Reserved
0
0
0
0
CONNIN ACK
Reserved
0
0
0
0
PUBLISH
Used in MQTT 3.1.1
DUP
QoS
QoS
RETAIN
PUBACK
Reserved
0
0
0
0
PUBRC
Reserved
0
0
0
0
PUBREL
Reserved
0
0
1
0
PUBCO MP
Reserved
0
0
0
0
SUBSCRIBE
Reserved
0
0
1
0
SUBACK
Reserved
0
0
0
0
UNSUBSCRIBE
Reserved
0
0
1
0
UNSUBACK
Reserved
0
0
0
0
PINGREQ
Reserved
0
0
0
0
PINGRESP
Reserved
0
0
0
0
DISCONECT
Reserved
0
0
0
0
新聞の種類
データの方向
説明
0 x 10
client->brook er
MQTT CONNET
0 x 20
brook->client
MQTT CONNIN ACK
値
リターンコード応答
説明
0
0 x 00接続は受け入れられました
接続はすでにサービスで受け入れられました。
1
0 x 01接続が拒否されました。サポートされていないプロトコルのバージョンです。
サービス側はクライアント要求のMQTTプロトコルレベルをサポートしていません。
2
0 x 02接続が拒否されました。不合格のクライアント識別子
クライアント識別子は正確なUTF-8符号化であるが、サービス端末は使用を許可しない。
3
0 x 03接続は拒否されました。サービスは利用できません。
ネットワーク接続は確立されましたが、MQTTサービスは利用できません。
4
0 x 04接続が拒否されました。無効なユーザ名またはパスワードです。
ユーザ名またはパスワードのデータフォーマットは無効です。
5
0 x 05接続は拒否されました。許可されていません。
クライアントはこのサーバに接続する権限がありません。
6-255
保留
前の表のすべての接続のリターンコードが不適切だと思うなら、サーバーは必須です。
3.ドキドキ
一つの鼓動には三つのカバンがあります。
新聞の種類
データの方向
説明
0 xc 0
client->brook er
MQTT PINGREQ
0 xd 0
brook->client
MQTT PINGRESP
client->brook er
TCP ACK
4.リリース
4.1 QOS=0の場合
新聞の種類
データの方向
説明
0 x 30
client->brook er
MQTT PUBLISH
brook->client
TCP ACK
4.2 QOS=1の場合
新聞の種類
データの方向
説明
0 x 32
client->brook er
MQTT PUBLISH
0 x 40
brook->client
MQTT PUBACK
4.3 QOS=2の場合
新聞の種類
データの方向
説明
0 x 34
client->brook er
MQTT PUBLISH
0 x 50
brook->client
MQTT PUBREEC
0 x 62
client->brook er
MQTT PUBREL
0 x 70
brook->client
TCP PUBCO MP
5.バッグをつかむ
【MQTT】Wirestrukを用いてMQTTプロトコルを分析する:https://blog.csdn.net/yannanxiu/article/details/71310723
(tcp.dstport == 1883) || (tcp.srcport == 1883)
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html