论文部分内容阅读
随着Internet的技术的发展,到2005和2015年之间就会面临着IPv4地址耗尽的问题,为此IETF开发了IP协议的一个新版本——IPv6,它使70年代设计的IPv4更具有现代化。人们预期随着Internet的增长和对即插即用的解决方案需求,IPv6将得到更广泛的采用,并在不久的将来完全取代IPv4。IPv4到IPv6将会有很长的过渡时期,在这个过渡时期,IPv4节点与IPv6节点的共存和相互通信是必要的,一个强壮的、灵活的IPv4-to-IPv6过渡和共存机制将是必需的。除此之外,互通技术应该对普通用户做到“无缝”,对信息传递做到高效。所以必须实现IPv4网络与IPv6网络之间的互操作及平滑升级机制。目前已有多种技术可以实现从IPv4向IPv6的转换,但都仍有局限性。 按工作原理可划分为:双协议栈(RFC 2893 obsolete RFC1933):采用该技术的节点上同时运行IPv4和IPv6两套协议栈。缺点是:由于它仍旧要使用IPv4地址,所以它并不能缓解IP地址空间的耗尽问题。隧道技术(RFC 2893):是指将一种协议报头封装在另一种协议报头中,这样,一种协议就可以通过另一种协议的封装进行通信。缺点是:不能实现Ipv4网络与Ipv6网络的之间的相互通信。NAT-PT(RFC 2766):适用于纯IPv4站点和纯IPv6站点之间的通信。除了地址的翻译之外,还要包括协议的翻译。从以上方式可以看出来,要想实现IPv4节点与IPv6节点的通讯,最好的方法只有采用NAT-PT方式。本论文主要研究解决在此过渡过程中IPv6网络中的主机与IPv4网络中的主机之间的通讯问题,也就是对连结IPv4与IPv6两个网络的桥梁——协议网关的问题的深入研究。 <WP=73>为了更好地提高了传输性能,IPv6报头与IPv4报头相比较而言有很大的变动:与IPv6相比较,IPv4报头中有6个域被删除,3个域的名称或部分功能被改变,并新增加了2个域。因此,我们在实现IPv6网络与IPv4网络之间的相互通信中,必须解决地址的转换和协议的转换两部分内容。本文仅仅研究基于NA(P)T-PT实现IPv4与IPv6网络的互访需要解决的问题。这种方法提供一个透明网关方式来解决IPv6网络与IPv4网络之间的主机相互通讯的问题。通过结合网络地址转换和协议转换,这种方法得以实现。NAT-PT是IPv6网络区域和IPv4网络区域的边界网关。它通常是一个运行着双协议栈的机器,有至少一个接口链接IPv4网络,另一个端口联接着IPv6网络,NAT-PT可以在路由器或者诸如Linux/FreeBSD/Windows等多种计算机平台得到实现。带有协议转换功能的Microsoft IPv6 协议栈,也是NAT-PT的具体应用。NAT-PT可分为如下几类:传统NAT-PT模式(Traditional-NAT-PT)传统的NAT-PT模式只能解决纯IPv6域中的主机能访问IPv4域中的主机,也就是说,发起方只能是IPv6域中的主机。其又可分为基本模式和NAPT-PT模式:<1>綨AT-PT模式,预留一个IPv4的地址池,实现一个IPv6地址与地址池中的某一个IPv4地址的对应转换。<2>NAPT-PT模式可以实现多个的IPv6主机地址,多路复用到同一个IPv4地址。具体的实现类似与普通的IPv4的NAPT。 双向NAP-PT模式 (Bi-directional-NAT-PT)发起方既可以是IPv6域中的主机,也可以是IPv4域中的主机。双向NAP-PT模式扩展了传统的NAP-PT模式。为了实现这个功能,我们使用了DNS应用层网关(DNS-ALG)达到双向互访的目的。本次透明网关的实现采用相对照的方法,来深入的分析NAP-PT <WP=74>(NAPT-PT)系统的实现过程和性能。第一种实现是在Linux平台上完成用户态的双向NAT-PT,数据包的捕获和数据包的处理都是在用户态完成的,数据包的捕获和过滤采用了Berkeley包过滤器(BPF),我们用这种方式实现了吉大IPv6实验网与外部IPv4网的相互通讯,包括域名解析、网页浏览、FTP、SSH等功能。这种方式固然有程序设计方便,便于扩展的优点,但是网络通讯的大量的开销是花费在数据包从Adapter到内核然后再到用户层的拷贝的过程中了,这极大的影响了协议转换传输的性能,在数据流量比较大的时候,丢包现象十分的明显,为了进一步的提高数据包截获的成功率,我们在第二种方案中利用Linux 内核便于扩展的特点实现内核态的协议转换。linux从2.4.x的内核以后,提供了一套功能强,性能稳定的Netfilter 框架,我采用了Netfilter 框架作为数据包的捕获和过滤框架,并且把协议转换部分也移植到内核中,并且实现了NAPT的功能,减少了对IPv4地址的占用;把整个的NAPT-PT都移植到了内核之中,以内核模块的形式插入内核,在性能上收到了比较满意的结果。理论上任何一个在净荷中包含了地址信息的协议都需要借助ALG(应用层网关)的帮助,才能正确的对这些协议提供支持,ALG是某些特定应用程序的代理(Agent),用让V6 node可以和V4 node互相通讯。因为有些应用协议会把网络地址存在封包的payload 中,可是NAT-PT 本身并无法知道payload 里存的是什么,因为NAT-PT只是处理IP首部中的内容。利用ALG可以帮助NAT-PT来达到这个功能,对这些应用协议提供支持。在这里,主要使用DNS-ALG和FTP-ALG。在当今的研究协议转换的各个研究单位个人,主要是在用户层完成此功能,系统之间相互调用和转换不可避免的浪费了宝贵的时间。我们采用的方案是在内核态完?