Strona główna TECH Arduino Multicast DNS i Bonjour/Zeroconf

Multicast DNS i Bonjour/Zeroconf

0
Multicast DNS i Bonjour/Zeroconf

Multicast DNS (mDNS) służy do tłumaczenia nazw sieciowych na adresy IP w małych sieciach pozbawionych lokalnego serwera nazw. Jest to tak zwana usługa zero-config – nie wymaga żadnej konfiguracji, aby korzystać z połączenia pomiędzy urządzeniami w sieci.


W przypadku systemów firmy ApplemDNS jest wspierany „fabrycznie” przez usługę Bonjour, która jest właśnie implementacją specyfikacji zeroconf  (opracowanej nota-bene również przez Apple). Bonjour pozwala na wykrywanie usług mDNS/DNS-SD.

Aby otrzymać tę samą funkcjonalność w Windows, musimy sobie zainstalować Bonjour dla Windows. W przypadku Linuxa, obsługę zapewnia doinstalowanie Avahi (która jest wolną implementacją zeroconf). Android niestety nie posiada wbudowanej obsługi zeroconf.

W trakcie eksploracji tematu OTA Update w ESP8266, okazało się, że to własnie mDNS i Bonjour są wykorzystywane przez IDE do rozpoznawania urządzeń połączonych do tej samej sieci co komputer programisty, bez względu na nadane im adresy IP. W ramach Bonjour urządzenie prowadzi broadcast UDP, rozgłaszając informacje o swojej nazwie, adresie IP itp.

Z mojego punktu widzenia mDNS i zeroconf stanowią idealne rozwiązanie problemu konfiguracji połączenia z robotem, nad którą głowiłem się od pewnego czasu. Wydaje mi się też, że to rozwiązanie jest dosłownie skrojone pod potrzeby IoT. Posiada bezsprzeczne zalety w sensie dostępu do urządzenia, o którego parametrach sieciowych nic nie wiemy, przeprowadzania jego konfiguracji, czy też wprost do realizowania komunikacji.

Konfiguracja po stronie ESP8266 jest dość prosta, chociaż rozgryzienie i dobre przetestowanie tego zajęło mi kilka dobrych godzin.

Do konfiguracji wykorzystujemy bibliotekę ESP8266mDNS (jeżeli posiadamy zainstalowaną w IDE (Arduino IDE czy też Visual Micro) obsługę ESP8266 to zarówno ta biblioteka, jak i przykłady do niej są dostępne wprost z IDE).

Najpierw inicjalizujemy mDNS podając nazwę hosta, jaką chcemy używać w mDNS:

MDNS.begin("sandwichboxbot");

Następnie dodajemy usługę, która ma być rozpoznawana przez Bonjour ( w tym przypadku, chcę jedynie znać adres IP, wpisałem więc customową nazwę i „głupi” port ):

MDNS.addService("sbbot", "tcp", 1234);

Możemy sobie teraz uruchomić np. jakiś webserver i w zasadzie już MDNS.begin zapewnia nam możliwość otwarcia go w przeglądarce za pomocą nazwy (do nazwy hosta dodajemy .local).

Niestety, z jakiegoś powodu, najpopularniejsze aplikacje pozwalające podejrzeć listę urządzeń Bonjour, które aktualnie rozgłaszają się w sieci – Bonjour Browser (Windows) i ZeroConf Browser (Android) – nie zawsze wykrywają broadcast z ESP8266. Nie udało mi się niestety ustalić, co jest tego przyczyną. Raz działa a raz nie (być może jest to problem mojej sieci domowej).

Wszystko ok, tyle że w moim przypadku założenie jest takie, że interfejs w przeglądarce jest baaaaardzo opcjonalny. Do obsługi robota mają docelowo służyć aplikacje i nie chciałbym, aby użytkownik był zmuszony do instalowania czegokolwiek poza samą aplikacją. W przypadku Androida jest to wręcz problem. Obsługi zeroconf, która pozwalała by na otwarcie interfejsu w przeglądarce dla tego systemu zwyczajnie nie ma.

Okazuje się, że tu z pomocą przychodzi biblioteka ZeroConf (na licencji Ms-PL). Implementuje ona obsługę Bonjour i pozwala na wykrycie urządzeń/hostów. Z pobieżnego testu, który wykonałem, wynika że radzi sobie bez problemu z odczytaniem danych udostępnianych przez broadcast-ujące ESP8266 bez względu na to, czy pracuje ono w trybie stacji czy w trybie access-pointa. Co najważniejsze, nie wymaga instalacji w systemie żadnego dodatkowego oprogramowania.

W przypadku nadania nazwy usługi jak powyżej, listę hostów możemy pobrać za pomocą jednej komendy.

IReadOnlyList<IZeroconfHost> results = await ZeroconfResolver.ResolveAsync("_sbbot._tcp.local.");

Otrzymamy tutaj m.in. najważniejszą informację, czyli adres IP urządzenia.

Ponieważ biblioteka ZeroConf jest wieloplatformowa, jest więc duża szansa że spełni również swoje zadanie w aplikacji mobilnej w Xamarin, którą również będę przygotowywał.

Zeroconf to naprawdę bardzo ciekawa i prosta, a zarazem dobrze działająca technologia. Szkoda, że początkowy model licencjonowania, wybrany dla niej przez Apple, był bardzo restrykcyjny. Być może z tego własnie powodu nie stała się ona zaimplementowanym powszechnie standardem.

ZOSTAW ODPOWIEDŹ

Proszę wpisać swój komentarz!
Proszę podać swoje imię tutaj