Огляд мережевих протоколів та протоколів обміну повідомленнями для IoT
Привіт, хабрівчани! Перший у Росії онлайн-курс IoT-розробник стартує в OTUS вже у жовтні. Прямо зараз відкритий набір на курс, у зв'язку із чим ми продовжуємо ділитися з вами корисними матеріалами.
Інтернет речей (IoT, Internet of Things) буде побудований на базі існуючої мережевої інфраструктури, технологій та протоколів, що використовуються в даний час у будинках/офісах та в Інтернеті, і запропонує багато іншого.
Мета цього посібника – дати короткий огляд мережевих та прикладних протоколів для IoT.
TCP/IP використовує чотирирівневу модель з певними протоколами кожному рівні. Див. understanding the TCP/IP 4 layer model (Розбираємося з чотирирівневою моделлю TCP/IP).
На діаграмі нижче показано порівняння протоколів, що використовуються в даний час, і тих, які, швидше за все, використовуватимуться для IoT.
Примітки до діаграми:
Розмір шрифту відображає ступінь популярності протоколу. Наприклад, зліва IPv4 більше, оскільки він набагато популярніший у сучасному Інтернеті. Однак справа він менший, оскільки очікується, що IPv6 буде популярнішим у IoT.
Показано не всі протоколи.
Найбільше змін на канальному (рівні 1 та 2) та прикладному рівнях (рівень 4).
Мережевий та транспортний рівні, швидше за все, залишаться незмінними.
Протоколи канального рівня
На канальному рівні (Data Link) вам потрібно з'єднати між собою пристрої. Вони можуть бути як недалеко, наприклад, у локальних мережах (local networks) і великій відстані друг від друга: у міських (metropolitan area networks) і світових мережах (wide area networks).
В даний час на цьому рівні в домашніх та офісних мережах (LAN) використовуються Ethernet та Wi-Fi, а в мобільних (WAN) – 3G/4G. Однак багато IoT-пристроїв малопотужні, наприклад, датчики, і живляться тільки від батарей. У цих випадках Ethernet не підходить, але можна використовувати low powered Wi-Fi і low powered Bluetooth.
Хоча для підключення цих пристроїв, як і раніше, будуть використовуватися існуючі бездротові технології (Wi-Fi, Bluetooth, 3G/4G), варто також звернути увагу на нові технології, спеціально розроблені для IoT-додатків, популярність яких, ймовірно, зростатиме.
На мережному рівні (Networking) у довгостроковій перспективі домінуватиме протокол IPv6. Малоймовірно, що використовуватиметься IPv4, але він може відігравати певну роль на початкових етапах. Більшість пристроїв IoT для дому, наприклад, розумні лампочки, в даний час використовують IPv4.
Транспортний рівень
На транспортному рівні (Transport) в Інтернеті та Інтернеті домінує TCP. Він використовується як у HTTP, так і в багатьох інших популярних протоколах Інтернету (SMTP, POP3, IMAP4 тощо).
MQTT, який, на мою думку, стане одним з основних протоколів прикладного рівня для обміну повідомленнями, в даний час використовує TCP.
Однак у майбутньому через нижчі накладні витрати, я очікую, що UDP буде більш популярний для IoT. Ймовірно, більшого поширення набуде MQTT-SNпрацює над UDP. статтю про порівняння TCP проти UDP .
Прикладний рівень та протоколи обміну повідомленнями
Важливі характеристики для протоколів IoT:
Швидкість — кількість даних, що передаються в секунду.
Затримка — час, необхідний для надсилання повідомлення.
Споживана потужність.
Безпека.
Наявність програмних засобів.
В даний час на цьому рівні активно використовуються два основні протоколи: HTTP та MQTT.
HTTP, ймовірно, найвідоміший протокол цього рівня, що лежить в основі Інтернету (WWW). Він, як і раніше, матиме важливе значення для IoT, оскільки використовується для REST API – основного механізму взаємодії веб-додатків та сервісів. Однак, через високі накладні витрати, HTTP навряд чи стане основним протоколом IoT, хоча все одно буде широко використовуватися в Інтернеті.
MQTT (Message Queuing Telemetry Transport) став основним протоколом обміну повідомленнями в IoT, завдяки своїй легкості та простоті у використанні. статтю Introduction to MQTT for beginners (Вступ до MQTT для початківців).
Порівняння HTTP та MQTT для IoT
MQTT швидко стає стандартом де-факто для IoT-додатків. Це відбувається через його легкість і швидкість в порівнянні з HTTP і те, що він є протоколом "один до багатьох", а не "один до одного" (HTTP).
Багато сучасних веб-додатків з радістю використовували б MQTT замість HTTP, якби він був доступний на момент їх розробки.
Хороший приклад - відправка інформації безлічі клієнтів, наприклад, про прибуття та відправлення поїздів/автобусів/літаків. У цьому сценарії протокол «один до одного», такий як HTTP, має великі накладні витрати і створює велике навантаження на веб-сервери. Масштабування цих веб-серверів може бути ускладненим. З MQTT клієнти підключаються до брокера, який легко можна додавати для балансування навантаження. Дивіться про це туторіал з відео Republish HTML Data Over MQTT (Flight Arrivals Example) та статтю MQTT vs HTTP for IOT.
Інші протоколи обміну повідомленнями
HTTP не був розроблений для IoT-додатків, але, як уже згадувалося, він буде широко використовуватися протягом якогось часу завдяки його широкому використанню в API.
Майже всі платформи IoT підтримують як HTTP, і MQTT.
Проте є інші протоколи, які варто розглянути.
протоколи
MQTT - (Message Queuing Telemetry Transport). Використовує TCP/IP. Для моделі видавець-передплатник потрібен брокер повідомлень.
AMQP - (Advanced Message Queuing Protocol). Використовує TCP/IP. Моделі «видавець-передплатник» та «крапка-крапка».
COAP - (Constrained Application Protocol). Використовує UDP. Розроблений спеціально для IoT, використовує модель запиту-відповіді як у HTTP. RFC 7252.
В цій статті розглядаються основні протоколи та їх застосування. Висновок цієї статті полягає в тому, що IoT буде використовувати набір протоколів, залежно від їхнього передбачуваного застосування.
Однак, якщо озирнутися назад, у перші роки існування Інтернету протокол HTTP, який згодом став домінуючим, був лише одним з безлічі протоколів.
Незважаючи на те, що HTTP не був спочатку задуманий для передачі файлів та електронної пошти, сьогодні він використовується і для того, і для іншого.
Я очікую, що в IoT з протоколами обміну повідомленнями відбудеться те саме: більшість сервісів будуть використовувати один переважний протокол.
Нижче наведено графіки Google Trends, які показують, як змінювалася популярність MQTT, COAP та AMQP за останні кілька років.
Найбільше змін на канальному (рівні 1 та 2) та прикладному рівнях (рівень 4).
Мережевий та транспортний рівні, швидше за все, залишаться незмінними.
На прикладному рівні компоненти IoT будуть використовувати протоколи обміну повідомленнями. Хоча ми все ще знаходимося на ранньому етапі розвитку IoT, цілком імовірно, що виділиться один або, можливо, два протоколи обміну повідомленнями.
За останні кілька років MQTT став найпопулярнішим, і саме на ньому я зараз фокусуюсь на цьому сайті.
HTTP також буде використовуватися, оскільки він вже добре вбудований в існуючі IoT-платформи.