通用路由封装(GRE: Generic Routing Encapsulation)是
通用路由封装协议,可以对某些网络层协议的数据报进行封装,使这些被封装的数据报能够在
IPv4网络中传输。
产品介绍
通用路由封装 (GRE)定义了在任意一种网络层协议上封装任意一个其它网络层协议的协议。
在大多数常规情况下,系统拥有一个有效载荷(或负载)包,需要将它封装并发送至某个目的地。首先将有效载荷封装在一个GRE 包中,然后将此GRE 包封装在其它某协议中并进行转发。此外发协议即为发送协议。当IPv4 被作为GRE 有效载荷传输时,协议类型字段必须被设置为0x800。当一个隧道终点拆封此含有 IPv4 包作为有效载荷的GRE 包时,IPv4 包头中的目的地址必须用来转发包,并且需要减少有效载荷包的TTL。值得注意的是,在转发这样一个包时,如果有效载荷包的目的地址就是包的封装器(也就是隧道另一端),就会出现回路现象。在此情形下,必须丢弃该包。当 GRE 包被封装在IPv4 中时,需要使用IPv4 协议47。
GRE 下的网络安全与常规的IPv4 网络安全是较为相似的,GRE 下的路由采用IPv4 原本使用的路由,但路由过滤保持不变。包过滤要求防火墙检查 GRE 包,或者在GRE 隧道终点完成过滤过程。在那些这被看作是安全问题的环境下,可以在
防火墙上终止隧道。
GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据
报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。GRE采用了Tunnel(隧道)技术,是VPN(Virtual Private Network)的第三层隧道协议。
Tunnel 是一个虚拟的点对点的连接,提供了一条通路使封装的数据报文能够在这个通路上传输,并且在一个Tunnel 的两端分别对数据报进行封装及解封装。 一个X协议的报文要想穿越IP网络在Tunnel中传输,必须要经过加封装与解封装两个过程。
报文格式
一个最简单的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 两种
隧道模式。
封装过程
1、 Router A 连接Group 1 的接口收到X 协议报文后,首先交由X 协议处理
2、X 协议检查
报文头中的目的地址域来确定如何路由此包
3、 若报文的目的地址要经过Tunnel 才能到达,则设备将此报文发给相应的Tunnel 接口
4、 Tunnel 口收到此报文后进行GRE 封装,在封装IP 报文头后,设备根据此IP 包的目的地址及
路由表对报文进行转发,从相应的网络接口发送出去。
解封装过程
解封装过程和加封装的过程相反。
1、 RouterB 从Tunnel 接口收到IP
报文,检查目的地址
2、 如果发现目的地是本
路由器,则RouterB 剥掉此报文的IP 报头,交给GRE 协议处理(进行检验密钥、检查
校验和及报文的序列号等)
3、 GRE 协议完成相应的处理后,剥掉GRE 报头,再交由X 协议对此数据报进行后续的转发处理。
说明:GRE 收发双方的加封装、解封装处理,以及由于封装造成的数据量增加,会导致使用GRE 后设备的数据转发效率有一定程度的下降。