Chinaunix首页 | 论坛 | 博客
  • 博客访问: 627606
  • 博文数量: 104
  • 博客积分: 1968
  • 博客等级: 上尉
  • 技术积分: 1587
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-01 17:52
文章分类

全部博文(104)

文章存档

2013年(12)

2012年(50)

2011年(42)

分类: LINUX

2011-08-22 18:39:21

1. GRE协议概念

通用路由封装GRE(Generic Routing Encapsulation)是对某些网络层协议(如IP和IPX)的报文进行封装,使这些被封装的报文能够在另一网络层协议(如IP)中传输。

GRE可以作为VPN的第三层隧道协议,在协议层之间采用隧道(Tunnel)技术。Tunnel是一个虚拟的点对点的连接,可以看成仅支持点对点连接的虚拟接口,这个接口提供了一条通路,使封装的数据报能够在这个通路上传输,并在一个Tunnel的两端分别对数据报进行封装及解封装。

2. 报文封装及解封装

(1) 报文的传输

报文在Tunnel中传输包括加封装与解封装两个过程,下图的网络为例说明这两个过程:

加封装过程:

连接Novell group1的接口收到IPX数据报后,首先交由IPX协议处理。

IPX协议检查IPX报头中的目的地址域来确定如何路由此包。如果发现报文的目的地址要经过网号为1f的网络(Tunnel的虚拟网号),则将此报文发给网号为1f的Tunnel接口。

Tunnel接口收到此报文后进行GRE协议封装,封装完成后交给IP模块处理,在封装IP报文头后,根据报文目的地址及路由表交由相应的网络接口处理。

解封装过程:

解封装过程和加封装过程相反。从Tunnel接口收到IP报文,检查目的地址,当发现目的地就是此路由器时,系统去掉此报文的IP报头,交给GRE协议模块处理;GRE协议模块完成相应的处理后,去掉GRE报头,再交由IPX协议模块处理,IPX协议模块象对待一般数据报一样对此数据报进行处理。

(2) 基本概念

系统收到的需要封装和路由的数据报称为净荷(Payload),净荷首先被加上GRE协议封装,成为GRE报文;再被封装在IP报文中,这样IP层就可以完全负责此报文的转发(forward)。

负责转发的IP协议被称为传输协议(Delivery Protocol或者Transport Protocol)。封装好的报文的形式如下图所示:



举例来说,一个封装在IP Tunnel中的IPX报文的格式可以表示为:



Passenger Protocol:乘客协议

Carrier Protocol/Encapsulation Protocol:运载协议/封装协议

Transport Protocol:传输协议

3. 多协议的本地网通过单一协议的骨干网传输

GRE协议封装的隧道
图中,Group1和Group2是运行Novell IPX的本地网,Term1和Term2是运行IP的本地网。

通过在Router A和Router B之间采用GRE协议封装的隧道(Tunnel),Group1和Group2、Team1和Team2可以互不影响地进行通信。



4. 扩大了步跳数受限协议(如IPX)的网络的工作范围

在图中,如果两台终端之间的步跳数超过15,它们将无法通信。在网络中使用隧道(Tunnel)可以隐藏一部分步跳,从而扩大网络的工作范围。

扩大步跳数受限协议(如IPX)的网络

5. 将不连续的子网连接起来,用于组建VPN

运行Novell IPX协议的两个子网Group1和Group2分别在不同的城市,通过使用隧道可以实现跨越广域网的VPN。
通过使用隧道可以实现跨越广域网的VPN
 

6. 与IPSec结合使用,弥补IPSec不能保护组播数据的缺陷

GRE可以封装组播数据并在GRE隧道中传输,而IPSec目前只能对单播数据进行加密保护。对于组播数据需要在IPSec隧道中传输的情况,可以先建立GRE隧道,对组播数据进行GRE封装,再对封装后的报文进行IPSec加密,从而实现组播数据在IPSec隧道中的加密传输。

实现组播数据在IPSec隧道中的加密传输

7. 其他特性

GRE协议本身提供两种比较弱的安全机制:校验和验证和识别关键字验证。前者对封装的报文进行端到端校验,后者对Tunnel接口进行校验。

RFC1701(Generic Routing Encapsulation)中规定:如果GRE报文头中的Checksum位置位,则校验和有效。发送方将根据GRE头及payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃报文。

隧道两端可以根据实际需要选择是否配置校验和,从而决定是否触发校验功能。如果本端配置了校验和而对端没有配置,则本端将不会对接收到的报文进行校验和检查;相反,如果本端没有配置校验和而对端已配置,本端将对从对端发来的报文进行校验和检查。

RFC1701中还规定:若GRE报文头中的KEY位置位,则收发双方将进行通道识别关键字的验证。只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。




原文地址:
阅读(5831) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~