IoT/MQTT Protocol

IoT/MQTT Protocol

MQTT Protocol

Applications Use Transport

UDP based

  • Short messages, simple request/response trasactions
  • Light server touch, ARQ suffices
  • Real Time Protocol (RTP): Low delays, ARJ, short messages, weak client/server relationship

TCP based

  • Larger contents, longer, more complex sessions
  • Reliaibility, Packaging and presentation important (as it is bytestream)
  • HTTP: Strong client/server relationship, exchange messages.

Internet of Things - Why different?

  1. Scale: 기기의 숫자
    1. No limits on addresses and connections
    2. Limit messages to avoid network swamp - 숫자가 너무 많아서 메세지 크기를 줄여야함
  2. Power:
    1. Minimal powers; solar, batteries, RF
      1. Reduce/turnoff transmission power
    2. Do the smart things somewhere (which consums powers alot) - 즉 IoT는 수집 모니터링 과 같은 역할만 수행하고 분석은 다른 컴퓨터에서 하는것
  3. Networking: 저전력, 원격 위치, 넓게 분포
    1. Limit transmission needs - 메세지 보내는것도 에너지/트래픽이 요구됨
      1. Reduce bandwidth/distance/targets - 스스로 제한을 걸어서 통신횟수를 줄이던지;
      2. Get/give helps from the neighbours - 주위와 연계해서 전체적인 통신횟수를 줄이던지; 대신 이러면 항상 깨어 있어야함
  4. Timeliness: 빠른 지시와 반응이 필요 할 수 있음
    1. 다음과 같은 사항을 고려하여 디자인 한다
      • Exceptions vs Regular Reports - 언제 리포트 하는지
      • Transmitter vs Receiver Req - 송수신기 필요성
      • Short msg, prioritised msg - 메세지
  5. Reliability: 조그맣기에 어렵다
    1. 필요할떄만 의존성 사용, 최대한 가볍게 (ARQ push/pull 이라던지)

Design - PubSub

  • 데이터와 상태의 “announcement” 는 “consumption”과 분리되어 있다.
    • 모든 종류, 숫자의 소비자들이 subscribe 할수 있어야 하고
    • 모든 종류, 숫자의 소스들이 publish 될 수 있어야 한다
    • Avoid “connection” - 5번과 연계됨
  • 위의 사항들을 만족하기 위해 “broker” (server) is needed
    • 가볍고, 빠르고, 유연하며, open된 브로커 (당연히 웹서버는 이에 해당안됨)
    • 각각의 기기들은 브로커에게 퍼블리시 할 뿐이고, 브로커가 소비자들의 요구를 감당한다. 이로 인해 각각의 기기들은 위의 조건들을 만족할 수 있는것.

MQTT (브로커)

  • Messeage Queuing Telemetry Transport: 많은 IOT기기들에 최적화된 가벼운 메세징 프로토콜. 낮은 전력 낮은 대역폭 낮은 성능의 환경에서도 사용이 가능하다.

    • TCP와 높은 버전의 UDP 등등 여러 프로토콜에 의해 사용된다.
  • 통신 과정

    1. Publisher (센서 장치)가 데이터를 Topic을 정해서 브로커에게 전달.
    2. 이 Topic을 sub 하는 subscriber (출력, 처리 장치) 가 브로커에게서 데이터를 받아온다
      1. 만약 해당 토픽을 구독하고 있지 않으면, 데이터는 받지 못한다.
  • 특징

    • Pub - any vaule type to a specific (key).
    • Sub - subs to particual topic (which may not exist now, but in the future), or to a fitered set of topics (such as Pizza, instead of Hawaiian pizza)
    • Broker -
      • $sys/# - special topic
      • Holds info about the broker itself
        • 로드, 대역폭, 저장, 클라이언트 등등
        • 하지만 브로커간에 정형화된 필드가 존재 하지 않음 (각 브로커마다 다름)
        • 또한 resolution 이 다름 (즉 각 브로커마다 메세지 퍼블리시 텀이 다름)
      • TCP 와 UDP (버전에 따라) 모두 사용가능하다
      • 매우 비트단위인데, 압축된 메세지, 그리고 퍼블리셔와 네트워크의 부담을 줄이기 위해서이다.
  • 메세지

    • 16 Messages Types
      • Connect and disconnect and ACK
        • 채널과 서버 상태 확립, 그리고 스스로를 identify (lighweight security).
      • Ping req and response - Server level; 어플리케이션 계층 (not ICMP - network layer)
      • Pub, sub, unsub: 퍼블리시의 경우 양쪽 다 쓰임 소스 → 서버, 서버 → 구독자
      • 다양한 Quality of Service
  • Minimalism (main MQTT rule)

    • 서버는 최대한 적은 amount of state를 유지하기를 원한다.
      • 구독자: “잠시동안 불가능” “더이상 흥미없음” 등등?
    • 서버는 메세지를 queue 하지 않음 - mostly
      • 구독자들에게 메세지가 배포되면, 그 메세지는 삭제된다
      • 구독자가 없는 메세지 또한 삭제된다
    • 서버가 데이터베이스를 청소할 수 있는 기회를 제공한다 (최대한 가볍게 유지)
  • QoS

    • 어플리케이션 레벨에서 가지고 있는데 이는

      • 몇 구독자의 경우에 “확정 - sure” 이 필요하고
      • 모든 구독자는 어느때나 참여 할 수 있어야 하고
      • 전원, 게이트, 버퍼 여유분 등등 여러 사항을 고려할 수 있어야 하기 때문
    • 다음과 같이 세가지 레벨을 가지고 있다.

      • 0: 메세지를 푸시하고 바로 삭제해 버림 (Fire and Forget)

      • 1: 전달을 보장한다. 따라서 확인 절차가 필요하다 (At least once)

      • 2: 전달을 보장하고, 4단계의 핸드셰이크를 이용한다 (Exactly once)

      • 다음과 같은 상황도 가능하다.

  • Last Known Good

    • 드물게 보고하는 센서들
    • 새 구독자에게 뭘 줘야함 (드물게 pub 되서 마지막이 어느 상태인지 알려줘야지)
    • Retain: 메세지를 삭제할지 유지할지 정하는 플래그
      • 서버에 저장되며, 리붓되어도 존재한다. 구독자에게서 처음으로 요청 받을때 보내진다.
  • Last Will and Testament

    • 어느 토픽이던 소스는 초기 메세지를 배포할수 있다 - retained 메세지, 바로 보내지는 않는다

    • 만약 서버가

      • 배포된 메세지를 keepalive 구간 후에 받지 못하거나

      • TCP 연결이 MQTT 종료 메세지 없이 끊기거나

        한다면 연결을 잃었으며 Soruce는 실패했다고 판단한다.

    • 이후 각 구독자에게 알린다 (현재 서비스 불가능 등등)

  • Clean Session

    • 연결시에 플래그 됨
    • Clean: Pretend Ima new one
    • Not clean: Persistent Session - Ask server to remember you.
    • Plain for the server:
      • 너의 모든 구독된 토픽을 저장한다
      • 모든 메세지들을 저장한다 (QoS 1 and 2)
      • 재연결 되었을때 놓친 모든 메세지를 전달한다.

MQTT의 경우 어느정도의 보안이 존재하나 IoT의 경우 없다고 봐도 무방하다

  • 아이디 비번
  • 페이로드 시그네쳐, 무결성 검사
  • 암호화된 연결 등등
#
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×