1、GRE简介

通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。

GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一种三层隧道封装技术,使报文可以通过GRE隧道透明的传输,解决异种网络的传输问题。

GRE实现机制简单,对隧道两端的设备负担小。GRE隧道可以通过IPv4网络连通多种网络协议的本地网络,有效利用了原有的网络架构,降低成本。GRE隧道扩展了跳数受限网络协议的工作范围,支持企业灵活设计网络拓扑。GRE隧道可以封装组播数据,和IPSec结合使用时可以保证语音、视频等组播业务的安全。GRE隧道支持使能MPLS LDP,使用GRE隧道承载MPLS LDP报文,建立LDP LSP,实现MPLS骨干网的互通。GRE隧道将不连续的子网连接起来,用于组建VPN,实现企业总部和分支间安全的连接。

2、GRE实现过程

报文在GRE隧道中传输包括封装和解封装两个过程。

图1 通过GRE隧道实现X协议互通组网图

如上图1所示,如果X协议报文从Ingress PE向Egress PE传输,则封装在Ingress PE上完成,而解封装在Egress PE上进行。封装后的数据报文在网络中传输的路径,称为GRE隧道。

1、封装

Ingress PE从连接X协议的接口接收到X协议报文后,首先交由X协议处理。

X协议根据报文头中的目的地址在路由表或转发表中查找出接口,确定如何转发此报文。如果发现出接口是GRE Tunnel接口,则对报文进行GRE封装,即添加GRE头。

根据骨干网传输协议为IP,给报文加上IP头。IP头的源地址就是隧道源地址,目的地址就是隧道目的地址。

根据该IP头的目的地址(即隧道目的地址),在骨干网路由表中查找相应的出接口并发送报文。之后,封装后的报文将在该骨干网中传输。

2、解封装

解封装过程和封装过程相反。

Egress PE从GRE Tunnel接口收到该报文,分析IP头发现报文的目的地址为本设备,则Egress PE去掉IP头后交给GRE协议处理。

GRE协议剥掉GRE报头,获取X协议,再交由X协议对此数据报文进行后续的转发处理。

3、GRE报文格式

 

图2 GRE报文结构

GRE封装后的报文结构如上图2所示。

1、乘客协议(Passenger Protocol):

封装前的报文称为净荷,封装前的报文协议称为乘客协议。

2、封装协议(Encapsulation Protocol):

GRE Header是由封装协议完成并填充的,封装协议也称为运载协议(Carrier Protocol)。

3、传输协议(Transport Protocol或者Delivery Protocol):

负责对封装后的报文进行转发的协议称为传输协议。

GRE头的各字段解释如下表1所示。

表1 GRE头的各字段解释

GRE头字段

字段解释

C

校验和验证位。

该位置1,表示GRE头插入了校验和(Checksum)字段。

该位置0,表示GRE头不包含校验和字段。

K

关键字位。

该位置1,表示GRE头插入了关键字(Key)字段。

该位置0,表示GRE头不包含关键字字段。

Recursion

表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。

RFC1701规定该字段默认值为0。

RFC2784规定当发送和接受端该字段不一致时不会引起异常,且接收端必须忽略该字段。

设备实现时该字段仅在加封装报文时用作标记隧道嵌套层数,GRE解封装报文时不感知该字段,不会影响报文的处理。

Flags

预留字段。当前必须置为0。

Version

版本字段。必须置为0。

Protocol Type

标识乘客协议的协议类型。常见的乘客协议为IPv4协议,协议代码为0800。

Checksum

对GRE头及其负载的校验和字段。

Key

关键字字段,隧道接收端用于对收到的报文进行验证。

因为目前实现的GRE头不包含源路由字段,所以Bit 1、Bit 3和Bit 4都置为0。

4、GRE的安全机制

GRE本身提供两种基本的安全机制:校验和验证,识别关键字。

1、校验和验证

校验和验证是指对封装的报文进行端到端校验。

若GRE报文头中的C位标识位置1,则校验和有效。发送方将根据GRE头及Payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃。

隧道两端可以根据实际应用的需要决定配置校验和或禁止校验和。如果本端配置了校验和而对端没有配置,则本端将不会对接收到的报文进行校验和检查,但对发送的报文计算校验和;相反,如果本端没有配置校验和而对端已配置,则本端将对从对端发来的报文进行校验和检查,但对发送的报文不计算校验和。

2、识别关键字

识别关键字(Key)验证是指对Tunnel接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文。

RFC1701中规定:若GRE报文头中的K位为1,则在GRE头中插入一个四字节长关键字字段,收发双方将进行识别关键字的验证。

关键字的作用是标志隧道中的流量,属于同一流量的报文使用相同的关键字。在报文解封装时,GRE将基于关键字来识别属于相同流量的数据报文。只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。这里的“完全一致”是指两端都不设置识别关键字,或者两端都设置相同的关键字。

5、GRE的Keepalive检测

由于GRE协议并不具备检测链路状态的功能,如果对端接口不可达,隧道并不能及时关闭该Tunnel连接,这样会造成源端会不断的向对端转发数据,而对端却因隧道不通接收不到报文,由此就会形成数据空洞。

GRE的Keepalive检测功能可以检测隧道状态,即检测隧道对端是否可达。如果对端不可达,隧道连接就会及时关闭,避免因对端不可达而造成的数据丢失,有效防止数据空洞,保证数据传输的可靠性。

Keepalive检测功能的实现过程如下:

当GRE隧道的源端使能Keepalive检测功能后,就创建一个定时器,周期地发送Keepalive探测报文,同时通过计数器进行不可达计数。每发送一个探测报文,不可达计数加1。

对端每收到一个探测报文,就给源端发送一个回应报文。

如果源端的计数器值未达到预先设置的值就收到回应报文,就表明对端可达。如果源端的计数器值到达预先设置的值——重试次数(Retry Times)时,还没收到回送报文,就认为对端不可达。此时,源端将关闭隧道连接。但是源端口仍会继续发送Keepalive报文,若对端Up,则源端口也会Up,建立隧道链接。

对于设备实现的GRE Keepalive检测功能,只要在隧道一端配置Keepalive,该端就具备Keepalive功能,而不要求隧道对端也具备该功能。隧道对端收到报文,如果是Keepalive探测报文,无论是否配置Keepalive,都会给源端发送一个回应报文。

华为通用路由封装协议GRE介绍(二):http://www.023wg.com/vpn/391.html

您阅读这篇文章共花了: 

GRE tunnel 2相关推荐

  1. gre tunnel源码分析之接收流程

    GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中 ...

  2. GRE tunnel源码分析之发送流程

    GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中 ...

  3. 在Ubuntu上创建并测试GRE tunnel

    使用两台Ubuntu虚拟机进行GRE tunnel测试,则两台虚拟机位于同一网段,但并不影响观察测试结果. 测试环境: 在一台PC上同时运行两个Ubuntu虚拟机: ubuntu-gnome-16.0 ...

  4. JUNOS Olive GRE Tunnel Configuration

    still same topology used as previous posts. Added GRE tunnel in the topology with two new OSPF areas ...

  5. 配置IPsec on GRE Tunnel with IOS Firewall and NAT

    配置IPsec on GRE Tunnel with IOS Firewall and NAT <?xml:namespace prefix = o ns = "urn:schemas ...

  6. OSPF——GRE Tunnel(含配置命令)详解

    目录 一.GRE 技术介绍: 二.GRE Tunnel 简介图解 三.GRE Tunnel 基本配置: (1)隧道的建立: (2)配置通关Tunnel的路由--静态路由​​ (2)配置通关Tunnel ...

  7. GRE Tunnel实现企业网中的***

    虚拟专用网(×××)被定义为通过一个公用网络(通常是因特网)建立一个临时的.安全的连接,是一条穿过混乱的公用网络的安全.稳定的隧道.虚拟专用网是对企业内部网的扩展. 虚拟专用网可以帮助远程用户.公司分 ...

  8. 【Cisco NA】单臂路由+DHCP+DHCP中继+GRE Tunnel

    ①配置单臂路由  ✔ ②在Branch上开启DHCP,同时PC1.PC2能通过DHCP获取到IP地址,并且互相能访问  ✔ ③关闭Branch上DHCP并配上DHCP中继,在server上配置DHCP ...

  9. 另类L2TP Tunnel

    说到L2TP VPN,大家肯定会想到xl2tpd和openswan的组合,这是传统L2TP VPN所需要的组件.安装配置步骤相对比较复杂.通常用作Point to Site模式,即:多个接入点(PC. ...

  10. GRE over IPSEC ×××

    由于IPSEC ×××不能支持组播和广播,因此不能运行动态路由协议,由于我们需要把一条×××链路作为一条专线使用,还必须建立GRE tunnel隧道,以支持动态路由协议. 实验拓扑: 基本配置步骤如下 ...

最新文章

  1. 数据库副本的自动种子设定(自增长)
  2. C#面向对象9 字符串
  3. vscode如何用浏览器预览运行html文件
  4. 我的世界手机版java安装失败_我的世界中国版JAVA路径错误的解决方法分享
  5. JAVA面试题(part2)--位运算符
  6. EM算法(Expectation Maximization Algorithm)
  7. [Spring5]IOC容器_底层原理
  8. ORM系列之Entity FrameWork详解
  9. 依赖注入和控制反转的理解,写的太好了。
  10. 第二十八章:化学学校
  11. Android 系统(41)---善用工具
  12. 精美剪纸风三维感海报合集分享,这样的质感你喜欢吗?
  13. Hadoop——HDFS(2)
  14. 高等数学关于切线,法线,切平面,法平面的详细解释
  15. 人力资源管理专业知识与实务(初级)【6】
  16. 基于springboot的校园食堂订餐系统
  17. 《2022中国数据智能产业图谱2.0版》重磅发布
  18. icewm+rox-filer美化过程(转)
  19. 分享一个项目平台原型图
  20. Python Excel插入图片

热门文章

  1. notepad++反向查找/向上查找
  2. 2天玩转单反相机(第二讲)
  3. 二十一天学通JavaScript:cookie的安全性
  4. pandas小记:pandas索引和选择
  5. php支付宝授权登录,PHP实现支付宝登录
  6. 获得密钥_《哪吒》公映密钥延期一个月?关于“密钥延期”的全揭秘来了
  7. win10如何设置任务栏在左侧显示
  8. Android Listview设置每条信息的间距
  9. 1046 划拳 (15 分)—PAT (Basic Level) Practice (中文)
  10. Java 利用 split 方法切割字符串