![DNS 是否位于本地网络?](https://linux22.com/image/1382901/DNS%20%E6%98%AF%E5%90%A6%E4%BD%8D%E4%BA%8E%E6%9C%AC%E5%9C%B0%E7%BD%91%E7%BB%9C%EF%BC%9F.png)
对于连接到路由器的本地主机,当本地主机尝试访问外部网站时,路由器中是否有内部 DNS 可以解析 URL 或者会重定向到外部 DNS?
答案1
“这取决于。”
更准确地说,这取决于路由器中是否运行某种类型的 DNS 服务器。一些大型路由器配有完整的 DNS 服务器;其他路由器配有简单的缓存服务器;还有一些路由器根本没有 DNS 服务器。请查看路由器手册,了解路由器配有哪种类型的服务器(如果有)。
如果路由器没有服务器,那么所有 DNS 请求都将被转发到外部 DNS 服务器进行解析(通常由您的 ISP 配置)。
如果您的路由器做如果有 DNS 服务器,它会尝试解析主机名。如果它不知道答案,它会递归地将请求转发到上游更权威的 DNS 服务器,直到得到明确的答案。
答案2
众所周知,当计算机需要将主机解析为 IP 地址时,它需要联系 DNS 服务器来查询主机名(除非它已经以某种方式知道其 IP 地址,即:其hosts
文件中的条目)。这个过程发生得非常快,尽管根据您的网络或网络配置方式,可能会有很多步骤。
默认情况下,当你打开路由器时,它会向你的 ISP 询问 IP 地址,可能使用DHCP 协议。当您的 ISP 的 DHCP 服务器响应时,它不仅会发送分配给您的路由器的 IP 地址,还会发送托管在其网络上的 DNS 服务器列表。现在,您的路由器可以通过查询这些 DNS 服务器将主机名解析为 IP 地址,但是您LAN
路由器后面的计算机怎么办呢?
当你启动计算机时,可能会使用DHCP 协议再次,它会要求输入 IP 地址。您的路由器会响应 IP 地址,但不会发送您的 ISP 的 DNS 服务器,而是发送其自身(其LAN
接口上的 IP 地址)作为它希望您的计算机使用的 DNS 服务器。
现在,当您进入http://google.com
浏览器时,您的计算机需要将主机名解析google.com
为 IP 地址,以便它可以向远程服务器发出请求。为此,它首先检查它是否google.com
最近已解析,以及它是否仍在本地计算机上的某个地方缓存,因为从 RAM 或本地存储中调用 IP 可能比询问 DNS 服务器更快。如果它不再在本地缓存,它会询问路由器的 DNS 服务器。
路由器也会执行相同的过程:如果它google.com
最近已经解析过,它会用缓存的内容响应您的计算机。如果google.com
最近没有解析,它会查询您的 ISP 的 DNS 服务器(即外部服务器)。
直接回答你的问题:是的,当尝试通过主机名浏览网站时,除非您的计算机已经通过其他方式知道了其 IP 地址,否则将查询一些(或许多)外部 DNS 服务器以将该主机名解析为 IP 地址。
注意:以上内容非常简化,应按此方式处理。根据网络和尝试解析主机名的计算机的设置方式,该过程可能有所不同。有关 DNS 和协议工作原理的更多信息,您可以先查看维基百科中有关 DNS 的条目和/或做进一步的研究。
答案3
DNS 系统设计为分布式。每个级别都可以有一个“授权开始”,表示“我定义在此级别发生的事情”。DNS 技巧可以包括负载平衡、故障转移、地理平衡和许多其他有趣的事情。因此,您的路由器绝对没有资格了解互联网上的一切。
因此,它会将您的查询转发到 DNS 协议中定义的其他服务器。您的路由器可能会从配置协议(例如 DHCP)获取要转发的 DNS 服务器,或者您可以手动设置它/它们。
你的路由器可能有 DNS 缓存,所以,比如说,你不会在每个网页上搜索 facebook.com,但这只是一个缓存。它仍然需要访问真实的Facebook 的 DNS 服务器用于填充这些缓存条目。
答案4
DNS 是一份庞大的服务器及其对应 IP 地址列表,会不断更新。据我所知,没有路由器包含这样的服务,因为它需要大量处理和一些内存。您的路由器只是使用它设置的 DNS 服务器来询问。