Я хотел бы задать вопрос о mDNS.
Я пытаюсь создать процесс Linux, который может обнаруживать некоторые службы (например, _airplay._tcp., _Raop._tcp) с другого устройства, когда устройство присоединяется к точке доступа Linux.
Я могу получить уведомление через mDNS и использовать dns-sd
команда
dns-sd -B _xxxx._tcp
Я могу видеть:
Browsing for _xxx._tcp
Timestamp A/R Flags if Domain Service Type Instance Name
18:06:15.281 Add 3 8 local. _xxxx._tcp. xxxx_name
Однако, когда я перемещаю устройство из зоны действия Wi-Fi, я не могу получить удаленное уведомление через mDNS, и удаленное событие не отображается. dns-sd
команда. Мне было интересно, ожидается ли, что mDNS не может знать, что устройство удалено в этом случае?
Или, может быть, mDNS может узнать, что устройство удалено через измененный сетевой интерфейс? Я не могу получить удаленное событие, это потому, что у меня неправильная конфигурация сети Linux?
Да, ожидается, что mDNS не может знать, что устройство отключено от сети. Устройство, которое не находится в сети, не может сказать, что оно больше не в сети, и в mDNS нет центрального реестра устройств или регистраций служб - оно полностью и явно предназначено для децентрализации. Вы можете найти компромисс между точностью сетевого трафика и задержкой запросов, установив довольно низкий TTL для записи mDNS, но вы не можете решить проблему полностью.
Учитывая, что по сути такая же проблема может возникнуть даже при использовании обычного DNS (и динамических обновлений), или практически говоря любой система обнаружения сервисов, решение любой проблемы, с которой вы фактически попытка решить заключается в том, «не полагайтесь на актуальность данных об обнаружении сервисов, потому что часто это не так». Это означает выполнение вашей собственной проверки «живучести» служб, правильную обработку всевозможных ошибок (в том числе использование разумно малых тайм-аутов соединения) и, в целом, предположение, что данные SD в лучшем случае являются неопределенным намеком в правильном направлении, а не каким-то образом абсолютной гарантии того, что конкретная услуга доступна для вас в любой момент.