您好,欢迎访问三七文档
Keywords关键词:VPNGRE隧道PDSNWAPGWAbstract摘要:在传统的VPN组网场合中,GRE隧道技术得到了广泛的应用。本文介绍了GRE基本原理以及GRE的应用等,可供使用GRE技术的人员参考。Listofabbreviations缩略语清单:Abbreviations缩略语Fullspelling英文全名Chineseexplanation中文解释VPNVirtualPrivateNetwork虚拟专用网GREGenericRoutingEncapsulation通用路由封装CDMACodeDivisionMultipleAccess码分多路复用PDSNPacketDataServingNode分组数据业务节点PCFPacketControlFunction分组控制功能UDPUserDatagramProtocol用户数据报协议PPPThePoint-to-PointProtocol点到点协议MPLSMulti-ProtocolLabelSwitching多协议标签交换L2TPLayer2TunnelingProtocol二层隧道协议IPSecInternetProtocolSecurityextensionsIP协议安全扩展PPTPPoint-toPointTunnelingProtocol点到点隧道协议WINGWirelessIntegratedgatewayforNextGeneration综合接入网关IPGWInternetProtocolGateway互联网协议网关WAPGWWirelessApplicationProtocolGateway无线应用协议网关一、概述在传统的VPN组网场合中,GRE隧道技术得到了广泛的应用。本文介绍了GRE基本原理以及GRE的应用等,可供使用GRE技术的人员参考。二、VPN简介VPN(VirtualPrivateNetwork,虚拟专用网)是一种基于公共数据网的服务,它依靠ISP(InternetServiceProvider)和NSP(NetworkServiceProvider),在公共网络中建立虚拟专用通信网络。VPN可以极大地降低用户的费用,并且提供比传统专线方式更强的安全性和可靠性。1.隧道技术在VPN中广泛使用了各种各样的隧道技术,有二层隧道技术,也有三层隧道技术。那么,什么是隧道呢?隧道是一种封装技术,它利用一种网络协议来传输另一种网络协议,即利用一种网络传输协议,将其他协议产生的数据报文封装在它自己的报文中,然后在网络中传输。实际上隧道可以看作一个虚拟的点到点连接。例如,GRE隧道仅支持点到点的业务接入。隧道技术简单地说就是:原始报文在A地进行封装,到达B地后把封装去掉,还原成原始报文,这样就形成了一条由A到B的通信隧道。隧道技术就是指包括数据封装、传输和解封装在内的全过程。隧道是通过隧道协议实现的,隧道协议规定了隧道的建立,维护和删除规则,以及怎样将原始数据封装在隧道中进行传输。2.隧道协议分类隧道协议可分为:(1)第二层隧道协议,如PPTP、L2TP(2)第三层隧道协议,如GRE、IPsec三、GRE简介GRE(GenericRoutingEncapsulation,通用路由封装协议)是由Cisco和NetSmiths公司于1994年提交给IETF,标号为RFC1701、RFC1702。2000年,Cisco等公司又对GRE协议进行了修订,称为GREV2,标号为RFC2784。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网络四、GRE的封装过程无论是何种隧道协议,其数据包格式都是由乘客协议、封装协议和运输协议3部分组成的。例如,以GRE为例,GRE协议栈如下:图1GRE协议栈原始IP报头净荷1.GRE的封装过程图2说明了GRE的封装过程:原始IP报文新IP报头GRE头原始IP报头净荷GRE封装后的IP报文图2GRE的封装过程图2中的原始数据包,可以是IP报文。当然,GRE也可以封装其它的协议报文,如IPX报文、PPP、MPLS等。总结起来,GRE的封装过程如下:当报文需要经由隧道接口处理时,IP层的输出函数调用tunnel接口的输出函数进行加封装处理。加封装处理结束后,再进行IP转发。GRE隧道对端的解封装过程如下:当IP层接收到GRE报文,检查到外层IP报文头部中的协议号是47时,那么,IP层输入入口函数会根据协议开关表,直接调用GRE的解封装处理函数,对GRE解封装。解封装完成后,再将原始数据报文送入IP输入队列中,以便进行进一步的传输。为了对GRE报文有一个更好的理解,我们重点学习GRE报文头部的格式。五、GRE报文头部格式实际上,GRE报文头部没有一个统一的格式,每个厂家具体实现的GRE头部格式会有所差别。但基本上都是以RFC1701定义的GRE头部格式为基础的。1.RFC1701定义的GRE报文头部根据RFC1701,GRE数据报文的头部有下面的格式:058131631CRKSsRecurFlagsVerProtocolTypechecksum(optional)Offset(optional)Key(optional)SequenceNumber(optional)Routing(optional)Payload图3RFC1701定义的GRE报文头部格式下面,我们对GRE报文头部进行详细的说明。(1)C、R、K、S、s:GRE报文头部的最前5位,是一些标志位。其含义如下:表1GRE报文头部的最前5位的含义全称简称值含义ChecksumPresentC0Checksum域无效1Checksum域有效RoutingPresentR0Offset、Routing域无效1Offset、Routing域有效KeyPresentK0GRE头部无Key域1GRE头部出现Key域SequenceNumberPresentS0GRE头部无SequenceNumber域1GRE头部出现SequenceNumber域StrictSourceRoutes0在其它文档定义1(2)Recur:bits5-7。Recur域是记录允许的封装次数的计数器。GRE提供了一种特定的机制来防止递归封装。如果路由器想对经过GRE封装的数据包作进一步封装,应在封装前检查这个域。如果Recur域为非0,那么数据包还可以进行封装,新的GRE报头中的Recur域取值将减1;否则,如果Recur域的值已经是0了,那么这个包不可以再进行封装(3)Flags:bits8-12。在RFC1701中没有定义(4)Ver:bits13-15。版本号。在RFC1701中,Ver必须为0(5)ProtocolType:2byte。ProtocolType指出GRE报文净荷的协议类型。RFC1701定义的常见值如下:0x0800:IP0x8137:NovellIPX(6)Offset:2byte。Offset域指出Routing域到净荷的字节偏移(7)Checksum:2byte。Checksum包括GRE头部和净荷的IP校验和。当ChecksumPresent位为1时,Checksum域有效(8)Key:4byte。Key域用来标识隧道内部单个的业务流。属于同一个业务流的数据报文使用同一个Key值来封装,隧道的拆封点根据Key域的值识别属于某个业务流的数据报文。当KeyPresent位为1时,KEY域有效(9)SequenceNumber:4byte。SequenceNumber域用来维持GRE隧道内数据报文的顺序。当SequenceNumberPresent位为1时,SequenceNumber域有效(10)Routing:4byte。Routing域是可选的,当RoutingPresent位为1时,Routing域有效(11)Payload:净荷。GRE所封装的协议报文以上介绍的GRE头部格式,是在最早的RFC1701中定义的。GRE最新RFC文档是:RFC2784。2.RFC2784定义的GRE报文头部RFC2784规定的GRE头部格式如下:01141631CReserved0VerProtocolTypechecksum(optional)Reserved1(optional)Payload图4RFC2784定义的GRE报文头部格式可见,RFC2784定义的GRE报文头部格式,比RFC1701定义的更加简单,更加通用。我们把RFC1701定义的GRE头部的前几个标志位置为0,相应地,GRE头部中的Key、SequenceNumber等域就没有了,于是就变成了RFC2784定义的GRE通用头部格式。3.其它厂家规定的GRE报文头部由于GRE已经发展为可以封装任意协议了,协议本身变得比较复杂。GRE协议在实际应用中,一般是和其它协议一起结合使用。不同厂家定义的GRE头部格式,和RPC1701、RFC2784规定的格式又有着细微的不同,可以说是扩展的GRE。例如,微软等公司定义的封装PPP帧的GRE头部,是在RFC1701的基础上定义的。只要保证封装方和解封装方采用相同的GRE规范,甚至是厂家自己定义的私有GRE头部格式(比如在标准GRE头部中加入“A”标志位等),一般在应用时不会出现问题,只是不同厂家设备的互联互通性差一点而已。所以,GRE头部没有一个统一的封装格式,不同的GRE头部,与RFC1701、RFC2784定义会有所差别。这也是我们在和不同厂家设备进行GRE隧道对接时,需要考虑的GRE头部格式不一致的问题。所以,在实际应用GRE时,请参考相关厂家的GRE文档。六、普通GRE隧道配置GRE作为一种通用的封装技术,本身涉及到很多方面的知识,比较复杂。但普通GRE隧道的配置比较简单,如果我们对RFC1701规定的GRE头部格式比较熟悉,那么,对配置命令也很好理解。1.创建Tunnel接口创建一个隧道(Tunnel)接口很简单,只要指定好Tunnel接口的编号就可以了。例如,在PDSN上创建一个Tunnel1/0/1,如下:Router#conft//进入全局配置模式Router(config)#interfaceTunnel0//创建Tunnel接口2.配置Tunnel接口的网络地址Tunnel接口的网络地址可以不是公网地址,可以配置为私网IP地址。但隧道两端的网络地址应该在同一网段。假设我们我们配置Tunnel接口的网络地址为:192.168.0.2,掩码:255.255.255.0。配置命令行如下:Router(config-if)#ipadd192.168.0.2255.255.255.0//配置Tunnel接口的网络地址3.配置Tunnel接口的源端地址和目的端地址在创建Tunnel接口后,还需要指定隧道的源端地址和目的端地址,一个包含这些都是真实的公网IP地址,前者是发出GRE报文的接口IP地址,后者是接收GRE报文的接口IP地址。在这里,我们要明白,为什么要配置Tunnel接口的源端地址和目的端地址呢?我们知道,最终的GRE报文还要加上一个含有公网IP地址的IP头部,配置的Tunnel接口的源端地址和目的端地址就是用于运输协议
本文标题:GRE隧道技术
链接地址:https://www.777doc.com/doc-1735816 .html