Clever Castle
423 words
2 minutes
Multicast DNS & DNS-Based Service Discovery (RFC6762 & RFC6763)

查询#

[!info] mDNS的查询有两种类型

  1. one-shot queries of the kind made by legacy DNS resolvers
  2. continuous, ongoing multicast DNS queries made by fully compliant mDNS queriers, which support DNS-Based Service Discovery

one-shot query#

单次查询发送标准dns query到224.0.0.251:5353,这些查询通常使用随机端口(但是不能使用5353端口)。但此查询可以直接采用收到的第一个解析。

continuous query#

最初的两次mDNS查询的间隔时间最少为1秒,之后每次的间隔时间以2的次方增长。当查询间隔达到60分钟时,接下来的查询间隔稳定在60分钟。 mDNS查询必须实现Known-Answer抑制,来确保已经无需重复传递querier已知的答案 当mDNS querier收到的解析包含其有效期(TTL),querier应该在TTL的80-82%, 85-87%, 90-92%, 95-97%再去query,收到结果就不用进行后续的查询。当TTL到期后,如果还没有收到新的结果,就将之前的查询从cache里面删除。

mDNS允许在一个查询中询问多个问题。mDNS使用组播来发送响应,可以使得所有在该网络内的主机都可以看到这些响应,但是有些时候,并不需要这么做。在查询时,可以做一个标记位(nicast-response bit),来表明querier希望得到一个单播的响应。

当一个问题重发了,unicast-response不应该被设置。// todo more detail

当收到一个包含unicast-response标志的问题时,响应者应该发送一个单播packet直接返回给querier。但是如果响应者近期没有多播过这个记录(1/4 该记录的TTL),响应者仍应该多播该条记录。

Multicast DNS & DNS-Based Service Discovery (RFC6762 & RFC6763)
https://blog.ivyxjc.com/posts/multicast-dns/
Author
ivyxjc
Published at
2023-04-09