1.2 地址映射和域名翻译由于IPv4和IPv6的地址空间差距巨大,用IPv6表示IPv4是毫无问题的,可以通过无状态的映射方法,映射后的IPv6地址称为转换地址。用IPv4表示IPv6是难点,可以动态维护映射表,作有状态的地址映射,或在IPv6地址中选择一个子空间通过无状态的方法与IPv4地址映射。映射后的IPv6地址称为可译地址。所有这些地址映射算法均在IETF标准RFC6052中定义。嵌入了IPv4地址的IPv6地址格式如图2所示[3]。

图2 嵌入了IPv4地址的IPv6地址格式

其中Prefix是IPv6网络前缀,根据不同的前缀长度,嵌入IPv4地址,并且在64至71位间保持为全0,以便与IPv6地址结构中的u-bit兼容。

Suffix为后缀,在基本的地址映射中为全0,预留给传输层端口的编码,以便把一个IPv4地址映射为若干IPv6地址,达到高效地、无状态地复用稀缺的公有IPv4地址资源的目的。此外,RFC6052要求转换地址和可译地址使用同样的前缀(Prefix),从而可以自动获得最优路由。

当纯IPv6计算机发起对IPv4互联网的访问时,必须获得相应的转换地址,这个工作由域名翻译器DNS64根据上述映射算法完成,由RFC6147定义[4]。DNS64是同时接入IPv4网络和IPv6网络的域名服务器(DNS),能够把A记录动态翻译成AAAA记录。具体步骤为纯IPv6计算机通过DNS64查询所需域名的AAAA记录,如AAAA记录存在,则DNS64直接返回AAAA记录给纯IPv6计算机;如AAAA记录不存在,则DNS64查询域名对应的A记录,并根据RFC6052定义的映射算法,生成AAAA记录返回给纯IPv6计算机。无状态的翻译器支持IPv4互联网发起的通信,在这种情况下,需要静态配置的DNS46,当IPv4互联网上的用户发起对IPv6计算机的访问时,DNS46则返回对应IPv6计算机AAAA对应的A记录[5]。

1.3 协议翻译

两种不同协议栈之间的互联互通必须解决的第二个问题是协议翻译,所庆幸的是IPv4和IPv6之间协议的差距并不很大,是可译的。具体协议翻译算法由RFC6145定义,包括版本号映射,IPv4的服务类型与IPv6的流量等级映射,IPv4的总长与IPv6的载荷长度映射,IPv4的存活期与IPv6的转发计数映射,IPv4的传输层协议与IPv6的下一个头映射,IPv4地址和IPv6地址映射等[6]。IPv4与IPv6协议翻译的最大难点是分片处理,因为IPv4可以支持路由器分片或端系统分片,但IPv6仅支持端系统分片。对于IPv4已经分片的分组,IPv6必须增加分片扩展头,以便端系统重组。此外,IPv4和IPv6网络所能支持的最大传输单元的大小(MTU)是不同的,同时由于IPv4的基本头为20个字节,而IPv6的基本头为40个字节,因此在从IPv4到IPv6的翻译过程中必然遇到MTU超出的问题。此外,IPv4的传输控制协议(ICMP)和IPv6的传输控制协议(ICMPv6)也有很多不同,需要分别处理。

值得指出的是,当IPv6网络中的路由器(通常并不使用可译地址)返回ICMPv6分组时,翻译器无法找到对应的IPv4地址,造成翻译后的ICMP分组的源地址不可溯源。IETF最新发布的RFC6791定义了对这个问题的有效处理方法[7]。

RFC6145也是有状态IPv4/IPv6翻译器所依据的协议翻译算法。有状态IPv4/IPv6翻译器中的状态维护技术由RFC6146定义,主要规定了IPv6地址和端口到IPv4地址和端口的动态映射表的生成、维护和销毁算法[8]。

2 无状态双重翻译/封装技术(MAP系列)

IPv4/IPv6翻译技术可以使IPv4和IPv6互联互通,但仍有3个问题需要解决。第一个问题是由于IPv4地址耗尽问题,无状态IPv4/IPv6翻译必须能够复用公有IPv4地址以高效使用IPv4地址资源;第二个问题是目前有的应用程序并没有IPv6的版本(如Skype),也有的应用程序嵌入了地址的信息(如Ftp);第三个问题是对于终端用户往往需要分配一个64位的前缀,而不是单个的IPv6地址。无状态双重翻译/封装系列技术MAP-T/MAP-E可以解决这些问题。MAP是Mapping Address and Port的缩写,意指无状态地对地址和端口进行复用,与双重翻译(MAP-T)或封装(MAP-E)技术组合,可以解决无状态复用公有IPv4地址的问题和上述的应用程序问题,同时可以支持前缀分配。

MAP-T/MAP-E目前是IETF的工作组文档[9-10],其他相关的工作组文档还有DHCPv6扩展[11]和部署考虑[12]。


相关内容