Протокол (или служба публикации / обнаружения) для обнаружения устройств в сети

Мы подключаем несколько встроенных устройств в сеть. То, что я сейчас ищу, это способ найти IP устройства и идентифицировать их. Мы работаем с ПК под управлением Windows, и я собираюсь написать инструмент для C#, который должен это делать.

  1. Я думал о том, чтобы отправить широковещательную рассылку udp, и в ack т.е. ip устройства, что означало бы, что устройству требуется запуск демона для назначения самого ip.

  2. Запуск службы (например, принтера) на устройстве, а на ПК - просто поиск службы.
    Я читал о некоторых вещах, таких как apipa, zeroconf, ipv4 local link, bonjour, dns-sd, mdns, bonjour; Они могут автоматически назначать IP-адреса и публиковать услуги в сети.

Мой вопрос: может ли кто-нибудь порекомендовать мне, что будет хорошо для моей задачи? -Протокол или служба должны быть ограничены в использовании ресурсов (использование памяти / процессора).
Есть ли какие-то стандартные протоколлы для использования?
Является ли DNS хорошей идеей или потребует ресурсов для поиска IP-адреса устройства?
-Также должен работать, когда нет серверов DHCP.

редактировать: чтобы уточнить немного: IP-конфигурация автоматическая. Проблема заключается в том, как сообщить ПК, какой IP-адрес в сети (или прямое соединение в этой вазе будет только один) принадлежит устройству (идентификатор).

2 ответа

Решение

Мой вопрос: может ли кто-нибудь порекомендовать мне, что будет хорошо для моей задачи? -Протокол или служба должны быть ограничены в использовании ресурсов (использование памяти / процессора). Есть ли какие-то стандартные протоколлы для использования?

Стандартный способ обнаружения устройств (и их атрибутов, таких как IP-адрес управления) в сети Ethernet заключается в использовании LLDP.

Вы можете найти список демонов lldp здесь

Все хосты в сети Vlan будут видеть объявления LLDP, так как они отправляются на многоадресный mac-адрес; это также означает, что объявления LLDP распространяются на Vlan. Если вам нужен реестр устройств и обнаружение через Vlans, вам нужно создать свой собственный протокол IP-уведомлений... UDP был бы хорошим выбором для транспорта.

Является ли DNS хорошей идеей или потребует ресурсов только для поиска IP-адреса устройства?

Если вы ищете только IP-адрес, и вам все равно, можете ли вы сказать, является ли устройство одной из ваших встроенных систем, вы можете использовать mDNS; однако это более рискованно, поскольку у вас нет гарантии от конфликтов пространства имен в локальной сети клиента.

Как встраиваемые системы OP могут получить IPv4-адрес, если у клиента нет DHCP-сервера?

RFC 3330 выделяет 169.254.0.0/16 для связи по одному каналу, если DHCP-сервер недоступен. После размышления, это, вероятно, самый безопасный блок адресов для использования; тем не менее, ваша компания должна поощрять своих клиентов выделять адреса самим по протоколу DHCP вместо какой-либо формы автоматической настройки в подсети 169.254.0.0/16.

Как вы назначаете отдельные IP-адреса в пределах 169.254.0.0/16 - это вопрос, который мы не можем решить за вас... есть несколько вариантов:

  • Назначьте конкретные адреса в пределах 169.254.0.0/16, хэшируя значения ваших mac-адресов, так что маловероятно, что возникнут коллизии для ожидаемого максимального количества ваших систем в виртуальной сети любого клиента
  • Прослушайте несколько интервалов приветствия LLDP в вашей системе и выделите адрес из 169.254.0.0/16, который еще не использовался

Утилита nmap очень хорошо определяет, какие IP-адреса в сети (на ваш выбор!) Заняты. Если хост ответит на любой запрос для проверки его наличия, то nmap покажет его.

В противном случае вы можете возиться с ARP. Есть несколько утилит для всех основных ОС, которые будут делать это (на Win32 ищите Cain, на Linux их много). Эти утилиты будут отправлять широковещательную рассылку / "пинг" ARP на каждый адрес, спрашивая, подключено ли какое-либо устройство и, если да, каков его IP.

Другие вопросы по тегам