![客户端应用程序如何知道使用 IPv4 还是 IPv6?](https://linux22.com/image/1308979/%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E4%BD%BF%E7%94%A8%20IPv4%20%E8%BF%98%E6%98%AF%20IPv6%EF%BC%9F.png)
服务器/计算机/用户/应用程序如何知道使用 IPv6 地址而不是 IPv4 地址通过 Internet 请求资源?
答案1
客户端首先要确定的是哪些协议可用。我们假设 IPv4 和 IPv6 都可用(否则选择哪种协议的答案就很简单了;)然后它将对 A(IPv4 地址)和 AAAA(IPv6 地址)记录进行 DNS 查找。如果只返回一种类型,那么它将使用该类型。如果同时返回 IPv4 和 IPv6 地址,则默认行为取决于客户端软件。通常RFC 3484用来。
根据官方标准,它应该优先使用 IPv6,但由于有些(0.01% 或更少)机器的 IPv6 配置有误,因此客户端变得更加智能。如今,大多数浏览器都会尝试通过 IPv6 进行连接,但如果它们在 300 毫秒内没有获得有效的连接,它们将同时尝试通过 IPv4 进行连接。然后使用第一个成功的连接。这在快乐眼球 RFC。
Apple 在 Lion 中改变了这一点。操作系统实际上会跟踪所有连接的性能,如果它确定 IPv4 连接的延迟低于 IPv6 连接,它将开始优先使用 IPv4。但如果 IPv4 连接变慢,它可能会切换回 IPv6。看看此邮件列表主题讨论此功能。
对于用户来说,使用 IPv4 还是 IPv6 并不重要,只要能用就行。IPv4 和 IPv6 应该提供同等的服务。网站在 IPv4 和 IPv6 上的运行应该完全相同,等等。
IPv4 在未来很多年内仍将使用。一旦新服务(网站、游戏等)仅通过 IPv6 部署,它将变得不可用,因为没有更多新的 IPv4 地址可用。在某个时候,所有在 IPv4 上运行的东西也将在 IPv6 上运行。到那时,禁用 IPv4 将节省时间和金钱(如果一个协议就足够了,为什么要维护两个协议?)。
答案2
现在使用的中间步骤称为隧道。本质上,IPv6 数据包在 IPv4 数据包内传输,直到到达可以剥离 IPv4 封装并在完整 IPv6 网络上从另一端发出的点。当然,这要复杂得多,但基本概念总体上是相同的。
随着越来越多的设备支持 IPv6,人们越来越熟悉如何使用这些地址,IPv6 的使用率将会增加。我认为(个人观点)在 IPv4 空间成为昂贵的商品之前,IPv6 不会真正受到欢迎,也不会在中小企业和个人市场大规模推广。
在相当遥远的未来,当 IPv6 为绝大多数流量提供支持时,我可以看到 IPv4 的命运发生逆转,其中 IPv4 流量必须封装在常规 IPv6 数据包中,并且由于缺乏广泛的 IPv4 路由/IP 分配,隧道代理发挥着类似(但相反)的作用。
答案3
我想您问的是应用程序如何决定如何选择。从程序方面来看,这取决于应用程序实现。例如,如果编码器将 IPv6 的优先级设置为高于 IPv4,它将首先尝试使用 getipv6addr()。如果未配置或失败,则它将尝试使用 getaddr() 等。基于此,应用程序将首先通过 IPv6 发送请求,反之亦然。