详解通用路由封装协议GRE

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上进行 。


推荐阅读