MQTT 코덱
MQTT 프로토콜 패킷 인코딩 및 디코딩
Wireshark, 네트워크 분석기 또는 브로커 로그에서 캡처한 MQTT 패킷 데이터를 붙여넣으세요
예제 패킷
디코딩 결과
패킷 데이터를 입력하고 디코딩을 클릭하여 결과를 확인하세요
바이트 뷰어
인코딩 결과
매개변수를 구성하고 패킷 생성을 클릭하세요
바이트 뷰어
패킷 구조 미리보기
MQTT 패킷 유형 참조
| 코드 | 이름 | 방향 | 설명 |
|---|---|---|---|
| 0x10 | CONNECT | C→S | 클라이언트 연결 요청 |
| 0x20 | CONNACK | S→C | 연결 확인 |
| 0x30 | PUBLISH | C↔S | 메시지 발행 |
| 0x40 | PUBACK | C↔S | 발행 확인 (QoS 1) |
| 0x50 | PUBREC | C↔S | 발행 수신 (QoS 2 1단계) |
| 0x60 | PUBREL | C↔S | 발행 해제 (QoS 2 2단계) |
| 0x70 | PUBCOMP | C↔S | 발행 완료 (QoS 2 3단계) |
| 0x80 | SUBSCRIBE | C→S | 구독 요청 |
| 0x90 | SUBACK | S→C | 구독 확인 |
| 0xA0 | UNSUBSCRIBE | C→S | 구독 취소 요청 |
| 0xB0 | UNSUBACK | S→C | 구독 취소 확인 |
| 0xC0 | PINGREQ | C→S | 핑 요청 (킵얼라이브) |
| 0xD0 | PINGRESP | S→C | 핑 응답 |
| 0xE0 | DISCONNECT | C→S | 클라이언트 연결 해제 |
MQTT 프로토콜 가이드
MQTT 프로토콜 이해하기
MQTT(Message Queuing Telemetry Transport)는 TCP/IP 위에 구축된 경량 메시징 프로토콜입니다. 1999년 IBM이 위성 링크 모니터링을 위해 개발했으며, 현재 IoT 통신의 사실상 표준이 되었습니다. 이 프로토콜은 발행-구독 패턴을 사용하여 클라이언트가 중앙 브로커를 통해 통신하며, 불안정한 네트워크와 리소스 제한 장치에 이상적입니다.
패킷 바이너리 구조
모든 MQTT 패킷은 고정 헤더(1-5바이트)로 시작하고, 선택적 가변 헤더와 페이로드가 뒤따릅니다. 첫 번째 바이트는 비트 7-4에 패킷 유형을, 비트 3-0에 유형별 플래그를 포함합니다. 나머지 길이 필드는 가변 길이 인코딩을 사용합니다.
| 비트 범위 | 필드 이름 | 설명 |
|---|---|---|
| 7-4 | 패킷 유형 | 제어 패킷 유형 (1-15) |
| 3-0 | 플래그 | 유형별 플래그 (PUBLISH의 DUP, QoS, RETAIN) |
가변 길이 인코딩
MQTT는 나머지 길이 필드에 압축 인코딩을 사용합니다. 각 바이트는 데이터에 7비트를, 연속 플래그에 1비트를 사용합니다. 0-127은 1바이트, 128-16383은 2바이트가 필요하며, 최대 4바이트로 268,435,455까지 표현 가능합니다.
| 바이트 | 최소값 | 최대값 |
|---|---|---|
| 1 | 0 | 127 |
| 2 | 128 | 16,383 |
| 3 | 16,384 | 2,097,151 |
| 4 | 2,097,152 | 268,435,455 |
CONNECT 패킷 상세
CONNECT 패킷은 TCP 연결 설정 후 가장 먼저 전송됩니다. 프로토콜 버전, 킵얼라이브 간격, 클라이언트 ID 및 선택적 자격 증명을 포함합니다. 연결 플래그는 클린 세션, 유언 메시지 구성, 인증을 포함한 세션 동작을 제어합니다.
PUBLISH 패킷 메커니즘
PUBLISH 패킷은 애플리케이션 메시지를 전달합니다. 고정 헤더 플래그는 QoS 레벨, 유지 동작, 중복 상태를 나타냅니다. QoS 0은 fire-and-forget, QoS 1은 최소 1회 전달 보장, QoS 2는 4방향 핸드셰이크를 통해 정확히 1회 전달을 보장합니다.
QoS 전달 보장
실용적 응용
- 디버깅을 위해 Wireshark 또는 tcpdump의 패킷 캡처 분석
- MQTT 브로커 또는 클라이언트 구현을 검증하기 위한 테스트 패킷 구축
- 실제 패킷 검사를 통한 MQTT 프로토콜 내부 학습
- IoT 장치 연결 및 메시지 전달 문제 해결
- 자동화된 테스트 시나리오를 위한 샘플 패킷 생성
프로토콜 버전
세 가지 주요 MQTT 버전이 사용 중입니다: MQTT 3.1(프로토콜 레벨 3), MQTT 3.1.1(프로토콜 레벨 4, ISO/IEC 20922:2016), 향상된 기능의 MQTT 5.0(프로토콜 레벨 5). 이 도구는 주로 가장 널리 배포된 MQTT 3.1.1을 대상으로 합니다.