通用路由封装(GRE: Generic Routing Encapsulation)是通用路由封装协议,可以对某些网络层协议的数据报进行封装,使这些被封装的数据报能够在IPv4网络中传输,它允许用户使用IP封装IP、IPX、AppleTalk,并支持全部的路由协议,如RIP、OSPF、IGRP、EIGRP。通过GRE,用户可以利用公用IP网络连接IPX网络和AppleTalk网络,还可以使用保留地址进行网络互联,或对公网隐藏企业网的IP地址,GRE采用了Tunnel(隧道)技术,是VPN(Virtual Private Network)的第三层隧道协议。<br /> <br /> ** **Tunnel 是一个虚拟的点对点的连接,提供了一条通路使封装的数据报文能够在这个通路上传输,并且在一个Tunnel 的两端分别对数据报进行封装及解封装。 一个X协议的报文要想穿越IP网络在Tunnel中传输,必须要经过加封装与解封装两个过程, 指保留原始IP数据流的情况下封装成另一种带有新IP报头(注:新IP为tunnel中的source、destination,这两个地址必须是UP状态的接口IP(包括虚接口),且两者能够通讯, tunnel封装模式有多种,默认情况下指GRE模式。
GRE的包头包含了协议类型(用于标明乘客协议的类型);校验和包括了GRE的包头和完整的乘客协议与数据;密钥(用于接收端验证接收的数据);序列号(用于接收端数据包的排序和差错控制)和路由信息(用于本数据包的路由)。
在大多数常规情况下,系统拥有一个有效载荷(或负载)包,需要将它封装并发送至某个目的地。首先将有效载荷封装在一个GRE 包中,然后将此GRE 包封装在其它某协议中并进行转发。此外发协议即为发送协议。当IPv4 被作为GRE 有效载荷传输时,协议类型字段必须被设置为0x800。当一个隧道终点拆封此含有 IPv4 包作为有效载荷的GRE 包时,IPv4 包头中的目的地址必须用来转发包,并且需要减少有效载荷包的TTL。值得注意的是,在转发这样一个包时,如果有效载荷包的目的地址就是包的封装器(也就是隧道另一端),就会出现回路现象。在此情形下,必须丢弃该包。当 GRE 包被封装在IPv4 中时,需要使用IPv4 协议47。
报文格式
封装过程
- Router A 连接Group 1 的接口收到X 协议报文后,首先交由X 协议处理。
- X 协议检查报文头中的目的地址域来确定如何路由此包。
- 若报文的目的地址要经过Tunnel 才能到达,则设备将此报文发给相应的Tunnel 接口。
- Tunnel 口收到此报文后进行GRE 封装,在封装IP 报文头后,设备根据此IP 包的目的地址及路由表对报文进行转发,从相应的网络接口发送出去。
解封装过程
解封装过程和加封装的过程相反。
- RouterB 从Tunnel 接口收到IP 报文,检查目的地址。
- 如果发现目的地是本路由器,则RouterB 剥掉此报文的IP 报头,交给GRE 协议处理(进行检验密钥、检查校验和及报文的序列号等)。
- GRE 协议完成相应的处理后,剥掉GRE 报头,再交由X 协议对此数据报进行后续的转发处理。
说明:GRE 收发双方的加封装、解封装处理,以及由于封装造成的数据量增加,会导致使用GRE 后设备的数据转发效率有一定程度的下降。
GRE 隧道配置实验
- GRE 隧道不需要协商,直接以IP in IP形式发送
- GRE 隧道传输所有流量,包括组播,广播,可以直接建立动态路由邻居宣告网络
点对点GRE
R1#show run interface tunnel 10
Building configuration...
Current configuration : 121 bytes
!
interface Tunnel10
ip address 1.1.1.1 255.255.255.0
# 隧道IP,双方必须是同一个网段
tunnel source FastEthernet0/0
# 隧道源IP,在使用tunnel发送数据包时,封装的全局可路由IP
tunnel destination 10.1.34.4
# 隧道目的IP,与自身建立邻居的对方IP,必须可达。
# 可以在隧道基础上建立动态路由邻居,宣告身后网络。