mDNS与DNS-SD以及在Matter中使用 - FreeBuf网络安全行业门户

十二月 22, 2025 [网络与安全] #obsidian #协议与标准 #安全 #网络

mDNS与DNS-SD以及在Matter中使用 - FreeBuf网络安全行业门户

原文链接:https://www.freebuf.com/articles/network/404855.html

一、mDNS

多播DNS(Multicast DNS,简称mDNS)是一种用于局域网(LAN)内设备自动进行域名解析的协议。它在没有中央DNS服务器的情况下,允许设备自我注册和查询主机名、IP 地址等信息。mDNS 使用与标准DNS相同的报文格式。mDNS通常和DNS-SD一起使用,用于服务发现和名称解析。

工作原理

mDNS使用IP组播(Multicast)技术,通过发送DNS查询和响应报文来实现主机名到IP地址的解析。mDNS使用固定的IPv4多播地址224.0.0.251和IPv6多播地址FF02::FB,在UDP端口5353上进行通信。以下是mDNS的工作步骤:

  1. 启动和自注册: 每个设备启动时,会选择一个主机名(如 "hostname.local")并通。过向mDNS的组播地址发送查询请求,询问这个主机名是否已经存在。如果没有冲突,设备就会使用这个主机名注册自己。
  2. 冲突检测和名称分配: 如果已有设备使用相同的主机名,新设备需要尝试不同的名称,直到选定一个唯一的主机名。
  3. 名称解析: 当设备需要解析某个主机名的IP地址时,它会发送一个mDNS查询报文到局域网内的多播地址,所有接收到报文的设备都会检查查询的主机名是否匹配。如果匹配,它们会回复一个响应报文,包含相应的IP地址信息。

示例

设备自注册

假设设备1自注册其主机名"device1.local"。

  1. 设备1发送查询报文,检查是否有其他设备使用同样的主机名:

    QUERY:
    Name: device1.local
    Type: ANY
    
  2. 如果没有设备回复该查询,设备1将自己的主机名 "device1.local" 和IP地址进行自注册

名称解析

设备2在网络中查询 "device1.local" 的IP地址:

  1. 设备2发送查询报文,查找 "device1.local" 的A记录:

    QUERY:
    Name: device1.local
    Type: A
    
  2. 设备1收到查询后,发送响应报文:

    ANSWER:
    Name: device1.local
    Type: A
    Address: 192.168.1.2
    

实现

典型的mDNS实现包括:

二、DNS-SD

DNS-SD(DNS-Based Service Discovery,即基于DNS的服务发现)是一个网络协议框架,它基于mDNS实现。DNS-SD主要用于在本地网络中自动发现并使用网络服务,如打印机、文件共享、媒体播放等。

工作原理

DNS-SD借助于多播DNS(mDNS),在本地网络内进行服务的发现和发布。以下是DNS-SD的基本工作原理:

  1. 服务注册: 服务提供者自注册。该信息通常包括服务名称、类型(如 "_http._tcp")、端口号、及其他附加参数。
  2. 服务发现: 客户端在本地网络中查询特定类型的服务。例如,客户端广播一个查询,想找到所有的 "_http._tcp" 服务。其它设备收到这个查询后,会响应其提供的服务信息。
  3. 服务解析: 客户端在发现服务后,可以进一步解析获取具体的服务细节。例如,从服务名称解析出具体的 IP 地址和端口号。

DNS-SD 记录类型

DNS-SD 中采用了多个特定的 DNS 记录类型来进行服务的发现和信息传递:

限制

使用场景

DNS-SD 被广泛应用于各种需要自动发现网络服务的应用环境,如家庭网络、办公室局域网、多媒体设备连接等。例如:

示例

下面通过一个示例详细描述Matter协议中如何使用DNS-SD进行服务发现和解析。如果Matter设备可以预先接入局域网,并且没有提供蓝牙、Thread等模式,那么就只能通过DNS-SD进行设备发现。

1. 服务注册

假设一个Matter设备注册其服务信息,服务类型为"_matter._tcp"。为了便于理解,以下描述仅为了展示流程,实际上Matter使用DNS-SD会比下面的描述要复杂,字段里面会含有更多的信息,实际流程是一样的:

PTR记录:

_matter._tcp.local. IN PTR Device-1234._matter._tcp.local.

SRV记录:

Device-1234._matter._tcp.local. IN SRV 0 0 5555 Device-1234.local.

TXT记录:

Device-1234._matter._tcp.local. IN TXT "model=abc123" "version=1.0"

A/AAAA记录:

Device-1234.local. IN A 192.168.1.100 Device-1234.local. IN AAAA fe80::1

2. 服务发现

客户端设备发送DNS-SD查询,寻找服务类型为"_matter._tcp"的设备:

3. 服务解析

客户端解析服务实例"Device-1234._matter._tcp.local.":

DNS-SD在Matter中的优点

  1. 即插即用:无需预配置,设备可自动广播和发现服务。
  2. 跨厂商互操作性:基于标准的DNS协议,确保不同厂商设备之间的互操作性。
  3. 动态更新:支持设备上线、下线时动态更新服务信息。