1.GRE是什么?
通用路由封装(Generic Routing Encapsulation GRE) 是一种协议,用于将使用一个路由协议的数据包封装在另一协议的数据包中。“封装”是指将一个数据包包装在另一个数据包中,就像将一个盒子放在另一个盒子中一样。
2.GRE的作用是什么?
GRE 是在网络上建立直接点对点连接的一种方法,目的是简化单独网络之间的连接。它适用于各种网络层协议。
要了解其工作原理,请想像一下汽车和渡轮之间的区别。汽车在陆地上行驶,而渡轮在水上行驶。汽车通常不能在水上行驶,但是可以将汽车装载到渡轮上。
在这个类比当中,地形类型好比是支持某些路由协议的网络,而车辆则好比是数据包。GRE 是一种将一种类型的数据包装载到另一种类型的数据包中的方式,以便第一个数据包可以穿越它通常无法穿越的网络,就像一种类型的运输工具(汽车)被装载到到另一种类型的运输工具(渡轮)上,以便穿越原本无法行驶的地形。
例如,假设一家公司需要在位于两个不同办公室的局域网(LAN)之间建立连接。两个 LAN 都使用最新版本的 互联网协议 IPv6。但是,为了从一个办公网络到达另一个办公网络,流量必须通过一个由第三方管理的网络 — 该网络有些过时,仅支持较旧的 IPv4 协议。
借助 GRE,该公司可以将 IPv6 数据包封装在 IPv4 数据包中,然后便可通过此网络传输流量。回到那个类比,IPv6 数据包是汽车,IPv4 数据包是渡轮,而第三方网络则是水。
使用GRE还可以克服IGP协议的一些局限性。例如,RIP路由协议是一种距离矢量路由协议,最大跳数为15。如果网络直径超过15,设备将无法通信。这种情况下,可以使用GRE技术在两个网络节点之间搭建隧道,隐藏它们之间的跳数,扩大网络的工作范围。
3.GRE是如何工作的?
系统收到需要进行封装和路由的某网络层协议(如IPX)数据时,将首先对其加上GRE报文头,使之成为GRE报文,再将其封装在另一协议(如IP)中。这样,此报文的转发就可以完全由IP协议负责。封装后的报文的格式如下图所示:
图1 封装好的GRE报文格式
- 净荷(Payload Packet):系统收到的需要封装和传输的数据报文称为净荷。
- 乘客协议(Passenger Protocol):封装前的报文所属的协议称为乘客协议。
- 封装协议(Encapsulation Protocol):上图的GRE协议称为封装协议,也称为运载协议(Carrier Protocol)。
- 传输协议(Transport Protocol或者Delivery Protocol):负责对封装后的报文进行转发的协议称为传输协议。
GRE首部各字段解释如下:
表1-1 GRE Header首部各字段解释
字段 | 长度 | 描述 |
---|---|---|
C | 1 bit | 校验和验证位。如果该位置1,表示GRE头插入了校验和(Checksum)字段;该位为0表示GRE头不包含校验和字段。 |
K | 1 bit | 关键字位。如果该位置1,表示GRE头插入了关键字(Key)字段;该位为0表示GRE头不包含关键字字段。 |
Recursion | 3 bits | 用来表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。 |
Flags | 5 bits | 预留字段。当前必须设为0。 |
Version | 3 bits | 版本字段,必须置为0。Version为1是使用在RFC2637的PPTP中。 |
Protocol Type | 16 bits | 乘客协议的协议类型。 |
Checksum | 16 bits | 对GRE头及其负载的校验和字段。 |
Key | 31 bits | 关键字字段,隧道接收端用于对收到的报文进行验证。 |
报文在GRE隧道中传输包括封装和解封装两个过程。如下图所示,如果私网报文从Ingress PE向Egress PE传输,则封装在Ingress PE上完成;而解封装在Egress PE上进行。
图2 私有网络通过GRE隧道互连
整体封装与解封装的流程如下所示:
- Ingress PE收到报文后,交由乘客协议处理,乘客协议判断出接口为GRE Tunnel接口。
- Ingress PE将报文发送到对应的tunnel接口,并给报文加GRE报文头。
- Ingress PE再根据配置信息,给报文加上IP头(IP头中包含源地址和目的地址)。
- Ingress PE根据IP头中的目的地址,在公网路由表中查找相应的出接口并发送报文。
- Egress PE收到报文并分析IP头发现自己是目的地。
- Egress PE去掉IP头和GRE头。
- Egress PE判断报文的乘客协议为私网上运行的协议,于是交由私网处理该报文。私网正常转发该报文。