Skip to content

Latest commit

 

History

History
248 lines (161 loc) · 9.42 KB

File metadata and controls

248 lines (161 loc) · 9.42 KB

English | 中文版

MDNS协议

[TOC]

概述

MDNS用于本地网络服务和主机发现,基于UDP协议,域名以.local结尾,使用组播:IPv4地址224.0.0.251或IPv6地址ff02::fb,端口5353。

每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个包含域名和ip的消息,然后其他有mdns服务的主机就会响应。

当然设备需要服务时,使用mdns 查询域名对对应的ip地址,对应的设备收到该报文后同样通过组播方式应答;此时其他主机设备也是可以收到该应答报文,其他主机也会记录域名和ip 以及ttl 等,更新缓存。

MDNS协议

RR类型

RR类型 参考 描述和目的
1 A [RFC1035] IPv4地址记录(32位IPv4地址)
2 NS [RFC1035] 名称服务器;提供区域授权名称服务器的名称
5 CNAME [RFC1035] 规范名称;讲一个名称映射为另一个(提供一种形式的名称别名)
6 SOA [RFC1035] 授权开始;为区域提供授权信息(名称服务器,联系的电子邮件地址,序列号,区域传输计时器)
12 PTR [RFC1035] 指针;提供地址到(规范)名称的映射;在in-addr.arpaip6.arpa域中用于IPv4和IPv6的逆向查询
15 MX [RFC1035] 邮件交换器;为一个域提供电子邮件处理主机的名称
16 TXT [RFC1035]
[RFC1464]
文本;提供各种信息(如,与SPF发垃圾邮件方案一起使用以识别授权电子邮件服务器)
28 AAAA [RFC3596] IPv6地址记录(128位IPv6地址)
33 SRV [RFC2782] 服务器选择;通用服务的传输终点
35 NAPTR [RFC3403] 名称授权指针;支持交替的名称空间
41 OPT [RFC2671] 伪RR;支持更大的数据报,标签,ENDS0中的返回码
251 IXFR [RFC1995] 增量区域传输
252 AXFR [RFC1035]
[RFC5936]
完全区域传输;通过TCP运载
255 (ANY) [RFC1035] 请求任意记录

结构

mdns基于dns,协议结构包含报头报文2部分;

dns协议结构

  • 报头

    mdns报头

    报文头长12字节,以下是每个字段解释:

    • ID: 标识符,16bit
    • QR: 请求/应答标识符,1bit
      • 0: 请求
      • 1: 响应
    • OPCODE: 查询类型,4bit
      • 0: 标准查询
      • 1: 逆向查询
      • 2: 查询服务状态
      • 3: 保留
      • 4: 通知
      • 5: 更新
      • 6~15: 保留baob
    • AR: 仅应答才设置为1,1bit
    • TC: 截断标志,1bit
    • RD: 可选项,标识要求递归与否,1bit
    • RA: 表示应答服务器可以执行递归查询,1bit
    • Z: 保留,必须为0,3bit
    • AD: 真实数据,1bit
    • CD: 禁止校验,1bit
    • RCODE: 仅在DNS应答时才设置,4bit
      • 0: 无错误
      • 1: 格式错误
      • 2: 严重失败
      • 3: 名字错误
      • 4: 没有实现
      • 5: 拒绝
      • 6~15: 保留
    • QDCOUNT: 查询段数量,16bit
    • ANCOUNT: 回答段数量,16bit
    • NSCOUNT: 授权段数量,16bit
    • ARCOUNT: 附加段数量,16bit
  • 报文

    • 查询段
变量名 描述 长度(bit)
QNAME 查询的域名 变长
QTYPE 查询资源记录类型(RR) 16
QCLASS 查询类 1.表示互联网... 16

例:

mdns查询请求

  • 应答段
变量名 描述 长度(bit)
Name 查询的域名 变长
Type 查询资源记录类型(RR) 16
Class 查询类 1.表示互联网... 16
Time to live (TTL) RR可以被缓存的秒数 32
RDLength DATA字段的字节数 16
RDATA
Address
数据字段
地址
变长
变长

例:

mdns查询返回

  • 授权段
变量名 描述 长度(bit)
Name 域名:
Service
Protocol
Name
变长
Type 查询资源记录类型(RR) 16
Class 查询类 1.表示互联网... 16
Time to live (TTL) RR可以被缓存的秒数 32
Data length DATA字段的字节数 16
Data:
Priority
Weight
Port
Target
DATA字段:
优先级
权重
端口
目标
变长:
16
16
16
变长

授权段示例

  • 附加段

结构同应答段一致。

附加段示例

MDNS流程

  • 域名发现:
发起查询的主机->组224.0.0.251: 发送 mDNS 组播报文,提供自己的name
组224.0.0.251->被查询的主机: 组播消息
被查询的主机->发起查询的主机: 发送回应 mDNS 报文,内容包括自己的域名
  • 域名查询:
发起查询的主机->组224.0.0.251: 发送 mDNS 组播报文查询带.local后缀的域名
组224.0.0.251->被查询的主机: 组播消息
被查询的主机->组224.0.0.251: 发送回应 mDNS 报文,内容包括自己的主机名和 IP 地址
组224.0.0.251->发起查询的主机: 得到结果
  • 注册(通告)服务:

相关命令

dns-sd

  • -A

    测试使用多播 DNS 注册服务,并测试使用多播 DNS 的 DNS 记录的添加、更新和删除操作。

  • -U

    测试使用多播 DNS 注册服务,并测试为使用多播 DNS 注册的服务更新 DNS TXT 记录。

  • -N

    测试为使用多播 DNS 注册的服务添加大型 NULL 记录。

  • -T

    测试为使用多播 DNS 注册的服务添加大型 TXT 记录。

  • -M

    测试创建具有多个 TXT 记录的注册。

  • -I

    测试注册并立即更新 TXT 记录。

  • -R

    在给定name和type的指定域中注册(通告)服务,在当前计算机的指定port上侦听。

    格式:dns-sd -R name type domain port <TXT>...

    • name

      服务名,合法 unicode 字符串(包括没有任何限制的点、空格、斜杠、冒号等),其最大长度是 63 个 UTF-8 字节。

    • type

      格式必须为 应用程序协议名称._tcp应用程序协议名称._udp类型。

    • domain

      要注册服务的域名,以.local结尾

    • port

      服务侦听的端口号

    • 文本内容,key-value类型

    例:

    dns-sd -R "my test" _http._tcp han.local 10086 path=/main.html
  • -B

    浏览 domain 中 type 服务的实例。

    例:

    dns-sd -B _http.tcp
  • ...

参考