MQTT - AWS IoT Core

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

MQTT

엠큐티티 은 제약 장치를 위해 설계된 가볍고 널리 사용되는 메시징 프로토콜입니다. AWS IoT MQTT에 대한 지원은 MQTT v3.1.1 기준, 약간의 차이가 있습니다. 사용 방법에 대한 AWS IoT MQTT v3.1.1 사양과 다릅니다. 참조 AWS IoT MQTT 버전 3.1.1 기준과의 차이.

AWS IoT Core 는 MQTT 프로토콜 및 MQTT over WSS 프로토콜을 사용하는 장치 연결을 지원합니다. 더 AWS IoT 기기 SDK 두 프로토콜을 모두 지원하고, 장치를 AWS IoT. 더 AWS IoT 장치 SDK는 장치 및 클라이언트가 연결하고 액세스하는 데 필요한 기능을 지원합니다. AWS IoT Core 서비스 및 인증 프로토콜을 지원하므로 AWS IoT 서비스에는 이(가) 필요합니다. 에 연결하는 방법에 대한 자세한 내용은 AWS IoT 사용 AWS 기기 SDK 및 예시 링크 AWS IoT 를 참조하십시오. 자세한 내용은 을(를) 사용하여 MQTT와 연결 AWS IoT 기기 SDK. 인증 방법 및 MQTT 메시지에 대한 포트 매핑에 대한 자세한 내용은 을 참조하십시오. 프로토콜, 포트 매핑 및 인증.

사용하시는 것이 좋지만 AWS IoT 연결할 장치 SDK AWS IoT, 이(가) 필요하지 않습니다. 사용하지 않는 경우 AWS IoT 그러나 장치 SDK는 필요한 연결 및 통신 보안을 제공해야 합니다. 클라이언트는 서버 이름 표시(SNI) TLS 확장 연결 요청. SNI를 포함하지 않는 연결 시도는 거부됩니다. 자세한 내용은 AWS IoT의 전송 보안을 참조하십시오. IAM 사용자 및 AWS 자격 증명을 사용하여 클라이언트를 인증하는 클라이언트는 올바른 서명 버전 4 인증.

을(를) 사용하여 MQTT와 연결 AWS IoT 기기 SDK

이 섹션에는 AWS IoT 장치 SDK 및 장치를 에 연결하는 방법을 설명하는 샘플 프로그램의 소스 코드 AWS IoT. 여기에 링크된 샘플 앱은 AWS IoT MQTT 프로토콜 및 WSS를 통한 MQTT 사용.

C++

사용 방법 AWS IoT C++ 장치 연결용 장치 SDK

Python

사용 방법 AWS IoT 장치를 연결하기 위한 Python용 장치 SDK

JavaScript

사용 방법 AWS IoT 장치 연결을 위한 JavaScript용 장치 SDK

Java

사용 방법 AWS IoT 장치를 연결하기 위한 Java용 장치 SDK

Embedded C

사용 방법 AWS IoT 장치 연결을 위한 내장 C용 장치 SDK

중요

이 SDK는 숙련된 임베디드 소프트웨어 개발자가 사용하도록 고안되었습니다.

MQTT 서비스 품질(QoS) 옵션

AWS IoT 및 AWS IoT 장치 SDK는 MQTT 서비스 품질(QoS) 수준 01. MQTT 프로토콜은 세 번째 수준의 QoS를 정의합니다. 2, 그러나 AWS IoT 은(는) 해당 을(를) 지원하지 않습니다. MQTT 프로토콜만 QoS 기능을 지원합니다. HTTPS는 QoS를 지원하지 않습니다.

다음 표에서는 각 QoS 레벨이 메시지 브로커 에 게시된 메시지에 미치는 영향을 설명합니다.

QoS 수준....

메시지는...

설명

QoS 레벨 0

0번 이상 전송

이 수준은 신뢰할 수 있는 통신 링크를 통해 전송되거나 문제 없이 놓칠 수 있는 메시지에 사용되어야 합니다.

QoS 레벨 1

적어도 한 번은 보낸 다음 PUBACK 응답이 수신됨

보낸 사람이 PUBACK 성공적으로 전달되었음을 나타내는 응답.

MQTT 영구 세션 사용

영구 세션은 클라이언트에서 승인하지 않은 서비스 품질(QoS)이 1인 클라이언트 구독 및 메시지를 저장합니다. 연결이 끊긴 디바이스가 영구 세션에 다시 연결되면 세션이 다시 시작되고 해당 구독이 복구되며 확인되지 않은 메시지가 클라이언트로 전송됩니다.

영구 세션 생성

MQTT 영구 세션 생성 방법 CONNECT 메시지 및 설정 cleanSession 플래그 대상 0. 클라이언트를 보내는 동안 세션이 존재하지 않는 경우 CONNECT 새 영구 세션이 생성됩니다. 클라이언트에 대한 세션이 이미 있으면 클라이언트가 기존 세션을 재개합니다.

영구 세션 중 작업

클라이언트는 sessionPresent 연결의 속성이 승인됨(CONNACK) 메시지가 표시됩니다. 만일 sessionPresent 은(는) 1영구 세션이 존재하고 클라이언트에 대해 저장된 모든 메시지가 클라이언트가 CONNACK, 참조: 영구 세션에 다시 연결한 후의 메시지 트래픽. 만일 sessionPresent 은(는) 1클라이언트가 을(를) 다시 구독할 필요가 없습니다. 그러나, sessionPresent 은(는) 0, 영구 세션이 없으며 클라이언트는 해당 항목 필터에 다시 가입해야 합니다.

클라이언트가 영구 세션에 가입하면 각 작업에 대한 추가 플래그 없이 메시지를 게시하고 항목 필터를 구독할 수 있습니다.

영구 세션에 다시 연결한 후의 메시지 트래픽

영구 세션은 클라이언트와 MQTT 메시지 브로커 간의 지속적인 연결을 나타냅니다. 클라이언트가 영구 세션을 사용하여 메시지 브로커에 연결할 때 메시지 브로커는 연결 중 클라이언트가 만든 모든 구독을 저장합니다. 클라이언트의 연결이 해제되면 메시지 브로커는 클라이언트가 구독 중인 주제에 대해 게시된 미확인 QoS 1 메시지와 새로운 QoS 1 메시지를 저장합니다. 클라이언트가 영구 세션에 다시 연결하면 모든 구독이 복구되고 저장된 모든 메시지가 초당 최대 10개의 메시지 속도로 클라이언트에 전송됩니다. 저장된 메시지의 메시지 전달 속도가 고정되어 세션에 대기 중인 메시지가 10개 이상이면 저장된 메시지를 전달하는 데 몇 초 정도 걸립니다. 저장된 메시지는 현재 메시지 트래픽과 함께 클라이언트로 전송되므로 저장된 메시지가 모두 전송될 때까지 장치에 대한 지속적인 처리량은 초당 최소 10개의 메시지입니다. 이 기간 동안 단일 장치에 대한 이 총 메시지 트래픽은 에 설명된 최대 연결 처리량에 도달할 수 있습니다. AWS IoT Core 메시지 브로커 서비스 할당량. 클라이언트가 만료되기 전에 영구 세션에 다시 연결하지 않으면 세션이 종료되고 해당 메시지가 삭제됩니다.

영구 세션 종료

다음 조건은 영구 세션이 를 종료할 수 있는 방법을 설명합니다.

  • 영구 세션 만료 시간이 경과한 경우 영구 세션 만료 타이머는 메시지 브로커가 클라이언트 연결 끊김 또는 연결 시간 초과로 인해 클라이언트의 연결이 끊겼음을 감지할 때 시작됩니다.

    세션이 만료된 후 클라이언트가 다시 연결되고 cleanSession 플래그 대상 0, 서비스가 새 영구 세션 을 생성합니다. 이전 세션의 구독 및 메시지는 삭제됩니다.

  • 클라이언트가 CONNECT 메시지 설정 cleanSession 플래그 대상 1.

참고

세션이 종료될 때 클라이언트에 전송되기를 기다리는 메시지는 무시되지만, 전송할 수 없더라도 표준 메시지 요금으로 여전히 청구됩니다. 메시지 가격에 대한 자세한 내용은 을 참조하십시오. AWS IoT Core 가격 책정. 만료 시간 간격을 구성할 수 있습니다.

세션 만료 시간 변경 시 고려 사항

표준 제한 증가 프로세스를 사용하면 기본 영구 세션 만료 시간을 1시간 늘릴 수 있습니다. 그러나 세션 만료 시간이 길어지면 추가 세션 시간 동안 수집할 수 있는 추가 메시지 때문에 더 높은 메시지 요금이 발생할 수 있습니다. 세션 만료 시간이 근사치이기 때문에 세션은 계정 제한보다 최대 30분 더 오래 지속될 수 있습니다. 그러나 세션은 계정 제한보다 짧지 않습니다. 세션 제한에 대한 자세한 내용은 을 참조하십시오. AWS 서비스 할당량.

연결 속성 사용

ConnectAttributes IAM 정책에서 연결 메시지에 사용할 특성을 지정할 수 있습니다. PersistentConnectLastWill. 함께 ConnectAttributes, 장치가 새로운 기능에 기본적으로 액세스하지 않는 정책을 구축할 수 있습니다. 이 정책은 장치가 손상된 경우 도움이 될 수 있습니다.

connectAttributes는 다음 기능을 지원합니다.

PersistentConnect

사용 방법 PersistentConnect 이 기능을 사용하면 클라이언트와 브로커 간의 연결이 중단될 때 클라이언트가 연결 중에 하는 모든 구독을 저장할 수 있습니다.

LastWill

사용 방법 LastWill 기능을 사용하여 메시지를 LastWillTopic 클라이언트가 예기치 않게 연결을 끊는 경우

기본적으로 정책에는 비영구적인 연결이 있으며 이 연결에 대해 전달된 특성이 없습니다. 를 사용하려면 IAM 정책에 영구 연결을 지정해야 합니다.

대상 ConnectAttributes 예를 들자면 연결 정책 예제.

AWS IoT MQTT 버전 3.1.1 기준과의 차이

메시지 브로커 구현은 MQTT v3.1.1 기준, 하지만 다음과 같은 면에서 사양과 다릅니다.

  • AWS IoT 는 MQTT 서비스 품질(QoS) 레벨 0과 1만 지원합니다. AWS IoT 은(는) 게시 또는 QoS 레벨 2 구독을 지원하지 않습니다. QoS 레벨 2가 요청되면 메시지 브로커가 PUBACK 또는 SUBACK을 전송하지 않습니다.

  • AWS IoT에서 QoS가 0인 주제를 구독한다는 것은 메시지가 0번 이상 전달된다는 의미입니다. 메시지가 두 번 이상 전달될 수 있습니다. 여러 번 전달되는 메시지는 다른 패킷 ID를 사용하여 전송될 수 있습니다. 이러한 경우 DUP 플래그가 설정되지 않습니다.

  • 연결 요청에 응답할 때 메시지 브로커는 CONNACK 메시지를 전송합니다. 이 메시지에는 연결이 이전 세션을 재개하는 것인지 여부를 나타내는 플래그가 포함됩니다.

  • 클라이언트가 주제를 구독할 때 메시지 브로커가 SUBACK을 전송하는 시간과 클라이언트가 일치하는 새 메시지를 수신하기 시작하는 시간 사이에 지연이 있을 수 있습니다.

  • MQTT 사양은 브로커가 특정 주제로 보낸 마지막 메시지를 보관하고 모든 미래 주제 구독자에게 보내도록 발행자에게 요청하는 조항을 제공합니다. AWS IoT 은(는) 보존된 메시지 을(를) 지원하지 않습니다. 메시지 보관을 요청할 경우 연결이 해제됩니다.

  • 메시지 브로커는 클라이언트 ID를 사용하여 각 클라이언트를 식별합니다. 클라이언트 ID는 MQTT 페이로드의 일부로 클라이언트가 메시지 브로커로 전달합니다. 동일한 클라이언트 ID를 가진 두 클라이언트를 메시지 브로커 에 동시에 연결할 수 없습니다. 한 클라이언트가 다른 클라이언트에서 사용 중인 클라이언트 ID를 사용하여 메시지 브로커에 연결할 경우 새 클라이언트 연결이 수락되고 이전에 연결된 클라이언트가 연결 해제됩니다.

  • 드물지만 메시지 브로커가 다른 패킷 ID로 동일한 논리적 PUBLISH 메시지를 재전송할 수 있습니다.

  • 메시지 브로커는 메시지 및 ACK가 수신되는 순서를 보장하지 않습니다.