danbibibi
article thumbnail

mDNS / DNS-SD

mDNS(Multicast DNS)와 DNS-SD(DNS Service Discovery) 관련 개발을 진행하게 되어 관련 내용을 간단하게 정리해보려 한다!

 

mDNS(Multicast DNS) DNS-SD(DNS Service Discovery) 
로컬 네트워크의 다른 기기를 검색하기 위해 논의되고, 개발되어 널리 사용 중
(두 기술은 서로 의존성을 가지고 있지는 않음)
로컬 네트워크에 참여한 호스트를 찾기위해서 멀티캐스팅 하는 것이 핵심 서비스 타입을 기준으로 서비스를 찾는 방식
   
mDNS를 이용하면 로컬 네트워크에 참여한 호스트를 자동으로 찾을 수는 있지만 어떤 종류의 서비스인지는 확인할 수 없다.
하지만, DNS-SD를 이용하면 서비스 타입(service type)을 설정하는 것으로 서비스 검색이 가능하다.

 

Avahi

  • zero configuration networking(zeroconf)의 구현체
  • 리눅스 구현 - avahi , 애플 구현 - bonjour
  • Publication(advertising a service) : 네트워크에 특정 서비스를 제공하는 노드가 참여하면, 이 노드는 자동으로 자신의 서비스를 네트워크에 참여하는 다른 모든 노드에 광고
  • Discovery : 주변에 사용할 수 있는 서비스가 있는지 확인
  • Resolution : 서비스를 제공하는 노드의 이름과 IP 주소, 포트 번호 확인 가능
zero configuration networking(zeroconf)
- 네트워크 설정을 자동으로 처리하여 사용자가 별도의 설정 없이 네트워크에 연결할 수 있도록 하는 기술
- 특히 가정이나 소규모 사무실 환경에서 유용하며, 네트워크 장치들이 서로를 자동으로 발견하고 연결할 수 있게 함
- 주요기능 
1) 주소 할당(IPv4 Link-Local Addressing): DHCP 서버 없이도 IP 주소를 자동으로 할당함
2) 이름 확인(Multicast DNS, mDNS): DNS 서버 없이도 네트워크 상의 장치 이름을 확인할 수 있음
3) 서비스 발견(DNS Service Discovery, DNS-SD): 네트워크 상의 서비스(예: 프린터, 파일 공유 등)를 자동으로 발견하고 연결할 수 있음
DNS vs Avahi
- DNS는 일반 웹 사이트에는 적합하지만 리소스가 제한된 소형 장치에는 적합하지 않음
- 리소스가 제한된 소형 장치에서는 보통 Zero-configuration networking (zeroconf) 같은 더 간단하고 효율적인 네트워크 서비스 발견 메커니즘을 사용
- 이는 장치가 네트워크에 자동으로 연결되고 서비스를 발견할 수 있게 해주며, 별도의 설정이나 관리가 필요하지 않음
- DNS는 인터넷 전체에서 서비스를 찾는 데 사용되는 반면, Avahi는 로컬 네트워크에서 서비스를 자동으로 찾는 데 사용
 

Avahi

Avahi is a free, LGPL implementation of DNS Service Discovery (DNS-SD RFC 6763) over Multicast DNS (mDNS RFC 6762), compatible with Apple Bonjour - Avahi

github.com

 

리눅스에서 Avahi 사용하기

// avahi-deamon 설치
$ apt-get install avahi-daemon

// avahi-utils 설치
$ apt-get install avahi-utils

// avahi-browse 로 서비스 발견(-a 는 모든 서비스 검색을 뜻함)
$ avahi-browse -a
 
// serviceType으로 찾기
$ avahi-browse _serviceType._udp
 
// avahi-browse 로 ip 주소 얻기
$ avahi-browse -alr
 
// 얻은 정보로 ping
$ ping 192.168.1.1 // ip
$ ping TV-3.local // hostname
 
// udp port 확인
# netstat -tuln | grep udp
 
// avahi 설정 파일
$ /etc/avahi/avahi-daemon.conf
 
// avahi 데몬 재시작
$ sudo systemctl restart avahi-daemon
 
// UDP/8080 열려있는지 확인
$ nmap -sU -p 8080 192.168.1.1

 

 

난 api를 사용해서 serviceType과 txtRecords를 등록 후 위와 같이 잘 등록 되었는지 확인했다.

api를 사용하지 않는 경우에는 아래 글을 참고하면 될 것 같다.

 

DNS-SD를 이용한 IoT Local service discovery

Avahi는 LGPL(GNU Lesser General Public License) 기반의 Zeroconf(Zero configuration networ)소프트웨어로 구현체다.Avahi를 이용하면 (mDNS와 DNS-SD 기술을 이용)로컬 네트워크 상에서 서비스와 호스트를 찾거나 등록할

www.joinc.co.kr

 

'프로그래밍 > Linux' 카테고리의 다른 글

[Linux] 파일 이름, 내용 일괄변경  (0) 2024.04.03
[Linux] grep 정리  (0) 2024.03.27
[Linux] sed(Stream Editor) 정리  (0) 2024.03.26
[Linux] 권한 설정 정리 (chown, chmod, chgrp)  (0) 2024.03.20
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로