苹果引领IPv6的采用


这是pretty exciting news for the adoption of IPv6。六月,Apple announced所有iOS9应用程序都需要“兼容IPv6。”

因为IPv6支持对于确保您的应用在全球范围内为每个客户服务至关重要,所以我们将其作为应用商店提交要求,从iOS 9开始。

在这种情况下,兼容的这意味着应用程序应该实现NSURLSession类(或者类似的选择),它会将域名转换为AAAA (IPv6)或A (IPv4)记录,具体取决于哪一个可用。

这并不意味着实际的主机名需要成为IPv6。只要所有与域名系统相关的系统调用都是以这样的方式完成的,那么您仍然可以拥有一个只支持IPv4的应用程序允许IPv6(如果可用)。

但为了进一步鼓励IPv6的采用,苹果公司刚刚鼓励其所有应用程序开发人员在适用的情况下使用IPv6:IPv4 networks will get a 25ms penalty compared to IPv6 connections

苹果实现了“Happy Eyeballs,”IETF发布的一种算法,它可以使双栈应用程序(既能理解IPv4又能理解IPv6的应用程序)更好地响应用户,避免IPv6连接或设置不完善的用户所面临的常见问题。

自四年前引入苹果OSX系列以来,苹果公司一直在推动下一个苹果OSX发布版“埃尔卡皮坦”的实施发生实质性变化。


1.查询甲和AAAA的域名解析器。
如果域名系统记录不在缓存中,请求将通过网络被发送回,首先是AAAA。

2.如果我们得到的第一个回复是AAAA,我们会立即发送v6 SYN

3.如果我们得到的第一个回答是A,我们期待一个AAAA,我们启动一个25毫秒的计时器
—如果计时器触发,我们会发出v4同步信号
—如果我们在25毫秒窗口内获得AAAA,我们将继续进行地址选择
[v6ops] Apple and IPv6 — Happy Eyeballs

换句话说:域名系统调用是并行完成的,既有AAAAA记录,也有美国记录。在最高纪录的答案是可接受的至少要等25分钟潜在的对AAAA询问的答复。

RFC6555,描述了快乐眼球算法,指出火狐和铬使用300毫秒的惩罚定时器。


1.调用getaddinfo(),该函数返回按主机的地址首选项策略排序的IP地址列表。

2.使用该列表中的第一个地址(例如IPv6)发起连接尝试。

3.如果连接没有在短时间内完成(火狐和Chrome使用300毫秒),则使用属于另一个地址族(例如,IPv4)的第一个地址发起连接尝试。

4.使用建立的第一个连接。另一个连接被丢弃。
RFC6555

苹果的实施并不像火狐的Chrome那样严格,但它正在有意识地推动IPv6的采用。我想这对我来说是个好消息Belgian app developers, as we’re leading the IPv6 adoption charts

如果你感兴趣,这里有一些我几年前发表的IPv6相关博客;