版权归原作者所有,如有侵权,请联系我们

[科普中国]-通用路由封装

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

基本信息

通用路由封装 (GRE)定义了在任意一种网络层协议上封装任意一个其它网络层协议的协议1。

在大多数常规情况下,系统拥有一个有效载荷(或负载)包,需要将它封装并发送至某个目的地。首先将有效载荷封装在一个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 封装后的报文格式为1:

|| ||

Delivery Header:封装的外部协议报文头(如IP报文头),即隧道所处网络的协议数据头,是实现一种协议报文穿越另一种协议网络的传输工具。

GRE Header:对数据报文进行封装后加入的数据,包含GRE协议本身以及和负载协议有关的一些信息。

Payload Packet:进入隧道之前的网络层数据报文,将作为隧道报文的有效负载,该报文的协议号将作为GRE头部字段中的ProtocolType字段。GRE头部信息具有如图所示的结构。

一个最简单的GRE头部只有4个字节,即在C、K、S等标志们都为0的情况下,GRE头部仅包含第0到31位的信息。前4个bit位都为标志位,分别表示了头部后来的字段是否有效;ProtocolType字段标识PayloadPacket的协议类型,一般情况下,该协议字段与以太网帧的类型字段值相同2。

需要封装和传输的数据报文,称之为净荷(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 后设备的数据转发效率有一定程度的下降。