对于IPv4 GRE和IPv6 GRE都支持的特性,正文中如果不做特殊说明,则表示二者实现无差异。IPv4 GRE和IPv6 GRE的实现差异,请参考附录。
GRE(Generic Routing Encapsulation)是通用路由封装协议,可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报进行封装,使这些被封装的数据报文能够在IPv4网络中传输。
GRE提供了将一种协议的报文封装在另一种协议报文中的机制,使报文能够在异种网路中传输,而异种报文传输的通道称为Tunnel。
NE40E支持如下GRE:
为了使某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的报文能够在IPv4网络中传输,可以将某些网络层协议的报文进行封装,以此解决了异种网络的传输问题。
GRE也可以作为VPN的第三层隧道协议,为VPN数据提供透明传输通道。目前,只有IPv4 L3VPN支持GRE隧道,IPv6 L3VPN暂不支持GRE隧道。
GRE对设备的性能的要求较低,可以在不支持MPLS的设备间建立隧道。
骨干网中一般采用单一网络协议(例如IPv4)进行数据报文传输,但是不同的非骨干网上可能会使用不同网络协议(例如:IP、IPv6、IPX等)进行数据报文传输。由于骨干网与非骨干网使用的协议不同,这样将导致非骨干网之间无法通过骨干网传输数据报文。GRE协议通过实现一种协议封装另一种协议来解决这个问题。
如图3-1所示,group1和group2是运行Novell IPX的非骨干网,term1和term2是运行IPv6的非骨干网,中间的骨干网使用的是IPv4网络。为了实现group1和group2、term1和term2通过骨干网传输数据,可以在DeviceA和DeviceB之间采用GRE协议建立隧道,当数据报文从group1或term1发送至DeviceA后,将会被封装在一个GRE数据包中,所得的GRE数据包可以封装在IPv4协议中,然后被转发。
图3-1 GRE组网图
报文在GRE隧道中传输包括封装和解封装两个过程。如图3-5所示,如果私网报文从Ingress PE向Egress PE传输,则封装在Ingress PE上完成;而解封装在Egress PE上进行。
图3-5 私有网络通过GRE隧道互连
在网络中部署GRE隧道,有益于以下三个方面:
由于GRE协议并不具备检测链路状态的功能。如果远端端口不可达,隧道并不能及时关闭该Tunnel连接,这样会造成源端会不断的向对端转发数据,而对端却因Tunnel不通而丢弃所有报文,由此就会形成数据发送的空洞。
NE40E实现了GRE隧道的链路状态检测功能(Keepalive检测功能)。Keepalive检测功能用于时刻检测隧道链路是否处于Keepalive状态,即检测隧道对端是否可达。如果对端不可达,隧道连接就会及时关闭,避免形成数据空洞。
如果GRE隧道源端使能Keepalive检测功能,则会周期地发送Keepalive探测报文给对端。若对端可达,则源端会收到对端的回应报文;否则,收不到对端的回应报文。具体过程如下:
对于NE40E实现的GRE,只要在隧道一端配置Keepalive,该端就具备Keepalive功能,而不要求隧道对端也具备该功能。隧道对端收到报文,如果是Keepalive探测报文,无论是否配置Keepalive,都会给源端发送一个回应报文。
Keepalive检测功能可以检测隧道状态,避免因对端不可达而造成的数据丢失,保证数据传输的可靠性。
GRE支持识别关键字验证。识别关键字(key)是指对Tunnel接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文。
相关标准中规定:若GRE报文头中的K位为1,则在GRE头中插入关键字字段,收发双方将进行通道识别关键字的验证。
关键字是一个四字节长的数,在报文封装时被插入GRE头。关键字的作用是标志隧道中的流量。属于同一流量的报文使用相同的关键字。在报文解封装时,隧道端将基于关键字来识别属于相同流量的数据报。
只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。这里的“完全一致”是指两端都不设置识别关键字;或者两端都设置关键字,且关键字的值相等。
图3-6 扩大网络工作范围
在图3-6中,网络运行IP协议,假设IP协议限制跳数为255。如果两台PC之间的跳数超过255,它们将无法通信。在网络中使用隧道可以隐藏一部分步跳,从而扩大网络的工作范围。
使用GRE隧道可以将不连续的子网连接起来,实现跨越广域网的VPN。
例如,两个VPN子网Site1和Site2位于不同的城市,通过在网络边界设备之间建立GRE隧道,可以把这两个子网连接成一个连续的VPN网络。
GRE可应用于L2VPN,也可以应用于L3VPN。有两种模式:
通常,VPN骨干网使用LSP作为公网隧道。但如果骨干网核心设备(P设备)只提供纯IP功能,不具备MPLS功能;而网络边缘的PE具备MPLS功能,这样,就不能使用LSP作为公网隧道。此时,可以使用GRE隧道替代LSP,在核心网提供三层或二层VPN解决方案。其私网报文在VPN骨干网中传输时,报文格式如图3-9。
图3-9 含MPLS标签的GRE报文格式
GRE隧道也可以作为非MPLS的VPN骨干网隧道。这种情况下,私网报文在VPN骨干网中传输时不含有MPLS标签,其报文格式如图3-10。
图3-10 不含MPLS标签的GRE报文格式
在MPLS VPN中,为了让用户端设备CE(Customer Edge)接入VPN中往往需要CE与MPLS骨干网的PE(Provider Edge)设备之间有直接的物理链路,即在同一个网络中。在这样的组网中,需要在PE上将VPN与PE到CE的物理接口进行关联。
如图3-11所示,在实际组网中,并非所有的CE和PE都能用物理链路直接相连。例如,很多已经连接到Internet或基于IP技术的骨干网上的机构,其CE和PE设备之间地理位置上相距甚远,不可能直接接入到MPLS骨干网的PE设备上。这样就无法通过Internet或者是IP骨干网直接访问MPLS VPN内部的站点。
图3-11 CE使用基于IP技术的骨干网接入MPLS VPN骨干网
为了让CE能接入到MPLS VPN且可以保证数据传输的安全性,可以在CE和PE间利用公共网络或某私有网络相连,并在CE与PE之间创建GRE隧道。这样,可以看成CE和PE直连。在PE上将VPN与PE-CE之间的接口进行关联时,就可以把GRE隧道当作一个物理接口,在这个接口上进行VPN关联。
采用GRE隧道接入MPLS VPN时,GRE的实现模式可按以下三种情形来划分:
图3-12 私有网络的GRE示意图
如图3-12所示,GRE隧道的源和目的地址都属于私有网络。在实际的应用中在私有网络里再创建一个隧道到PE的使用价值不高,因此不推荐使用,建议直接使用Device1作为CE设备。
在这种组网中,CE和PE都需要有属于公网的接口,该接口需要使用公网IP地址。CE的公网路由表中需要有到PE的路由,PE公网路由表也需要有到CE的路由。
图3-13 穿越公网的GRE示意图
此外,为了让CE上的私网流量通过隧道传输到PE上,CE的路由表中,到远端site网段路由的出接口为GRE隧道接口,下一跳为隧道对端接口的IP地址。
与穿过公网的GRE相比,穿越VPN的GRE不同点在于CE不是通过公共网络与PE互连,而是通过另一个VPN(如VPN2)与PE互连。也就是说,CE上流向PE的私网数据的出接口及PE上返回该CE的私网数据流量的出接口都属于VPN2。
图3-14 穿越VPN的GRE示意图
例如图3-14中,PE1和PE2是一级运营商的MPLS骨干网边界设备。VPN2是属于二级运营商的一个VPN。CE1和CE2是属于用户的设备。
为了在此网络环境中部署一个基于MPLS网络的VPN(如VPN1),可以在PE1和CE1之间搭建一个穿越VPN2的GRE,在逻辑上使CE1与PE1直连。
ERSPAN是一种流量镜像协议,它允许向一个乃至多个端口或VLAN做流量镜像。这些流量镜像将被发送到服务器,用于做流量监控。
如图3-15所示,交换机A通过IP网络向交换机B发送流量。同时为做流量监控,交换机A通过ERSPAN将交换机A发给交换机B的流量做出镜像流量,即发送备份流量到交换机C,这样,只需将分析或侦听设备连接至监控端口,即可实现对被监控端口的分析和侦听。通过建立GRE隧道,ERSPAN允许镜像报文跨越一个IP网络,将ERSPAN报文封装成GRE报文在IP网络内传输到交换机C上。
图3-15 GRE在ERSPAN网络中应用的组网图