什么是通用路由封装(GRE:Generic Routing Encapsulation)?
通用路由封装(GRE:Genetic Routing Encapsulation)是一种隧道技术,也是实现VPN的一种方式,它规定了如何将一种网络协议下的数据报文封装在另外一种网络协议中,使这些被封装的数据报能够在另一个网络层协议中传输。
为什么需要通用路由封装?
通用路由封装(GRE:Genetic Routing Encapsulation)是一种隧道技术,它规定了如何将一种网络协议下的数据报封装在另外一种网络协议中,使这些被封装的数据报能够在另一个网络层协议中传输。
骨干网中一般采用单一网络协议(例如IPv4)进行数据报文传输,但是不同的非骨干网上可能会使用不同网络协议(例如:IPv6、IPX等)进行数据报文传输。由于骨干网与非骨干网使用的协议不同,这样将导致非骨干网之间无法通过骨干网传输数据报文。GRE协议通过实现一种协议封装另一种协议来解决这个问题。
如下图所示,group1和group2是运行Novell IPX的非骨干网,term1和term2是运行IPv6的非骨干网,中间的骨干网使用的是IPv4网络。为了实现group1和group2、term1和term2通过骨干网传输数据,可以在DeviceA和DeviceB之间采用GRE协议建立隧道,当数据报文从group1或term1发送至DeviceA后,将会被封装在一个GRE数据包中,所得的GRE数据包可以封装在IPv4协议中,然后被转发。
GRE组网图
GRE是如何工作的
系统收到需要进行封装和路由的某网络层协议(如IPX)数据时,将首先对其加上GRE报文头,使之成为GRE报文,再将其封装在另一协议(如IP)中。这样,此报文的转发就可以完全由IP协议负责。封装后的报文的格式如下图所示:
- 净荷(Payload Packet):系统收到的需要封装和传输的数据报文称为净荷。
- 乘客协议(Passenger Protocol):封装前的报文所属的协议称为乘客协议。
- 封装协议(Encapsulation Protocol):上图的GRE协议称为封装协议,也称为运载协议(Carrier Protocol)。
- 传输协议(Transport Protocol或者Delivery Protocol):负责对封装后的报文进行转发的协议称为传输协议。
GRE首部各字段解释如下:
字段 |
长度 |
描述 |
---|---|---|
C |
1 bit |
校验和验证位。如果该位置1,表示GRE头插入了校验和(Checksum)字段;该位为0表示GRE头不包含校验和字段。 |
K |
1 bit |
关键字位。如果该位置1,表示GRE头插入了关键字(Key)字段;该位为0表示GRE头不包含关键字字段。 |
Recursion |
3 bits |
用来表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。 |
Flags |
5 bits |
预留字段。当前必须设为0。 |
Version |
3 bits |
版本字段,必须置为0。Version为1是使用在RFC2637的PPTP中。 |
Protocol Type |
16 bits |
乘客协议的协议类型。 |
Checksum |
16 bits |
对GRE头及其负载的校验和字段。 |
Key |
31 bits |
关键字字段,隧道接收端用于对收到的报文进行验证。 |
报文在GRE隧道中传输包括封装和解封装两个过程。如下图所示,如果私网报文从Ingress PE向Egress PE传输,则封装在Ingress PE上完成;而解封装在Egress PE上进行。
私有网络通过GRE隧道互连
整体封装与解封装的流程如下所示:
- Ingress PE收到报文后,交由乘客协议处理,乘客协议判断出接口为GRE Tunnel接口。
- Ingress PE将报文发送到对应的tunnel接口,并给报文加GRE报文头。
- Ingress PE再根据配置信息,给报文加上IP头(IP头中包含源地址和目的地址)。
- Ingress PE根据IP头中的目的地址,在公网路由表中查找相应的出接口并发送报文。
- Egress PE收到报文并分析IP头发现自己是目的地。
- Egress PE去掉IP头和GRE头。
- Egress PE判断报文的乘客协议为私网上运行的协议,于是交由私网处理该报文。私网正常转发该报文。
GRE在网络中的应用
扩大跳数受限的网络工作范围
扩大网络工作范围
在上图中,网络运行IP协议,假设IP协议限制跳数为255。如果两台PC之间的跳数超过255,它们将无法通信。在网络中使用隧道可以隐藏一部分步跳,从而扩大网络的工作范围。
将不连续的子网连接起来,用于组建VPN
使用GRE隧道可以将不连续的子网连接起来,实现跨越广域网的VPN。
例如,两个VPN子网site1和site2位于不同的城市,通过在网络边界设备之间建立GRE隧道,可以把这两个子网连接成一个连续的VPN网络。
GRE可应用于L2VPN,也可以应用于L3VPN。有两种模式:
- CPE-based VPN中,GRE隧道两端驻留在CE上,如下图所示。
GRE in CPE-based VPN在此模式中,CE(Customer Edge)指的就是客户终端设备CPE。
- Network-based VPN中,GRE隧道两端驻留在PE上,如下图所示。
GRE in Network-based VPN
通常,VPN骨干网使用LSP作为公网隧道。但如果骨干网核心设备(P设备)只提供纯IP功能,不具备MPLS功能;而网络边缘的PE具备MPLS功能,这样,就不能使用LSP作为公网隧道。此时,可以使用GRE隧道替代LSP,在核心网提供三层或二层VPN解决方案。其私网报文在VPN骨干网中传输时,报文格式如下图所示。
含MPLS标签的GRE报文格式
GRE隧道也可以作为非MPLS的VPN骨干网隧道。这种情况下,私网报文在VPN骨干网中传输时不含有MPLS标签,其报文格式如下图所示。
不含MPLS标签的GRE报文格式
CE采用GRE隧道接入MPLS VPN
在MPLS VPN中,为了让用户端设备CE接入VPN中往往需要CE与MPLS骨干网的PE设备之间有直接的物理链路,即在同一个网络中。在这样的组网中,需要在PE上将VPN与PE到CE的物理接口进行关联。
如下图所示,在实际组网中,并非所有的CE和PE都能用物理链路直接相连。例如,很多已经连接到Internet或基于IP技术的骨干网上的机构,其CE和PE设备之间地理位置上相距甚远,不可能直接接入到MPLS骨干网的PE设备上。这样就无法通过Internet或者是IP骨干网直接访问MPLS VPN内部的站点。
CE使用基于IP技术的骨干网接入MPLS VPN骨干网
为了让CE能接入到MPLS VPN且可以保证数据传输的安全性,可以在CE和PE间利用公共网络或某私有网络相连,并在CE与PE之间创建GRE隧道。这样,可以看成CE和PE直连。在PE上将VPN与PE-CE之间的接口进行关联时,就可以把GRE隧道当作一个物理接口,在这个接口上进行VPN关联。
采用GRE隧道接入MPLS VPN时,GRE的实现模式可按以下三种情形来划分:
- 私有网络的GRE:GRE隧道关联某个VPN实例,而GRE隧道的源接口(或源地址)和目的地址也属于该VPN实例。
- 穿过公网的GRE:GRE隧道关联某个VPN实例,GRE隧道的源地址和目的地址为公网地址,不属于VPN实例。
- 穿越VPN的GRE:GRE隧道关联某个VPN实例(例如VPN1),GRE隧道的源接口绑定了另一个VPN实例(例如VPN2),即GRE隧道需要穿越VPN2。
SRv6 TE Policy over GRE
如下图所示,当P1/P2/P3不完全支持IPv6时,如果用户需要在PE1和PE2之间建立双向SRv6 TE Policy路径,则可以在P1和P3之间建立GRE隧道,然后跨越GRE隧道建立SRv6 TE Policy。
GRE与VPN、IPsec、L2TP的关系
同样作为数据通信中的隧道技术,VPN、IPsec和L2TP也是通信设备中常见的协议模型。三者互相配合,在性能、覆盖范围、应用场景中互相补充,满足通信场景中的多种需求。
GRE与VPN
GRE是实现VPN的一种方式。VPN的本质即提供一种点到点的、虚拟的、安全的、逻辑上的通道,而根据组网模型的不同,VPN可以分为VPDN(Virtual Private Dial Network)、VPRN(Virtual Private Routing Network)、VPWS(Virtual Private Wire Service)和VPLS(Virtual Private LAN Service)。其中VPRN的实现方式包括两种:一是使用传统VPN协议,如GRE等,另一种是使用MPLS(Multi-Protocol Label Switching)。因此这里GRE是实现VPN的一种方式。
GRE与IPsec
GRE与IPsec都是一种隧道的概念,二者的主要区别在于安全性。GRE旨在两种不同协议下的网络中,创建一个未加密的隧道;而IPsec可在IP网络中创建加密隧道,它的加密和身份验证机制可防止窃听和数据修改。但IPSec目前只能对单播报文进行加密保护,不能对组播报文进行加密保护,而GRE可以将组播报文封装成单播报文,但不能对报文进行加密保护,这就是为什么GRE经常和IPSec组合使用的原因。
GRE与L2TP
GRE和L2TP都是一种隧道协议,其主要区别在于L2TP是一种用户接入协议,而GRE是一种网络协议,因此L2TP涉及到用户侧的接入,而GRE只关乎网络端的隧道连通。除此之外,二者的报文结构也有较大差异:GRE的报文结构比较简单,仅包含GRE头和隧道负载,而L2TP协议在用户接入端需要封装PPP协议和以太网帧。
- 作者: 梁秀丽,黄鹤飞
- 最近更新: 2024-11-16
- 浏览次数: 13957
- 平均得分: