다음을 통해 공유


서비스 검색 수행

Azure Sphere의 상위 수준 애플리케이션은 DNS-SD(DNS 서비스 검색)를 사용하여 서비스 검색을 수행할 수 있습니다. 애플리케이션은 서비스 검색을 사용하여 네트워크 서비스를 찾고 호스트 이름 확인을 수행하여 Azure Sphere 방화벽을 통해 서비스와 상호 작용할 수 있습니다. mDNS(멀티캐스트 DNS)를 사용하여 로컬 네트워크에서 피어 투 피어 검색을 수행할 수도 있습니다. 이는 디자인 타임에 대상 엔드포인트의 IP 주소 및 호스트 이름을 알 수 없는 경우에 특히 유용합니다.

애플리케이션은 DNS-SD 쿼리를 사용하여 로컬이 아닌 DNS 서버 또는 멀티캐스트 링크를 통해 DNS 레코드를 검색합니다. 쿼리되는 이름이 .local TLD(최상위 도메인) 아래에 있는 경우 쿼리는 활성화된 모든 네트워크 인터페이스를 통해 로컬 네트워크에서 멀티캐스트됩니다. 그렇지 않으면 유니캐스트 서비스 검색이 수행됩니다. 서비스 검색 샘플은 Azure Sphere에서 서비스 검색을 수행하는 방법을 보여 줍니다.

참고

Azure Sphere 방화벽은 애플리케이션이 권한 없는 서비스와 통신하는 것을 방지합니다. 그러나 애플리케이션 매니페스트에서 .local TLD에 대한 아웃바운드 연결을 허용하면 애플리케이션이 로컬 네트워크에 보급된 권한 없는 서비스와 연결할 수 있도록 하여 디바이스에 대한 보안 위험을 증가시킬 수 있습니다. 애플리케이션은 권한이 없는 당사자가 서비스를 광고하지 못하도록 하는 보안 환경에서 .local TLD에 대한 아웃바운드 연결만 허용해야 합니다. 이 시나리오에서 추가 보호를 제공하려면 Azure Sphere에서 로컬 네트워크에서 검색된 서비스도 로컬 서브넷에 있어야 합니다.

헤더 파일 포함

서비스 검색을 수행하는 애플리케이션에는 확인 헤더 파일이 포함되어야 합니다.

 #include <resolv.h>

서비스 연결 허용

DNS-SD 쿼리를 수행하기 전에 애플리케이션 매니페스트의 AllowedConnections 기능에 서비스를 추가해야 합니다. 그러면 Azure Sphere 방화벽을 통해 애플리케이션이 연결된 호스트 이름 및 IP 주소를 사용하여 검색된 서비스 인스턴스에 연결할 수 있습니다. .local TLD 서비스가 지정된 경우 방화벽은 로컬 서브넷에서 검색된 리소스에 대한 연결만 허용합니다.

AllowedConnections 기능에서 지원되는 서비스 이름은 다음과 같습니다.

  • 로컬 DNS 서비스 이름(예: "_sample._tcp.local"
  • "_sampleinstance._tcp.dns-sd.org"과 같은 로컬이 아닌 DNS 서비스 이름
  • 로컬 서비스 instance 이름(예: "_sampleinstance._tcp.hostname.local")
  • 도메인 이름(예: "samplehost.contoso.com"
  • IP 주소

다음은 로컬이 아닌 서비스 이름을 포함하는 애플리케이션 매니페스트에서 발췌한 내용입니다.

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

DNS-SD 쿼리 수행

DNS-SD 쿼리를 수행하려면 여러 유형의 DNS 레코드를 요청해야 합니다.

  • PTR 은 DNS 서비스의 인스턴스를 열거하는 레코드를 기록합니다.
  • 호스트 이름 및 포트와 같은 서비스 인스턴스의 세부 정보가 포함된 SRVTXT 레코드입니다.
  • 검색된 호스트 이름의 IP 주소를 포함하는 레코드입니다.

쿼리를 보내기 전에 쿼리를 만들고 초기화한 다음 DNS 레코드를 요청하는 쿼리 메시지를 추가해야 합니다. POSIX 함수 res_init()를 호출하여 DNS-SD 쿼리를 만들고 초기화할 수 있습니다. POSIX 함수 res_mkquery()를 호출하여 쿼리에 대한 메시지를 만들 수 있습니다.

유니캐스트 DNS 쿼리 보내기

유니캐스트 서비스 검색을 수행할 때 DNS-SD 쿼리를 보내고 POSIX 함수 res_send()를 호출하여 응답을 검색할 수 있습니다.

멀티캐스트 링크를 통해 DNS-SD 쿼리를 보내려면 애플리케이션이 소켓을 열고 소켓을 통해 요청을 루프백 IP 주소 127.0.0.1(대상 포트 53)으로 보내야 합니다. 요청이 전송되면 여러 응답이 반환될 수 있습니다. 애플리케이션은 모든 응답을 수집하기 위해 몇 초 동안 기다렸다가 수신 대기해야 합니다. 이는 서비스 검색 샘플에서 설명합니다.

중요

이 루프백 IP 주소는 사용 중지된 후 이후 릴리스에서 대체될 베타 기능입니다. 이는 주소를 사용하는 애플리케이션에 대한 호환성이 손상되는 변경이 될 것입니다.

여러 IP 주소가 있는 호스트에 대해 허용되는 연결

Azure Sphere 방화벽은 호스트 이름당 하나의 IP 주소에 대한 연결만 허용합니다. 호스트에 여러 IP 주소가 있는 경우 Azure Sphere 방화벽은 주소 중 하나에 대한 연결만 허용합니다. 애플리케이션은 curl 을 사용하여 여러 IP 주소가 있는 호스트에 대한 HTTPS 요청을 만들 수 있습니다. curl은 허용된 주소를 찾을 때까지 각 IP 주소에 연결하려고 합니다. 그러나 애플리케이션이 허용된 주소를 찾는 동안 지연이 발생할 수 있습니다.