티스토리 뷰
반응형
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
링크
TAG
- Git
- eureka
- Linux
- Java
- JEST
- Vault
- pgloader
- Spring Cloud Config
- Database
- mysql
- shell
- Gradle
- jQuery
- hashicorp
- spring boot
- postgresql
- Node.js
- react
- javascript
- JPA
- terraform
- kotlin
- Docker
- RancherDesktop
- 코딩테스트
- Puppeteer
- IntelliJ
- AWS IoT
- AWS
- etc
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함