GRE隧道技术

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Keywords 关键词:VPN GRE 隧道PDSN WAPGW

Abstract 摘要:在传统的VPN组网场合中,GRE隧道技术得到了广泛的应用。本文介绍了GRE基本原理以及GRE的应用等,可供使用GRE技术的人员参考。

List of abbreviations 缩略语清单:

一、概述

在传统的VPN 组网场合中,GRE 隧道技术得到了广泛的应用。本文介绍了GRE 基本原理以及GRE 的应用等,可供使用GRE 技术的人员参考。

二、VPN 简介

VPN(Virtual Private Network,虚拟专用网)是一种基于公共数据网的服务,它依靠ISP (Internet Service Provider)和NSP(Network Service Provider),在公共网络中建立虚拟专用通信网络。VPN 可以极大地降低用户的费用,并且提供比传统专线方式更强的安全性和可靠性。

1. 隧道技术

在VPN 中广泛使用了各种各样的隧道技术,有二层隧道技术,也有三层隧道技术。那么,什么是隧道呢?

隧道是一种封装技术,它利用一种网络协议来传输另一种网络协议,即利用一种网络传输协议,将其他协议产生的数据报文封装在它自己的报文中,然后在网络中传输。实际上隧道可以看作一个虚拟的点到点连接。例如,GRE 隧道仅支持点到点的业务接入。

隧道技术简单地说就是:原始报文在A 地进行封装,到达B 地后把封装去掉,还原成原始报文,这样就形成了一条由A 到B 的通信隧道。隧道技术就是指包括数据封装、传输和解封装在内的全过程。

隧道是通过隧道协议实现的,隧道协议规定了隧道的建立,维护和删除规则,以及怎样将原始数据封装在隧道中进行传输。

2. 隧道协议分类

隧道协议可分为:

(1)第二层隧道协议,如PPTP、L2TP

(2)第三层隧道协议,如GRE、IPsec

三、GRE 简介

GRE(Generic Routing Encapsulation,通用路由封装协议)是由Cisco 和Net Smiths 公司于1994 年提交给IETF,标号为RFC 1701、RFC 1702。2000 年,Cisco 等公司又对GRE 协议进行了修订,称为GRE V2,标号为RFC 2784。

GRE 是对某些网络层协议(如:IP,IPX,AppleTalk 等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。这是GRE 最初的定义,最新的GRE 封装规范,已经可以封装二层数据帧了,如PPP 帧、MPLS 等。在RFC2784 中,GRE 的定义是“X over Y”,X 和Y 可以是任意的协议。GRE 真的变成了“通用路由封装” 了。

GRE 协议实际上是一种封装协议,它提供了将一种协议的报文封装在另一种协议报文中的机制,使报文能够在异种网络中传输。异种报文传输的通道称为tunnel(隧道)。

GRE 隧道不能配置二层信息,但可以配置IP 地址。GRE 利用为隧道指定的实际物理接口完成转发,转发过程如下:

(1)所有发往远端VPN 的原始报文,首先被发送到隧道源端

(2)原始报文在隧道源端进行GRE 封装,填写隧道建立时确定的隧道源地址和目的地址,然后再通过公共IP 网络转发到远端VPN 网络

四、GRE 的封装过程

无论是何种隧道协议,其数据包格式都是由乘客协议、封装协议和运输协议3 部分组成的。例如,以GRE 为例,GRE 协议栈如下:

图1 GRE协议栈

原始IP 报头

净荷

1. GRE 的封装过程

图 2 说明了 GRE 的封装过程:

原始IP 报文

新IP 报头

GRE 头

原始IP 报头 净荷

GRE 封装后的IP 报文

图2 GRE 的封装过程

图 2 中的原始数据包,可以是 IP 报文。当然,GRE 也可以封装其它的协议报文,如 IPX 报文、PPP 、MPLS 等。

总结起来,GRE 的封装过程如下:当报文需要经由隧道接口处理时,IP 层的输出函数 调用 tunnel 接口的输出函数进行加封装处理。加封装处理结束后,再进行 IP 转发。

GRE 隧道对端的解封装过程如下:当 IP 层接收到 GRE 报文,检查到外层 IP 报文头部 中的协议号是 47 时,那么,IP 层输入入口函数会根据协议开关表,直接调用 GRE 的解封 装处理函数,对 GRE 解封装。解封装完成后,再将原始数据报文送入 IP 输入队列中,以便 进行进一步的传输。

为了对 GRE 报文有一个更好的理解,我们重点学习 GRE 报文头部的格式。

五、GRE 报文头部格式

实际上,GRE 报文头部没有一个统一的格式,每个厂家具体实现的GRE 头部格式会有所差别。但基本上都是以RFC1701 定义的GRE 头部格式为基础的。

1. RFC1701 定义的GRE 报文头部

根据RFC1701,GRE 数据报文的头部有下面的格式:

0 5 8 13 16 31

图3 RFC1701定义的GRE报文头部格

式下面,我们对GRE 报文头部进行详细的说明。

(1)C、R、K、S、s:GRE 报文头部的最前5 位,是一些标志位。其含义如下:

表1 GRE报文头部的最前5位的含义

(2)Recur:bits 5-7。Recur 域是记录允许的封装次数的计数器。GRE 提供了一种特定的机制来防止递归封装。如果路由器想对经过GRE 封装的数据包作进一步封装,应在封装前检查这个域。如果Recur 域为非0,那么数据包还可以进行封装,新的GRE 报头中的Recur 域取值将减1;否则,如果Recur 域的值已经是0 了,那么这个包不可以再进行封装(3)Flags:bits 8-12。在RFC1701 中没有定义

(4)Ver:bits 13-15。版本号。在RFC1701 中,Ver 必须为0

(5)Protocol Type:2 byte。Protocol Type 指出GRE 报文净荷的协议类型。RFC1701 定义的常见值如下:

0x0800:IP

0x8137:Novell IPX

(6)Offset:2 byte。Offset 域指出Routing 域到净荷的字节偏移

(7)Checksum:2 byte。Checksum 包括GRE 头部和净荷的IP 校验和。当Checksum Present 位为1 时,Checksum 域有效

(8)Key:4 byte。Key 域用来标识隧道内部单个的业务流。属于同一个业务流的数据报文使用同一个Key 值来封装,隧道的拆封点根据Key 域的值识别属于某个业务流的数据报文。当Key Present 位为1 时,KEY 域有效

(9)Sequence Number:4 byte。Sequence Number 域用来维持GRE 隧道内数据报文的顺序。当Sequence Number Present 位为1 时,Sequence Number 域有效

(10)Routing:4 byte。Routing 域是可选的,当Routing Present 位为1 时,Routing 域有效

(11)Payload:净荷。GRE 所封装的协议报文

以上介绍的GRE 头部格式,是在最早的RFC1701 中定义的。GRE 最新RFC 文档是:RFC2784。

相关文档
最新文档