クライアントとブローカー間で TCP/IP ソケット接続を確立するとき、プロトコル・レベルのセッションが必要です。 接続の方向はクライアントからブローカーであること、クライアントはブローカーの listener 機能をサポートすることが考えられます。
固定ヘッダーの形式については、以下の表で示しています。
ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
バイト 1 | メッセージ・タイプ (1) | DUP フラグ | QoS レベル | RETAIN | ||||
0 | 0 | 0 | 1 | x | x | x | x | |
バイト 2 | 残りの長さ |
DUP、QoS、および RETAIN フラグは、CONNECT メッセージでは使用されません。
残りの長さは、変数ヘッダー (12 バイト) の長さに、ペイロードの長さを加えたものです。 これは、マルチバイト・フィールドの場合もあります。
変数ヘッダーの形式の例は、以下の表で示しています。
説明 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
プロトコル名 | |||||||||
バイト 1 | Length MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
バイト 2 | Length LSB (6) | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
バイト 3 | 'M' | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
バイト 4 | 'Q' | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
バイト 5 | 'I' | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
バイト 6 | 's' | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 |
バイト 7 | 'd' | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
バイト 8 | 'p' | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
プロトコル・バージョン番号 | |||||||||
バイト 9 | Version (3) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
接続フラグ | |||||||||
バイト 10 | Will RETAIN (0) |
x | x | 0 | 0 | 1 | 1 | 1 | x |
Keep Alive Timer | |||||||||
バイト 11 | Keep Alive MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
バイト 12 | Keep Alive LSB (10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
最初の UTF エンコード・ストリング。1 から 23 文字までの長さの クライアント ID で、ブローカーに対してクライアントを固有に識別させます。 クライアント ID は、単一ブローカーに接続するすべてのクライアントにまたがって固有でなければならず、QoS レベル 1 と QoS レベル 2 でメッセージ ID メッセージを処理する際のキーとなります。クライアント ID が 23 文字を超えている場合、ブローカーは、CONNACK 戻りコード 2 (ID が拒否された) で CONNECT メッセージに応答します。
2 番目の UTF エンコード・ストリング。 Will Message は、Will Topic にパブリッシュされます。 QoS レベルは、Will QoS フィールドによって定義され、RETAIN 状況は、変数ヘッダー内の Will RETAIN フラグによって定義されます。
3 番目の UTF エンコード・ストリング。Will Message は、クライアントが予期せずに切断された場合に Will Topic にパブリッシュされるメッセージの内容を定義します。
Will Message は CONNECT メッセージの中で UTF エンコードされますが、これが Will Topic に対してパブリッシュされる場合、最初の 2 つの長さバイトではなく、メッセージのバイトだけが送信されます。 ブローカーが Will Message を実行するときに送信されるメッセージは、UTF エンコードではなく、生の ASCII です。