Udostępnij za pośrednictwem


Przeprowadzanie odnajdowania usługi

Aplikacje wysokiego poziomu w usłudze Azure Sphere mogą przeprowadzać odnajdowanie usług przy użyciu odnajdowania usług DNS (DNS-SD). Aplikacje mogą używać odnajdowania usług do znajdowania usług sieciowych i rozwiązywania problemów z nazwami hostów, dzięki czemu mogą pracować z usługą za pośrednictwem zapory Azure Sphere. Multicast DNS (mDNS) może być również używany do wykonywania odnajdowania w komunikacji równorzędnej w sieci lokalnej, co jest szczególnie przydatne, gdy adresy IP i nazwy hostów docelowego punktu końcowego nie są znane w czasie projektowania.

Aplikacje używają zapytań DNS-SD do pobierania rekordów DNS z nielokalizacji serwerów DNS lub za pośrednictwem linku multicast. Jeśli nazwa będąca zapytaniem znajduje się w domenie .local najwyższego poziomu (TLD), zapytanie jest multiemisji w sieci lokalnej za pośrednictwem wszystkich włączonych interfejsów sieciowych. W przeciwnym razie jest wykonywane odnajdowanie usługi emisji pojedynczej. W przykładzie odnajdowania usługi pokazano, jak przeprowadzić odnajdowanie usług w usłudze Azure Sphere.

Uwaga

Zapora Azure Sphere uniemożliwia aplikacjom komunikowanie się z nieautoryzowanymi usługami. Jednak zezwolenie na połączenia wychodzące z . local TLDs w manifeście aplikacji może zwiększyć zagrożenie bezpieczeństwa dla urządzenia, zezwalając aplikacji na łączenie się z nieautoryzowanymi usługami reklamowanymi w sieci lokalnej. Aplikacje powinny zezwalać na połączenia wychodzące z . local TLDs tylko w zabezpieczonych środowiskach, które uniemożliwiają nieautoryzowanym podmiotom dostęp do usług reklamowych. Aby zapewnić dodatkową ochronę w tym scenariuszu, usługa Azure Sphere wymaga, aby usługi wykryte w sieci lokalnej również znajdować się w lokalnej podsieci.

Dołączanie plików nagłówków

Aplikacje wykonujące odnajdowanie usług muszą zawierać plik nagłówka rozpoznawania nazw:

 #include <resolv.h>

Zezwalanie na połączenie z usługą

Przed wykonaniem zapytania DNS-SD należy dodać usługę do funkcji AllowedConnections manifestu aplikacji. Zapora Azure Sphere umożliwi aplikacji łączenie się z wykrytymi wystąpieniami usługi przy użyciu skojarzonych z nimi nazw hostów i adresów IP. Jeśli określono usługę .local TLD, zapora zezwala na połączenia tylko do odnalezionych zasobów w lokalnej podsieci.

W funkcji AllowedConnections są obsługiwane następujące typy nazw usług:

  • Lokalna nazwa usługi DNS, na przykład "_sample._tcp.local"
  • Nie lokalna nazwa usługi DNS, na przykład "_sampleinstance._tcp.dns-sd.org"
  • Nazwa lokalnego wystąpienia usługi, na przykład "_sampleinstance._tcp.hostname.local"
  • Nazwa domeny, na przykład "samplehost.contoso.com"
  • Adres IP

Oto fragment manifestu aplikacji, który zawiera nazwę usługi innej niż lokalna.

"AllowedConnections": [ "_http._tcp.dns-sd.org" ]

Wykonywanie zapytania DNS-SD

Aby wykonać zapytanie DNS-SD, musisz zażądać kilku typów rekordów DNS:

  • Rekordy PTR wyliczanie wystąpień usługi DNS.
  • Rekordy SRV i TXT zawierające szczegóły wystąpień usługi, takie jak nazwa hosta i port.
  • Rekordy zawierające adresy IP pobranych nazw hostów.

Przed wysłaniem zapytania należy je utworzyć i zainicjować, a następnie dodać komunikat zapytania żądający rekordu DNS. Zapytanie DNS-SD można utworzyć i zainicjować, wywołując funkcję POSIX res_init(). Komunikat dla zapytania można utworzyć, wywołując funkcję POSIX res_mkquery().

Wysyłanie jednoskładnego zapytania DNS

Podczas odnajdowania usługi emisji pojedynczej możesz wysłać zapytanie DNS-SD i pobrać odpowiedź, wywołując funkcję POSIX res_send().

Aby wysłać zapytanie DNS-SD za pośrednictwem linku multicast, aplikacja musi otworzyć gniazdo i wysłać żądanie przez gniazdo na adres IP loopback 127.0.0.1 (port docelowy 53). Po wysłaniu żądania może zostać zwróconych wiele odpowiedzi. Aplikacja powinna zaczekać i odsłuchać kilka sekund, aby zebrać wszystkie odpowiedzi. Jest to wykazane w przykładzie odnajdowania usługi.

Ważne

Ten zapętlony adres IP jest funkcją beta, która zostanie wycofana, a następnie zastąpiona w przyszłych wersjach. Będzie to przełomowa zmiana dla aplikacji, które korzystają z adresu.

Dozwolone połączenia hostów z wieloma adresami IP

Zapora Azure Sphere umożliwia połączenia tylko z jednym adresem IP na nazwę hosta. Jeśli host ma wiele adresów IP, zapora Azure Sphere zezwala tylko na połączenia z jednym z adresów. Aplikacja może używać curl do żądania HTTPS do hosta, który ma wiele adresów IP; curl spróbuje połączyć się z każdym adresem IP do momentu znalezienia dozwolonego adresu. Może to jednak spowodować opóźnienie, gdy aplikacja znajdzie dozwolony adres.