了解GRE隧道技术(上)

devtools/2024/9/22 16:55:46/

1.GRE是什么? 

        通用路由封装(Generic Routing Encapsulation GRE) 是一种协议,用于将使用一个路由协议的数据包封装在另一协议的数据包中。“封装”指将一个数据包包装在另一个数据包中,就像将一个盒子放在另一个盒子中一样。

2.GRE的作用是什么? 

        GRE 是在网络上建立直接点对点连接的一种方法,目的是简化单独网络之间的连接。它适用于各种网络层协议

        要了解其工作原理,请想像一下汽车和渡轮之间的区别。汽车在陆地上行驶,而渡轮在水上行驶。汽车通常不能在水上行驶,但是可以将汽车装载到渡轮上。

        在这个类比当中,地形类型好比是支持某些路由协议的网络,而车辆则好比是数据包。GRE 是一种将一种类型的数据包装载到另一种类型的数据包中的方式,以便第一个数据包可以穿越它通常无法穿越的网络,就像一种类型的运输工具(汽车)被装载到到另一种类型的运输工具(渡轮)上,以便穿越原本无法行驶的地形。

        例如,假设一家公司需要在位于两个不同办公室的局域网(LAN)之间建立连接。两个 LAN 都使用最新版本的 互联网协议 IPv6。但是,为了从一个办公网络到达另一个办公网络,流量必须通过一个由第三方管理的网络 — 该网络有些过时,仅支持较旧的 IPv4 协议。

        借助 GRE,该公司可以将 IPv6 数据包封装在 IPv4 数据包中,然后便可通过此网络传输流量。回到那个类比,IPv6 数据包是汽车,IPv4 数据包是渡轮,而第三方网络则是水。

        使用GRE还可以克服IGP协议的一些局限性。例如,RIP路由协议是一种距离矢量路由协议,最大跳数为15。如果网络直径超过15,设备将无法通信。这种情况下,可以使用GRE技术在两个网络节点之间搭建隧道,隐藏它们之间的跳数,扩大网络的工作范围。

 3.GRE是如何工作的?

        系统收到需要进行封装和路由的某网络层协议(如IPX)数据时,将首先对其加上GRE报文头,使之成为GRE报文,再将其封装在另一协议(如IP)中。这样,此报文的转发就可以完全由IP协议负责。封装后的报文的格式如下图所示: 

图1 封装好的GRE报文格式

  • 净荷(Payload Packet):系统收到的需要封装和传输的数据报文称为净荷。
  • 乘客协议(Passenger Protocol):封装前的报文所属的协议称为乘客协议。
  • 封装协议(Encapsulation Protocol):上图的GRE协议称为封装协议,也称为运载协议(Carrier Protocol)。
  • 传输协议(Transport Protocol或者Delivery Protocol):负责对封装后的报文进行转发的协议称为传输协议。

        GRE首部各字段解释如下: 

表1-1 GRE Header首部各字段解释 

字段

长度

描述

C

1 bit

校验和验证位。如果该位置1,表示GRE头插入了校验和(Checksum)字段;该位为0表示GRE头不包含校验和字段。

K

1 bit

关键字位。如果该位置1,表示GRE头插入了关键字(Key)字段;该位为0表示GRE头不包含关键字字段。

Recursion

3 bits

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

Flags

5 bits

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

Version

3 bits

版本字段,必须置为0。Version为1是使用在RFC2637的PPTP中。

Protocol Type

16 bits

乘客协议的协议类型。

Checksum

16 bits

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

Key

31 bits

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

        报文在GRE隧道中传输包括封装解封装两个过程。如下图所示,如果私网报文从Ingress PE向Egress PE传输,则封装在Ingress PE上完成;而解封装在Egress PE上进行。

 图2 私有网络通过GRE隧道互连        

        整体封装与解封装的流程如下所示:

  • Ingress PE收到报文后,交由乘客协议处理,乘客协议判断出接口为GRE Tunnel接口。
  • Ingress PE将报文发送到对应的tunnel接口,并给报文加GRE报文头。
  • Ingress PE再根据配置信息,给报文加上IP头(IP头中包含源地址和目的地址)。
  • Ingress PE根据IP头中的目的地址,在公网路由表中查找相应的出接口并发送报文。
  • Egress PE收到报文并分析IP头发现自己是目的地。
  • Egress PE去掉IP头和GRE头。
  • Egress PE判断报文的乘客协议为私网上运行的协议,于是交由私网处理该报文。私网正常转发该报文。

http://www.ppmy.cn/devtools/92577.html

相关文章

《C#面向语言版本编程》C# 13 中的新增功能

将C#语言版本升级为预览版 C# 13 包括一些新增功能。 可以使用最新的 Visual Studio 2022 版本或 .NET 9 预览版 SDK 尝试这些功能。若想在.NET项目中尝试使用C#的最新预览版特性,可以按照以下步骤来升级你的项目语言版本: .打开项目文件: 找…

C语言进阶——一文带你深度了解“C语言关键字”(中篇6)

本篇文章记录我学习C语言进阶知识——C语言关键字,旨在记录分享,希望我的分享能带给你不一样的收获! 目录 一、return关键字 二、const 关键字也许该被替换为 readolny (一)、 const 修饰的只读变量 (二…

【Python随笔】比PyQt5更先进的pyside6安装和使用方法

最近因为自研日常开发工具的需求,决定重新拾起PyQt5之类的桌面工具开发技术栈,为啥选用PyQt,一是因为笔者比较精通python,二是因为不需要在外观上做什么特别的东西。经过一番调研,发现当前的PyQt5版本已经过时&#xf…

白骑士的Matlab教学进阶篇 2.5 Simulink

系列目录 上一篇:白骑士的Matlab教学进阶篇 2.4 图像处理 Simulink是MATLAB的扩展工具,提供了一个图形化的建模和仿真环境。它广泛应用于系统设计、仿真、自动控制、信号处理等领域。本文将详细介绍Simulink的简介与基本使用、建立与仿真模型、控制系统…

甄选范文“论软件设计方法及其应”软考高级论文系统架构设计师论文

论文真题 软件设计(Software Design,SD)根据软件需求规格说明书设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及程序流程等,形成软件的具体设计方案。软件设计把许多事物和问题按不同的层次和角度进行抽象,将问题或事物进行模块化分解,以便更容易解决…

通过Redsocks将Kali Linux的流量进行代理

Redsocks 是一个代理重定向工具,可以将流量通过 SOCKS 或 HTTP 代理传递。你可以使用它在 Kali Linux 中将流量通过代理服务器。以下是设置和使用 Redsocks 的步骤: 1. 安装 Redsocks Redsocks 通常在 Kali Linux 上不可用,需要手动安装。首…

【uniapp】uniapp+vue2微信小程序实现分享功能

uniappvue2做的微信小程序实现分享功能 问题描述 uniappvue2做的微信小程序,发布以后点击右上角三个点,分享小程序的时候,转发和分享按钮都是灰色 解决方案 转发、分享、复制链接这几个功能需要自己来手动写方法,考虑到每个页…

AskYourDatabase v1.1.83 使用人工智能连接您的数据库并与您的数据聊天

AskYourDatabase 是一个创新的 平台 它允许用户直接连接到您的数据库并与您的数据聊天 。这个革命性的工具使用人工智能来提供答案和分析,日常开发中可以用来帮助开发者编写sql脚本,分析数据结构等。支持市面上流行的数据库。后端数据库开发的又一利器&a…