티스토리 뷰

IoT

[MQTT] 패킷 구조

인쥭 2020. 10. 12. 11:06
반응형

1. MQTT Packet Structure

  7 6 5 4 3 2 1 0
Byte 1 Message Type DUP QoS Level RETAIN
Byte 2 Remaining Length(1 ~ 4byte)
3 ~ Nth Optional : Variable Length Header
N+1th ~ M Optional : Variable Length Message Payload
  • 헤더 : Byte 1, Byte 2는 필수 정보
    • Message Type에 따라 헤더의 크기는 가변적

 

2. MQTT Control Packet Type

  • 1.의 Message Type에 해당하는 내용
구분 Direction 설명
RESERVED 0 Forbidden 예약됨
CONNECT 1 Client > Server Client가 Server로 연결 요청
CONNACK 2 Server > Client Connect에 대한 Ack.
PUBLISH 3 양방향 가능 Message를 publish
PUBACK 4 양방향 가능 Pub Ack. (QoS 1)
PUBREC 5 양방향 가능 Pub Received (QoS 2 delivery part 1)
PUBREL 6 양방향 가능 Pub Release (QoS 2 delivery part 2)
PUBCOMP 7 양방향 가능 Pub 성공 (QoS 2 delivery part 3)
SUBSCRIBE 8 Client > Server Client의 Sub 요청
SUBACK 9 Server > Client Sub Ack.
UNSUBSCRIBE 10 Client > Server Client의 Unsub 요청
UNSUBACK 11 Server > Client Unsub Ack.
PINGREQ 12 Client > Server Ping Request
PINGRESP 13 Server > Client Ping Response
DISCONNECT 14 양방향 가능 Disconnect 알림
AUTH 15 양방향 가능 인증 교환

 

3. Flag

  • 각 Flag는 기본적으로 2.의 MQTT Control Packet Type에 따라 값이 정해져 있음.
    • PUBLISH : DUP, QoS, RETAIN 값을 임의로 할당할 수 있음. (0000 ~ 1111)
    • PUBREL / SUBSCRIBE / UNSUBSCRIBE : 0010 > QoS 1을 의미
    • 그 외 : 0000
Bit 위치 구분 설명
3 DUP 중복된 전송
1-2 QoS QoS 값 설정
0 RETAIN RETAIN 플래그
  • Retain : 토픽 별로 유지할 수 있는 메시지로, 클라이언트의 Sub 요청마다 반환
    • Retain된 메시지는 Message Brocker에 저장되며, 구독자가 Sub을 보내면 Retain되어 있는 메시지를 전송해준다. 
  • QoS : Pub Message에서 조절할 수 있으며, 2개의 bit로 레벨을 조정한다.
    • 0 : 최대 한 번
    • 1 : 적어도 한 번
    • 2 : 정확히 한 번만
    • 3 : 최대 한 번
  • DUP : PUBLISH Type Pakcet의 중복 전송

 

4. Remaining Length

  • 가변 헤더를 포함한 '전체 메시지의 최대 크기'를 계산하기 위해 사용한다.
  • 1 byte(1.의 표에서 Byte 2)는 고정 헤더 값으로 사용하기 위해 필수이며, 추가로 3개의 byte, 즉 최대 4 byte(Byte 2 - Byte 5)를 사용할 수 있다.
  • 각각의 byte 첫 자리는 다음 byte를 사용할지 결정하기 위해 사용한다.
    • 예를 들어, Byte 2의 값이 0xxx xxxx라면 Byte 3을 사용하지 않는다.
    • Byte 2의 값이 1xxx xxxx라면 Byte 3을 사용한다.
      • Byte 3의 값이 0xxx xxxx라면 Byte 4를 사용하지 않는다, ...
  • Byte 2만 사용하는 경우(Byte 2의 첫자리가 0인 경우), 다룰 수 있는 전체 메시지의 크기는 0 - 127 byte가 된다.
    • Byte 2는 8 bit, 이 중 첫 자리인 1 bit는 용도(다음 byte 사용 여부)가 예약되므로 7 bit, 27 = 128, 크기는 0부터 시작하므로 최대 127 byte
  • Byte 3까지 사용하는 경우, 전체 메시지의 크기는 16 bit - 2 bit(각 Byte에서 예약된 첫 bit) > 214 = 16,384이므로 최대 16,383 byte (약 16MB)
  • Byte 5까지 사용하는 경우, 전체 메시지의 크기는 32 bit - 4 bit > 228 = 268,435,456이므로 최대 268,435,455 byte(약 256MB)
    • 때문에 MQTT는 메시지당 최대 256 MB로 제한된다.

 

참고 : https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html

'IoT' 카테고리의 다른 글

[Raspberry Pi 4] OS 설치  (0) 2021.06.04
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함