适合IPv6/IPv4灵活转换的GT64的实现

发布时间:2003-11-26 作者:范蓓蕾 / 范忠礼 Fan Beilei / Fan Zhongli 阅读量:

下一代网络(NGN)是一个开放式的网络,是面向无连接的IP网络。随着Internet爆炸性的发展,IPv4面临着诸多问题。因此IPv4到IPv6的过渡就成为IETF以及国内外IT界所研究和关注的重要问题。它直接影响到IPv6的推广和应用。

   GT64适合于IPv6/IPv4一般用途的转换。GT64的设计要比现存绝大多数网络地址转换的实现更具灵活性。它能被容易地配置成许多地址转换脚本,包括:IPv6本地网络连接到IPv4互联网,IPv6本地网络连接到IPv6互联网,IPv6专用网连接到IPv6互联网,还有专用网连接到IPv4互联网。而且GT64也能被配置成许多负载平衡的方案。因为它的模块化和易于扩展性,GT64是帮助转变到IPv6网络的很有力的工具。

  1 GT64基本结构

  GT64有3个基本组成部分(参见图1):1个地址/端口转换器和2个协议转换器,一个协议转换器的作用是将IPv6转换为IPv4,而另一个则是由IPv4转换为IPv6。GT64通过把转换功能分解到基层部分来增加系统的灵活性和可调性,以将地址/端口转换和协议转换分开进行。
地址/端口转换器(APT)是GT64最重要的组成部分,因为它负责网络地址和端口的转换。APT含有效数据流的信息。当数据包到达时,APT使用它的数据流验证系统找到匹配的地址映射,并把地址映射转换为相应的地址和端口。如果没有找到相匹配的映射,APT会根据相应的规则产生一个新的映射。APT总是在两个不同的IPv6地址范畴内进行转换。


图1 GT64的内部结构

  GT64的两个协议转换器??PT64和PT46,负责在IPv4和IPv6之间实现数据包和ICMP(Internet Control Message Protocol)包的地址转换。IPv6和IPv4数据的分组头部格式非常相似,但并不完全一致。这样在一种IP或ICMP版本向另一种版本转换过程中需进行一定的调整。PT64只接收含有IPv6/IPv4映射关系的IPv6数据包,PT46则只接收相应的IPv4数据包。由于具有映射关系的IPv6地址与IPv4地址之间是一一对应的,协议转换器只需要在两种协议之间为分组头部建立一种相互的映射即可。当一个IPv6或ICMPv6数据包到达时,PT64只需取出IPv6分组源/目的地址字段中最低的32位,即可作为相应IPv4分组的源/目的地址;同样当一个IPv4或ICMPv4数据包到达时,PT46只需对分组的地址字段添加96位前置数据,即可完成转换。

  2 地址/端口转换器的设计

  2.1 APT的功能

  当一台GT64主机需要与外部联系时,GT64必须临时分配一个可由外部识别的全球性地址。如果同时有不止一个内部节点需要与外部联系而仅有一个全球性地址时,则每一个独立的连接都被临时分配一个特有的地址/端口绑定,以使这些内部节点共享一个全球地址。例如,为了与IPv4外部网络通信,一个IPv6局域网通常被分配一些能够映射为有效IPv4地址的IPv6地址,但需要与外部网络通信的主机数量往往大大多于这些可用的地址数量。APT解决这个问题的方法是,使IPv6局域网内的多台主机共享一个包含有效映射关系的IPv6地址。这实际上是传输标识符的一种复用。通信时,数据分组头部的源地址字段和端口号被替换为一个特殊的地址/端口绑定,这个特殊的绑定关系是由APT临时分配的。

  在与外部网络通信时,APT不仅要负责使用新的地址/端口绑定关系替代数据分组中原有的地址/端口绑定,而且需要记忆这种替代关系。在向外部网络发送分组时,APT将分组内的源地址与端口号替换为新的地址/端口绑定;接收分组时,APT需要将分组中的地址/端口字段再用局域网内部的地址/端口绑定替换回来。

  当APT接收到一个IPv6数据包,它用一个有地址映射关系的流ID(标识)来替代数据包中的原始流ID,映射过的流ID用其他的地址/端口绑定来替代数据包中源或目的地址/端口绑定。APT的配置字符串决定了这种替代关系的具体处理过程。除上述讨论的动态分配之外,APT也可处理其他一些简单形式的地址/端口转换,例如静态和动态单一的地址转换。

  APT对来自外部和内部网络的数据包的处理方式是不同的。APT经常是针对一定方向的数据包分配动态地址映射。这样另一个方向的初始化流将不能进行地址映射。Outward分组指的是由本地网络发出目的是因特网(IPv4或IPv6)主机的数据包,Inward分组则相反。APT有两个输入口和两个输出口,分别用于Outward分组和Inward分组的接收与发送。APT从不同的输入口接收数据包,经过转换后再从不同的输出口转发出去。

  2.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地址和端口号。

  2.3 静态映射与动态映射

  APT可以将主机的实际地址和端口号映射成为一个全球性的地址/端口绑定。静态映射功能是指内部网络的地址/端口绑定与全球性地址/端口绑定之间的映射关系是静态的。在大多数情况下,静态映射被用作单一地址映射的情况。例如一定的外部地址将会被保留,以标志特定的内部地址。与静态映射相对,动态映射仅对活动的数据流保留映射关系。

  2.4 动态地址映射与动态地址/端口映射

  动态地址映射是指APT仅为内部主机动态分配一个外部地址映射,而不是一个地址/端口绑定。APT将直接使用映射过的地址来指明此内部节点,同时以映射过的流ID来代替原始流ID。在这个映射过程中,APT不仅要动态分配一个外部地址映射,而且原来的端口号也要被映射为新的端口号。与动态地址/端口映射不同的是,动态地址映射只是替代分组头部中的一个地址字段,而保留流ID中的其他3个部分。对于向外的数据包,它以映射地址来取代原有的源地址字段;对于向内的数据包,它以内部节点的实际地址来取代分组中的目的地址,这也就是映射地址。

  3 APT的配置

  配置字符串为动态映射和静态映射指定了映射规则,用户可以使用配置字符串来控制APT,配置字符串的变量由逗号分隔。图2给出一个IPv6局域网与IPv4因特网连接时APT配置实例。APT被配置为静态的地址映射和动态的地址/端口映射。


图2 地址/端口转换器配置的例子

  首先,配置字符串指定了静态地址映射的规则和数量。第1个参数是静态映射的数量。第2个参数Static Port Mapping是一个布尔变量,表明了APT是否作静态地址映射。图2中,第1个参数Number_of_Static_Mappings的值是1,表明只有一个静态地址映射;第2个参数Static Port Mapping的值是0,表明APT为地址映射作静态转换。

  接下来的Static Port Mapping部分是对静态映射的详细描述,表达式从Static Mapping 1一直到Static Mapping m。这m个参数对应于 m个静态映射。依照静态端口映射的值,每一个静态映射都包含有2到4个字符串的属性描述,具体包含几个字符串与Static Port Mapping的值有关。以静态地址映射为例,如果Static Port Mapping的值是0,那么属性描述为两个字符串,分别为内部的和外部的IPv6地址;当Static Port Mapping的值为1时,静态映射包含4个字符串,分别描述内部网络的IPv6地址和节点端口号,以及映射过的IPv6地址和节点端口号。

  图2中,APT静态地将内部地址::3ffe:1ce1:2::1映射为外部网络的有效地址::18.26.4.115。APT在发出的数据包中以::18.26.4.115取代了原地址::3ffe:1ce1:2::1。在数据接收的过程中,若有一数据分组指向::18.26.4.115,则APT会将其目的地址替代为内部网络地址::3ffe:1ce1:2::1。

  其次,配置字符串也表明了可有多个映射规则提供给动态映射。Dynamic Mapping参数是一个布尔型变量,用来表明APT是否进行了动态地址映射。如果值是1,APT将会使用许多特定于动态地址映射的参数。下一个参数Dynamic Port Mapping决定APT是进行地址/端口映射还是只进行地址映射。大多数的APT配置都含有后者,例如图2,因为动态地址/端口映射允许一个全球性的地址被几个有效的流同时复用。

  第三,参数Address Allocation Direction决定APT能否分配一个新的映射,例如当接收到一个没有经过映射的分组时。这个参数有两个值:1(代表向内)和0(代表向外)。在没有特殊指定时,系统默认参数取“0”值。当地址转换是由局域网内部指向外部时,则要将Address Allocation Direction指定为向外,如图2。但是,当GT64被用作其他的情况时,例如网络服务器负载平衡时,APT将会分配新的映射给那些来自外部的新的有效流,这时该参数方向应改为向内。负载平衡是指将在一个网络地址上的负载分配到几个内部节点上去。GT64为负载平衡所处理的数据流是来自于外部的。参数Address Allocation Direction标为内部的,这样将允许APT为这些流分配映射。最后,配置字符串决定了动态分配全球性的IPv6地址和端口的范围。如果动态映射并没有动态端口映射功能,保留的参数则是IPv6地址。在地址/端口映射中,保留的参数是3个参数的组合(Mapped_IPv6 Address Port_Start Port_end)。这表明当一个有效流经过APT时可以被动态分配一个IPv6地址和端口的范围。当多部隶属同一局域网的主机希望共享一个全球性的IPv6地址时,所采取的方法是复用一个标记过的IPv6地址,并可以传递许多IPv6主机的标识符。

  在图2中,最后一个参数表明了端口6000至6010的含IPv4映射的IPv6地址,::18.26.4.115是可以被复用的映射地址。若同时复用10个地址/端口绑定,则APT可以同时处理10个有效流。

  4 协议转换器的设计

  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根据一个伪随机头部计算它们的校验和,这个伪随机头部包括(IPv4/IPv6)的源地址和目的地址、高层包长度和协议(下一头部)字段。当从IPv6向IPv4转换的时候,PT64必须计算IPv4头部所需要的IP校验和。然而,PT46并不需要计算IPv6校验和,因为IPv6头部没有这一字段。

  ICMPv6和ICMPv4在校验和的计算上同样是不同的。PT46必须按照TCP和UDP的样式来计算ICMPv6,因为ICMPv6的计算中包含了伪随机头部。然而,PT64能直接从ICMPv4包计算出ICMPv4的校验和。在ICMPv4/ICMPv6相互转换的过程中,校验和值的不同必须考虑进去。

  5 结论

  显然,因特网从IPv4向IPv6转变将需要很长一段时间。每个站点都必须考虑自己的过渡计划。只有很少的站点能够一步到位地完成转变。对于大多数的站点来说,NAT将作为一种机制而被采用,它可以使得只支持IPv4和只支持IPv6的节点之间能够相互通信。

  GT64可以满足一个好的网络转换器所必须的3个最基本的要求:能够在只支持IPv6的节点和只支持IPv4的节点之间完成通信;在信源主机和目的主机上不需要进行任何改变;应用简单。模块化的设计和扩展方便使得GT64成为强大的网络通信工具。GT64的进一步发展将推动互联网更快地向IPv6领域迈进。

  参考文献

1 Fiuczynski M E, Vincent K L, Brian N B. The Design and Implementation of an IPv6/IPv4 Network Address and Protocol Translator. Proceedings of the USENIX Annual Technical Conference (NO98), New Orleans, Louisiana, 1998. http://www.cs.washington.edu/research/networking/napt/reports/usenix98/index.html, 2001
2 Stardust.com.Migration from IPv4 to IPv6 for a network manager: Implementation of the IPv4/IPv6 network address and protocol translator[R], 2000. http://www.win?鄄sock2.com/IPv6/documents/v6migrate/v6migrate_30.htm, 2001
3 Yeom H Y, Ha J, Kim I. IP Multiplexing by Transparent Port-Address Translator. Proceedings of the Tenth USENIX System Administration Conference, Chicago, IL, USA, Sep 29-Oct 4, 1996
4 Cisco NAT-PT (IPv6/IPv4) implementation. http://www.cisco.com/warp/public/cc/pd/iosw/prodlit/ip6v_ds.htm,2001
5 Microsoft Research IPv6. http://www.research.microsoft.com/msrIPv6/msrIPv6.htm, 2001
6 Ultima IPv6 Access, British Telecom .http://ultima.IPv6.bt.com/, 2001
7 Kohler E, Morris R, Chen B, et al. The Click modular router. ACM Transactions on Computer Systems, 18(4), 2000
8 Kohler E. The Click modular router[D]. [Dissertation]: MIT, 2000

[摘要] 文章描述了一个基于点击软件的IPv6/IPv4通用转换器(GT64)的设计和应用。GT64有3个主要部件:1个地址端口转换器--APT和2个协议转换器??PT64和PT46,能够在大多数的网络应用中完成地址、端口和协议在IPv4和IPv6两个协议领域之间相互转换。

[关键词] 互联网协议版本6;协议转换器;地址/端口转换器

[Abstract] The design and implementation of GT64, a general translator based on the click software, are presented, which shows that GT64 has three main components: one address translator (APT) and two protocol translators (PT64 and PT46), and has the capability of performing the translation of address, port and protocol between IPv4 and IPv6 domains in the majority of networks.

[Keywords] IPv6; Protocol translator; Address/port translator