Правильный способ подключения к IoT-устройствам (UDP или ICMP)

Как правильно подключить приложение к устройству? На данный момент у меня есть raspberry pi 3, который управляет электричеством, и приложение для iPhone, которое я создал. Каждый раз, когда приложение переходит на передний план, оно отправляет широковещательное сообщение UDP, когда приложение получает ответ от raspberry pi, оно использует этот IP-адрес (в заголовке IP) для использования веб-сервисов, которые я создал в хабе. Этот процесс UDP выполняется все время, пока вы запускаете приложение. Это то, что обычно делают устройства IOT? Я предполагаю, что IP Raspberry Pi рано или поздно изменится.

Мой коллега рассказал мне другой способ: после того, как я впервые получил IP-адрес, вместо использования широковещательных сообщений UDP каждый раз, когда приложение запускается, используйте ICMP для проверки связи с ранее сохраненным IP-адресом, чтобы проверить, отвечает ли оно. В этом случае я использую веб-сервисы с этим IP-адресом, в противном случае снова использую широковещательное сообщение UPD.

Я не вижу в этом смысла. В основном потому, что система не работает быстрее, используя ICMP. (запрос UDP более или менее быстр, чем запрос ICMP). Более того, возможно, сейчас другое устройство начало использовать этот IP-адрес (например, смарт-телевизор или смарт-штекер) и по этой причине не будет отвечать на сетевые запросы, отправленные приложением. В этом случае приложение не может восстановиться, так как считает, что оно уже подключено к нужному устройству. Насколько я понимаю, протокол ICMP используется для диагностики, а не для обнаружения устройств.

Что вы думаете? Какой процесс используется такими устройствами, как Alexa, Philips Hue, Smart plugs... для решения проблемы обнаружения устройств их приложениями? Похоже, что Philips HUE использует SSDP, который внутри использует широковещательное сообщение UDP. Используется ли он каждый раз, когда вы запускаете приложение для обнаружения IP-адреса? (Я собираюсь проверить это позже с помощью wireshark)

Спасибо за предложения.


person Ricardo    schedule 21.03.2019    source источник
comment
Просто примечание: ваше обсуждение, кажется, обсуждает проблему в закрытых сетях, например. Домашняя сеть. Альтернативы, которые вы обсуждаете, могут быть использованы в этой среде. Однако их нельзя и не следует использовать в открытом Интернете. В открытом Интернете устройства IoT не должны быть адресуемыми конечными точками IP по соображениям безопасности (см. атаки на Jeep, веб-камеры и т. д.).   -  person Stefan Vaillant    schedule 22.03.2019
comment
@StefanVaillant Да, я говорю о локальной сети, меня сейчас не интересует Интернет.   -  person Ricardo    schedule 24.03.2019


Ответы (1)


Вы можете разрешить доступ к имени хоста вашего Raspberry Pi в вашей локальной сети через:

http://raspberrypi.local

Чтобы включить его, вам необходимо установить поддержку Bonjour на Raspberry Pi, установив демон Avahi mDNS (реализует архитектуру Apple Zeroconf):

$ sudo apt-get install avahi-daemon

Обновить запуск загрузки:

$ sudo insserv avahi-daemon

Перезапустите, чтобы применить новую конфигурацию:

$ sudo /etc/init.d/avahi-daemon restart
person Ryan Amaral    schedule 21.03.2019