MQTT

MQTT
MQTT
Mqtt-hor.svg
MQTT 로고
상황출판된
시작한 해1999
최신 버전5.0[1]
2019년 3월 7일
조직오아시스
위원회.OASIS 메시지 큐 원격 측정 전송 기술 위원회[2]
에디터Andrew Banks (IBM), Ed Briggs (Microsoft), Ken Borgendale (IBM), Rahul Gupta (IBM)[1]
관련 기준MQTT-SN[3]
웹 사이트mqtt.org

MQTT(원래 MQ Telemetry[a] Transport의 이니셜리즘)는 가벼운 퍼블리시-서브스크라이브 방식의 머신머신 네트워크 프로토콜입니다.리소스 제약이 있거나 네트워크 대역폭이 제한된 장치가 있는 원격 위치와의 연결을 위해 설계되었습니다.순서의 무손실 양방향 연결(일반적으로 TCP/IP)[1]을 제공하는 전송 프로토콜에서 실행해야 합니다.오픈 OASIS 표준 및 ISO 권장사항(ISO/IEC 20922)입니다.

역사

Andy Stanford-Clark(IBM)와 Arlen Nipper(당시 Eurotech, Inc.에서 근무)는 [4]1999년에 프로토콜의 첫 버전을 작성했습니다.그것은 SCADA 산업 [5]제어 시스템 내의 송유관을 감시하는 데 사용되었다.그 목적은 대역폭 효율이 높고 가벼우며 배터리 전력을 거의 사용하지 않는 프로토콜을 만드는 것이었습니다. 왜냐하면 그 당시 장치는 매우 [6]비쌌던 위성 링크를 통해 연결되었기 때문입니다.

지금까지 "MQTT"의 "MQ"는 IBM MQ(당시 'MQ Series') 제품 라인에서 유래했으며, 여기서 "메시지 대기열"을 나타냅니다.그러나 프로토콜은 게시 및 구독 메시징을 제공합니다([7]이름에도 불구하고 대기열 없음).IBM이 버전 3.1로 공개한 규격에서 이 프로토콜은 "MQ Telemetry Transport"[8][9]로 언급되었습니다.OASIS에 의해 출시된 후속 버전에서는 기술 위원회 자체가 "OASIS 메시지 큐 원격 측정 전송 기술 위원회"[2]로 명명되었지만, 프로토콜은 "MQTT"로 엄격히 언급됩니다.2013년부터 "MQTT"는 아무 의미도 없다.[10][7]

2013년에 IBM은 MQ를 제출했습니다.TT v3.1에서 OASIS 사양 본체에 대한 TT v3.1은 사양에 대한 사소한 변경만 수용할 [2]수 있도록 보증되었습니다.IBM으로부터 표준 유지보수를 넘겨받은 후, OASIS는 [11][12]2014년 10월 29일 버전 3.1.1을 출시했습니다.MQTT 버전 5에 대한 보다 실질적인 업그레이드가 2019년 [1]3월 7일 출시되었으며 몇 가지 새로운 [13]기능이 추가되었습니다.

MQTT-SN(MQT for Sensor Networks)은 Zigbee[15]같은 비TCP/IP [14]네트워크상의 배터리 구동식 임베디드 장치를 대상으로 하는 메인 프로토콜의 변형입니다.

개요

MQTT 프로토콜은 메시지 브로커와 다수의 클라이언트라는 두 가지 유형의 네트워크 엔티티를 정의합니다.MQTT 브로커는 클라이언트로부터 모든 메시지를 수신한 후 적절한 수신처 [16]클라이언트에 메시지를 라우팅하는 서버입니다.MQTT 클라이언트는 MQTT 라이브러리를 실행하고 네트워크를 [17]통해 MQTT 브로커에 접속하는 모든 디바이스(마이크로 컨트롤러에서 완전한 서버까지)입니다.

정보는 토픽 계층으로 구성됩니다.게시자는 배포할 새 데이터 항목이 있으면 연결된 브로커에게 데이터와 함께 제어 메시지를 보냅니다.그런 다음 브로커는 해당 항목에 가입한 모든 클라이언트에 정보를 배포합니다.퍼블리셔는 서브스크라이버 수 또는 로케이션에 관한 데이터를 보유할 필요가 없습니다.게다가 서브스크라이버를 퍼블리셔에 관한 데이터로 설정할 필요도 없습니다.

현재 사용자가 없는 주제에 대한 메시지를 브로커가 수신한 경우 메시지 게시자가 메시지를 보관 메시지로 지정하지 않는 한 브로커는 메시지를 폐기합니다.보관된 메시지는 일반 MQ입니다.유지 플래그가 true로 설정된TT 메시지브로커는 마지막으로 보존된 메시지와 선택한 항목에 대응하는 QoS를 저장합니다.보존 메시지의 토픽과 일치하는 토픽 패턴을 구독하는 각 클라이언트는 구독 후 즉시 보존 메시지를 수신합니다.브로커는 [18]주제당 하나의 보관된 메시지만 저장합니다.이것에 의해, 새로운 토픽의 서브 스크라이버는 퍼블리셔로부터 다음의 갱신을 기다리지 않고, 최신의 값을 수신할 수 있습니다.

게시 클라이언트가 처음 브로커에 연결할 때 게시 클라이언트가 브로커에서 예기치 않게 연결이 끊어진 것을 브로커가 감지하면 구독자에게 보낼 기본 메시지를 설정할 수 있습니다.

클라이언트는 브로커와만 대화하지만 시스템에는 현재 가입자의 토픽에 따라 데이터를 교환하는 여러 브로커 서버가 포함될 수 있습니다.

최소 MQTT 제어 메시지에는 2바이트의 데이터밖에 사용할 수 없습니다.제어 메시지는 필요에 따라 약 256MB의 데이터를 전송할 수 있습니다.클라이언트와 브로커의 연결 및 연결 해제, 데이터 게시, 데이터 수신 확인 및 클라이언트와 서버 간의 연결을 감독하는 데 사용되는 14가지 정의된 메시지 유형이 있습니다.

MQTT는 데이터 전송을 TCP 프로토콜에 의존합니다.배리언트 MQTT-SN은 UDP나 Bluetooth 등의 다른 트랜스포트 상에서 사용됩니다.

MQTT는 접속 credential을 플레인텍스트 형식으로 전송하며 보안 또는 인증에 대한 조치는 포함하지 않습니다.이는 TLS를 사용하여 전송되는 정보를 암호화하고 가로채기, 수정 또는 위조로부터 보호함으로써 제공할 수 있습니다.

암호화되지 않은 기본 MQTT 포트는 1883 입니다.암호화 포트는 8883 [19]입니다.

MQTT 브로커

MQTT 브로커는 컴퓨터(사내 또는 클라우드에서 실행)에서 실행되는 소프트웨어이며, 자체 구축 또는 서드파티에 의해 호스팅될 수 있습니다.오픈 소스 구현과 독자 사양 구현 모두에서 사용할 수 있습니다.

브로커는 우체국 역할을 한다.MQTT 클라이언트는 대상 수신인의 직접 연결 주소를 사용하지 않고 "Topic"이라는 제목줄을 사용합니다.구독하는 모든 사용자는 해당 항목에 대한 모든 메시지의 복사본을 수신합니다.여러 클라이언트가 하나의 브로커에서 하나의 토픽에 가입할 수 있으며(하나에서 여러 기능), 단일 클라이언트가 여러 브로커에서 여러 개의 토픽에 가입할 수 있습니다(다수에서 하나).

각 클라이언트는 퍼블리싱과 구독을 통해 데이터를 생성 및 수신할 수 있습니다.즉, 디바이스는 센서 데이터를 퍼블리싱하면서도 구성 정보 또는 제어 명령을 수신할 수 있습니다(MQT는 양방향 통신 프로토콜입니다).이를 통해 데이터 공유, 디바이스 관리 및 제어에 모두 도움이 됩니다.클라이언트는 동일한 데이터를 다양한 토픽으로 브로드캐스트할 수 없으며 브로커에게 여러 메시지를 게시해야 하며 각각 하나의 토픽이 지정됩니다.

MQTT 브로커 아키텍처에서는 클라이언트 디바이스와 서버 애플리케이션이 분리됩니다.이와 같이, 클라이언트는 서로의 정보를 의식하지 않게 됩니다.MQTT는 사용자 이름과 비밀번호로 보호된 연결을 사용하여 TLS 암호화를 사용합니다.선택적으로, 클라이언트가 제공하는 인증서 파일 형식의 인증이 필요할 수 있으며 서버의 복사본과 일치해야 합니다.

장애가 발생했을 경우 브로커 소프트웨어와 클라이언트는 자동으로 다중/자동 백업 브로커로 인계할 수 있습니다.또한 백업 브로커를 설정하여 온사이트, 클라우드 또는 이들 서버의 조합으로 클라이언트의 부하를 공유할 수도 있습니다.

브로커는 표준 MQTT와 MQ를 모두 지원할 수 있습니다.스파크 [20]플러그 등의 규격에 준거한 TT.이것은, 같은 서버, 같은 시큐러티 레벨로 동시에 실행할 수 있습니다.

브로커는 디바이스가 켜지거나 꺼질 때 "영구 세션"이라고 불리는 기능을 통해 모든 세션 정보를 추적합니다.이 상태에서 브로커는 각 클라이언트의 연결 정보, 각 클라이언트가 가입한 항목 및 QoS가 1 또는 2인 [21]항목에 대한 메시지를 모두 저장합니다.

MQTT 브로커의 주요 장점은 다음과 같습니다.

  1. 취약하고 안전하지 않은 클라이언트 연결 제거
  2. 단일 디바이스에서 수천 개로 쉽게 확장 가능
  3. 보안 자격 증명 및 증명서를 포함한 모든 클라이언트 연결 상태를 관리 및 추적합니다.
  4. 보안(셀룰러 또는 위성 네트워크)을 해치지 않고 네트워크의 부하를 경감

메시지 유형

연결하다

MQ의 예시접속, 퍼블리시/서브스크라이브 및 절단을 사용하는TT 접속(QoS 0).클라이언트 B로부터의 첫 번째 메시지는 유지 플래그에 의해 저장됩니다.

서버와의 접속이 확립될 때까지 대기하고 노드간에 링크를 작성합니다.

절단

MQTT 클라이언트가 수행해야 할 모든 작업을 완료하고 TCP/IP 세션이 연결 해제될 때까지 기다립니다.

공개하다

MQTT 클라이언트에 요청을 전달한 후 즉시 응용 프로그램스레드로 돌아갑니다

버전 5.0

2019년, OASIS는 MQTT 5.0의 [1]정식 표준을 발표했습니다.버전 5.0에는 다음과 같은 주요 신기능이 [22]포함되어 있습니다.

  • 이유 코드:이제 확인 응답은 오류의 원인을 제공하는 리턴 코드를 지원합니다.
  • 공유 구독:부하가 클라이언트 간에 분산되도록 하여 부하 문제의 위험을 줄입니다.
  • 메시지 만료:메시지는 만료 날짜를 포함할 수 있으며, 이 기간 내에 배달되지 않으면 삭제됩니다.
  • 토픽 별칭:토픽의 이름을 하나의 숫자로 바꿀 수 있습니다.

서비스 품질

브로커에 대한 각 연결은 QoS(Quality of Service) [23]측정을 지정할 수 있습니다.이것들은 오버헤드의 증가순으로 분류됩니다.

  • 최대 1회 – 메시지는 한 번만 전송되며 클라이언트와 브로커는 전달 확인(발신 후 잊어버림)을 위한 추가 절차를 수행하지 않습니다.
  • 최소 1회 – 확인 응답을 수신할 때까지(확인된 전달) 메시지는 발신인에 의해 여러 번 재시도됩니다.
  • 딱 한 번 – 송신자와 수신자가 2레벨의 핸드쉐이크를 실시하여 메시지의 카피를 1개만 수신할 수 있도록 합니다(확실한 전달).

이 필드는 기본 TCP 데이터 전송 처리에는 영향을 주지 않습니다.MQ 간에만 사용됩니다.TT 송신기 및 수신기

적용들

다음과 같은 여러 프로젝트에서 MQTT를 구현합니다.

보안.

MQTT 프로토콜의 보안은 2020년 일부 이탈리아 연구자들에 의해 위협받았고[33], 이러한 프로토콜에 대한 느린 DoS 공격을 실행하였다. (CVE-2020-13849 참조)

「 」를 참조해 주세요.

메모들

  1. ^ 여기서 MQ는 IBM MQ 시리즈(메시지 큐를 나타냄)에서 파생됩니다.

레퍼런스

  1. ^ a b c d e "MQTT Version 5.0". OASIS. 2019-03-07. Retrieved 2020-12-15.
  2. ^ a b c "OASIS Message Queuing Telemetry Transport (MQTT) Technical Committee Charter". OASIS. Retrieved 2020-12-15.
  3. ^ "MQTT SN Subcommittee". OASIS. Retrieved 2020-12-15.
  4. ^ "10th birthday party". MQTT.org. July 2009. Archived from the original on March 15, 2015. Retrieved April 25, 2015.
  5. ^ "Transcript of IBM podcast" (PDF). IBM.com. November 2011. Retrieved January 7, 2021.
  6. ^ "Getting Started with MQTT". HiveMQ. 2020-04-24.
  7. ^ a b Team, The HiveMQ. "Introducing the MQTT Protocol - MQTT Essentials: Part 1". www.hivemq.com. Retrieved 2021-09-26.
  8. ^ "MQTT v3.1 and MQTT v3.1.1 Differences". OASIS Message Queuing Telemetry Transport (MQTT) TC. 12 February 2015. Retrieved 19 August 2021.
  9. ^ "MQTT V3.1 Protocol Specification". Eurotech, International Business Machines Corporation (IBM). 2010. Retrieved 2020-12-15.
  10. ^ "OASIS MQTT Technical Committee Minutes of for the meeting of Thursday, 25th April 2013 Teleconference" (PDF).{{cite web}}: CS1 maint :url-status (링크)
  11. ^ "MQTT Version 3.1.1". 2014-10-29. Retrieved 2020-12-16.
  12. ^ "6 facts why it's worth upgrading to the brand new MQTT 3.1.1 version". 2014-10-30. Retrieved 2020-12-16.
  13. ^ "Differences between 3.1.1 and 5.0". GitHub.
  14. ^ Stanford-Clark, Andy; Hong Linh Truong (November 14, 2013). "MQTT For Sensor Networks (MQTT-SN) Protocol Specification Version 1.2" (PDF). oasis-open.org. OASIS Message Queuing Telemetry Transport (MQTT) Technical Committee. p. 28. Retrieved 2020-12-15.
  15. ^ "Introduction to MQTT-SN (MQTT for Sensor Networks)". Retrieved 2020-09-16.
  16. ^ Yuan, Michael. "Getting to know MQTT". IBM Developer. Retrieved 13 October 2019.
  17. ^ "Client, Broker / Server and Connection Establishment - MQTT Essentials: Part 3". hivemq.com. Retrieved 13 October 2019.
  18. ^ "Retained Messages - MQTT Essentials: Part 8". hivemq.com. Retrieved 13 October 2019.
  19. ^ "FAQ - Frequently Asked Questions MQTT". Retrieved 2020-03-19.
  20. ^ "MQTT Sparkplug/Tahu". www.cirrus-link.com. Retrieved November 5, 2019.
  21. ^ Cope, Stephen (2020). MQTT For Complete Beginners. p. 17. ISBN 9798779030762.
  22. ^ "What is MQTT? Definition and Details". www.paessler.com. Retrieved 2020-06-09.
  23. ^ "IBM Knowledge Center - IBM MQ - Using MQTT with IBM Integration Bus - Quality of service and connection management". www.ibm.com. Retrieved 2018-01-30.
  24. ^ Saxena, S.; Jain, S.; Arora, D.; Sharma, P. (13 February 2020). "Implications of MQTT Connectivity Protocol for IoT based Device Automation using Home Assistant and OpenHAB". 2019 6th International Conference on Computing for Sustainable Global Development (INDIACom): 475–480.
  25. ^ "MQTT - Bindings". www.openhab.org. Retrieved 2020-11-10.
  26. ^ Brothers, Reginald (January 25, 2016). "S&T's Internet of Things Pilot Demonstrates 'State of the Practical'". dhs.gov. p. 1. Retrieved March 31, 2016.
  27. ^ Community staff writer (June 14, 2016). "Version 0.14 released". nodered.org/blog. Node-RED. Retrieved July 6, 2016. MQTT with TLS support
  28. ^ Home Assistant Community (August 7, 2015). "MQTT". home-assistant.io. Home Assistant Community. Retrieved August 4, 2017.
  29. ^ "Home Assistant Add-on: Mosquitto Broker". GitHub. Retrieved December 25, 2021.
  30. ^ ProcessOne, Marek Foss (2019-02-26). "ejabberd 19.02: the MQTT Edition". ProcessOne — Blog. Retrieved 2019-03-04.
  31. ^ Eastburn, Josh (2020-08-24). "How to Integrate Automation Data with MQTT-Sparkplug B". Manufacturing Business Technology. Retrieved 2020-09-01.
  32. ^ Guindon, Christopher (2020-01-29). "Frequently Asked Questions". Eclipse Sparkplug. Retrieved 2020-09-01.
  33. ^ I., I., M. 아이엘로 및 E. 캄비아소(2020년)SlowITe는 MQTT에 영향을 주는 새로운 서비스 거부 공격입니다.센서, 20(10), 2932
  34. ^ "APIs & Protocols". Solace. Retrieved 2021-04-08.
  35. ^ "MQTT 5.0 Support 🎉". Solace Community. Retrieved 2021-04-08.

외부 링크