GRE 封装后的报文格式为 :
Delivery Header |
GRE Header |
Payload packet |
Delivery Header:封装的外部协议报文头(如IP报文头),即隧道所处网络的协议数据头,是实现一种协议报文穿越另一种协议网络的传输工具。
GRE Header:对数据报文进行封装后加入的数据,包含GRE协议本身以及和负载协议有关的一些信息。
Payload Packet:进入隧道之前的网络层数据报文,将作为隧道报文的有效负载,该报文的协议号将作为GRE头部字段中的ProtocolType字段。GRE头部信息具有如图所示的结构。
一个最简单的GRE头部只有4个字节,即在C、K、S等标志们都为0的情况下,GRE头部仅包含第0到31位的信息。前4个bit位都为标志位,分别表示了头部后来的字段是否有效;ProtocolType字段标识PayloadPacket的协议类型,一般情况下,该协议字段与以太网帧的类型字段值相同 。
需要封装和传输的数据报文,称之为净荷(Payload),净荷的协议类型为乘客协议(Passenger Protocol)。系统收到一个净荷后,首先使用封装协议(Encapsulation Protocol)对这个净荷进行GRE 封装,即把乘客协议报文进行了“包装”,加上了一个GRE 头部成为GRE 报文;然后再把封装好的原始报文和GRE 头部封装在IP 报文中,这样就可完全由IP 层负责此报文的前向转发(Forwarding)。通常把这个负责前向转发的IP 协议称为传输协议(Delivery Protocol 或者Transport Protocol)。根据传输协议的不同,可以分为GRE over IPv4 和GRE over IPv6 两种隧道模式。