MQTT Broker Client

wldbs._.·2024년 9월 6일

MQTT

목록 보기
1/7
post-thumbnail

개요

1. MQTT Protocol

MQTT(Message Queuing Telemetry Transport)
: 경량의 메시지 프로토콜, 낮은 대역폭이나 불안정한 네트워크 환경에서도 장치 간에 메시지를 효율적으로 전달할 수 있게 설계됨
(1999년에 IBM과 유럽의 한 유틸리티 회사가 개발, IoT 장치와 서버 간의 통신을 위해 널리 사용됨)

  1. 퍼블리시/구독(Publish/Subscribe) 모델을 사용
  2. 메시지는 주제(Topic)별로 분류
  3. 구독자만 그 주제의 메시지를 받을 수 있다

이 모델은 중앙 서버(브로커)를 통해 작동
클라이언트는 브로커에게 메시지를 보내거나, 브로커로부터 메시지를 받는다
-> 이를 통해 다수의 수신자에게 메시지를 효율적으로 배포할 수 있다

[주요 특징]
1. 경량 프로토콜: 매우 적은 데이터 양을 사용하여 통신 가능
2. 저전력: 배터리로 구동되는 장치에 적합하도록 설계됨
3. 높은 신뢰성: 메시지의 QoS(Quality of Service) 수준을 설정하여 메시지의 신뢰성과 전달 여부 제어 가능
4. 보안: TLS/SSL을 통한 메시지 암호화 지원

-> 특히 사물인터넷 환경에서 다양한 장치와 플랫폼 간의 연결성과 데이터 전송을 간소화하고자 할 때 매우 유용한 프로토콜


2. MQTT Broker

MQTT 브로커는 메시지를 전달하는 중앙 서버
: 클라이언트들 사이에서 메시지를 조정하고 중개하는 역할 수행

클라이언트들은 메시지를 브로커에게 보내고, 브로커는 해당 메시지를 적절한 구독자들에게 전달한다.

[주요 기능]
1. 메시지 라우팅: 구독한 주제에 대한 메시지를 구독자에게 전달
2. 세션 관리: 클라이언트의 연결 상태를 관리, 연결이 끊긴 클라이언트를 위해 메시지를 저장하는 등의 기능 수행
3. 인증 및 권한 부여: 클라이언트의 접근 제어, 보안 통신을 위해 TLS/SSL 사용 가능

TLS (Transport Layer Security) 및 그 전신인 SSL (Secure Sockets Layer) 은 네트워크를 통해 데이터를 안전하게 전송하기 위한 암호화 프로토콜이다.

  • 이 프로토콜들은 인터넷에서 데이터를 안전하게 교환할 수 있도록 설계되었으며, 특히 웹 브라우징, 이메일, 인스턴트 메시징, 그리고 VoIP와 같은 서비스에서 널리 사용된다.
  • 데이터 암호화, 웹사이트에서의 신원 확인 위한 인증, 데이터 무결성 보장

3. MQTT Client

MQTT 클라이언트는 MQTT 네트워크에 연결된 어떤 장치나 애플리케이션을 지칭
: 클라이언트는 메시지를 발행(publish)하거나 메시지를 구독(subscribe)할 수 있다.

MQTT 프로토콜을 사용하려면 네트워크에 연결되어 있어야 한다
: 클라이언트와 서버(브로커) 사이의 통신을 기반으로 작동하기 때문에, 네트워크 연결이 필수적

  • 유선 연결: Ethernet 등을 통한 전통적인 유선 네트워크 연결
  • 무선 연결: Wi-Fi, 셀룰러 네트워크(3G, 4G, LTE, 5G), 또는 다른 무선 통신 기술 통해 연결
  • LPWAN 기술: 저전력 광역 네트워크(Low Power Wide Area Network) 기술을 사용하여, 대규모 IoT 네트워크에서 장치들을 서로 연결

[주요 기능]
1. 메시지 발행: 특정 주제에 메시지를 발행하여 그 주제를 구독하고 있는 다른 클라이언트들에게 정보 전달
2. 메시지 구독: 하나 이상의 주제를 구독하고, 해당 주제에 대한 메시지가 브로커로부터 도착하면 그 메시지를 받아 처리
3. 클라이언트는 서버와 통신: MQTT 프로토콜을 통해 브로커와 안정적으로 통신


4. TCP/IP Protocol

TCP/IP(Transmission Control Protocol/Internet Protocol)
: 인터넷에서 데이터를 전송하기 위한 기본 통신 프로토콜
데이터를 교환을 위한 규칙과 절차의 집합을 제공, 인터넷의 작동 기반 형성

이는 두 가지 주요 프로토콜로 구성된다.

1. Transmission Control Protocol (TCP)
: 인터넷에서 데이터를 안정적으로, 순서대로, 오류 없이 전송하도록 설계된 프로토콜

  • 신뢰성 있는 전송: 데이터가 손실/분실 없이 목적지에 도달하도록 보장
  • 데이터 순서화: 데이터 조각(패킷)이 전송 중 섞이거나 순서가 바뀌어도 원래 순서대로 재조립됨
  • 흐름 제어: 네트워크의 혼잡 상태에 따라 데이터 전송 속도 조절
  • 오류 검사: 전송된 데이터에 오류 있는지 확인, 필요한 경우 재전송 요청

2. Internet Protocol (IP)
: 데이터 패킷을 송신자에서 수신자까지 전달하는 역할 수행
IP 주소는 네트워크에서 각 장치를 식별하는 데 사용된다

  • 주소 지정: 각 장치에 고유한 IP 주소를 할당하여 인터넷 상에서 서로를 찾고 통신할 수 있게 한다
  • 라우팅: 최적의 경로를 통해 데이터 패킷을 목적지까지 전달

TCP/IP 모델은 네 개의 계층으로 구성되어 있으며, 각 계층은 특정한 역할을 수행한다.

  • 응용 계층 Application Layer: HTTP, FTP, SMTP 등의 통신 프로토콜을 포함하여 사용자가 네트워크 서비스를 사용할 수 있게 함
  • 전송 계층 Transport Layer: TCP와 UDP(사용자 데이터그램 프로토콜)를 포함하여 데이터의 신뢰성 있는 전송 담당
  • 인터넷 계층 Internet Layer: IP와 함께 ICMP(Internet Control Message Protocol) 등을 사용하여 패킷의 라우팅 담당
  • 네트워크 인터페이스 계층 Network Interface Layer: 데이터를 물리적 네트워크로 전송하고 받는 역할

-> TCP/IP 프로토콜은 유연성과 확장성 덕분에 전 세계 컴퓨터와 네트워크의 표준 통신 규약으로 자리잡았다.


상세

1) MQTT 위키백과

  1. MQTT(Message Queuing Telemetry Transport)는 ISO 표준(ISO/IEC PRF 20922) 발행-구독 기반의 메시징 프로토콜이다.
  • TCP/IP 프로토콜 위에서 동작한다.
  • "작은 코드 공간"(small code footprint)이 필요하거나 네트워크 대역폭이 제한되는 원격 위치와의 연결을 위해 설계되어 있다.
  • 발행-구독 메시징 패턴은 메시지 브로커가 필요하다.
  1. 메시지 유형
  • 연결하기: 서버와의 연결 수립을 기다린 다음 노드 간 링크를 만든다.

  • 연결 끊기: MQTT 클라이언트가 해야 할 일을 기다리고 인터넷 프로토콜 스위트 세션의 연결이 끊어지기를 기다린다.

  • 발행하기: MQTT 클라이언트에 요청이 전달된 직후 애플리케이션 스레드에 즉시 반환한다.

  1. 서비스 품질 QoS (Quality of Service) -> 브로커에 대한 각 연결은 QoS 기준을 지정할 수 있다.

부하가 늘어나는 순서에 따라 다음과 같이 분류된다:

  • 최대 한 차례 - 메시지는 한 번만 보내면 클라이언트와 브로커는 전달 확인 응답을 위한 추가 단계를 밟지 않는다. (보낸 다음 잊어버림)
  • 최소 한 차례 - 메시지는 확인 응답을 수신할 때까지 여러 번 송신자로부터 재시도된다. (확인 응답을 거치는 전달)
  • 정확히 한 번 - 송신자와 수신자는 2단계 핸드셰이크에 참여함으로써 오직 하나의 메시지 사본만을 수신하는 것을 보장한다. (보장된 전달)

이 필드는 기반이 되는 TCP 데이터 전송의 처리에 영향을 주지 않으며, MQTT 송신자와 수신자 간에만 사용된다.

2) MQTT 블로그

MQTT는 M2M/IOT를 위한 프로토콜로서, 최소한의 전력과 패킷량으로 통신하는 프로토콜이다. (IoT와 모바일 어플리케이션 등의 통신에 적합)
MQTT는 HTTP, TCP 등의 통신과 같이 클라이언트-서버 구조로 이루어지는 것이 아닌, Broker-Publisher-Subscriber 구조로 이루어진다.

Publisher는 Topic을 발행(publish)
Subscriber는 Topic을 구독(subscribe)
Broker는 이들을 중재

  • 단일 Topic에 여러 Subscriber가 구독할 수 있음 -> 1:N 통신 구축에 유용


MQTT에서 Topic은 /를 사용해서 구성된다 -> IoT 센서와 같은 데이터 관리에 유용

MQTT는 QoS를 제공하며, 총 3단계로 이루어진다

  • 0: 메시지는 한 번만 전달되며, 전달 이후의 수신 과정 체크 X
  • 1: 메시지는 한 번 이상 전달되며, 핸드셰이킹 과정을 추적하나, 엄격하게 추적 X -> 중복수신의 가능성 有
  • 2: 메시지는 한 번만 전달되고, 핸드셰이킹의 모든 과정 체크

QoS의 단계가 높아질수록 통신의 품질은 향상되지만, 그에 따라 성능 저하의 가능성이 있으므로. MQTT의 QoS는 프로젝트의 특성에 따라 결정되어야 한다.

MQTT 브로커 구동하기: Mosquitto, HiveMQ, mosca, ActiveMQ, RabbitMQ

[정리]

1) 연결지향적 connection oriented

  • MQTT 브로커와 연결을 요청하는 클라이언트는 TCP/IP 소켓 연결을 한 후 명시적으로 연결을 끊거나 네트워크 사정에 의해 연결이 끊어질 때까지 상태를 유지
  • (Live라는 하트비트와 Topic에 발행되는 메시지를 통해 연결을 유지하고 메시지 송수신을 하게 됨)
  • 연결이 끊어지면 재접속 가능

2) 브로커를 통한 통신

  • MQTT의 발행-구독 메시징 패턴은 오로지 브로커를 톨해서만 통신 가능
  • 개설된 Topic에 베시지를 발행하면 해당 Topic을 구독하는 클라이언트들에게 메시지 발행 가능
  • 그렇기에 일대일, 일대다의 통신 모두 가능

3) QoS

  • 0: 최대 1회 전송, Topic을 통해 메시지를 전송할 뿐 수신한다는 보장은 X (보낸 다음 잊어버림)
  • 1: 최소 1회 전송, 구독하는 클라이언트가 메시지를 받았는지 불확실하면 정해진 횟수만큼 재전송, 메시지의 핸드셰이킹 과정을 엄밀하게 추적 X, 중복의 위험성 있다 (확인 응답을 거치는 전달)
  • 2: 구독하는 클라이언트가 요구된 메시지를 정확히 한 번 수신할 수 있도록 보장, 메시지의 핸드셰이킹 과정 추적, 높은 품질 보장 but 성능의 희생 따른다 (보장된 전달)
    • QoS 필드는 기반이 되는 TCP/IP 데이터 전송의 처리에 영향 주지 않으며, MQTT 송신자와 수신자 간에만 사용됨
    • 메시지는 글자 수 제한 없다, 긴 메시지나 JSON 포맷 또는 파일도 전송 가능
    • 0에 가까울수록 메시지 처리에 대한 부하 줄어들고, 메시지 손실 위험 높아짐
    • 반대로 2에 가까울수록 메시지 손실 위험 줄어들고, 메시지 처리 부하 높아짐
  • 단, 0~1 정도의 QoS를 사용하며 메시지 손실의 위험은 상위 어플리케이션 차원에서 관리하는 방법 널리 쓰인다

4) 메시지 유형
각각의 메시지의 event에 MQTT 브로커가 Notification을 주어 대응할 수 있도록 한다.

  • 연결하기: 서버와의 연결 수립을 기다린 다음 노드 간 링크 만든다
  • 연결 끊기: MQTT 클라이언트가 해야 할 일을 기다리고 인터넷 프로토콜 스위트 세션의 연결이 끊어지기를 기다린다
  • 발행하기: MQTT 클라이언트에 요청이 전달된 직후 어플리케이션 스레드에 즉시 반환한다.

5) MQTT 동작 구조

동작순서
1. broker가 먼저 실행중이여야함
2. 관심분야를 등록(topic)
3. 메시지가 올 때까지 무한대기

  • subscriber(client) - topic을 등록, 구독요청 -> broker

  • broker <- publisher(client) - topic발행

  • topic이 서로 일치하는 곳으로 메세지를 보내준다.

토픽 Topic

메시지를 발행-구독하는 행위는 채널 단위로 일어난다.
이를 MQTT에서는 토픽이라 부르고, 토픽은 슬래시(/)로 구분되는 계층 구조를 갖는다.

office/firstFloor/SWoffice/temp

위 예시에서 슬래시 전후에 있는 office, firstFloorm SWoffice, temp는 모두 각각의 토픽 레벨 (Topic Level)이며, 해당 토픽은 Topic Level Seperator라고 불리는 슬래시로 구분된다.
-> 즉, 위의 토픽은 회사 1층의 SW 부서의 온도를 체크할 수 있는 토픽이다.

office/firstFloor/+/temp

위는 메시지를 구독/발행할 때 여러 개의 토픽을 한 번에 지정할 수 있도록 지원하는 와일드 카드의 예시이다.
[+] 문자는 One-Level Wild Card로, 단 한 개의 토픽을 임의의 토픽으로 대체할 수 있다.
-> 즉, 위의 토픽은 회사 1층에 있는 모든 부서의 온도를 체크할 수 있는 토픽이다.

office/firstFloor/#

[#] 문자는 Multi-Level Wild Card로, 여러 레벨의 토픽을 대체할 수 있는 와일드 카드이다.
이는 2단계 이상의 하위 토픽도 대체할 수 있으며, 무조건 매 마지막에만 사용될 수 있다.
-> 위 예시에서는 회사 1층의 모든 부서의 모든 조건(온도, 습도, 조도 등)을 체크할 수 있는 토픽이다.

$SYS/

[$] 문자로 시작하는 토픽은 시스템에 의해 사용되는 특수한 토픽이다.
이 토픽들은 [#] 문자로 지정해도 포함되지 않으며, 주로 브로커의 내부 메시지를 위해 사용된다.

5-1) 주의할 점

최상위 토픽이 [/] 문자로 시작되지 않아야 한다.

  • 물론 이 자체로 오류가 뜨지는 않지만 최상위 토픽이 이름 없는 토픽이 되어버린다.
  • 즉, / office / firstFloor / SWoffice / temp 이런 식으로 되지 않아야 한다.
  • 이는 PC의 디렉토리와 비슷하게 생각한다면 흔히 할 수 있는 실수이다.

토픽 이름에 공백 문자가 들어가면 안 된다.

  • 토픽 이름은 임베디드 IoT 장치와의 호환성을 위해 ASCII 문자만 사용하도록 한다.

[#] 문자를 이용해서 토픽 전체를 구독하지 않도록 해야 한다.

  • 오버헤드가 심할 경우 브로커/클라이언트 프로세스가 중단될 가능성이 높다.

3) TCP/IP

TCP/IP 프로토콜 스택은 인터넷에서 데이터 통신을 위해 설계된 프로토콜의 집합

  1. 물리 계층 (Physical Layer)
    물리 계층은 하드웨어 장비를 통한 데이터의 물리적 전송을 담당
  • 이 계층은 네트워크 케이블, 광섬유, 무선 전송 등을 통해 비트를 전송하는 역할
  • 특정 프로토콜을 사용하지 않고, 전기적 신호, 광 신호, 또는 무선 신호로 데이터를 변환하여 전송
  1. 데이터 링크 계층 (Data Link Layer)
    데이터 링크 계층은 물리 계층을 통해 송수신된 데이터의 오류와 흐름을 관리
  • 이 계층은 프레임에 주소 정보와 오류 검사 기능을 추가하여 신뢰성 있는 데이터 전송을 보장
  • 대표적인 프로토콜로는 이더넷(Ethernet), PPP(Point-to-Point Protocol), Wi-Fi
  1. 네트워크 계층 (Network Layer)
    네트워크 계층은 데이터 패킷의 송수신을 담당하며, 라우팅과 패킷 전달을 포함
  • 이 계층은 서로 다른 네트워크 간의 데이터 전송을 가능하게 하며, 대표적인 프로토콜로는 IP(Internet Protocol)
  • IP 주소를 사용하여 패킷을 올바른 목적지까지 전달하고, 라우터를 통해 최적의 경로를 선택
  1. 전송 계층 (Transport Layer)
    전송 계층은 끝에서 끝까지(End-to-End) 데이터 전송을 관리하며, 두 호스트 간의 연결을 설정하고, 데이터 전송을 제어
  • 대표적인 프로토콜로는 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)
  • TCP는 연결 지향적이고 신뢰성 있는 데이터 전송을 제공하며, UDP는 연결 없이 데이터를 전송하는 방식으로, 간단하고 빠른 전송을 제공
  1. 응용 계층 (Application Layer)
    응용 계층은 사용자와 가장 밀접한 계층으로, 네트워크 서비스와 직접적인 상호 작용을 제공
  • 이 계층의 프로토콜은 사용자의 응용 프로그램이 네트워크를 통해 데이터를 송수신할 수 있도록 함
  • 대표적인 프로토콜로는 HTTP(HyperText Transfer Protocol), FTP(File Transfer Protocol), SMTP(Simple Mail Transfer Protocol) 등

MQTT (Message Queuing Telemetry Transport) 는 TCP/IP 프로토콜 스택 위에서 동작한다.
1) TCP/IP 기반
: MQTT는 데이터 전송의 신뢰성과 순서를 보장하는 TCP(Transmission Control Protocol) 위에서 작동

  • TCP는 연결 지향적이고, 데이터가 올바르게 전송되었는지 확인하여 필요한 경우 재전송을 수행하는 기능을 제공
  • 이러한 특성 덕분에 MQTT는 네트워크 연결이 불안정한 환경에서도 안정적으로 메시지를 교환할 수 있다.

2) 세션 관리
: MQTT는 TCP 연결을 사용하여 브로커와 클라이언트 간에 세션을 구축

  • 이 세션은 발행/구독 모델을 통해 메시지를 교환할 때 지속적으로 유지

3) 프로토콜 레이어
: TCP/IP 모델에서 MQTT는 애플리케이션 계층에 위치

  • 이 계층은 사용자의 데이터를 네트워크 서비스로 전송하는 데 필요한 프로토콜을 처리
  • MQTT는 이 계층에서 작동하여, 특정 메시징 기능을 TCP/IP 스택 위에 구현

출처: 블로그 + ChatGPT
MQTT란?
MQTT란 무엇인가?
HiveMQ
OSI 7계층
MQTT 프로토콜이란
MQTT 프로토콜 분석 (1)
MQTT 프로토콜 분석 (2)

profile
공부 기록용 24.08.05~ #LLM #RAG

0개의 댓글