IPv4与IPv6网络互连的探讨与实现摘要随着网络的高速发展,IPv4由于地址不足,将不能满足未来用户的需求。而IPv6的出现,正好能解决这一问题。所以研究从IPv4到IPv6的平滑过渡,加快整个过渡过程就是当前的首要之急,便于对整个IPv6网络进行部署。目前使用的IP协议版本IPv4正面临着IP地址即将耗尽等问题,IETF从1995年开始,着手研究开发下一代IP协议,即IPv6。IPv6具有长达128位的地址空间,能为日后分配更多的IP地址。为了能让IPv4到IPv6平滑过渡,前人已经研究出了多种隧道技术,大致上可以分为双协议栈技术、隧道技术和网络地址翻译技术。而在这里,我们对GRE隧道进行了研究。关键词:IPv4;IPv6;GRE;隧道技术1IPv4与IPv61.1IPv4现状Internet的起源是由ARPANET于1968年开始进行研究的,当时的研究者们为了给ARPANET建立一个标准的网络通信协议而开发出了一种IP协议,即IPv4协议。但是当时IP协议的开发者认为ARPANET的网络个数不会超过数十个,因此他们只将IP协议的地址长度设定为32个二进制数位,其中前8位标识网络,其余24位标识主机。然而随着ARPANET日益膨胀,IP协议的开发者认识到原先设想的网络个数已经无法满足当前的实际需求。1.2IPv6概念IPv6被称为下一代互联网协议,它是由国际互联网工程任务组(IETF)设计的一种用来替代IPv4的新协议。IPv6将现有的IPv4地址长度扩大4倍,即当前由的32bit扩充到128bit,可以提供3.4E+38个地址,这将从根本上解决目前IP地址短缺的严重问题。IPv6地址采用16进制的表示方法,将128bit分为8组,分得的每组为16bit,用4个16进制数表示,分组之间用“:”隔开,每组中最前面的0可以省略,但每组必须有一个数。同IPv4地址一样,IPv6也被划分为若干类型。主要有三种地址:单播地址(Unicast)、任播地址(Anycast)、组播地址(Multicast)。1.3IP格式1.3.1IPv4格式IPv4中规定IP地址长度为32(按TCP/IP参考模型划分),即有2的32次方-1个地址。一般的书写法为4个用小数点分开的十进制数。也有人把4位数字化成一个十进制长整数,但这种标示法并不常见。过去IANAIP地址分为A,B,C,D4类,IPv4报头指明了IP数据包的大小和上层的协议类型,以及源IP地址和目的IP地址,并提供了IP分片重组的必要信息。下图为IPv4数据包结构。图1IPv4数据包格式1.3.2IPv6格式IPV6的每一个分组由必须要有的基本首部和跟随在后面的有效载荷组成。有效载荷有两部分组成:可选的扩展首部和从上层来的数据(不超65535字节)。如下图示图2IPv6数据包格式IPv6地址包括16个字节(八位组);它共有128比特长。1.3.3IPv6优点IPv6保持了IPv4赖以成功的许多特点,设计中有部分处理是对IPv4不足之处的修正。作为新一代的IP协议,IPv6有着如下方面的特性:1.扩展地址空间,增强路由;2.地址的自动配置;3.IP数据报报头的简化;4.安全控制;5.服务质量QoS;2隧道技术在IPv4网络还没有完全流行于全球之前,一定会有一些网络首先采用IPv6协议,而这些首先采用IPv6协议的网络就像是在IPv4海洋中的一些小岛一样,如果能在IPv4的“海底”建立一条“隧道”实现这些小岛之间的连接,那么这些所谓的IPv6小岛就可以跨越IPv4海洋,从而实现彼此之间的通信,这就是隧道(Tunne)技术。隧道技术是一种封装技术,它是利用一种网络协议来传输另一种网络协议,即利用一种网络传输协议,将其他协议产生的数据报文封装在它自己的报文中,随后在网络中传输。实际上隧道可以看作一个虚拟的点到点连接。例如,GRE隧道支持点到点的业务接入。其实隧道技术就是指包括数据封装、传输和解封装在内的全过程。简单来说就是:原始报文在A地进行封装,然后在通道上传送,到达B地后把封装去掉,还原成原始报文,这样就形成了一条由A到B的通信隧道。在隧道的端点可以是主机,也可以是路由器,但必须是双协议栈的结点,它们连接两种网络,进行报文的封闭与解封。由于隧道技术只要求在隧道的入口和出口端对报文进行修改,在其他地方没有什么要求,相对于其他两种过渡技术来说,这种技术是很容易实现的。3几种常用隧道技术1、配置隧道配置隧道的建立是手工配置的,需要隧道两个端点所在网络的管理员协作完成。但进行通信的站点之间必须有可用的IPv4连接,并且至少要具有一个全球唯一的IPv4地址。站点中的每个主机都至少需要支持IPv6,路由器需要支持双栈。所以配置隧道在隧道要经过NAT设施的情况下不可用。2、自动隧道自动隧道的建立和拆除是动态的,隧道终点根据分组目的地址确定。适用于单个IPv6主机之间或偶尔交换数据的站点之间。但自动隧道无法在NAT域内的隧道工作,不能从根本上解决IPv4地址耗尽问题。3、隧道代理隧道代理不是一种隧道机制,而是一种方便构造隧道的机制,可以简化隧道的配置过程。适用于单个主机获取IPv6连接的情况。隧道代理在穿过NAT设施时可能无法工作,需要配置隧道服务器、安全的DNS自动更新、激活机制等,不过这种技术相对繁琐一些。4、ISATAP隧道ISATAP是一种自动隧道技术,用于连接被IPv4隔离的IPv6孤岛,通过将IPv4地址嵌入到IPv6地址当中,并将IPv6封包封装在IPv4中传送,从而在主机相互通信时抽出IPv4地址建立隧道。ISATAP用于内部私有网络中各双栈主机之间进行IPv6通信。ISATAP不要求隧道端节点必须具有全球惟一的IPv4地址,只要求双栈主机具有IPv4单播地址。因此ISATAP无法为IPv6组播业务提供解决方案。5、GRE隧道GRE隧道技术可在IPv4的GRE隧道上承载IPv6数据报文。GRE隧道是两点之间的链路,每条链路都是一条单独的隧道。隧道把IPv6作为乘客协议,把GRE作为承载协议。所配置的IPv6地址是在Tunnel接口上配置的,而所配置的IPv4地址是Tunnel源地址和目的地址,也就是隧道的起点和终点。GRE隧道主要用于两个边缘路由器后中端系统与边缘路由器之间定期安全通信的稳定连接。采用GRE隧道技术的优点是:通用性好,技术成熟,易于理解。因此,通过这几种隧道技术的比较后,本文对GRE隧道技术进行研究。4GRE隧道简介GRE(GenericRoutingEncapsulation,通用路由封装协议)是由Cisco和NetSmiths公司于1994年提交给IETF的协议。GRE是对某些网络层协议(如:IP,IPX,AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。这是GRE最初的定义,最新的GRE封装规范,已经可以封装二层数据帧了,如PPP帧、MPLS等。在RFC2784中,GRE的定义是“XoverY”,X和Y可以是任意的协议。GRE真的变成了“通用路由封装”。GRE协议实际上是一种封装协议,它提供了将一种协议的报文封装在另一种协议报文中的机制,使报文能够在异种网络中传输。异种报文传输的通道就被称为tunnel(隧道)。GRE隧道不能配置二层信息,但可以配置IP地址。GRE利用为隧道指定的实际物理接口完成转发,转发过程如下:(1)所有发往远端VPN的原始报文,首先被发送到隧道源端。(2)原始报文在隧道源端进行GRE封装,填写隧道建立时确定的隧道源地址和目的地址,然后再通过公共IP网络转发到远端VPN网络。Tunnel是一个虚拟的点对点的连接,提供了一条通路使封装的数据报文能够在这个通路上传输,并且在一个Tunnel的两端分别对数据报进行封装及解封装。一个X协议的报文要想穿越IP网络在Tunnel中传输,必须要经过封装与解封装两个过程,下面以图3的网络为例说明这两个过程:图3封装解封过程5GRE协议GRE协议可以实现对IP、IPX、AppleTalk等协议数据包的封装,这里我们以使用最为广泛的IP协议为例。使用标准的GRE隧道技术,可在IPv4的GRE隧道上承载IPv6数据报文。通过GRE协议封装过的数据包格式如下图所示:图4GRE隧道报文CRKSSRecurflagsVerProtocolTypeChecksum(optional)Offset(optional)keySequenceNumiber(optional)Routing(optional)图5GRE包头部结构在GRE数据包结构中,前面的IP包头部结构是传送数据报头部,用于将其他被封装的数据包封装成IP包并在IP网络中传输,在本文中称之为外部IP报头。GRE报头部用来传送与有效负载数据包有关的控制信息,用来在控制GRE数据包在隧道中的传输以及GRE报文加封装和解封装过程,其结构如图5所示。有效载荷数据包是被封装的其他协议的数据包,若被封装的协议为IP数据包,则有效载荷数据包就是一个IP数据包。6GRE隧道封装过程不管是哪一种隧道协议,其数据包格式都是由乘客协议、封装协议和运输协议3部分组成的。6.1乘客协议乘客协议是指用户要传输的数据,也就是被封闭的数据。为了能对GRE的协议栈能有更好的理解,在这里我们用邮政系统为例。乘客协议就相当于我们所写的信,信的语言可以是汉语、英语、法语等,但具体要如何选择,这个由写信人和读信人自己负责。这就对应于多种乘客协议,对乘客协议数据的解释由隧道双方负责。6.2封装协议封装协议用于建立,保持和拆卸隧道。GRE就属于封装协议,它把乘客协议报文进行了包装,加上了一个GRE头部,然后再把封闭好的原始报文和GRE善,放在IP报文的数据区中,由IP进行传输。封装协议我们可以把它当作是信封,也可以是平信、挂号、EMS等,这对应于多种封装协议。每种封装协议的功能和安全级别都有所不同。6.3运输协议运输协议是乘客协议被封装之后应用的运输协议,IP协议就是常见的运输协议,一般使用IP协议对GRE协议进行运输。运输协议也可以看作是信的运输方式,可以是路运、海运、空运,这就对应于不同的运输协议。6.4GRE的封装过程图6GRE的封装过程图6中的原始数据包,可以是IP报文。当然,GRE也可以封装其它的协议报文,如IPX报文、PPP、MPLS等。总结起来,GRE的封装过程就是:当报文需要经由隧道接口处理时,IP层的输出函数调用tunnel接口的输出函数进行加封装处理。加封装处理结束后,再进行IP转发。GRE隧道对端的解封装过程就是:当IP层接收到GRE报文,检查到外层IP报文头部中的协议号是47时,那么,IP层输入入口函数会根据协议开关表,直接调用GRE的解封装处理函数,对GRE解封装。解封装完成后,再将原始数据报文送入IP输入队列中,以便进行进一步的传输。7RE隧道的协议报文处理过程图7GRE网络隧道图GRE协议报文在隧道中传输时,必须要经过加封装与解封装两个过程。在图7所描述的网络中,办事处网络中主机A与总部网络中主机B的通信过程如下所述:(1)主机A发送的IP报文首先到达路由器A,路由器A连接内部网络的接口收到该IP报文后首先交由IP报文处理进程处理,其检查IP报头中的目的地址域来确定如何路由该IP报文。由于其目的地址为总部网络中的IP地址,则开始进行数据包的加封装,即在该IP报文前加上新的IP报头即外部IP报头和GRE报头。之后将封装好的报文通过GRE隧道接口发送出去。(2)路由器B从GRE隧道接口收到路由器A发送的经过封装的GRE报文后,检查目的地址,发现目的地就是此路由器时,先去掉外部IP报头,将剩下的报文交由GRE协议处理。GRE协议进行检查校验和、序列号等处理,之后进行GRE解封装,即将GRE报头部去掉。再将解封装之后的IP报文交由IP报文处理进程象对待一般IP报文一样对此报文进行处理,即将该IP数据包交给连接内部网络的接口,按照目的地址发送给主机B。8GRE隧道的配置及测试图8网络拓扑图在R1和R3两边分别是一个IPv6网络