GRE VPN(Generic Routing Encapsulation)即通用路由封装协议,是对某些网络层协议(如IP和IPX)的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议(如IP)中传输。

GRE是VPN(Virtual Private Network)的第三层隧道协议,即在协议层之间采用了一种被称之为Tunnel(隧道)的技术。**

GRE的协议栈

image.jpeg

GRE承载协议号

image.jpeg

GRE over IPv4

系统接收到一个需要封装和路由的数据报文,我们称之为有效负载(Payload)。这个有效负载首先被GRE封装然后被称之为GRE报文,这个报文接着被封装在IP报文中,然后完全由IP层负责此报文的转发(Forwarding)。我们也称这个负责向前传输的IP 协议为传递(Delivery)协议或传输(Transport)协议。
image.jpeg
image.jpeg

封装过程

封装过程如图1所示。
image.jpeg

图1 GRE封装过程
  •经GRE模块处理后,原IP头部已经被封装在新IP头部和GRE头部之后
  •新IP数据包的IP头部的协议号为47。
  •新IP头部的长度为20字节
  •GRE头部的长度为4~20字节(根据实际配置而定)。

报文格式

  在最简单的情况下,系统接收到一个需要封装和路由的数据报,我们称之为有效报文。这个报文首先被GRE封装,然后被称之为GRE报文,这个报文接着被封装在IP报头中,然后完全有IP层负责此报文的转发,也称这个负责转发的IP协议为传递协议或者传输协议。

其中,GRE报文头的格式如图2所示。
image.jpeg

图2 GRE格式
  GRE头部结构参照RFC1701定义
  前4字节是必须出现的
  第5-20字节将根据第1字节的相关bit位信息,可选出现。
  GRE头部的长度将影响Tunnel口的mtu值
  •0bit C:校验和标志位。
  如配置了checksun则该位置为1,同时校验和(可选)、偏离(可选)部分的共4 bytes出现在GRE头部。
  如不配置checksun则该位置为0,同时校验和(可选)、偏离(可选)部分不出现在GRE头部。
  •1bit R:路由标志位。
  如R为1,校验和(可选)、偏离(可选)、路由(可选)部分的共8 bytes出现在GRE头部。
  如R为0,校验和(可选)、偏离(可选)、路由(可选)部分不出现在GRE头部。
  •2bit K:密钥标志位。
  如配置了KEY则该位置为1,同时密钥(可选)部分的共4 bytes出现在GRE头部。
  如不配置KEY则该位置为0,同时密钥(可选)部分不出现在GRE头部。
  •3bit S:序列好同步标志位。
  如配置了sequence-datagrams则该位置为1,同时序列号(可选)部分的共4 bytes出 现在GRE头部。
  如不配置sequence-datagrams则该位置为0,同时序列号(可选)部分不出现在GRE头部。
  •4bit s:严格源路由标志位。
  除非所有的路由都符合严格源路由,该bit位为1。通常该bit为0。
  •5-7bit:递归控制:该位置需为0
  •8-12bit: 未定义,需为0
  •13-15 版本:需为0
  •16-31 协议类型:常用的协议,例如IP协议为0800