您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

详解通用路由封装协议GRE

时间:2020-12-30 15:28:53  来源:  作者:

GRE介绍

 

定义

对于IPv4 GRE和IPv6 GRE都支持的特性,正文中如果不做特殊说明,则表示二者实现无差异。IPv4 GRE和IPv6 GRE的实现差异,请参考附录。

GRE(Generic Routing Encapsulation)是通用路由封装协议,可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报进行封装,使这些被封装的数据报文能够在IPv4网络中传输。

GRE提供了将一种协议的报文封装在另一种协议报文中的机制,使报文能够在异种网路中传输,而异种报文传输的通道称为Tunnel。

NE40E支持如下GRE:

  • 一维Tunnel接口的GRE隧道,也可称为分布式GRE,GRE隧道报文直接在入接口板上进行封装和解封装处理,分布式GRE使用的是一维Tunnel接口。同时配置复杂流分类、car等业务时,可能会出现业务占用带宽翻倍的问题。

目的

为了使某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的报文能够在IPv4网络中传输,可以将某些网络层协议的报文进行封装,以此解决了异种网络的传输问题。

GRE也可以作为VPN的第三层隧道协议,为VPN数据提供透明传输通道。目前,只有IPv4 L3VPN支持GRE隧道,IPv6 L3VPN暂不支持GRE隧道。

受益

GRE对设备的性能的要求较低,可以在不支持MPLS的设备间建立隧道。

GRE基本原理

 

产生原因

骨干网中一般采用单一网络协议(例如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

 

相关概念

  • GRE报文格式系统收到需要进行封装和路由的某网络层协议(如IPX)数据时,将首先对其加上GRE报文头,使之成为GRE报文,再将其封装在另一协议(如IP)中。这样,此报文的转发就可以完全由IP协议负责。封装后的报文的格式如图3-2所示:图3-2 封装好的GRE报文格式
    净荷(Payload):系统收到的需要封装和传输的数据报称为净荷。乘客协议(Passenger Protocol):封装前的报文协议称为乘客协议。封装协议(Encapsulation Protocol):上述的GRE协议称为封装协议,也称为运载协议(Carrier Protocol)。传输协议(Transport Protocol或者Delivery Protocol):负责对封装后的报文进行转发的协议称为传输协议。例如一个封装在IP Tunnel中的IPX报文的格式可以表示为:图3-3 Tunnel中传输IPX报文的格式 对于IPv6 GRE隧道:传输协议为IPv6协议。需要进行封装和路由的报文目前只支持IPv4报文和IPv6报文。
  • GRE报文头GRE报文头格式如图3-4所示:图3-4 GRE报文头格式
    各字段解释如下:C:校验和验证位。如果该位置1,表示GRE头插入了校验和(Checksum)字段;该位为0表示GRE头不包含校验和字段。K:关键字位。如果该位置1,表示GRE头插入了关键字(Key)字段;该位为0表示GRE头不包含关键字字段。Recursion:用来表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。 相关标准规定该字段默认值为0。相关标准规定当发送和接收端该字段不一致时不会引起异常,且接收端必须忽略该字段。NE40E实现时该字段仅在加封装报文时用作标记隧道嵌套层数,GRE解封装报文时不感知该字段,不会影响报文的处理。Flags:预留字段。当前必须设为0。Version:版本字段,必须置为0。Version为1是使用在相关标准的PPTP中。Protocol Type:乘客协议的协议类型。Checksum:对GRE头及其负载的校验和字段。Key:关键字字段,隧道接收端用于对收到的报文进行验证。因为目前实现的GRE头不包含源路由字段,所以Bit 1、Bit 3和Bit 4都置为0。

报文在GRE中的传输过程

报文在GRE隧道中传输包括封装和解封装两个过程。如图3-5所示,如果私网报文从Ingress PE向Egress PE传输,则封装在Ingress PE上完成;而解封装在Egress PE上进行。

图3-5 私有网络通过GRE隧道互连

详解通用路由封装协议GRE

 

  • 封装Ingress PE从连接私网的接口接收到私网报文后,首先交由私网上运行的协议模块处理。私网协议模块检查私网报文头中的目的地址域在私网路由表或转发表中查找出接口,确定如何路由此包。如果发现出接口是GRE Tunnel接口,则将此报文发给隧道模块。隧道模块收到此报文后进行如下处理:隧道模块根据乘客报文的协议类型和当前GRE隧道所配置的Key参数,对报文进行GRE封装,即添加GRE头。根据配置信息(传输协议为IP),给报文加上IP头。该IP头的源地址就是隧道源地址,IP头的目的地址就是隧道目的地址。将该报文交给IP模块处理。IP模块根据该IP头目的地址,在公网路由表中查找相应的出接口并发送报文。之后,封装后的报文将在该IP公共网络中传输。
  • 解封装解封装过程和封装过程相反。Egress PE从连接公网的接口收到该报文,分析IP头发现报文的目的地址为本设备,且协议字段值为47,表示协议为GRE,于是交给GRE模块处理。GRE模块去掉IP头和GRE报文头,并根据GRE头的Protocol Type字段,发现此报文的乘客协议为私网上运行的协议,于是交由此私网协议处理。此私网协议像对待一般数据报一样对此数据报进行转发。

使用价值

在网络中部署GRE隧道,有益于以下三个方面:

  • 使客户的部署不同协议网络使用单一网络协议进行数据传输。
  • 可以扩大受协议的步跳数限制的网络的工作范围。
  • 将一些不能连续的子网连接起来,用于组建VPN。

Keepalive检测

 

产生原因

由于GRE协议并不具备检测链路状态的功能。如果远端端口不可达,隧道并不能及时关闭该Tunnel连接,这样会造成源端会不断的向对端转发数据,而对端却因Tunnel不通而丢弃所有报文,由此就会形成数据发送的空洞。

NE40E实现了GRE隧道的链路状态检测功能(Keepalive检测功能)。Keepalive检测功能用于时刻检测隧道链路是否处于Keepalive状态,即检测隧道对端是否可达。如果对端不可达,隧道连接就会及时关闭,避免形成数据空洞。

实现过程

如果GRE隧道源端使能Keepalive检测功能,则会周期地发送Keepalive探测报文给对端。若对端可达,则源端会收到对端的回应报文;否则,收不到对端的回应报文。具体过程如下:

  1. 当GRE隧道的源端使能Keepalive检测功能后,就创建一个定时器,周期地发送Keepalive探测报文,同时进行不可达计数。每发送一个探测报文,不可达计数加1。
  2. 对端每收到一个探测报文,就给源端发送一个回应报文。
  3. 如果源端的计数器值未达到预先设置的值就收到回应报文,就表明对端可达,并把不可达计数清零。如果源端的计数器值到达预先设置的值——重试次数(Retry Times)时,还没收到回送报文,就认为对端不可达。此时,源端将关闭隧道连接。

对于NE40E实现的GRE,只要在隧道一端配置Keepalive,该端就具备Keepalive功能,而不要求隧道对端也具备该功能。隧道对端收到报文,如果是Keepalive探测报文,无论是否配置Keepalive,都会给源端发送一个回应报文。

使用价值

Keepalive检测功能可以检测隧道状态,避免因对端不可达而造成的数据丢失,保证数据传输的可靠性。

GRE的安全机制

 

GRE支持识别关键字验证。识别关键字(key)是指对Tunnel接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文。

相关标准中规定:若GRE报文头中的K位为1,则在GRE头中插入关键字字段,收发双方将进行通道识别关键字的验证。

关键字是一个四字节长的数,在报文封装时被插入GRE头。关键字的作用是标志隧道中的流量。属于同一流量的报文使用相同的关键字。在报文解封装时,隧道端将基于关键字来识别属于相同流量的数据报。

只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。这里的“完全一致”是指两端都不设置识别关键字;或者两端都设置关键字,且关键字的值相等。

GRE应用

扩大跳数受限的网络工作范围

 

图3-6 扩大网络工作范围

详解通用路由封装协议GRE

 

在图3-6中,网络运行IP协议,假设IP协议限制跳数为255。如果两台PC之间的跳数超过255,它们将无法通信。在网络中使用隧道可以隐藏一部分步跳,从而扩大网络的工作范围。

将不连续的子网连接起来,用于组建VPN

 

使用GRE隧道可以将不连续的子网连接起来,实现跨越广域网的VPN。

例如,两个VPN子网Site1和Site2位于不同的城市,通过在网络边界设备之间建立GRE隧道,可以把这两个子网连接成一个连续的VPN网络。

GRE可应用于L2VPN,也可以应用于L3VPN。有两种模式:

  • CPE-based VPN中,GRE隧道两端驻留在CE上,如图3-7。图3-7 GRE in CPE-based VPN
  • Network-based VPN中,GRE隧道两端驻留在PE上,如图3-8。图3-8 GRE in Network-based VPN

通常,VPN骨干网使用LSP作为公网隧道。但如果骨干网核心设备(P设备)只提供纯IP功能,不具备MPLS功能;而网络边缘的PE具备MPLS功能,这样,就不能使用LSP作为公网隧道。此时,可以使用GRE隧道替代LSP,在核心网提供三层或二层VPN解决方案。其私网报文在VPN骨干网中传输时,报文格式如图3-9。

图3-9 含MPLS标签的GRE报文格式

详解通用路由封装协议GRE

 

GRE隧道也可以作为非MPLS的VPN骨干网隧道。这种情况下,私网报文在VPN骨干网中传输时不含有MPLS标签,其报文格式如图3-10。

图3-10 不含MPLS标签的GRE报文格式

详解通用路由封装协议GRE

 

CE采用GRE隧道接入MPLS VPN

 

在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骨干网

详解通用路由封装协议GRE

 

为了让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。

私有网络的GRE

图3-12 私有网络的GRE示意图

详解通用路由封装协议GRE

 

如图3-12所示,GRE隧道的源和目的地址都属于私有网络。在实际的应用中在私有网络里再创建一个隧道到PE的使用价值不高,因此不推荐使用,建议直接使用Device1作为CE设备。

穿过公网的GRE

在这种组网中,CE和PE都需要有属于公网的接口,该接口需要使用公网IP地址。CE的公网路由表中需要有到PE的路由,PE公网路由表也需要有到CE的路由。

图3-13 穿越公网的GRE示意图

详解通用路由封装协议GRE

 

此外,为了让CE上的私网流量通过隧道传输到PE上,CE的路由表中,到远端site网段路由的出接口为GRE隧道接口,下一跳为隧道对端接口的IP地址。

穿越VPN的GRE

与穿过公网的GRE相比,穿越VPN的GRE不同点在于CE不是通过公共网络与PE互连,而是通过另一个VPN(如VPN2)与PE互连。也就是说,CE上流向PE的私网数据的出接口及PE上返回该CE的私网数据流量的出接口都属于VPN2。

图3-14 穿越VPN的GRE示意图

详解通用路由封装协议GRE

 

例如图3-14中,PE1和PE2是一级运营商的MPLS骨干网边界设备。VPN2是属于二级运营商的一个VPN。CE1和CE2是属于用户的设备。

为了在此网络环境中部署一个基于MPLS网络的VPN(如VPN1),可以在PE1和CE1之间搭建一个穿越VPN2的GRE,在逻辑上使CE1与PE1直连。

GRE在ERSPAN网络中的应用

 

ERSPAN是一种流量镜像协议,它允许向一个乃至多个端口或VLAN做流量镜像。这些流量镜像将被发送到服务器,用于做流量监控。

如图3-15所示,交换机A通过IP网络向交换机B发送流量。同时为做流量监控,交换机A通过ERSPAN将交换机A发给交换机B的流量做出镜像流量,即发送备份流量到交换机C,这样,只需将分析或侦听设备连接至监控端口,即可实现对被监控端口的分析和侦听。通过建立GRE隧道,ERSPAN允许镜像报文跨越一个IP网络,将ERSPAN报文封装成GRE报文在IP网络内传输到交换机C上。

图3-15 GRE在ERSPAN网络中应用的组网图

详解通用路由封装协议GRE


Tags:路由封装协议   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
GRE介绍 定义对于IPv4 GRE和IPv6 GRE都支持的特性,正文中如果不做特殊说明,则表示二者实现无差异。IPv4 GRE和IPv6 GRE的实现差异,请参考附录。GRE(Generic Routing Encapsulati...【详细内容】
2020-12-30  Tags: 路由封装协议  点击:(230)  评论:(0)  加入收藏
▌简易百科推荐
写一个shell获取本机ip地址、网关地址以及dns信息。经常会遇到取本机ip、网关、dns地址,windows一个命令ipconfig /all全部获取到,但linux系统却并非如此。linux系统都自带ifc...【详细内容】
2021-12-27  K佬食古    Tags:shell   点击:(0)  评论:(0)  加入收藏
步骤1、配置 /etc/sysconfig/network-scripts/ifcfg-eth0 里的文件。it动力的CentOS下的ifcfg-eth0的配置详情:[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifc...【详细内容】
2021-12-24  忆梦如风    Tags:网卡   点击:(9)  评论:(0)  加入收藏
1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录find . -name “*.tar” -execmv {}./backup/ ;注解:find –name 主要用于查找某个文件名字,-exec 、xargs可...【详细内容】
2021-12-17  郭主任    Tags:运维   点击:(18)  评论:(0)  加入收藏
对于经常上网的朋友来说,除了手机购物上网,pc端玩网页游戏还是很多小伙伴首选的,但是有时候明明宽带链接上了,打开浏览器却出现上不了网的现象,下面小编要来跟大家说说电脑有网络...【详细内容】
2021-12-16  小白系统    Tags:网页无法打开   点击:(28)  评论:(0)  加入收藏
在访问像github、gitlab这样的外国网站时,很有可能会出现页面加载不出来或找不到页面的错误。这时候有的朋友就会以为是网络的问题,于是把Wifi断掉连上自己手机的热点,结果却还...【详细内容】
2021-12-15  启施技术IT狼叔    Tags:外网   点击:(14)  评论:(0)  加入收藏
网络地址来源:获取公网IP地址 https://ipip.yy.com/get_ip_info.phphttp://pv.sohu.com/cityjson?ie=utf-8http://www.ip168.com/json.do?view=myipaddress...【详细内容】
2021-12-15  韦廷华12    Tags:外网ip   点击:(14)  评论:(0)  加入收藏
准备好软件IPOP、用ENSP模拟一下华为交换机 启动交换机 <Huawei>sysEnter system view, return user view with Ctrl+Z.[Huawei]sysname FTPClient[FTPClient]interface vla...【详细内容】
2021-12-15  思源Edward    Tags:交换机   点击:(22)  评论:(0)  加入收藏
我们经常用到netstat命令查看主机连接状况,包括连接ip、端口、状态等,今天就练习下shell分析netsat结果。描述假设netstat命令运行的结果我们存储在nowcoder.txt里,格式如下:Pro...【详细内容】
2021-12-14  K佬食古    Tags:netstat   点击:(19)  评论:(0)  加入收藏
什么是滑动窗口?窗口是操作系统开辟的一块缓存空间,发送方在收到接收方ACK应答之前,必须在缓冲区保留已发送的数据,如果按期收到确认应答,数据就可以从缓冲区移除。什么是滑动窗...【详细内容】
2021-12-14  DifferentJava    Tags:TCP   点击:(28)  评论:(0)  加入收藏
概述日常管理华为路由设备过程中,难为会忘记设备登录密码,那么该如何重置设备登录密码吗?本期文章将全面向各位小伙伴总结分享。重置华为设备登录密码思路先行 采用console登录...【详细内容】
2021-12-10  onme0    Tags:   点击:(26)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条