클라이언트와 브로커 사이에 TCP/IP 소켓 연결이 설정되어 있으면 프로토콜 레벨의 세션이 필요합니다. 연결 방향은 클라이언트에서 브로커이며 클라이언트는 브로커 리스너 기능을 지원한다고 가정합니다.
다음 표에는 고정된 헤더 형식이 표시되어 있습니다.
비트 | 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바이트) 길이 및 페이로드(Payload) 길이입니다. 다중 바이트 필드일 수 있습니다.
아래 표에는 가변 헤더 형식의 예가 표시되어 있습니다.
설명 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
프로토콜 이름 | |||||||||
바이트 1 | 길이 MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
바이트 2 | 길이 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 | 버전(3) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Connect 플래그 | |||||||||
바이트 10 | Will RETAIN(0) |
x | x | 0 | 0 | 1 | 1 | 1 | x |
활성 유지(Keepalive) 타이머 | |||||||||
바이트 11 | 활성 유지 MSB(0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
바이트 12 | 활성 유지 LSB(10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
첫 번째 UTF 인코딩 문자열. 클라이언트 ID의 길이는 1 - 23자이며 브로커에 대해 클라이언트를 고유하게 식별합니다. 이 ID는 단일 브로커에 연결된 모든 클라이언트에 걸쳐 고유해야 하며 QoS 레벨이 1과 2인 메시지 ID 메시지를 핸들링하는 데에는 반드시 필요합니다. 클라이언트 ID에 23자 이상이 포함되면, 브로커는 CONNECT 메시지에 CONNACK 리턴 코드 2로 응답하며 ID는 거부됩니다.
두 번째 UTF 인코딩 문자열. Will 메시지는 Will 토픽에 publish됩니다. QoS 레벨은 Will QoS 필드에 정의되며, RETAIN 상태는 가변 헤더의 Will RETAIN 플래그에 의해 정의됩니다.
세 번째 UTF 인코딩 문자열. Will 메시지는 클라이언트가 예상치 못하게 연결이 끊긴 경우 Will 토픽에 publish되는 메시지의 컨텐츠를 정의합니다.
Will 메시지가 CONNECT 메시지에 UTF 인코딩되어 있더라도 Will 토픽으로 publish될 때에는 처음 두 바이트가 아닌 메시지 바이트만이 송신됩니다. 브로커가 Will 메시지를 실행할 때 송신되는 메시지는 UTF 인코딩되지 않은 원시 ASCII입니다.