而IETF所面临的问题是,尽管IPv4与IPv6有某种家族相似性,但是二者之间还是有本质区别的:IPv4使用的是32位地址,而IPv6使用的则是128位地址。那么你怎样才能使你的仅有IPv4地址的系统与仅有IPv6地址的系统进行交流呢?
by Iljitsch van Beijnum
其实很简单:你把数据包翻译过来不就结了么?IETF几年前就在实施一项名为SIIT(Stateless IP and ICMP Translation)的项目,目的就是实现IPv4向IPv6的过渡。但是,SIIT面临的一个最大问题是:一一对应问题。
这就造成了两方面的问题:将来不会有足够的IPv4地址来使用(这就是我们吧IPv6放在首位的原因),所以在IPv6-to-IPv4这个问题上,必须是对个系统共用一个IPv4地址。这相对来说是比较容易实现的:只需实用SIIT,然后定期的对IPv4进行网络地址转换。NAT-PT(Network Address Translation-Protocol Translation)使用的就是这项技术,NAT-PT把SIIT协议转换技术和IPv4网络中动态地址转换技术(NAT)结合在一起,它利用了SIIT技术的工作机制,同时又利用传统的IPv4下的NAT技术来动态地给访问IPv4节点的IPv6节点分配IPv4地址,很好地解决了SIIT技术中全局IPv4地址池规模有限的问题。
完美的NAT-PT系统应该是对大部分网络而言,你只需要简单的在IPv6和IPv4之间制定一些规则,网络就能很好的工作。对某些协议,像FTP,VoIP,或者点对点应用将会拒绝,因为当一个IPv6系统通告IPv4主机她的IPv6地址时,IPv4主机将无法使用IPv6地址。归根到底,欺骗DNS的方式并不是IETF推荐的方式,所以,NAT-PT最终被宣布成为历史,不再推荐使用。
我一直在参与NAT64的提案,其他诸如NAT6和SNAT-PT都与NAT-PT一样存在不同程度的缺憾。举例来说:如果主机实施的是DNSSEC安全DNS协议,他显然不会接受合成的IPv6地址虚假记录。但是,主机可以修改在履行DNSSEC验证之后,创建自己的地址。
从SIIT和NAT-PT规定到现在的十年时间里,IETF在NAT方面做了大量的工作,特别是在NAT设备如ICE,STUN和TURN和点对点的应用等方面。他们大部分都可以被应用在IPv6-to-IPv4 NATs和IPv6点对点应用(如果不是NAT,他们必须要能够绕过放过墙)。所以即使需要对IPv6主机做一些性能上的提升,就这一问题还是能达成一个合理的规范的。
但是还有一个问题就是IPv4客户端与IPv6服务器之间的对话。虽然转换可以在很多相似的地方实施,但问题是:在低端不可能将128位的IPv6地址编码城32位的IPv4地址去响应一个虚假的DNS。在蒙特利尔会议上有相当多的讨论是关于是否有解决IPv4客户端到IPv6服务器问题的其他方式。现在,能运行IPv6的服务器是也可以运行IPv4的,但在因特网上还是有许多只运行IPv4的服务器。但是,像美国军方这样的大用户表示,他们将来有能力解决IPv4客户端到IPv6主机之间的问题。
这个问题我们遗留下来看能否做出一个折中的方案来解决两边的问题,要么尽快拿出一个IPv6-to-IPv4的方案要么就花一点时间来解决IPv4-to-IPv6的问题。
另一个有趣的方法是Dual Stack Lite(不是拼写错误,是实际名称)。它是基于这一观点的:如果你在一个IPv6网络上提供进行过网络转换的IPv4隧道连接,无论(否则)只运行IPv6的主机或者是主机只能运行IPv4的都可以连接目的地为IPv4的主机。DS-Lite的巧妙之处在于虽然通常IPv4的数据包被IPv6主机或者仅对IPv4服务的家庭路由器的转发是通过隧道方式进行的,但是ISP网络处的网络地址转换盒子关心的只是来自IPv6的数据包,所以所有的主机都是用地址192.168.0.1是没有问题的。有趣的是,这使得发生在这个网络地址转换盒的“运营商级的NAT ”(用DS -Lite的说法)几乎是NAT64由转换的。IETF已经决定将像DS-Lite之类的方案标准化。
最终,一个以IVI命名的解决方案更新了NAT-PT,SIIT类之间映射某些IPv4和IPv6地址。(IVI在中国表示国际疫苗研究所)
总的来说,那些只运行IPv6的主机在这几年仍然可以用那些只在IPv4网络上提供的服务,,但是几年后,IPv4坚持想要和只运行IPv6的网络进行联系可能就会难上加难了。