当我在 URL 栏中输入完全限定域名 (FQDN) 时,浏览器会连接到某个映射表(该表存储在哪里?在服务提供商处?),该表确定所请求的文件的托管位置。
因此,是否支持 IPv6 地址取决于服务提供商(我假设他们有转换表)。是这样的吗?
答案1
由于这个被标记为 iptables,我认为这是一个 Linux 问题。
在 Linux 上,glibc 会决定程序对于给定的主机名是先查找 IPv6 地址 (AAAA) 还是 IPv4 地址 (A)。使用 glibc 的程序使用 getaddrinfo() 函数。getaddrinfo() 的行为在 /etc/gai.conf 中配置。
在您的系统上,/etc/gai.conf 中的所有内容很可能已被注释掉。取消注释以下条目:
标签 ::/0 1
对我来说,这导致激活了 AAAA 优先查找,因此优先查找 IPv6 地址。所以这可能是你想要的。
更新以添加:正确的方法似乎是取消注释 gai.conf 中整个“标签”块,其值从 0 到 7:
label ::1/128 0
label ::/0 1
label 2002::/16 2
label ::/96 3
label ::ffff:0:0/96 4
label fec0::/10 5
label fc00::/7 6
label 2001:0::/32 7
答案2
IPv4 地址通过 DNS(域名系统)中的 A(地址)记录映射到域名。IPv6 地址使用 AAAA 记录进行映射。看起来很奇怪?IPv4 地址是 32 位,IPv6 是 128 位。128 / 32 = 4,因此 AAAA / A 也 = 4。设计 DNS 中 IPv6 条目的人耍了一个聪明的花招。
DNS 是整个互联网上的分层分布式系统。您的浏览器将调用系统库,从而启动查找链。它会首先检查其本地缓存(通常存储在内存中)。接下来,它会查找磁盘并查看 HOSTS 文件(大多数 UNIX/Linux 上的 /etc/hosts 和 Windows 上的 C:\Windows\System32\drivers\etc\HOSTS)。然后,如果它仍然找不到答案,它会根据您的网络配置调用您指定的 DNS 服务器。
该 DNS 服务器检查其缓存,缓存要大得多。如果匹配,它会返回答案。如果找不到答案,它会转而询问由 ISP 的 ISP 运行的更高级别的 DNS 服务器。此过程一直持续,直到您到达根名称服务器a.root-servers.net
。m.root-servers.net
大多数 DNS 查询在到达根名称服务器之前很久就得到解决,但有时有一两个查询会到达根名称服务器。但是,当找到答案时,它会沿着该链直接传递回您的浏览器。
但是你的浏览器怎么知道哪个请求哪种记录类型?这取决于您的系统设置。如果您将其设置为 IPv4 堆栈优先,那么您的浏览器将仅在其 DNS 查询中请求 A 记录。如果是 IPv6,它将首先请求 AAAA 记录,然后返回到 A 记录。
还有其他记录类型。MX 记录定义域的邮件服务器的位置。NS 记录定义域的名称服务器。SRV 记录告诉您特定服务(例如 SSH 或 Web)的位置。
DNS 实际上是互联网的电话簿。
答案3
查找将由您的 DNS(也可能是您的本地 hosts 文件)处理。特定名称是否解析为 IPv6 或 IPv4 地址取决于您的浏览器设置(它是否支持 IPv6 并是否发送 IPv6 AAAA 请求)、您的操作系统(您是否甚至有 IPv6 堆栈等)和您的 DNS 提供商(他们是否支持 AAAA(IPv6)请求)。
浏览器问题变得更加复杂,因为有些(较旧的)浏览器从不发出 AAAA 查找请求,有些可以配置为不发送它们(Firefox 有此项设置),但大多数现代浏览器首先发送 AAAA 请求,然后再发送 A 请求。