在 mDNS 中,回复的 PTR 记录和 TXT 记录通常应该放在同一个响应包中。这是因为 mDNS 使用的是基于 UDP 的协议,而 UDP 是无连接的,这意味着发送者无法保证后续的请求和响应会按照特定顺序到达。
理由
原子性:
- 将相关的 DNS 响应(如 PTR 和 TXT)放在同一数据包中,确保客户端能够同时接收到所有与查询相关的信息。
- 如果分开回复,可能会导致信息不一致或丢失。例如,客户端在接收到 PTR 后可能会认为服务已不可用,如果随后才收到 TXT 响应。
效率:
- 在同一个包内返回所有信息减少了网络延迟。只有一次网络往返就可以获得完整的信息,而不是分多次请求和响应。
实现简化:
- 大多数 mDNS 实现都假设这些记录将作为一个整体被处理,将它们组合在一起使得解析变得简单明了。
正确的实践
因此,当你构建 mDNS 响应时,最佳实践是将 PTR 和 TXT 记录放入同一回应数据包中。例如:
- PTR Record: _http._tcp.local. -> device.local.
- TXT Record: device.local. -> { "path=/service", "version=1.0" }
这样做既符合规范,又能保证传递给客户端的信息完整且及时。如果需要返回多个服务实例,可以在同一数据包中返回多个 PTR 和对应的 TXT 记录。
内容由零声教学AI助手提供,问题来源于学员提问