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. Linux下-LNMP环境搭建博客网站(全过程)

    通常我们所说的LNMP是指一个网站基本的组织框架,即Linux系统支持,Nginx静态服务,Mysql数据库支持以及PHP动态编程语言支持.目前Mysql数据库被Oracle数据库分析公司收购,其创始 ...

  2. JavaScript高级程序设计(第4版)-第一章学习

    第一章 什么是Javascript 一.历史 JavaScript的名字怎么来的 首先,我们从javascript的历史开始了解,在以前的时候网页要验证某个必填字段是否填写,或者是判断输入的值的正确与 ...

  3. Linux守护进程及Systemd

    当我们启动一个前台任务后,命令行窗口退出,应用也就一起退出,无法访问了.怎么才能让它变成系统的守护进程(daemon),成为一种服务(service),一直在那里运行呢? 守护进程 前台任务和后台任务 ...

  4. Linux进程理解与实践(二)僵尸&孤儿进程 和文件共享

    孤儿进程与僵尸进程 孤儿进程: 如果父进程先退出,子进程还没退出那么子进程的父进程将变为init进程.(注:任何一个进程都必须有父进程) [cpp] view plaincopy #include & ...

  5. Special Forms and Syntax Sugars in Clojure

    (...): function literals, p40, 64; '(...): suppress evaluation, p24; _(...): comments, p18; ".. ...

  6. chromium调试技巧

    调试技巧: 1.多进程不方便跟踪渲染进程,单渲染进程的设置方法     command_line->AppendSwitchWithValue("--renderer-process- ...

  7. 计算机网络:基于iptalbes的SANT和DNAT|docker的服务器发布项目--超详细一看就会

     项目说明: 模拟企业让内网服务器可以上网,同时发布内网的服务器 1.实验环 我们需要准备三台linux系统,一台作为路由器机route,其它为客户机client-1.client-2 主机改名 ho ...

  8. 北航OO第二单元——电梯调度

    三次作业要求简介 特点:目的选层电梯 在电梯的每层入口,都有一个输入装置,让每个乘客输入自己的目的楼层.电梯基于这样的一个目的地选择系统进行调度,将乘客运送到指定的目标楼层. 第一次: 在任意时刻输入 ...

  9. 题解 P4336 [SHOI2016]黑暗前的幻想乡

    题解 前置芝士 :矩阵树定理 本题是一道计数题,有两个要求: 建造的公路构成一颗生成树 每条公路由不同的公司建造,每条公路与一个公司一一映射 那么看到这两个要求后,我们很容易想到第一个条件用矩阵树定理 ...

  10. NPM使用方法

    什么是npm npm是nodejs的包管理器,在当今工程化前端开发过程中,npm包起着举足轻重的作用. 安装npm 作为nodejs的包管理器,npm随着nodejs一起安装的.通常情况下,当我们安装 ...