1.GRE协议简介
GRE(General Routing Encapsulation ,通用路由封装)是对某些网络层协议(如IP和IPX)的数据报文进行封装,使这些被封装的报文能够在另一网络层协议(如IP)中传输。此外 GRE协议也可以作为VPN的第三层隧道协议连接两个不同的网络,为数据的传输提供一个透明的通道。
GRE主要有以下特点:
- 机制简单,无需维持状态,对隧道两端设备的CPU负担小;
- 本身不提供数据的加密,如果需要加密,可以与IPSec结合使用;
- 不提供流量控制和QoS
2. GRE报文格式
- Payload (净荷): 系统接收到的需要封装和路由的原始数据报;
- Passenger Protocol(乘客协议):报文封装之前所属的协议称为乘客协议
- Encapsulation Protocol(封装协议):用来封装乘客协议的协议称为封装协议,这里的GRE便是一个封装协议,也成为运载协议(Carrier Protocol);
- Transport Protocol(传输协议):负责对封装后的报文进行转发的协议称为传输协议;不同于传输层协议。
GRE头部各字段含义:
字段 | 长度 | 含义 |
---|---|---|
C | 1bit | 校验和验证标识。设置为1,表示Checksum字段生效;0表示Checksum字段不生效 |
K | 1bit | 关键字标识。设置为1,表示头部中Key字段生效;0表示Key字段不生效 |
Recursion | 3bits | 用来表示报文被封装的层数。每封装一次该值加1,最多封装3次 |
Flags | 5bits | 预留。值为0 |
Version | 3bits | 版本号。值为0 |
Protocol Type | 16bits | 乘客协议类型 |
Checksum | 16bits | 对GRE头部和负载计算校验和。只有当C为1时有效 |
Key | 32bits | 关键字信息。隧道接收端用于对收到的报文进行验证,只有当K为1时有效;此外也用于一对多的GRE隧道 |
其他 | 暂未使用,其值固定填充0 |
3. GRE报文封装与解封装
3.1 报文封装
- Router A连接Group 1的接口收到X协议报文后,首先交由X协议处理;
- X协议检查报文头中的目的地址域来确定如何路由此包;
- 若报文的目的地址要经过Tunnel才能到达,则设备将此报文发给相应的Tunnel接口;
- Tunnel接口收到此报文后进行GRE封装,在封装IP报文头后,设备根据此IP包的目的地址及路由表对报文进行转发,从相应的网络接口发送出去。
3.2 报文解封装
- Router B从Tunnel接口收到IP报文,检查目的地址;
- 如果发现目的地是本路由器,则Router B剥掉此报文的IP报头,交给GRE协议处理(进行检验密钥、检查校验和及报文的序列号等);
- GRE协议完成相应的处理后,剥掉GRE报头,再交由X协议对此数据报进行后续的转发处理。
随着报文的封装、解封装,会导致有效数据传输效率降低, 从而导致设备对GRE数据转发速率降低。
4. 应用范围
GRE(点对点类型)主要应用于一下几种环境:
4.1 多协议的本地网通过单一协议的骨干网传输
上图中:Group 1和Group 2是运行Novell IPX协议的本地网,Team 1和Team 2是运行IP协议的本地网。通过在Router A和Router B之间采用GRE协议封装的隧道,Group 1和Group 2、Team 1和Team 2可以互不影响地进行通信
4.2 扩大了跳数受限协议(如RIP)的工作范围
两台终端之间的跳数超过15(RIP路由协议),它们将无法通信。通过在网络中使用隧道可以隐藏一部分跳数,从而扩大网络的工作范围
4.3 将一些不能连续的子网连接起来,用于组建VPN
运行Novell IPX协议的两个子网Group 1和Group 2分别在不同的城市,通过使用隧道可以实现跨越广域网的VPN.
4.4 和IPsec结合使用
GRE可以和IPsec结合使用,即对于路由协议、语音、视频等数据先进行GRE封装,再对封装后的报文进行IPsec的加密处理,以提高数据在隧道中传输的安全性