콘텐츠로 이동
무료 평가 시작

MQTT 5.0 기능

MQTT 5.0은 3.1.1의 패킷 구조를 유지하면서 속성과 이유 코드를 더했습니다. CONNECT의 프로토콜 레벨(protocol level)이 5이면 MQTT 5.0, 4이면 3.1.1입니다. PDComm 시뮬레이터는 MQTT 5.0으로만 연결합니다.

속성(property)은 패킷의 가변 헤더에 붙는 선택 항목입니다(§2.2.2). 식별자, 형식, 값으로 이루어지며, 3.1.1에서는 표현할 수 없던 정보를 전달합니다. 자주 쓰는 속성은 다음과 같습니다.

속성 패킷 쓰임
Session Expiry Interval CONNECT, CONNACK, DISCONNECT 세션 보관 시간
Receive Maximum CONNECT, CONNACK 동시에 확인을 기다릴 수 있는 QoS 1, 2 메시지 수
Maximum Packet Size CONNECT, CONNACK 상대가 받을 수 있는 최대 패킷 크기
Topic Alias Maximum CONNECT, CONNACK 받을 수 있는 토픽 별칭 수
Maximum QoS CONNACK 브로커가 받는 최대 QoS
Retain Available CONNACK 보존 메시지 지원 여부
Server Keep Alive CONNACK 브로커가 정한 Keep Alive
Payload Format Indicator PUBLISH 0은 바이트, 1은 UTF-8 문자열
Message Expiry Interval PUBLISH 전달되지 않은 메시지를 버릴 초 단위 시간
Content Type PUBLISH 페이로드 형식을 나타내는 문자열(예: MIME 형식)
Response Topic, Correlation Data PUBLISH 요청과 응답을 짝짓는 정보
User Property 대부분의 패킷 응용 프로그램이 정하는 이름과 값 쌍
Reason String 응답 패킷 사람이 읽는 진단 문장

MQTT 5.0의 응답 패킷은 1바이트 이유 코드(reason code)로 결과를 알립니다(§2.4). 0x80보다 작으면 성공, 0x80 이상이면 실패입니다.

코드 이름 주로 나오는 곳
0x00 Success 모든 응답
0x01, 0x02 Granted QoS 1, Granted QoS 2 SUBACK
0x10 No matching subscribers PUBACK, PUBREC
0x80 Unspecified error 여러 응답
0x81 Malformed Packet CONNACK, DISCONNECT
0x82 Protocol Error CONNACK, DISCONNECT
0x84 Unsupported Protocol Version CONNACK
0x85 Client Identifier not valid CONNACK
0x86 Bad User Name or Password CONNACK
0x87 Not authorized CONNACK, PUBACK, SUBACK, DISCONNECT
0x8E Session taken over DISCONNECT
0x8F Topic Filter invalid SUBACK
0x90 Topic Name invalid CONNACK, PUBACK, DISCONNECT
0x95 Packet too large CONNACK, DISCONNECT
0x97 Quota exceeded 여러 응답
0x9B QoS not supported CONNACK, DISCONNECT

연결 단계의 전체 표는 연결 문제에 있습니다. MQTT 3.1.1에는 이유 코드가 없습니다. CONNACK의 반환 코드(return code) 0~5와 SUBACK의 실패 값 0x80만 있습니다.

사용자 속성(User Property)은 UTF-8 이름과 값의 쌍입니다(§3.3.2.3.7).

  • 한 패킷에 여러 개를 넣을 수 있고, 같은 이름을 반복해도 됩니다.
  • 브로커는 순서를 지켜 그대로 전달하며 내용을 해석하지 않습니다.
  • 페이로드를 열지 않고도 메시지 종류를 알릴 때 씁니다.

OPC UA PubSub는 MQTT 5.0 메시지에 다음 두 속성을 넣도록 정합니다(OPC 10000-14 §7.3.4). PDComm 시뮬레이터도 이 값을 보냅니다.

속성 값(UADP 데이터)
Content Type application/opcua+uadp
User Property UAMessageType ua-data

토픽 별칭(topic alias)은 긴 토픽 이름 대신 쓰는 정수입니다(§3.3.2.3.4). 처음 PUBLISH에서 이름과 별칭을 함께 보내고, 그 뒤로는 별칭만 보내 패킷을 줄입니다. 별칭은 연결마다 따로이며, 상대가 Topic Alias Maximum으로 허용한 수까지만 쓸 수 있습니다. PDComm 시뮬레이터는 토픽 별칭을 쓰지 않습니다.

MQTT 5.0에서는 양쪽이 받을 수 있는 한도를 연결할 때 알립니다.

  • Receive Maximum(§3.1.2.11.3, §4.9): 확인을 기다리는 QoS 1, 2 메시지가 이 수를 넘지 않게 보냅니다.
  • Maximum Packet Size(§3.1.2.11.4, §3.2.2.3.6): 이보다 큰 패킷은 보내지 않습니다.
  • Maximum QoS(§3.2.2.3.4): 브로커가 받는 QoS보다 높은 QoS로 발행하지 않습니다.

PDComm 시뮬레이터는 브로커가 알린 한도를 지킵니다. 한도를 넘는 발행은 브로커로 보내지 않고 오류로 끝냅니다. 오류 문장은 전달 문제에 정리했습니다.