美国麻省理工学院 范蓓蕾 南京邮电学院 范忠礼
下一代网络NGN是一个开放式的网络,是面向无连接的IP网络。IPv4在Internet中运行得比较成功,随着Internet的发展,IPv4面临诸多问题,如地址资源匮乏,节点的安全性、移动性等问题。这就是IPv6所能够解决的。然而从IPv4到IPv6应用转移不是一夜之间就能完成的。因此IPv4到IPv6的过渡就成为IETF以及国内外IT界所研究和关注的问题。它直接影响到IPv6的推广和应用。
适合于IPv6/IPv4一般用途的转换。GT64的设计要比现存绝大多数网络地址转换更具灵活性,它能被容易的配置成许多地址转换脚本,包括IPv6本地网络连接到IPv4互联网,IPv6本地网络连接到IPv6互联网,IPv6专用网连接到IPv6互联网,还有专用网连接到IPv4互联网,GT64也能被配置成许多负载平衡的方案。由于GT64的模块化和易于扩展,它是帮助转变到IPv6网络的很有力的工具。
一、 实现
GT64有三个基本组成部分:1个地址/端口转换器和2个协议转换器。一个协议转换器的作用是将IPv6转换为IPv4,而另一个则是由IPv4转换为IPv6。GT64通过把转换功能分解到基层部分来增加系统的灵活性和可调性,以将地址/端口转换和协议转换分开进行。
地址/端口转换器(APT)是GT64最重要的组成部分,因为它负责网络地址和端口的转换。APT含有有效数据流的信息。当数据包到达时,APT使用它的数据流验证系统找到匹配的地址映射,并把地址映射转换为相应的地址和端口。如果没有找到相匹配的映射,APT会根据相应的规则产生一个新的映射。APT总是在两个不同的IPv6地址范畴内进行转换。GT64的两个协议转换器——PT64和PT46,负责在IPv4和IPv6之间实现数据包和ICMP包的地址转换。IPv6和IPv4数据的分组头部格式非常相似,但并不完全一致。这样在一种IP或ICMP版本向另一种版本转换过程中需进行一定的调整。PT64只接收含有IPv6/IPv4映射关系的IPv6数据包,与之类似,PT46则只接收相应的IPv4数据包。由于具有映射关系的IPv6地址与IPv4地址之间是一一对应的,协议转换器只需要在两种协议之间为分组头部建立一种相互的映射即可。当一个IPv6或ICMPv6数据包到达时,PT64只需取出IPv6分组源/目的地址字段中最低的32位即可作为相应IPv4分组的源/目的地址。同样,当一个IPv4或ICMPv4数据包到达时,PT46只需对分组的地址字段添加96位前置数据即可完成从IPv4到IPv6的转换。
二、 地址/端口转换器(APT)的设计
1. APT的功能
当一台GT64主机需要与外部世界联系时,GT64必须临时分配一个可由外部识别的全球性地址。如果同时有不止一个内部结点需要与外部联系而仅有一个全球性的地址时,则每一个独立的连接都被临时分配一个特有的地址/端口绑定,以使这些内部结点可以共享一个全球地址。如为了与IPv4外部网络通信,一个IPv6局域网通常被分配一些能够映射为有效IPv4地址的IPv6地址(但需要与外部网络通信的主机数量往往大大多于这些可用地址数量)。APT解决这个问题的方法是,使IPv6局域网内的多台主机共享一个包含有效映射关系的IPv6地址。这实际上是传输标识符的一种复用。通信时,数据分组头部的源地址字段和端口号被替换为一个特殊的地址/端口绑定,这个特殊的绑定关系是由APT临时分配的。APT的这种功能就被称为地址/端口转换。
在与外部网络通信时,APT不仅要负责使用新的地址/端口绑定关系替代数据分组中原有的地址/端口绑定,而且需要记忆这种替代关系。在向外部网络发送分组时,APT将分组内的源地址与端口号替换为新的地址/端口绑定;接收分组时,APT需要将分组中的地址/端口字段再用局域网内部的地址/端口绑定替换回来。
当APT接收到一个IPv6数据包,它用一个有地址映射关系的流ID来替代数据包中的原始流ID,映射过的流ID用其它的地址/端口绑定来替代数据包中源或目的地址/端口绑定。APT的配置字符串决定了这种替代关系的具体处理过程。除上述讨论的动态分配之外,APT也可处理其它一些简单形式的地址/端口转换,如静态地址转换和动态单一地址转换。
APT对来自于外部的和内部网络的数据包的处理方式是不同的。APT经常是针对一定方向的数据包分配动态地址映射。这样另一个方向的初始化流将不能进行地址映射。OUTWARD PACKETS 指的是由本地网络发出,目的是因特网(IPv4或IPv6)主机的数据包,INWARD PACKETS则相反。APT有两个输入口和两个输出口,分别用于OUTWARD分组和INWARD分组的接收与发送。APT从不同的输入口接收数据包,经过转换后再将其从不同的输出口转发出去。
2. 基于IPv6实现IPv4/IPv6转换的APT
APT仅接收和发送含有IPv6地址的IPv6数据包。为使GT64可以同时处理IPv4/IPv6两种模式,当与只支持IPv4的主机通信时,GT64会分配临时的IPv4地址给其内部IPv6主机。而基于IPv6的APT则给其内部IPv6主机分配支持IPv4映射的IPv6地址来实现这一目的。
当GT64要将IPv6分组转换为IPv4分组时,APT首先将IPv6地址和端口映射为与IPv4地址有映射关系的IPv6地址与端口号。然后再将这个映射地址转换为真正的IPv4地址,从而实现IPv6分组转换为IPv4的转换。从IPv4到IPv6分组的转换过程也与此相似。先将IPv4地址转换成为具有映射关系的IPv6地址/端口号,然后再将这个地址/端口绑定转换成为真正的IPv6地址和端口号。
3. 静态映射与动态映射
APT可以将主机的实际地址和端口号映射成为一个全球性的地址/端口绑定。静态映射功能是指内部网络的地址/端口绑定与全球性地址/端口绑定之间的映射关系是静态的。在大多数情况下,静态映射被用作单一地址映射的情况。例如,一定的外部地址将会被保留以标志特定的内部地址。与静态映射相对,动态映射仅对活动的数据流保留映射关系。
4. 动态地址映射与动态地址/端口映射
动态地址映射是指APT仅为内部主机动态分配一个外部地址映射,而不是一个地址/端口绑定。APT将直接使用映射过的地址来指明此内部结点,而以映射过的流ID来代替原始流ID,在这个映射过程中,APT不仅要动态分配一个外部地址映射,而且原来的端口号也要被映射为新的端口号。与动态地址/端口映射不同的是,动态地址映射只是替代分组头部中的一个地址字段,而保留流ID中的其它三个部分。对于向外的数据包,它以映射地址来取代原有的源地址字段;对于向内的数据包,它以内部结点的实际地址来取代分组中的目的地址,这个目的地址也就是映射地址。
三、 协议转换器的设计
GT64一个非常重要的应用是允许只支持IPv6的节点和只支持IPv4的节点进行通信。从IPv6节点向IPv4节点传送一个包或者其逆过程都要涉及协议转换以及地址和端口的转换。PT64和PT46用于连接基于IPv6的APT并对需要进行转换的分组完成协议转换。PT64用于将只支持IPv6的本地节点的IPv6包发送到只支持IPv4的因特网节点上。APT将源地址和端口所组成的的套接字转换成IPv4映射型IPv6套接字。PT64将包中的IPv6头转换成IPv4头和将IPv6地址的最低的32比特作为有效的IPv4地址。
同样,一个IPv4包从一个只支持IPv4的节点发送到一个只支持IPv6的节点需要经过PT46和APT以完成转换。PT46通过将源和目的地址加上96比特的前缀以转换成IPv4映射型IPv6地址,从而将IPv4头转换成IPv6头。APT然后将目的IPv4映射型IPv6地址映射进IPv6地址。因为APT处理地址映射和分配,PT64和PT46只负责协议转换。因为模块化的设计,所以PT64和PT46的实现是很容易的。在进行包协议转换之后,PT64和PT46都需要对高层协议(例如TCP、UDP)的校验和进行重新计算。TCP和UDP根据一个伪随机头部计算它们的校验和,这个伪随机头部包括(IP/IPv6)的源地址和目的地址、高层包长度和协议(下一头部)字段。当从IPv6向IPv4转换的时候,PT64必须计算IPv4头部所需要的IP校验和。然而,PT46并不需要计算IPv6校验和,因为IPv6头部没有这一字段。
ICMPv6和ICMPv4在校验和的计算上同样是不同的。PT46必须按照TCP和UDP的样式来计算ICMPv6,因为ICMPv6的计算中包含了伪随机头部。然而,PT64能直接从ICMPv4包计算出ICMPv4的校验和。在ICMPv4IC和MPv6相互转换的过程中,校验和值的不同必须考虑进去。
很显然Internet从IPv4向IPv6转变需要好多年,每个站点都必须考虑自己的过渡计划,只有很少的站点将一步到位的完成转变。对于大多数的站点来说,NAT将作为一种机制而被采用,它可以使得只支持IPv4和只支持IPv6的节点之间能够相互通信。
GT64满足一个好的网络转换器所必须的三个最基本的要求:能够在只支持IPv6的节点和只支持IPv4的节点之间完成通信、在信源主机和目的主机上不需要进行任何改变、应用简单。GT64可以被简单的配置以用于在不同的IPv4和IPv6地址和协议层完成不同的转换。
模块化的设计和配置扩展方便使得GT64成为强大的网络通信的工具。GT64的进一步发展将推动我们更快的向IPv6领域迈进。
摘自《通信世界》