GRE VPN(Generic Routing Encapsulation)即通用路由封装协议,是对某些网络层协议(如IP和IPX)的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议(如IP)中传输。
GRE是VPN(Virtual Private Network)的第三层隧道协议,即在协议层之间采用了一种被称之为Tunnel(隧道)的技术。**
GRE的协议栈
GRE承载协议号
GRE over IPv4
系统接收到一个需要封装和路由的数据报文,我们称之为有效负载(Payload)。这个有效负载首先被GRE封装然后被称之为GRE报文,这个报文接着被封装在IP报文中,然后完全由IP层负责此报文的转发(Forwarding)。我们也称这个负责向前传输的IP 协议为传递(Delivery)协议或传输(Transport)协议。
封装过程
封装过程如图1所示。
图1 GRE封装过程
•经GRE模块处理后,原IP头部已经被封装在新IP头部和GRE头部之后
•新IP数据包的IP头部的协议号为47。
•新IP头部的长度为20字节
•GRE头部的长度为4~20字节(根据实际配置而定)。
报文格式
在最简单的情况下,系统接收到一个需要封装和路由的数据报,我们称之为有效报文。这个报文首先被GRE封装,然后被称之为GRE报文,这个报文接着被封装在IP报头中,然后完全有IP层负责此报文的转发,也称这个负责转发的IP协议为传递协议或者传输协议。
其中,GRE报文头的格式如图2所示。
图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