每次 http 访问都会进行 DNS 查询吗?

每次 http 访问都会进行 DNS 查询吗?

如果我从我的 Web 客户端 (Firefox) 请求 www.yahoo.com。第一个请求是否由网络层发出,通过 DNS 查询获取 wwww.yahoo.com 的 IP 地址?但是,在我的 URL 中,我刚刚说了获取http://www.yahoo.com。为什么在获取数据之前,网络层会先智能地获取 yahoo.com 对应的 IP?网络层如何知道 DNS 服务器的 IP?因此,这意味着虽然我要求获取 yahoo.com,但它内部会智能地通过调用 DNS 服务器从 URL 中获取 IP 地址?这怎么可能?请解释一下,我在这里很困惑。

答案1

看来你理解正确。

来自 Web 浏览器的 HTTP 请求被打包成 TCP 段,而这些 TCP 段又被打包成 IP 数据报。数据报开头的 IP 标头需要有源 IP 地址和目标 IP 地址——数字 IP 地址。无法将服务器的主机名(即其完全限定域名或 FQDN,如“www.yahoo.com”)作为 IP 标头中的目标地址。IP 标头中的目标地址只能是数字 IP 地址。

您的计算机知道一个或多个 DNS 服务器的 IP 地址,因为您手动输入了该地址,或者该地址通过某些协议(例如 DHCP 或 PPPoE)自动设置。它是互联网连接的计算机在互联网上正常工作所必须具备的少数配置信息之一。

因此,当您将 Web 浏览器指向 URL 时,浏览器会解析该 URL 以查找主机名,然后向 DNS 服务器的 IP 地址发送 DNS 查询,以便将该主机名转换为 IP 地址。一旦浏览器收到 DNS 查询的答案,它就可以创建所需的 HTTP-in-TCP/IP 数据包,以将其第一个 HTTP 请求发送到服务器。

客户端计算机上的 DNS 查询软件(有时称为“DNS 解析器”软件)会在一段时间内缓存 DNS 答案,因此如果您花大量时间浏览同一个网站,则不会对同一网站上的每次点击都进行 DNS 查询。您只需在浏览器第一次需要该网站的内容时进行一次查询,然后您的机器会记住其 IP 地址几分钟到几小时。

答案2

当您的 ISP 为您的调制解调器/路由器分配 IP 地址时,您就成为 ISP 网络的一部分。您的 ISP 将 IP 地址分配给广域网网络接口,该接口需要知道如何将您生成的网络数据包路由到互联网。

因此,一般来说,当您的调制解调器有 IP 地址时,它知道 ISP 默认网关来将数据包路由到互联网。这意味着它知道如何将域转换为 IP。

当你在浏览器上打开一个 URL 时,你已经有一个 IP 地址了,这个过程就像你描述的一样。首先浏览器会询问你请求的 FQDN 的 IP 地址,然后 TCP 会继续将数据从服务器传输给你。

答案3

第一个问题的简短回答是“是”。其余的问题无法用简短的回答很好地解释。有一本书解释了 DNS 解析的工作原理。请查找这本​​书DNS 和 BIND奥莱利的网站。或者您最喜欢的书商网站。前两章在约 100 页中解释了您要询问的内容。

相关内容