我开始深入研究 DNS 如何解析名称,但我很难理解使用 cmdlet 时收到的答案Resolve-DnsName。首先,我知道该名称id.madeira.gov.pt是另一个名称的 CNAME(基本上最终指向托管多个站点的 Web 服务器)。运行测试时,我首先使用以下命令询问有关该名称的信息:
\xe2\x9d\xaf Resolve-DnsName id.madeira.gov.pt\n\nName Type TTL Section NameHost\n---- ---- --- ------- --------\nid.madeira.gov.pt CNAME 72 Answer crater.madeira.gov.pt\nRun Code Online (Sandbox Code Playgroud)\n在此测试之后,我很好奇如果我在使用具有先前名称的 cmdlet时指定MX记录类型会发生什么。Resolve-DnsName最初,我确实认为我不应该得到任何响应,因为指定的名称已注册为 CNAME,并且没有与其关联的 MX 条目。然而,事实并非如此……事实上,我最终得到了与之前相同的输出:
\xe2\x9d\xaf Resolve-DnsName id.madeira.gov.pt -Type MX\n\nName Type TTL Section NameHost\n---- ---- --- ------- --------\nid.madeira.gov.pt CNAME 72 Answer crater.madeira.gov.pt\nRun Code Online (Sandbox Code Playgroud)\n我还捕获了与wireshark的交换,这是我收到的响应:
\n\n我没有得到的是为什么当我请求 MX 记录时我在答案部分中得到 CNAME...我的意思是,我的印象是 DNS 回复可以包含“ 3部分”:
\n我假设 cmdlet 工作正常,因此我对 DNS 查询的响应方式做出了错误的假设。谁能帮我理解发生了什么事吗?我的意思是,服务器如何解释这个问题?当您指定Type参数时,您不应该只得到与指定名称和指定记录类型相匹配的答案吗?
谢谢!
\n小智 12
您的描述基本正确,唯一的区别是由 DNS 服务器专门处理,并且此行为在RFC 1034(第 3.6.2 节)CNAME中指定:
CNAME RR 会导致 DNS 软件采取特殊操作。当名称服务器无法在与域名关联的资源集中找到所需的 RR 时,它会检查该资源集是否包含具有匹配类的 CNAME 记录。如果是,则名称服务器在响应中包含 CNAME 记录,并在 CNAME 记录的数据字段中指定的域名重新启动查询。此规则的一个例外是与 CNAME 类型匹配的查询不会重新启动。
基本上,这意味着,如果您请求 MX 记录,但不存在此类记录,则响应将包含原始查询的 CNAME,并且还会查询 CNAME 给出的别名(如果包含 MX 记录),该别名也将是回。
此外,如果某个节点存在 CNAME,则该节点不应存在其他资源记录,因此 MX 无论如何都不应该存在(来自 RFC 的同一部分):
如果节点上存在 CNAME RR,则不应存在其他数据
| 归档时间: |
|
| 查看次数: |
2263 次 |
| 最近记录: |