在GRE协议的使用过程中,我们发现,这个协议有着非常强大的功能。那么在不同的环境中,它可以进行有效地协议封装,来完成协议的跨度使用。那么我们这里列举了一些例子帮助大家分析一下。
1. 多协议的本地网通过单一协议的骨干网传输
图中,Group1和Group2是运行Novell IPX的本地网,Term1和Term2是运行IP的本地网。
通过在Router A和Router B之间采用GRE协议封装的隧道(Tunnel),Group1和Group2、Team1和Team2可以互不影响地进行通信。
2. 扩大了步跳数受限协议(如IPX)的网络的工作范围
在图中,如果两台终端之间的步跳数超过15,它们将无法通信。在网络中使用隧道(Tunnel)可以隐藏一部分步跳,从而扩大网络的工作范围。
3. 将不连续的子网连接起来,用于组建VPN
运行Novell IPX协议的两个子网Group1和Group2分别在不同的城市,通过使用隧道可以实现跨越广域网的VPN。
4. 与IPSec结合使用,弥补IPSec不能保护组播数据的缺陷
GRE可以封装组播数据并在GRE隧道中传输,而IPSec目前只能对单播数据进行加密保护。对于组播数据需要在IPSec隧道中传输的情况,可以先建立GRE隧道,对组播数据进行GRE封装,再对封装后的报文进行IPSec加密,从而实现组播数据在IPSec隧道中的加密传输。
5. 其他特性
GRE协议本身提供两种比较弱的安全机制:校验和验证和识别关键字验证。前者对封装的报文进行端到端校验,后者对Tunnel接口进行校验。
RFC1701(Generic Routing Encapsulation)中规定:如果GRE报文头中的Checksum位置位,则校验和有效。发送方将根据GRE头及payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃报文。
隧道两端可以根据实际需要选择是否配置校验和,从而决定是否触发校验功能。如果本端配置了校验和而对端没有配置,则本端将不会对接收到的报文进行校验和检查;相反,如果本端没有配置校验和而对端已配置,本端将对从对端发来的报文进行校验和检查。
RFC1701中还规定:若GRE报文头中的KEY位置位,则收发双方将进行通道识别关键字的验证。只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。