Network/IoT-MQTT

MQTT 프로토콜 메시지 타입

양디 2016. 2. 1. 17:06


Fixed Header


MQTT의 고정 헤더는 위의 사진과 같다.


1바이트가 고정 헤더라고 볼 수 있는데, 2바이트의 Remaining Length에는 가변 헤더의 내용들이 들어가기 때문이다.


따라서 위의 1바이트부터 잘 이해하는 것이 중요하다.


7~4 의 4개 Bit는 메시지 타입을 결정한다.


2의 4승개의 메시지 타입이 가능하다. 즉, 메시지 타입은 16개가 되겠다.


그 중 모든 비트가 0인 0과, 모든 비트가 1인 16비트는 Reserved이다.



메시지 타입



위의 사진이 메시지 타입 종류 16가지이다.


Publish의 경우가 중요한데, 이는 나중에 QoS 설명할 때에 제대로 작성하겠다.


타입 1은 클라이언트가 브로커에게 연결을 시도하는 메시지이다.

타입 2는 브로커가 연결을 받았을때에, 연결되었다고 클라이언트에게 알려주는 메시지이다.


3~7번은 QoS 때 !


타입 8은 클라이언트가 브로커에게 토픽을 구독하겠다고 보내는 메시지이다.

타입 9는 브로커가 구독 메시지를 받고, 구독을 시키고 나서 완료되었다고 보내는 메시지이다.

타입 10은 구독하던 토픽에 관하여 더이상 구독하지 않겠다는 뜻이고,

타입 11은 완료되었다는 메시지이다.


타입 12는 살아있는지 알아보기 위해 주기적으로 Ping을 보내는데, 

이 Ping request를 받은 대상이 타입 13의 Ping response를 되돌려주면 살아있는 것이다.


14번은 Disconnect, 연결을 끊는 것이다.


Ping을 보냈는데 Response가 없다면, 연결이 종료된것으로 간주한다.




중복 Flag


MQTT는 QoS를 보장하기 위하여, 메시지를 2번 이상 보낼 수 있는데 


이 경우 처음 보내는 메시지가 아닐 경우 중복 Flag가 on(True, 1)로 바뀐다.



QoS Level


Quality Of Service 레벨은 0, 1, 2 의 3가지 인데,


0은 보내고 잊는다 (Fire and Forget) 이므로 신뢰도가 낮지만,


1은 받을때까지 보낸다 (Acknowledged Delivery) 이므로 신뢰도가 높아진다.

그러나 받는 쪽에서 한번이 아니라 여러번 받는 경우도 생긴다.


2는 확실하게 보낸다 (Assured Delivery) 로, 신뢰도가 가장 높다.

정확하게 한번 받을 수 있도록 메시지를 주고받는데, 이는 나중에 QoS에 관한 포스팅에서 자세히 알아보자.


2비트이므로 3까지 가능한데, 3은 MQTT-SN 설명 포스팅에 나온다.


Retain


Retain bit도 중요하고, 유용하다.


Retain bit에 관한 것도 다른 포스팅에서 따로 다루도록 하겠다.


Remaining Length


Remaining Length 에는 Variable Header(가변 헤더)와 메시지 내용인 Payload가 담긴다.


2바이트부터 쭉 순서이며, 1바이트만을 차지한다는 뜻이 아니라 2바이트부터 메시지가 끝날때까지의 바이트를 의미한다.


즉 2바이트 하나일 수도 있지만, 20바이트가 될 수도 있다는 뜻이다.





Fixed Header가 아주 짧은 것을 알 수 있는데, 이를 통해 주고 받는 데이터 양을 최소화하여


컴퓨팅 파워의 효율을 높이고, 전력 소모도 절약할 수 있다는 장점이 있다.

댓글