GRE(通用路由封装)采用了隧道技术(Tunnel),目的是为了封装某些网络层协议的数据报文,使这些报文能够在另一个网络层协议中传输。
GRE技术的实现主要分为四个组件:routerA、隧道入口加封装、隧道出口解封装、routerB
简单来说,GRE是一个点对点的连接。其中的隧道就好比高速公路,隧道的两端就相当于收费站。进站时需要拿小票(加封装过程),出站的时候需要交钱(解封装过程)。下面就来重点讨论下这两个过程。

一、加封装过程
如上图所示,routerA连接Group1接口收到X协议报文后,会首先交于X协议处理
X协议检查报文头中的地址域来确定如何路由此包
设备将此报文发给相应的Tunnel接口
Tunnel接口收到此报文后进行GRE封装,封装了IP报文头后进行相应转发
二、封装后报文格式
封装好之后的报文由三个部分组成:Delivery header、GRE header、Payload header
如下图所示

所谓payload就是需要封装和传输的数据报文,协议类型为乘客协议(Passenger Protocol)。这非常形象,很容易理解。当系统收到一个payload后,首先使用封装协议(Encapsulation Protocol)进行封装。也就是给这个乘客穿上衣服,加上了一个GRE头部成为GRE报文。然后再把穿好衣服的乘客丢进公共汽车里去,将原始报文和GRE头部封装在IP报文中,这样就可完全由IP层负责此报文的向前转发。这个向前转发的IP协议就是传输协议(Transport protocol)。根据IP层协议的区别,可以分为IPv4和IPv6两种隧道模式。
三、解封装过程
1、经Tunnel传输完成后的数据报文会被发到RouterB上,以检查目的地址
2、若发现目的地是本路由器,则RouterB会剥掉此报文的IP报头,交于GRE协议处理。GRE协议会进行检验密钥、检查校验和及报文的序列号等操作。
3、GRE完成处理后会剥掉GRE报头,再交由目的端的某网络层协议进行后续转发处理。
四、GRE数据包头的格式





