mDNS(멀티캐스트 DNS)란?

프린터나 스마트TV가 이름만으로 자동으로 서로를 찾는 이유, mDNS의 원리를 정리했습니다.

한눈에 보기

mDNS(멀티캐스트 DNS)는 DNS 서버가 없는 같은 네트워크 안에서 기기 이름을 IP 주소로 바꿔 주는 방식이고, DNS-SD는 그 위에서 "어떤 종류의 서비스가 있는가"를 찾아 줍니다. 표준은 IETF의 RFC 6762(mDNS)와 RFC 6763(DNS-SD)이며, 애플의 Bonjour와 리눅스의 Avahi가 이를 구현한 대표적 소프트웨어입니다. 프린터가 목록에 저절로 뜨거나 "이름.local"로 접속되는 일의 상당수가 이 기술 덕분입니다. 이 글은 원리와 한계, 그리고 안 될 때 확인할 점을 정리합니다.

어디서 왔나: Zeroconf에서 RFC까지

위키백과에 따르면 스튜어트 체셔(Stuart Cheshire)는 1997년 애플의 Name Binding Protocol을 IP 망에 맞게 옮기자는 아이디어를 제안했고, 이후 애플에서 mDNS와 DNS-SD 초안을 썼습니다. "설정 없이 연결된다"를 목표로 한 Zeroconf는 자동 주소 배정(IPv4 링크 로컬 169.254.0.0/16), 자동 이름 해석(mDNS), 자동 서비스 찾기(DNS-SD)의 세 요소로 설명됩니다. mDNS는 2000년경 IETF에 처음 제안되었고, 13년 뒤인 2013년에 RFC 6762로 표준 트랙 문서가 되었습니다. 애플은 2002년 8월 이를 "Rendezvous"라는 이름으로 Mac OS X 10.2에 넣었고, 상표 분쟁 끝에 2005년 4월 12일 "Bonjour"로 이름을 바꿨습니다(위키백과 기준).

📡

mDNS(멀티캐스트 DNS)란

별도의 DNS 서버 없이도 같은 네트워크 안의 기기들이 서로의 이름과 주소를 찾을 수 있게 해주는 프로토콜입니다.

보통 도메인 이름을 IP 주소로 바꾸려면 인터넷 어딘가의 DNS 서버에 물어봐야 하지만, 집이나 사무실 안의 프린터·스마트TV·스피커 같은 기기는 별도 DNS 서버를 두기 어렵습니다. mDNS는 이런 로컬 네트워크 안에서 "내 이름은 이것이다"라고 멀티캐스트로 알리고, 다른 기기가 필요할 때 같은 방식으로 질의해 응답을 받는 구조로 DNS 서버 없이도 이름 해석을 가능하게 합니다.

🏠

.local 도메인

mDNS로 찾는 기기들은 일반 도메인과 구분하기 위해 ".local"이라는 특별한 최상위 도메인을 사용합니다.

프린터가 "MyPrinter.local"처럼 이름을 알리면, 같은 네트워크의 다른 기기는 이 이름을 인터넷의 일반 도메인이 아니라 mDNS로 해석해야 한다는 것을 자동으로 인식합니다. .local 도메인은 RFC 6762에서 링크 로컬(같은 링크 안에서만 의미 있는) 이름으로 규정되어 있어 로컬 네트워크 밖으로 나가는 이름이 아닙니다. 다만 사내 DNS에 .local 영역을 따로 만들어 쓰는 환경에서는 충돌이 생길 수 있습니다.

🔁

동작 원리: 멀티캐스트 질의와 응답

기기가 이름을 찾고 싶을 때 특정 멀티캐스트 주소로 질문을 뿌리면, 그 이름을 가진 기기만 응답을 돌려주는 방식으로 동작합니다.

mDNS는 UDP 5353번 포트와 IPv4 멀티캐스트 주소 224.0.0.251(IPv6에서는 ff02::fb)을 사용합니다. 같은 네트워크에 있는 모든 mDNS 지원 기기가 이 멀티캐스트 그룹을 듣고 있다가, 자신에게 해당하는 이름 질의가 오면 자신의 IP 주소로 응답합니다. 질의를 보낸 기기는 이 응답을 캐시에 저장해두고 재사용하며, 필요하면 주기적으로 정보를 다시 확인합니다.

🔍

DNS-SD: 서비스 자체를 찾아주는 기능

mDNS와 짝을 이루는 DNS-SD(DNS 서비스 디스커버리)는 "이 이름을 가진 기기가 어디 있나"를 넘어 "이런 종류의 서비스를 제공하는 기기가 있나"까지 찾아줍니다.

예를 들어 "_ipp._tcp.local"처럼 서비스 종류를 나타내는 이름으로 질의하면, 네트워크 안의 모든 프린터가 응답하면서 자신의 이름과 포트, 부가 정보를 함께 알려줍니다. 이 덕분에 사용자가 프린터의 정확한 이름이나 IP 주소를 몰라도, 앱이나 운영체제가 자동으로 "사용 가능한 프린터 목록"을 보여줄 수 있습니다.

📺

실생활 활용 사례

에어플레이, 화면 미러링, 무선 프린터 자동 검색, 스마트홈 기기 초기 설정 등 "기기를 자동으로 찾아주는" 거의 모든 기능 뒤에 mDNS가 있습니다.

아이폰이 근처의 애플TV를 자동으로 찾아 에어플레이 목록에 띄우거나, 프린터 드라이버 설치 없이도 네트워크 프린터가 목록에 바로 나타나는 것, 스마트홈 앱이 새로 연결한 기기를 자동으로 발견하는 것 모두 mDNS와 DNS-SD 조합이 뒤에서 동작하기 때문입니다. 애플의 구현체는 Bonjour, 리눅스 계열에서는 Avahi라는 이름으로 널리 쓰입니다.

🧩

대표 구현체: Bonjour, Avahi, Zeroconf

mDNS/DNS-SD 표준을 실제로 구현한 소프트웨어를 통틀어 Zeroconf(제로컨피그)라고도 부르며, 애플의 Bonjour와 리눅스의 Avahi가 대표적입니다.

Zeroconf라는 이름은 "설정(configuration) 없이도 네트워크 기능이 동작한다"는 목표에서 왔습니다. 애플은 이 개념을 Bonjour라는 이름으로 macOS와 iOS 전반에 내장했고, 오픈소스 진영에서는 Avahi가 리눅스 배포판에서 같은 역할을 합니다. 윈도우에서도 Bonjour를 포함한 소프트웨어를 설치하면 Bonjour 서비스가 함께 설치되어 동작하는 경우가 있습니다.

⚠️

보안·주의사항

mDNS는 인증 없이 누구나 응답할 수 있는 구조라, 같은 네트워크 안에 있다면 신뢰할 수 없는 기기도 이름 정보를 조작해 응답할 수 있는 위험이 있습니다.

카페나 공항 같은 공용 와이파이에서는 낯선 사람이 같은 네트워크에 있을 수 있으므로, mDNS로 내 기기 이름이나 서비스 정보가 주변에 노출될 수 있다는 점을 유의해야 합니다. 또한 mDNS는 원래 로컬 네트워크 안에서만 동작하도록 설계되었기 때문에, 라우터를 넘어 다른 네트워크 대역까지 전달되지 않는 것이 정상이며 이를 넘기려면 별도의 mDNS 리플렉터 설정이 필요합니다.

mDNS와 일반 DNS 비교

구분일반(유니캐스트) DNSmDNS
질의 대상설정된 DNS 서버 한 곳같은 링크의 모든 기기(멀티캐스트)
주소/포트서버 IP, 보통 UDP/TCP 53번224.0.0.251 또는 FF02::FB, UDP 5353번
이름 범위인터넷 전체 도메인.local (링크 안에서만 유효)
이름 등록관리자가 서버에 등록기기가 스스로 알림, 충돌 시 이름 변경

이름이 겹치면 어떻게 되나: 확인과 충돌 해결

RFC 6762에 따르면 기기는 이름을 쓰기 전에 0~250밀리초 사이의 무작위 시간을 기다린 뒤, 250밀리초 간격으로 3번 "이 이름을 쓰는 기기가 있나"를 묻는 프로빙을 합니다. 충돌하는 응답이 없으면 이름을 알리기 시작합니다. 같은 이름으로 동시에 프로빙한 경우에는 사전순으로 뒤인 데이터가 이기고, 진 쪽은 이름 사용을 멈추고 다시 설정해야 합니다. 그래서 같은 기종 프린터가 두 대면 이름 뒤에 숫자가 붙는 식의 일이 생길 수 있습니다. 응답의 유효 시간(TTL)은 호스트 이름 레코드는 120초, 그 외 레코드는 75분으로 권고됩니다. 그래서 기기를 껐다 켜도 한동안 옛 정보가 남아 있을 수 있습니다.

DNS-SD가 서비스를 찾는 모양

RFC 6763의 서비스 인스턴스 이름은 <인스턴스>.<서비스>.<도메인> 구조입니다. 서비스 종류는 _ipp._tcp처럼 밑줄로 시작하는 두 라벨입니다. 앱은 _ipp._tcp.local에 대해 PTR 질의를 하여 인스턴스 목록을 받고, 각 인스턴스의 SRV 레코드에서 호스트와 포트를, TXT 레코드에서 부가 정보를 얻습니다. RFC 6763은 _services._dns-sd._udp 이름에 대한 PTR 질의로 그 도메인에 광고되는 서비스 종류 목록을 얻는 방법도 규정합니다.

실제 사례

사례 1. 이름 하나가 Rendezvous에서 Bonjour가 된 이유 (제품·상표의 사례)

애플은 2002년 8월 Mac OS X 10.2에서 자동 검색 기능을 Rendezvous라는 이름으로 내놓았습니다. 위키백과에 따르면 TIBCO가 상표 문제로 소송을 제기했고 2004년 7월 합의했으며, 애플은 2005년 4월 12일 이름을 Bonjour로 바꿨습니다. 기술은 그대로이고 이름만 바뀐 사례입니다. 그래서 오래된 문서의 Rendezvous와 지금의 Bonjour는 같은 기술을 가리킵니다. 배울 점은 제품 이름과 표준 이름을 구분하는 것입니다. 표준은 mDNS와 DNS-SD이고, Bonjour는 애플 구현체의 이름입니다.

사례 2. .local 이름과 기존 DNS의 충돌 (설계상 주의점)

위키백과의 mDNS 문서는 기본적으로 .local로 끝나는 이름만 mDNS로 해석되며, .local 이름을 mDNS를 쓰지 않는 호스트가 가진 환경에서는 문제가 생길 수 있다고 경고합니다. 예를 들어 사내 DNS 서버에 .local 영역을 만들어 쓰던 환경에서는 같은 이름이 DNS와 mDNS로 갈릴 수 있습니다(구체적인 실제 장애 사례는 이 글에서 확인하지 못해 싣지 않습니다). 배울 점은 사내 도메인을 새로 정할 때 .local을 피하는 편이 안전하다는 것입니다.

사례 3. 윈도우의 mDNS 지원 (운영체제의 사례)

위키백과에 따르면 마이크로소프트는 윈도우 10부터 mDNS를 구현했고, 버전 1703에서는 프린터나 무선 스피커 같은 기기 검색만 가능했으며 1903 이후에는 호스트 이름 해석도 됩니다. 또 Bonjour 2.0은 윈도우 2000부터 11까지 지원하며 mDNSResponder.exe 서비스로 동작하고 UDP 5353을 쓰므로 일부 방화벽이 막을 수 있습니다. 배울 점은 같은 .local 이름이라도 운영체제 버전에 따라 되고 안 되는 경우가 있다는 것입니다.

안 될 때 확인할 순서

흔한 오해와 정정

한계와 더 알아볼 점

mDNS는 링크 범위에서 설계되어 서브넷을 넘으면 기본적으로 전달되지 않습니다. 사무실처럼 여러 VLAN을 쓰는 환경에서 이를 이어 주는 중계(리플렉터) 기능이 일부 장비·소프트웨어에 있지만, 보안 경계를 느슨하게 만들 수 있어 필요성을 따져 켜야 합니다. 또한 멀티캐스트는 무선망에서 효율이 떨어질 수 있어 장비별 동작이 다릅니다.

일반 DNS의 전체 조회 과정도 함께 보세요

인터넷의 일반 도메인이 IP 주소로 바뀌는 전체 과정이 궁금하다면DNS 조회(질의) 과정 완전정복도 확인해보세요.

스마트홈 프로토콜과의 관계

지그비, Z-Wave 등 스마트홈 기기들이 쓰는 다른 무선 프로토콜이 궁금하다면스마트홈 네트워크 프로토콜 완전정복도 참고해보세요. IP 자동 배정은 DHCP 기초, 망 분리는 VLAN 기초에서 이어 볼 수 있습니다.

자주 묻는 질문

mDNS가 안 되면 어떻게 되나요?

기기가 이름으로 자동 검색되지 않아, 프린터나 스마트TV를 앱·설정 화면에 수동으로 IP 주소를 입력해 등록해야 할 수 있습니다. 공유기의 멀티캐스트 관련 설정이나 AP 격리(클라이언트 격리) 기능이 mDNS 트래픽을 막는 경우가 많으니 확인해볼 필요가 있습니다.

mDNS는 인터넷 없이도 동작하나요?

네, mDNS는 같은 로컬 네트워크 안에서만 동작하므로 인터넷 연결이 끊겨 있어도 같은 와이파이나 공유기에 연결된 기기끼리는 서로 찾을 수 있습니다.

mDNS가 쓰는 포트와 주소는 무엇인가요?

RFC 6762 기준으로 UDP 5353번 포트, IPv4 멀티캐스트 224.0.0.251, IPv6 FF02::FB입니다.

Bonjour와 mDNS는 같은 건가요?

mDNS는 표준 프로토콜이고 Bonjour는 애플이 mDNS와 DNS-SD 등을 묶어 구현한 소프트웨어 이름입니다.

다른 서브넷의 프린터는 왜 안 보이나요?

mDNS는 같은 링크 안에서 동작하도록 설계되어 라우터를 넘지 않는 것이 기본입니다. 직접 IP로 추가하거나 중계 기능 사용을 검토해야 합니다.

.local 대신 쓸 수 있는 이름도 있나요?

mDNS 자체는 .local 이름 해석에 쓰입니다. 사내 DNS 도메인은 별도로 정하되 .local은 피하는 것이 일반적으로 안전합니다.