1. GRE协议简介

GRE(General Routing Encapsulation ,通用路由封装)是对某些网络层协议(如IP和IPX)的数据报文进行封装,使这些被封装的报文能够在另一网络层协议(如IP)中传输。此外 GRE协议也可以作为VPN的第三层隧道协议连接两个不同的网络,为数据的传输提供一个透明的通道。

GRE主要有以下特点:

  • 机制简单,无需维持状态,对隧道两端设备的CPU负担小;
  • 本身不提供数据的加密,如果需要加密,可以与IPSec结合使用;
  • 不提供流量控制和QoS

2. GRE报文格式


其中:

  • Payload (净荷): 系统接收到的需要封装和路由的原始数据报;
  • Passenger Protocol(乘客协议):报文封装之前所属的协议称为乘客协议
  • Encapsulation Protocol(封装协议): 用来封装乘客协议的协议称为封装协议,这里的GRE便是一个封装协议,也成为运载协议(Carrier Protocol);
  • Transport Protocol(传输协议):负责对封装后的报文进行转发的协议称为传输协议;不同于传输层协议

GRE头部各字段含义:

字段 长度 含义
C 1bit 校验和验证标识。设置为1,表示Checksum字段生效;0表示Checksum字段不生效
K 1bit 关键字标识。设置为1,表示头部中Key字段生效;0表示Key字段不生效
Recursion 3bits 用来表示报文被封装的层数。每封装一次该值加1,最多封装3次
Flags 5bits 预留。值为0
Version 3bits 版本号。值为0
Protocol Type 16bits 乘客协议类型
Checksum 16bits 对GRE头部和负载计算校验和。只有当C为1时有效
Key 32bits 关键字信息。隧道接收端用于对收到的报文进行验证,只有当K为1时有效;此外也用于一对多的GRE隧道
其他 暂未使用,其值固定填充0

3. GRE报文封装与解封装

以下图为例:

3.1 报文封装

  • Router A连接Group 1的接口收到X协议报文后,首先交由X协议处理;
  • X协议检查报文头中的目的地址域来确定如何路由此包;
  • 若报文的目的地址要经过Tunnel才能到达,则设备将此报文发给相应的Tunnel接口
  • Tunnel接口收到此报文后进行GRE封装,在封装IP报文头后,设备根据此IP包的目的地址及路由表对报文进行转发,从相应的网络接口发送出去。

3.2 报文解封装

  • Router B从Tunnel接口收到IP报文,检查目的地址;
  • 如果发现目的地是本路由器,则Router B剥掉此报文的IP报头,交给GRE协议处理(进行检验密钥、检查校验和及报文的序列号等);
  • GRE协议完成相应的处理后,剥掉GRE报头,再交由X协议对此数据报进行后续的转发处理。
  • 随着报文的封装、解封装,会导致有效数据传输效率降低, 从而导致设备对GRE数据转发速率降低。

4. GRE的安全选项

为了提高GRE隧道的安全性,GRE还支持由用户选择设置Tunnel接口的识别关键字(或称密钥),以及对隧道封装的报文进行端到端校验(校验和)。
在RFC 1701中规定:

  • 若GRE报文头中的Key标识位置1,则收发双方将进行通道识别关键字的验证,只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。
  • 若GRE报文头中的Checksum标识位置1,则校验和有效。发送方将根据GRE头及Payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进行进一步处理,否则丢弃。

5. 应用范围

GRE(点对点类型)主要应用于一下几种环境:

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


上图中:Group 1和Group 2是运行Novell IPX协议的本地网,Team 1和Team 2是运行IP协议的本地网。通过在Router A和Router B之间采用GRE协议封装的隧道,Group 1和Group 2、Team 1和Team 2可以互不影响地进行通信

5.2 扩大了跳数受限协议(如RIP)的工作范围


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

5.3 将一些不能连续的子网连接起来,用于组建VPN


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

5.4 和IPsec结合使用


GRE可以和IPsec结合使用,即对于路由协议、语音、视频等数据先进行GRE封装,再对封装后的报文进行IPsec的加密处理,以提高数据在隧道中传输的安全性。

6 点到多点GRE隧道

6.1 点到多点GRE隧道产生背景


传统的GRE隧道是一个点到点的连接。GRE应用于如上图所示的企业网时,需要在企业中心节点和各个分支机构之间建立多条点到点GRE隧道。当企业分支机构众多时,配置工作量巨大;而且,如果新增分支机构,则需要在中心节点上增加配置,增加了网络维护的负担;此外,分支机构采用ADSL等方式拨号上网时,分支机构公网地址的不确定性也增加了中心节点配置的复杂度。

虽然动态VPN技术,如DVPN(Dynamic Virtual Private Network,动态虚拟私有网络),可以学习公网地址和私网地址的对应关系,并动态地在中心节点和分支机构、不同分支机构之间建立隧道,但是目前动态VPN技术没有统一的规范,各个厂商都采用私有协议实现动态VPN,无法互通。

点到多点GRE隧道很好地解决了上述问题,非常适用于分支机构众多的企业网络。点到多点GRE隧道组网中,需要在中心节点上配置点到多点GRE模式的隧道接口(以下简称为点到多点GRE隧道接口)、分支机构上配置传统的点到点GRE over IPv4模式的隧道接口(以下简称为点到点GRE隧道接口),这样就可以实现在中心节点和多个分支机构之间动态建立隧道

6.2 点到多点GRE隧道工作原理


点到点GRE隧道接口不同的是点到多点GRE隧道接口上不需要手工配置隧道目的地址,而是根据接收到的GRE报文动态学习隧道目的地址。如图2-2所示,配置了点到多点GRE隧道接口的设备(Router A)接收到对端设备(Router B)发送的GRE报文后,从该报文中获取传输协议(IPv4)报文头的源地址和乘客协议(IPv4)报文头的源地址,分别作为隧道的目的地址和报文的目的地址(即分支网络的私网地址),建立一条隧道表项。

通过点到多点GRE隧道转发报文时,设备根据报文的目的地址,在隧道表项中查找对应的隧道目的地址,使用此地址作为GRE封装传输协议(IPv4)报文头的目的地址。最初是没有目的地址表项的,必须先学到以后才可以双方通信,之前只能单方通信

6.3 应用场景

6.3.1 分支机构的GRE隧道备份


为了提高网络的可靠性,分支机构可以部署多台网关设备,在中心节点和多个网关设备之间分别建立GRE隧道,形成备份。

在分支机构的网关设备上创建GRE隧道时,可以设置GRE Key。中心节点根据分支机构发送的GRE报文创建隧道表项时,从该GRE报文中获取GRE Key,记录在隧道表项中。中心节点根据GRE Key来判断隧道表项的优先级,并根据优先级最高的隧道表项转发报文,优先级低的隧道表项作为备份。未记录GRE Key的表项优先级最高;记录了GRE Key的表项,Key值越小优先级越高

  • 只能在分支节点的点到点GRE隧道接口上配置GRE Key,中心节点的点到多点GRE隧道接口上不能配置GRE Key

6.3.2 中心节点的GRE隧道备份


为了提高网络的可靠性,中心网络可以部署多台网关设备,通过在主设备(Router A)上为点到多点GRE隧道指定备份接口(Tunnel1接口),实现中心网络设备和传输路径的备份。当主设备与分支机构之间的链路出现故障时,发送给分支机构的报文在主设备上查找不到匹配的隧道表项,主设备通过备份接口把该报文发送给备份设备(Router B),由备份设备将报文发送到分支机构。备份接口应配置为GRE over IPv4模式的隧道接口。

当主设备上存在隧道表项时,备份接口也可以参与转发隧道的选择,根据优先级决定是否采用备份接口转发报文。如果没有为备份接口配置GRE Key,则其优先级低于所有的点到多点隧道表项;如果为备份接口配置了GRE Key,则与点到多点隧道表项中记录的GRE Key比较,Key值小的优先级高

6.4 点到多点GRE隧道优缺点

6.4.1 优点:

  • 配置简单。中心节点上只需配置点到多点GRE隧道,无需在中心节点上创建到达每个分支机构的点到点GRE隧道。
  • 维护代价小。增加分支机构时,中心节点会动态学习到新增分支机构的地址,并与其建立隧道,无需手工配置。
  • 分支机构接入方式灵活。中心节点动态学习隧道的目的地址,分支机构是否动态获取公网地址(如采用ADSL等拨号方式接入网络)对中心节点的配置没有影响。
  • 以标准的GRE协议为基础,不需要特殊的协议或者私有协议来配合使用,具有较好的互通性。
  • 对于分支机构使用的网关设备没有特殊要求,只要支持GRE协议即可,避免用户网络设备的重复投资。
  • 支持分支机构和中心节点的GRE隧道备份,提高网络的可靠性。

6.4.2 缺点:

  • 点到多点GRE隧道的传输协议和乘客协议只能是IPv4
  • 点到多点GRE隧道组网中,中心网络不能主动向分支网络发送报文。只有中心网络接收到分支网络的报文,并在中心节点上建立隧道表项后,中心网络发往分支网络的报文才能转发成功
  • 点到多点GRE隧道组网中,分支网络之间无法建立隧道,不能通信。

GRE隧道协议的更多相关文章

  1. PPTP(Point to Point Tunneling Protocol),即点对点隧道协议。

    PPTP PPTP(Point to Point Tunneling Protocol),即点对点隧道协议.该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网(VPN),可 ...

  2. docke跨主机通信之gre隧道

    GRE简介 GRE可以对网络层的任何协议来进行封装,类似LVS的IPIP协议,在原有的数据报上增加GRE协议数据报.然后在网络上传输,到达对端后,解开GRE数据报头,得到真实的数据报.其中的mac地址 ...

  3. linux 下创建GRE隧道

    其他国家的互联网如同一个孤岛.要想访问国外网站异常的缓慢,甚至被和谐了.可以建立一条隧道来避免这种情况,下面说说GRE隧道如何建立. 1. GRE介绍 GRE隧道是一种IP-over-IP的隧道,是通 ...

  4. 内部办公网与IDC机房的GRE隧道配置实践

    背景 公司内网与机房服务器为了实现用内网IP通信的功能,故使用了linux的IP gre隧道的方式.使得公司内部可以直接通过路由直连的方式访问机房服务器. 拓扑图如下: 注:拓扑中的外网IP为虚构的I ...

  5. Open vSwitch系列实验(二):Open vSwitch的GRE隧道实验网络

    一.实验目的 了解GRE协议及原理 理解 Open vSwitch如何配置GRE隧道 二.实验原理 Open vSwitch创建GRE原理很简单,就是把对GRE头和外部IP头的一些操作从原来的代码中抽 ...

  6. 华三F100系列防火墙 、华为USG6300系列防火 GRE 隧道配置

    GRE概述: 通用路由封装(GRE: Generic Routing Encapsulation)是通用路由封装协议,可以对某些网络层协议的数据报进行封装,使这些被封装的数据报能够在IPV4网络中传输 ...

  7. Gre 隧道与 Keepalived

    这一篇文章是做了不少功课的. 什么是 Gre 隧道 什么是 Vrrp KeepAlived 是什么 用Keepalived 怎么玩 附录 什么是 Gre 隧道 GRE 隧道是一种 IP-2-IP 的隧 ...

  8. ubantu与CentOS虚拟机之间搭建GRE隧道

    Author       : Email         : vip_13031075266@163.com Date          : 2020.01.23 Copyright : 未经同意不得 ...

  9. GTP (GPRS隧道协议(GPRSTunnellingProtocol))

    GTP (GPRS隧道协议(GPRSTunnellingProtocol)) GTP (GPRS隧道协议(GPRSTunnellingProtocol)) 编辑 本词条缺少信息栏.名片图,补充相关内容 ...

随机推荐

  1. 为MySQL的source命令导入SQL文件配置参数

    为MySQL的source命令导入SQL文件配置参数 执行 mysql -uroot -p 输入密码后进入 MySQL 命令提示符 set charset utf8; source /root/xxx ...

  2. DC-6 靶机渗透测试

    DC-6 渗透测试 冲冲冲,好好学习 . 收获总结写在文末. 操作机:kali 172.66.66.129 靶机:DC-4 172.66.66.136 网络模式:NAT 上来一波 netdiscove ...

  3. iTop安装 vm虚拟机、Linux、centos7安装itop 2.6.1

    itop安装流程,是我基于下面两位博主发布的文章整理出来的,欢迎大家学习,如有错误之处请大家留言指出我看到之后及时更新.谢谢 https://blog.csdn.net/qq_23565543/art ...

  4. 内置函数 字符串的复制 strcpy

    1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 6 void main() 7 ...

  5. Android开发音视频方向学习路线及资源分享,学完还怕什么互联网寒冬?

    接触Android音视频这一块已经有一段时间了,跟普通的应用层开发相比,的确更花费精力.期间为了学习音视频的录制,编码,处理也看过大大小小的几十个项目.总体感觉就是知识比较零散,对刚入门的朋友比较不友 ...

  6. 轻松上手SpringBoot+SpringSecurity+JWT实RESTfulAPI权限控制实战

    前言 我们知道在项目开发中,后台开发权限认证是非常重要的,springboot 中常用熟悉的权限认证框架有,shiro,还有就是springboot 全家桶的 security当然他们各有各的好处,但 ...

  7. idea 生成 javaDoc

    idea 生成 javaDoc 使用命令 Generate javaDoc - 直接输入javadoc就可以了 Generate JavaDoc scope 3个区域,一般选择第三项自定义,选择模块, ...

  8. vivo商城计价中心 - 从容应对复杂场景价格计算

    一.背景 随着vivo商城的业务架构不断升级,整个商城较为复杂多变的营销玩法被拆分到独立的促销系统中. 拆分后的促销系统初期只是负责了营销活动玩法的维护,促销中最为重要的计价业务仍然遗留在商城主站业务 ...

  9. Django ORM记录的增删改查结合web端

    模版语法分配变量 在views.py文件中定义一个视图函数show_data: def show_data(request): # 定义一个字典 并将它展示在前端HTML文件 user_dic = { ...

  10. noip 模拟 7

    我花了我多久的rp啊-- 考试经过 这次是三道题,依旧先看一遍,然后从头开始做 T1一看,这好像是KMP?等等,我好像忘了啊你个废,没事哈希也能做,On似乎可以呀,一波操作,我是不是要A题了? 转到T ...