烽火网络公司 熊 英
随着Internet的规模以近乎于指数的增长,IPv4的地址空间面临即将耗尽的危险。40亿个IPv4的地址已经用掉了3/4,另外,Internet早期由于缺乏规划,造成了IP地址分配“贫富不均”的现象,少数团体与单位占用了许多A类地址,如MIT与AT&T就各自占用了1600万个IP地址,由此浪费了大量的IP地址,后来的大部分单位与公司就只能申请余下的C类地址,特别是像中国与日本这样需要大量IP地址却得不到足够多的地址的国家更是如此。为此,IPv6将IP地址的长度由32个比特位扩展到128个比特位,将IPv6的地址空间扩展为3.4×1038个,届时地球上每个人可分配到1.8×1019 个IP地址。促使推广IPv6的另一个原因是新的应用对Internet提出了更高的要求,需要Internet提供更复杂的寻址与路由能力,特别是下一代移动数字电话对Internet提出了更高的要求。需要指出的是,目前的IPv6还不是最后的标准,即使是将来采用IPv6标准时,也不会马上弃用IPv4。由于从IPv4向IPv6的过渡需要一个相当长的过程,在此期间,必须保证IPv4和IPv6具有互操作性。目前业界普遍认为,支持IPv4到IPv6过渡模式主要有三种,即:
· 网络单元和移动终端的IPv4 / IPv6双栈;
· 自动或结构配置隧道模式;
· 网络中设置IPv4到IPv6协议转换器
其中在网络中设置代沟协议转换器是最简单便捷的IPv4/IPv6过渡方法。协议转换器为本地IPv4主机和本地IPv6主机间一个中介单元,不需变更主机就可实现两者间联络。网络地址转换器/协议转换器(NAT-PT,Network Address Translator/Protocol Translator)是协议转换器方案之一。IPv6分组头和IPv4分组头的变换是最复杂也最重要的转换工作。
烽火网络公司自主研发设计的F-engine R4000可作为IPv4/IPv6代沟协议转换器,能较好地完成两种网络协议栈的通信互连,为现有的IPv4网络向将来的IPv6网络提供平滑升级,是实现跨代沟通信的优越解决方案。它的设计要比现存绝大多数网络地址转换更具灵活性,它能被容易地配置成许多地址转换脚本,包括IPv6本地网络连接到IPv4互联网,IPv6本地网络连接到IPv6互联网,IPv6专用网连接到IPv6互联网,还有专用网连接到IPv4互联网,也能被配置成负载平衡的方案。由于良好的模块化和易于扩展设计,F-engine R4000将成为IPv4网络转变到IPv6网络的重要工具。
一、IPv4/IPv6代沟协议转换器的实现原理
代沟协议转换器有三个基本组成部分:1个地址/端口转换模块和2个协议转换模块。一个协议转换模块的作用是将IPv6转换为IPv4(称为PT6/4),而另一个则是由IPv4转换为IPv6(成为PT4/6)。通过把转换功能分解到基层部分来增加系统的灵活性和可调性,将地址/端口转换和协议转换分开进行。
地址/端口转换模块(APT)负责网络地址和端口的转换。APT含有有效数据流的信息。当数据包到达时,APT使用它的数据流验证系统找到匹配的地址映射,并把地址映射转换为相应的地址和端口。如果没有找到相匹配的映射,APT会根据相应的规则产生一个新的映射。APT总是在两个不同的IPv6地址范畴内进行转换。
两个协议转换模块负责在IPv4和IPv6之间实现数据包和ICMP包的地址转换。IPv6和IPv4数据的分组头部格式非常相似,但并不完全一致。这样在一种IP或ICMP版本向另一种版本转换过程中需进行一定的调整。负责IPv6数据包转换到IPv4的协议转换模块只接收含有IPv6/IPv4映射关系的IPv6数据包,与之类似,另一模块则只接收相应的IPv4数据包。由于具有映射关系的IPv6地址与IPv4地址之间是一一对应的,协议转换模块只需要在两种协议之间为分组头部建立一种相互的映射即可。当一个IPv6或ICMPv6数据包到达时,PT6/4只需取出IPv6分组源/目的地址字段中最低的32位即可作为相应IPv4分组的源/目的地址。同样,当一个IPv4或ICMPv4数据包到达时,PT4/6只需对分组的地址字段添加96位前置数据即可完成从IPv4到IPv6的转换。
二、地址/端口转换模块(APT)的设计
1. APT的功能
当一台本地IPv6终端需要与外部世界联系时,必须临时分配一个可由外部识别的全球性地址。如果同时有不止一个内部结点需要与外部联系而仅有一个全球性的地址时,则每一个独立的连接都被临时分配一个特有的地址/端口绑定,以使这些内部结点可以共享一个全球地址。如为了与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数据包。为使协议转换器可以同时处理IPv4/IPv6两种模式,当与只支持IPv4的主机通信时,会分配临时的IPv4地址给其内部IPv6主机。而基于IPv6的APT则给其内部IPv6主机分配支持IPv4映射的IPv6地址来实现这一目的。
当协议转换器要将IPv6分组转换为IPv4分组时,APT首先将IPv6地址和端口映射为与IPv4地址有映射关系的IPv6地址与端口号。然后再将这个映射地址转换为真正的IPv4地址,从而实现IPv6分组转换为IPv4的转换。从IPv4到IPv6分组的转换过程也与此相似。先将IPv4地址转换成为具有映射关系的IPv6地址/端口号,然后再将这个地址/端口绑定转换成为真正的IPv6地址和端口号。
3. 静态映射与动态映射
APT可以将主机的实际地址和端口号映射成为一个全球性的地址/端口绑定。静态映射功能是指内部网络的地址/端口绑定与全球性地址/端口绑定之间的映射关系是静态的。在大多数情况下,静态映射被用作单一地址映射的情况。例如,一定的外部地址将会被保留以标志特定的内部地址。与静态映射相对,动态映射仅对活动的数据流保留映射关系。
4. 动态地址映射与动态地址/端口映射
动态地址映射是指APT仅为内部主机动态分配一个外部地址映射,而不是一个地址/端口绑定。APT将直接使用映射过的地址来指明此内部结点,而以映射过的流ID来代替原始流ID,在这个映射过程中,APT不仅要动态分配一个外部地址映射,而且原来的端口号也要被映射为新的端口号。与动态地址/端口映射不同的是,动态地址映射只是替代分组头部中的一个地址字段,而保留流ID中的其它三个部分。对于向外的数据包,它以映射地址来取代原有的源地址字段;对于向内的数据包,它以内部结点的实际地址来取代分组中的目的地址,这个目的地址也就是映射地址。
三、协议转换模块的设计
PT6/4模块允许只支持IPv6的节点和只支持IPv4的节点进行通信。从IPv6节点向IPv4节点传送一个包或者其逆过程都要涉及协议转换以及地址和端口的转换。PT6/4和PT4/6用于连接基于IPv6的APT并对需要进行转换的分组完成协议转换。PT6/4用于将只支持IPv6的本地节点的IPv6包发送到只支持IPv4的因特网节点上。APT将源地址和端口所组成的的套接字转换成IPv4映射型IPv6套接字。PT6/4将包中的IPv6头转换成IPv4头和将IPv6地址的最低的32比特作为有效的IPv4地址。
同样,一个IPv4包从一个只支持IPv4的节点发送到一个只支持IPv6的节点需要经过PT4/6和APT以完成转换。PT4/6通过将源和目的地址加上96比特的前缀以转换成IPv4映射型IPv6地址,从而将IPv4头转换成IPv6头。APT然后将目的IPv4映射型IPv6地址映射进IPv6地址。因为APT处理地址映射和分配,PT6/4和PT4/6只负责协议转换。因为模块化的设计,所以PT6/4和PT4/6的实现是很容易的。在进行包协议转换之后,PT6/4和PT4/6都需要对高层协议(例如TCP、UDP)的校验和进行重新计算。TCP和UDP根据一个伪随机头部计算它们的校验和,这个伪随机头部包括(IP/IPv6)的源地址和目的地址、高层包长度和协议(下一头部)字段。当从IPv6向IPv4转换的时候,PT6/4必须计算IPv4头部所需要的IP校验和。然而,PT4/6并不需要计算IPv6校验和,因为IPv6头部没有这一字段。
ICMPv6和ICMPv4在校验和的计算上同样是不同的。PT4/6必须按照TCP和UDP的样式来计算ICMPv6,因为ICMPv6的计算中包含了伪随机头部。然而,PT6/4能直接从ICMPv4包计算出ICMPv4的校验和。在ICMPv4IC和MPv6相互转换的过程中,校验和值的不同必须考虑进去。
很显然Internet从IPv4向IPv6转变需要好多年,每个站点都必须考虑自己的过渡计划,没有那个站点能一步到位的完成转变。对于大多数的站点来说,采用代沟协议转换器使只支持IPv4和只支持IPv6的节点之间能够相互通信,是一个非常不错的转变和升级方法。
该代沟协议转换器满足一个好的网络转换器所必须的三个最基本的要求:能够在只支持IPv6的节点和只支持IPv4的节点之间完成通信,在信源主机和目的主机上不需要进行任何改变,应用简单,可以被简单地配置以用于在不同的IPv4和IPv6地址和协议层完成不同的转换。 模块化的设计和配置扩展方便使得代沟协议转换器成为强大的网络通信的工具,它的进一步广泛应用将推动我们更快的向IPv6领域迈进。
----《通信世界》