1.简介
定义:通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。
GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一种三层隧道封装技术,使报文可以通过GRE隧道透明的传输,解决异种网络的传输问题。
受益:GRE实现机制简单,对隧道两端的设备负担小。
GRE隧道可以通过IPv4网络连通多种网络协议的本地网络,有效利用了原有的网络架构,降低成本。
GRE隧道扩展了跳数受限网络协议的工作范围,支持企业灵活设计网络拓扑。
GRE隧道将不连续的子网连接起来,用于组建VPN,实现企业总部和分支间安全的连接。
2.基本原理
1)实现过程
报文在GRE隧道中传输包括封装和解封装两个过程。如图所示,如果X协议报文从Ingress PE向Egress PE传输,则封装在Ingress PE上完成,而解封装在Egress PE上进行。封装后的数据报文在网络中传输的路径,称为GRE隧道。
-
封装
-
Ingress PE从连接X协议的接口接收到X协议报文后,首先交由X协议处理。
-
X协议根据报文头中的目的地址在路由表或转发表中查找出接口,确定如何转发此报文。如果发现出接口是GRE Tunnel接口,则对报文进行GRE封装,即添加GRE头。
-
根据骨干网传输协议为IP,给报文加上IP头。IP头的源地址就是隧道源地址,目的地址就是隧道目的地址。
-
根据该IP头的目的地址(即隧道目的地址),在骨干网路由表中查找相应的出接口并发送报文。之后,封装后的报文将在该骨干网中传输。
-
-
解封装
解封装过程和封装过程相反。
-
Egress PE从GRE Tunnel接口收到该报文,分析IP头发现报文的目的地址为本设备,则Egress PE去掉IP头后交给GRE协议处理。
-
GRE协议剥掉GRE报头,获取X协议,再交由X协议对此数据报文进行后续的转发处理。
-
2)报文格式
GRE封装后的报文结构如图所示。
-
乘客协议(Passenger Protocol):封装前的报文称为净荷,封装前的报文协议称为乘客协议。
-
封装协议(Encapsulation Protocol):GRE Header是由封装协议完成并填充的,封装协议也称为运载协议(Carrier Protocol)。
-
传输协议(Transport Protocol或者Delivery Protocol):负责对封装后的报文进行转发的协议称为传输协议。
3.GRE的Keepalive检测
由于GRE协议并不具备检测链路状态的功能,如果对端接口不可达,隧道并不能及时关闭该Tunnel连接,这样会造成源端会不断的向对端转发数据,而对端却因隧道不通接收不到报文,由此就会形成数据空洞。
GRE的Keepalive检测功能可以检测隧道状态,即检测隧道对端是否可达。如果对端不可达,隧道连接就会及时关闭,避免因对端不可达而造成的数据丢失,有效防止数据空洞,保证数据传输的可靠性。
-
当GRE隧道的源端使能Keepalive检测功能后,就创建一个定时器,周期地发送Keepalive探测报文,同时通过计数器进行不可达计数。每发送一个探测报文,不可达计数加1。
-
对端每收到一个探测报文,就给源端发送一个回应报文。
-
如果源端的计数器值未达到预先设置的值就收到回应报文,就表明对端可达。如果源端的计数器值到达预先设置的值——重试次数(Retry Times)时,还没收到回送报文,就认为对端不可达。此时,源端将关闭隧道连接。但是源端口仍会继续发送Keepalive报文,若对端Up,则源端口也会Up,建立隧道链接。
注:对于设备实现的GRE Keepalive检测功能,只要在隧道一端配置Keepalive,该端就具备Keepalive功能,而不要求隧道对端也具备该功能。隧道对端收到报文,如果是Keepalive探测报文,无论是否配置Keepalive,都会给源端发送一个回应报文。
4.Ethernet over GRE
通用路由封装协议GRE(Generic Routing Encapsulation)提供了将一种协议报文封装在另一种协议报文中的机制,使报文能够在异种网络中传输,这种在异种网络中传输报文的通道称为隧道(Tunnel)。
如图所示,分支与总部的网络都是以太网络,分支与总部之间通过IP/MPLS骨干网相连,如果用户希望分支与总部之间能够二层互通,可以部署Ethernet over GRE功能,实现以太报文通过GRE隧道进行透传。
Ethernet over GRE是将以太网协议的报文通过GRE封装后,在另一个网络层协议(如IPv4)的网络中传输,具体工作原理如下:
- SwitchA的用户侧物理以太网接口GE1/0/2收到分支网络的以太报文,以太报文中携带了VLAN Tag信息。
- SwitchA从GE1/0/2收到的以太报文后,在设备内基于MAC和VLAN进行二层转发,找到出接口VE1/0/1。
- 以太报文在SwitchA的VE1/0/1上进行出接口处理后,将转发到VE1/0/1绑定的Tunnel 1接口,经过GRE封装(协议代码为0x6558)后,进行后续的GRE转发处理,报文经过GRE隧道转发至SwitchB。
- SwitchB的Tunnel 1接口上对收到的报文进行GRE解封装,检查到协议代码为0x6558后,将以太报文转发给Tunnel 1接口绑定的VE1/0/1接口。
- GRE解封装后的以太网报文进入SwitchB的VE1/0/1以后,在设备内基于MAC和VLAN进行二层转发,找到出接口GE1/0/2。
- SwitchB将以太报文从出接口GE1/0/2发往总部网络
注:目前Ethernet over GRE作为二层隧道,支持VLAN下的单播、广播报文经过隧道转发,不支持组播报文经过隧道转发。
5.GRE应用场景
1)多协议本地网可以通过GRE隧道传输
如图所示,Term1和Term2是运行IPv6的本地网,Term3和Term4是运行IPv4的本地网,不同地域的子网间需要通过公共的IP网络互通。
通过在Switch_1和Switch_2之间采用GRE协议封装的隧道,Term1和Term2、Term3和Term4可以互不影响地进行通信。
2)扩大跳数受限的网络工作范围
在下图中,网络运行IP协议,假设IP协议限制跳数为255。如果两台PC之间的跳数超过255,它们将无法通信。在网络中选取两台设备建立GRE隧道,可以隐藏设备之间的跳数,从而扩大网络的工作范围。
例如,RIP路由的跳数为16时表示路由不可达。此时,可以在两台设备上建立GRE隧道实现逻辑直连,使经过GRE隧道的RIP路由跳数减至16以下,保证路由可达。
3)CE采用GRE隧道接入MPLS VPN
基于MPLS骨干网的VPN服务可以给客户提供比传统IP VPN更优质的服务。因此,MPLS VPN技术是运营商选择的主流VPN技术。但是Internet是基于IP技术的,且基于IP技术的骨干网还是大量存在的。
在MPLS VPN中,为了让用户端设备CE(Customer Edge)接入VPN中往往需要CE与MPLS骨干网的PE(Provider Edge)设备之间有直接的物理链路,即在同一个网络中。在这样的组网中,需要在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间利用公共网络或某私有网络相连,并在CE与PE之间创建GRE隧道。这样,可以看成CE和PE直连。在PE上将VPN与PE-CE之间的接口进行关联时,就可以把GRE隧道当作一个物理接口,在这个接口上进行VPN关联。
采用GRE隧道接入MPLS VPN时,GRE的实现模式可按以下三种情形来划分:
-
穿过公网的GRE:GRE隧道关联某个VPN实例,GRE隧道的源地址和目的地址为公网地址,不属于VPN实例。
-
穿越VPN的GRE:GRE隧道关联某个VPN实例(例如VPN1),GRE隧道的源接口绑定了另一个VPN实例(例如VPN2),即GRE隧道需要穿越VPN2。
-
私有网络的GRE:GRE隧道关联某个VPN实例,而GRE隧道的源接口(或源地址)和目的地址也属于该VPN实例。
- 穿过公网的GRE
在这种组网中,CE和PE都需要有属于公网的接口,该接口需要使用公网IP地址。CE的公网路由表中需要有到PE的路由,PE公网路由表也需要有到CE的路由
- 穿越VPN的GRE
与穿过公网的GRE相比,穿越VPN的GRE不同点在于CE不是通过公共网络与PE互连,而是通过另一个VPN(如VPN2)与PE互连。也就是说,CE上流向PE的私网数据的出接口及PE上返回该CE的私网数据流量的出接口都属于VPN2。
例如图1-8中,PE1和PE2是一级运营商的MPLS骨干网边界设备。VPN2是属于二级运营商的一个VPN。CE1和CE2是属于用户的设备。
为了在此网络环境中部署一个基于MPLS网络的VPN(如VPN1),可以在PE1和CE1之间搭建一个穿越VPN2的GRE,在逻辑上使CE1与PE1直连。
- 私有网络的GRE
在这种组网中,GRE隧道的源和目的地址都属于私有网络,在实际的应用中在私有网络里再创建一个隧道到PE,没有什么价值,因此不推荐使用。图1-9中,不如直接使用R1作为CE设备。
4)通过Ethernet over GRE构建虚拟二层网络
如图1-10所示,SwitchA连接分支以太网络,SwitchB连接总部以太网络,总部和分支之间通过IP/MPLS骨干网络互联。现在,总部和分支之间的以太报文需要通过GRE隧道进行透传,实现总部和分支之间的二层互通。
为实现上述需求,可以在SwitchA和SwitchB上分别配置Ethernet over GRE功能。在SwitchA和SwitchB上分别创建VE接口,并加入相应的VLAN,将VE接口绑定到GRE隧道上。这样对应VLAN的报文可以通过VE接口转发至GRE隧道内,从而实现以太网报文通过GRE隧道进行转发,最终实现总部和分支之间的二层互通。
5)通过Ethernet over GRE实现AC与无线网关之间的二层互通
为最大限度的方便用户随时随地接入网络,越来越多的地方在建设无线城市项目,在Wi-Fi用户接入解决方案中,可以利用Ethernet over GRE技术,使AP设备可以将接入的用户流量以以太报文形式封装在GRE隧道里透明地发送到WLAN GW设备上,WLAN GW设备收到用户报文后剥掉GRE报文头完成IP地址分配及Internet接入等功能。
注:本场景中使用S交换机随板AC实现管理AP和数据转发的功能。
如上图所示,为某无线城市项目的无线用户接入的典型组网。其中AP负责用户流量的接入,AC设备负责AP的接入和用户的认证,WLAN GW作为用户网关负责IP地址分配及Internet接入等功能。在传统的解决方案中,AP可以直接和WLAN GW建立GRE隧道,实现无线用户接入。这种方案适用于规模较小的网络,当AP数量超过一定规模以后,会导致WLAN GW上的GRE隧道数量非常多,有可能超过WLAN GW的GRE隧道规格。同时,由于WLAN GW上的GRE隧道基于用户流量动态创建,如果大量的GRE隧道频繁建立及删除会导致WLAN GW上资源消耗严重,影响系统性能。
为解决上述问题,可以在AP和AC之间建立CAPWAP隧道,AC和WLAN GW之间建立GRE隧道,用户流量先通过CAPWAP隧道到达AC,再通过GRE隧道到达WLAN GW。这种场景下,WLAN GW上只需要创建一条GRE隧道,大大减少了GRE隧道的数量,减少了系统消耗。这种方案需要AC支持Ethernet over GRE功能,华为S系列交换机支持Ethernet over GRE功能,可以用作AC满足这种方案下的AC与无线网关之间的二层互通功能。
来源:https://www.cnblogs.com/xinghen1216/p/12557849.html