Web 浏览器如何确定何时使用 IPv4 或 IPv6 连接到目标?

bey*_*ddc 3 dns web ipv6 ipv4

我看到了一些关于这个主题的相关帖子: 客户端应用程序如何知道使用 IPv4 或 IPv6?以及 如何知道您的浏览器是否连接到网站的 Ipv4 或 Ipv6 地址?

第一个帖子已经有几年了,所以我不确定它是否仍然相关,第二个没有回答我的问题。

我问的原因是我安装了pi孔来帮助阻止广告。我将我的路由器设置为使用 pi-hole 作为我的 IPv4 DNS 服务器,但是在浏览 CNN 等网站时我仍然看到广告。然后我意识到我的 ISP 提供商 (Comcast) 提供了两个 IP 地址,一个 IPv4 和一个 IPv6,我的路由器也支持 IPv6。

当我在网卡上手动禁用 IPv6 时,当我浏览 CNN 网站时,广告就会停止显示。因此我得出结论,我使用 IPv6 连接到 CNN 网站。我的问题是 Web 浏览器何时决定使用 IPv4 或 IPv6 连接到目标?是否只是首先尝试使用 IPv6,如果成功则使用它,否则回退到 IPv4?

附带说明,显然 Arris SBG6700-AC 调制解调器/路由器只允许您配置 IPv4 DNS 服务器,而不允许配置 IPv6 DNS 服务器。要指定您自己的 IPv6 DNS 服务器,我必须从计算机本身进行设置。

use*_*686 14

第一:您如何解析主机名与您可以将其解析为哪个地址无关。当通过 IPv4 询问时,DNS 服务器完全能够返回 IPv6 AAAA 记录,反之亦然。

至于浏览器如何选择要尝试的地址:您链接到的第一篇文章仍然相关,唯一改变的是次要的优先级调整。

  • 大多数现代浏览器都使用Happy Eyeballs算法;他们一次尝试所有地址,并坚持使用回复最快的地址。这完全在应用程序中实现,不受操作系统的影响。(请注意,有时会对该算法进行调整,以便为 IPv6 或 IPv4 提供先机,以防它们都给出相似的结果。)

  • 较旧的浏览器和许多其他程序会一个一个地尝试所有地址,并根据默认地址选择算法进行排序,该算法通常更喜欢本机 IPv6 而不是本机 IPv4 而不是自动 v6 隧道。这种排序通常在操作系统中实现(例如 gai.conf),并且程序不会手动对地址进行排序。