客户端应用程序如何知道使用IPv4或IPv6?


18

服务器/计算机/用户/应用程序如何知道通过Internet请求IPv6地址和IPv4地址之间的资源?

Answers:


24

客户端确定的第一件事是哪些协议可用。假设IPv4和IPv6均可用(否则选择哪种协议的答案很简单;)然后它将对A(IPv4地址)和AAAA(IPv6地址)记录进行DNS查找。如果仅返回一种类型,则它将使用该类型。如果同时返回了IPv4和IPv6地址,则默认行为在某种程度上取决于客户端软件。通常使用RFC 3484

根据官方标准,它应该更喜欢IPv6,但是由于有些机器(0.01%或更少)的IPv6配置错误,因此客户端变得更加聪明。如今,大多数浏览器都将尝试通过IPv6连接,但是如果它们在300毫秒内没有建立有效的连接,则将尝试并行通过IPv4进行连接。然后使用成功的第一个连接。这在“ 快乐的眼球” RFC中进行了介绍

苹果公司在Lion中对此进行了更改。操作系统实际上在那里跟踪所有连接的性能,并且如果确定IPv4连接的等待时间比IPv6连接的等待时间短,它将开始偏爱IPv4。但是,如果IPv4连接变慢,则可能会切换回IPv6。查看此邮件列表线程以了解此功能。

对于用户而言,只要可以使用IPv4或IPv6都无关紧要。应该同样好地提供IPv4和IPv6。网站在IPv4上的工作方式应与在IPv6等上的完全相同。

IPv4将保留使用多年。一旦仅通过IPv6部署了新服务(网站,游戏等),它将不再可用,因为没有更多新的IPv4地址要使用。在某些时候,所有可以在IPv4上运行的东西也都可以在IPv6上运行。到那时,禁用IPv4将节省时间和金钱(为什么当一个协议足够用时要维护两个协议?)。


1
编写此文档后,RFC 6724已淘汰了RFC 3484 。
迈克尔·汉普顿

如何确定可用的协议?我已经看到了随机行为,apt-get update例如尝试连接到ipv6主机,但是主机本身除了本地链接外甚至没有IPv6地址。
Halfgaar

1
这由源地址和目标地址选择(RFC 6724)处理。在您的情况下,主机似乎看到了DNS中的AAAA记录,选择了目标地址,然后发现它没有可用于该目标的源地址,然后回退到IPv4。
桑德·斯特凡

2

现在正在使用的中间步骤称为隧道。本质上,IPv6数据包在IPv4数据包内传播,直到到达可以剥离IPv4封装并在完整IPv6网络上从另一端发送出去的地步为止。当然,复杂度要高得多,但是总体上来说,基本概念是相同的。

随着越来越多的设备具备IPv6功能,人们对地址的使用也越来越熟悉,IPv6的使用量将会增加。我不认为(个人观点)IPv6会真正被接受,并且在IPv4空间成为昂贵的商品之前,它不会在SMB和个人市场中大规模推广。

在不久的将来的某个时刻,当IPv6为绝大多数流量供电时,我会看到IPv4命运的逆转,在这种情况下,IPv4流量必须封装在常规IPv6数据包中,并且由于以下原因,隧道代理起着类似(但相反)的作用:缺乏广泛的IPv4路由/ IP分配。


1
我不认为这可以解决问题……此外:隧道在核心IPv6互联网中正在迅速消失,因为本地IPv6现在随处可见。将会有一些通往客户的隧道,但这与系统在连接时所做的选择无关。PS:IPv4-over-IPv6隧道已经出现。今年,一些有线互联网运营商正在部署DS-Lite。
桑德·斯特凡

我在一个大型数据中心工作,并且与整个行业都有联系,而我的经验是IPv6 绝对现在还不是处处都是。存在隧道可以弥合差距,并且考虑到大多数最终用户还没有IPv6分配,它仍然很重要。
加勒特2012年

3
确实在使用隧道,但应尽可能避免使用。尚未向客户提供良好的IPv6的ISP并没有完成他们的工作...但是无论如何:问题是客户端应用程序如何在IPv4和IPv6之间进行选择,与网络具有其IPv6连接的方式无关因为那是路由器的工作,而不是客户端应用程序的工作。客户端应用程序仅使用本地网络上可用的任何内容。
桑德·斯特凡2012年

十字军东征,我的朋友。
加勒特

-2

我想您是在问应用程序如何决定选择的方式。从程序方面,它取决于应用程序的实现。例如,如果编码器使IPv6的优先级高于IPv4,则它将首先尝试使用getipv6addr()。如果未配置或失败,则它将尝试使用getaddr()等。基于此,应用程序将首先通过IPv6发送请求,反之亦然。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.