Bagikan melalui


Melakukan penemuan layanan

Aplikasi tingkat tinggi di Azure Sphere dapat melakukan penemuan layanan dengan menggunakan penemuan layanan DNS (DNS-SD). Aplikasi dapat menggunakan penemuan layanan untuk menemukan layanan jaringan dan melakukan resolusi nama host sehingga mereka dapat berinteraksi dengan layanan melalui firewall Azure Sphere. Multicast DNS (mDNS) juga dapat digunakan untuk melakukan penemuan peer-to-peer di jaringan lokal, yang sangat berguna ketika alamat IP dan nama host titik akhir tujuan tidak diketahui pada waktu desain.

Aplikasi menggunakan kueri DNS-SD untuk mengambil catatan DNS dari server DNS non-lokal atau melalui tautan multicast. Jika nama yang dikueri berada di bawah domain tingkat atas .local (TLD), kueri adalah multicast di jaringan lokal melalui semua antarmuka jaringan yang diaktifkan; jika tidak, penemuan layanan unicast dilakukan. Sampel Penemuan layanan menunjukkan cara melakukan penemuan layanan di Azure Sphere.

Catatan

Firewall Azure Sphere mencegah aplikasi berkomunikasi dengan layanan yang tidak sah. Namun, mengizinkan koneksi keluar ke TD .local dalam manifes aplikasi dapat meningkatkan risiko keamanan pada perangkat dengan mengizinkan aplikasi untuk terhubung dengan layanan yang tidak sah yang diiklankan di jaringan lokal. Aplikasi seharusnya hanya mengizinkan koneksi keluar ke TD .local di lingkungan aman yang mencegah pihak yang tidak sah dari layanan iklan. Untuk memberikan perlindungan tambahan dalam skenario ini, Azure Sphere mengharuskan layanan yang ditemukan di jaringan lokal juga berada di subnet lokal.

Sertakan file header

Aplikasi yang melakukan penemuan layanan harus menyertakan file header resolv:

 #include <resolv.h>

Perbolehkan koneksi layanan

Sebelum menjalankan kueri DNS-SD, Anda harus menambahkan layanan ke kapabilitas AllowedConnections manifes Aplikasi. Firewall Azure Sphere kemudian akan memungkinkan aplikasi untuk tersambung ke instans layanan yang ditemukan menggunakan nama host dan alamat IP yang terkait. Jika layanan .local TLD ditentukan, firewall hanya akan memperbolehkan koneksi untuk menemukan sumber daya pada subnet lokal.

Tipe nama layanan berikut ini didukung dalam kapabilitas AllowedConnections:

  • Nama layanan DNS lokal, seperti "_sample._tcp.local"
  • Nama layanan DNS non-lokal, seperti "_sampleinstance._tcp.dns-sd.org"
  • Nama instans layanan lokal, seperti "_sampleinstance._tcp.hostname.local"
  • Nama domain, seperti "samplehost.contoso.com"
  • Alamat IP

Berikut kutipan dari manifes aplikasi yang menyertakan nama layanan non-lokal.

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

Menjalankan kueri DNS-SD

Untuk melakukan kueri DNS-SD, Anda perlu meminta beberapa tipe catatan DNS:

  • Catatan PTR yang menghitung contoh layanan DNS.
  • Catatan SRV dan TXT yang berisi detail instans layanan, seperti nama host dan port.
  • Catatan yang berisi alamat IP nama host yang diambil.

Sebelum mengirim kueri, Anda perlu membuat dan menginisialisasinya, lalu menambahkan pesan kueri yang meminta catatan DNS. Anda bisa membuat dan menginisialisasi kueri DNS-SD dengan memanggil fungsi POSIX res_init(). Anda bisa membuat pesan untuk kueri dengan memanggil fungsi POSIX res_mkquery().

Mengirim kueri DNS unicast

Saat melakukan penemuan layanan unicast, Anda bisa mengirim kueri DNS-SD dan mengambil respons dengan memanggil fungsi POSIX res_send().

Untuk mengirim kueri DNS-SD melalui tautan multicast, aplikasi harus membuka soket dan mengirim permintaan melalui soket ke alamat IP loopback 127.0.0.1 (port tujuan 53). Setelah permintaan dikirim, beberapa respons dapat dikembalikan. Aplikasi harus menunggu dan mendengarkan selama beberapa detik untuk mengumpulkan semua respons. Hal ini ditunjukkan dalam sampel Penemuan layanan.

Penting

Alamat IP loopback ini adalah fitur Beta yang akan dihentikan lalu digantikan dalam rilis mendatang. Ini akan menjadi perubahan yang merusak untuk aplikasi yang mengandalkan alamat.

Koneksi yang diperbolehkan untuk host dengan beberapa alamat IP

Firewall Azure Sphere hanya memungkinkan koneksi ke satu alamat IP per nama host. Jika host memiliki beberapa alamat IP, firewall Azure Sphere hanya mengizinkan koneksi ke salah satu alamat. Aplikasi dapat menggunakan curl untuk membuat permintaan HTTPS ke host yang memiliki beberapa alamat IP; lengkung akan mencoba menyambungkan ke setiap alamat IP hingga alamat yang diperbolehkan ditemukan. Namun, hal ini dapat menyebabkan keterlambatan saat aplikasi menemukan alamat yang diperbolehkan.