GRE技术.docx
《GRE技术.docx》由会员分享,可在线阅读,更多相关《GRE技术.docx(7页珍藏版)》请在冰豆网上搜索。
GRE技术
GRE技术
目录
第1章简介1
第2章相关术语解析2
第3章协议介绍3
3.1GRE在TCP/IP协议栈中的层次位置3
3.2GRE的报文结构3
3.3GRE的工作流程概述5
3.3.1加封装6
3.3.2转发7
3.3.3解封装7
3.4GRE的优点与缺点7
第4章典型应用7
第1章简介
本章主要描述GRE协议的原理及实现。
本章主要内容:
●相关术语解析
●协议介绍
●典型应用
第2章相关术语解析
VPN――虚拟专用网络(VirtualPrivateNetwork)。
应用这种技术,通过Internet连接起来的两个或多个网点,其运行方式就像处于单个专用网络上。
GRE――通用路由封装(GenericRoutingEncapsulation)。
Tunnel――隧道。
通常指将一种协议报文封装到另一种协议内部的行为,这就使得一种协议报文能够穿越另一种协议网络。
第3章协议介绍
本节主要内容:
●GRE在TCP/IP协议栈中的层次位置
●GRE的报文结构
●GRE的工作流程概述
●GRE的优点与缺点
GRE技术主要用于在源端和目的端之间形成隧道。
将要通过隧道的报文用一个新的报文头(GRE报文头)进行封装,然后带着隧道终点地址放入隧道中。
当报文到达隧道的终点时,GRE报文头被剥离,再用原始报文的目的地址进行寻址。
GRE隧道通常是点到点的。
GRE还具有为报文分组排序的能力。
使用GRE隧道有可能产生性能问题,因为需要额外的封装和解封装处理。
3.1GRE在TCP/IP协议栈中的层次位置
由于GRE的报文是直接加上IP头进行传输,因此近似认为GRE处于IP层之上。
GRE协议在IP头中的协议号是47。
3.2GRE的报文结构
通过GRE隧道的报文由三部分组成。
Payloadpacket:
进入隧道之前的网络层报文(如IP报文),作为隧道报文的有效负载,该报文的协议称作GRE隧道的乘客协议。
GREheader:
Payloadpacket进入隧道后加上的GRE头,包含GRE协议本身以及和乘客协议有关的一些信息。
Deliveryheader:
封装的外部协议报文头(如IP头),即隧道所处网络的协议数据头。
是实现一种协议报文穿越另一种协议网络的传输工具。
GREheader的结构如下:
一个最简单的GRE头部只有4个字节,即在C、K、S等标志位都为0的情况下,GRE头仅包含第0至31位的信息。
Checksum标志位
第0位是Checksum标志位。
仅当Checksum标志位置1时,Checksum字段才有效。
Key标志位
第2位是Key标志位。
仅当Key标志位置1时,Key字段才有效。
Sequencenumber标志位
第3位是Sequencenumber标志位。
仅当它置1时,Sequencenumber字段才有效。
Reserved0和Ver字段
没有使用,必须清零。
Protocoltype字段
Protocoltype字段标识Payloadpacket的类型值。
一般情况下,该协议字段与以太网帧的类型字段值相同。
如IP报文的Protocoltype=0800。
Checksum字段
Checksum字段承载GRE头部的校验和。
校验和必须覆盖GRE头和Payloadpacket。
Key字段
Key字段承载隧道的密匙,隧道两端必须配置相同的密匙(或两端都不配密匙),隧道才能通。
Sequence字段
Sequence字段承载报文的序号。
如果设置了Sequence标志位,从隧道通过的报文都会带上序号。
序号从0开始,每发出一个报文,序号加1。
对端收到报文后,也会记录下收到报文的序号,如果收到失序报文,对端会将报文丢弃。
Checksum,Sequence和Key字段启用与否,由tunnelchecksum,tunnelsequence-datagrams和tunnelkey命令控制。
举例说明GRE的报文结构:
打阴影的为新的ip头部;打框的为gre的头部;后面则为真正的ip报文,在这里充当数据。
450005f48fe300007f2ffd85c0a80102c0a8010100000800450005dc723f
05f4-表示该新的ip报文的总长度(1524);
2f-表示该新的ip报文内部所包括的协议类型:
gre(47);
c0a80102c0a80101-表示该新的ip报文的源地址和目的地址(tunnel的源和目的地址);
00000800-表示gre的头部:
标志位全为0,表示该gre包没有校验和、密匙和序号;乘客协议为IP;
3.3GRE的工作流程概述
GRE隧道的报文在隧道源端加封装,在隧道目的端解封装,源和目的之间的转发则当作一般的报文处理。
收包:
若报文的目的是路由器自己,送上层协议处理,若协议是GRE(47),则查找对应的隧道接口,找到后处理GRE头,进行一系列的检测,然后去掉外层的IP头,修改mbuf的recvif字段为本隧道接口,最后送入IP输入队列中。
发包:
若报文是发往隧道接口,据接口配置,加GRE头,加隧道指定的源和目的地址的IP头,根据隧道目的地址进行路由,发送此报文到路由器的物理接口。
以上图为例,介绍GRE的工作原理。
在Router2和Router4之间搭建了一条GRE隧道Tunnel1。
Tunnel1的两端引用地址分别是12.1.1.1和21.1.1.1。
并在Router2上配置了静态路由,31.0.0.0的网络通过Tunnel1可达。
现在从Router1上发一个数据包,其目的地址是31.1.1.1。
通过路由选路,数据包从端口11.1.1.1出去。
此时的IP报文源和目的地址分别是11.1.1.1和31.1.1.1。
数据包到达Router2后,Router2进行路由选路,由于静态路由的存在,Router2决定从隧道转发包。
数据包开始加封装。
3.3.1加封装
此时需转发的数据包即为Payloadpacket(本例中是IP报文),隧道在其头部加上一个GREheader。
GREheader的Protocoltype字段置为0800(IP的协议类型)。
然后,再在GREheader之前再加上一个IPheader(Deliveryheader)。
IPheader的协议值置为47(GRE的协议号),IPheader的目的地址设为Tunnel1的目的地址21.1.1.1,将IPheader的源地址设为12.1.1.1,然后根据21.1.1.1进行路由,路由结果是从12.1.1.1接口出去。
加封装结束,数据包从12.1.1.1接口出去。
3.3.2转发
Router3收到报文后,送到IP层选路。
此时Router3分析的IP头其实是Deliverheader(Payloadpacket已经被封装,Router3无法达到Payloadpacket的IP头),因此会根据Deliverheader的目的地址21.1.1.1进行路由转发。
该过程一直进行到报文到达隧道的终点Router4。
3.3.3解封装
Router4收到报文后同样先分析Deliveryheader,发现目的地址21.1.1.1是自己的地址,于是检查IP包的协议字段。
由于协议字段是47,IP包交GRE隧道处理。
隧道首先去掉Deliveryheader,检查GREheader的Protocoltype。
由于Protocoltype是0800,隧道将Payloadpacket交IP层在处理,完成解封装。
Router4根据Payloadpacket的目的地址31.1.1.1路由,报文从接口21.1.1.1出去,达到真正的目的地Router5。
3.4GRE的优点与缺点
GRE隧道技术配置简单,可以在多种物理线路上搭建隧道(PPP,FrameRelay等),将主机网络环境和VPN路由环境进行了隔离。
GRE的缺点有管理费用高,隧道的规模数量大。
因为GRE是用手工配置的,所以配置和维护隧道所需要的费用和隧道的数量是直接相关联的,每次隧道的终点改变,隧道要重新配置。
第4章典型应用
GRE隧道技术可以满足ExtranetVPN以及IntranetVPN的需求。