mDNS, DNS-SD - Discovery 문제 IGMP를 확인하자 기술 이야기 2020. 6. 25. 00:31

mDNS는 Multicast DNS라는 기술이고, DNS-SD는 DNS Service Discovery라는 기술이다. 둘다 로컬 네트워크의 다른 기기를 검색하기 위해 논의되고, 개발되어 널리 사용 중이다. 대표적으로 구글 크롬캐스트가 mDNS를 사용중인데, 사실 나는 크롬캐스트의 시나리오를 차용하고 싶어서 알아보다가 알게되었다. 널리 익숙하게 사용되는 방식은 그 자체만으로도 큰 가치가 있다고 생각한다.

Chromecast#Device_discovery_protocols

거기 누구 없소?

로컬 네트워크에서 다른 기기를 검색하는 일은 매우 중요하다는 것은 알았지만, 그 동안 어떤 일이 있었는지 잘 몰랐다. 사실 아직도 잘 모른다. 다만, 오랜 시간이 지나서야 Window나 Mac, Android 구분 없이 거기 누구 없는지 쉽게 찾을 수 있는 방법이 자리 잡았다는 사실을 몇몇 글에서 읽을 수 있었다.

여전히 잘 모르고, 이미 잘 설명된 글이 있으므로 여기에 그 글을 소개한다. 근거리 네트워크에서 기기를 찾기 위한 방법. 누구의 블로그인지는 모르지만 Backend 쪽 개발자 분이 아닌가 싶다. 구글에서 안내해서 종종오게되는 좋은 글이 많다.ㅎ

mDNS vs DNS-SD

mDNS는 로컬 네트워크에 참여한 호스트를 찾기위해서 멀티캐스팅하는 것이 핵심이다. 반면, DNS-SD는 서비스 타입을 기준으로 서비스를 찾는 방식이다. 두 기술을 함께 사용하면 좋지만, 서로 의존성을 가지고 있지는 않다. 두 기술의 구현체로 Avahi 아바이? 아바이 순대?? 라는 소프트웨어가 있는데, 잘 설명해 놓은 글이 여기 있다.

mDNS를 이용하면 로컬 네트워크에 참여한 호스트를 자동으로 찾을 수 있다. 하지만 어떤 종류의 서비스인지는 확인할 수 없다. 예컨데 로컬 네트워크에서 프린트 서버를 찾거나 오디오 서버, (TV 와 같은)멀티미디어 기기 등을 찾으려고 한다면 호스트 이름만으로는 찾는데 어려움이 있다. DNS-SD를 이용하면 서비스 타입(service type)을 설정하는 것으로 서비스 검색이 가능하다.

DNS-SD on Android and Tizen

윈도우나, 우분투에서 사용할 수 있는 프로그램도 많지만, 앱에서도 쉽게 사용할 수 있도록 안드로이드에서도 API를 제공한다. Android 네트워크 서비스 검색 사용

그리고, 타이젠에서도 API를 제공한다. Network Service Discovery

간단한 API이고, 샘플앱도 있어서 쉽게 사용해 볼 수 있었다.

공유기 IPTV - IGMP 설정

어랏...근데, 검색이 안되네. 검색 안된다는 글은 되게 많은데,...뭐? IGMP 설정?

android-nsd-onservicefound-not-getting-called

The API currently supports DNS based service discovery and discovery is currently limited to a local network over Multicast DNS.

아, mDNS가 지원되는 Network 환경이 따로 있구나. 그게 뭐지? IGMP!!!

To send in multicast, a protocol called IGMP is used.

igmp-and-multicast

IGMP에 대해서 더 자세히 설명해 둔 국문 포스트도 있다. 넷마니아스라는 곳의 글인데, 리스펙! IPTV 서비스를 위한 IGMP Snooping

IGMP와 IPTV에 대해서, 그리고 mDNS에 대해서 조각이 다 맞춰지는 순간이었다!