1、华为GRE协议原理
华为GRE(Generic Routing Encapsulation)是对某些网络层协议(如:IP,IPX,AppleTalk 等)的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议(如 IP)中传输。 GRE可以实现多协议的本地网通过单一协议的骨干网传输的服务,扩大了网络的工作范围,包括那些路由网关有限的协议,如 IPX 包最多可以转发 16次(即经过16 个路由器) ,而在一个 Tunnel 连接中看上去只经过一个路由器将一些不能连续的子网连接起来。
GRE 协议实际上是一种承载协议(Carrier Protocol) ,它提供了将一种协议的报文封装在另一种协议报文中的机制,使报文能够在异种网络中传输,异种报文传输的通道称为Tunnel。
Tunnel 是一个虚拟的点对点的连接, 它提供了一条通路使封装的数据报能够在这个通路上传输,并且在一个 Tunnel 的两端分别对数据报进行封装及解封。
IP 协议既可以作为传递协议 (Delivery Protocol) , 也可以作为负载协议 (Payload Protocol) ,在 TCP/IP网络中,IP 协议一般是作为传递协议,封装和传输其他协议的报文。在最简单的情况下,系统接收到一个需要封装和路由的数据报,称之为负载报文。这个有效报文首先被 GRE 封装,称之为 GRE 报文,这个报文接着被封装在 IP 协议中,然后完全由 IP 层负责此报文的转发。
2、GRE协议栈

系统接收到一个需要封装和路由的数据报文,我们称之为有效负载(Payload)。这个有效负载首先被 GRE 封装然后被称之为 GRE 报文, 这个报文接着被封装在IP 报文中然后完全由 IP 层负责此报文的转发(Forwarding) 。我们也称这个负责向前传输的 IP 协议为传递(Delivery)协议或传输(Transport)协议。
总结: 实际上GRE封装在IP报文中,使用协议号47,对于OSPF 使用协议号是89。由于GRE建设的VPN是三层VPN。
GRE隧道源端的加封装过程:
当报文需要经由隧道接口处理时,IP 层的输出函数调用 tunnel 接口的输出函数进行加封装处理。加封装处理结束后再进行 IP转发。
GRE隧道对端的解封装过程:
当 IP 层接收到 GRE 报文,此时 IP 报文头中的下一协议号是 47,IP 层输入入口,函数会根据协议开关表调用 GRE 的解封装处理函数。GRE 解封装完成后将数据报文送入IP输入队列。
3、构建GREVPN

应用 GRE 组建 Intranet VPN 或 Extranet VPN:公司总部的局域网和公司分支机构或合作伙伴的局域网通过路由器之间通过 GRE 协议建立的 Tunnel 进行通信;并采用 IPSec在IP 层通过加密与数据源验证,以保证数据包在 Internet 网上传输时的私有性、完整性和真实性。实现点到点的连接,保障了数据的安全性。