计算机网络-GRE(通用路由封装协议)简介

昨天我们学习了VPN的基本概念,虚拟专用网络在当前企业总部与分支间广泛使用。常用的划分方法为基于协议层次有GRE VPN、IPSec VPN、L2TP VPN、PPTP VPN、SSL VPN等。其实我有考虑该怎么讲,因为在IP阶段好像虚拟专用网络讲得不深,在IE的阶段会更加深入,后面想想还是算了,该怎样就怎样吧。

一、GRE通用路由封装协议概述

由于Internet的发展,Internet网有了足够的带宽和覆盖,通过Internet建立分支-总部内网通信的可行性越来越高,GRE(Generic Routing Encapsulation,通用路由封装协议) 就是在这种背景下被提出的。通过GRE隧道,分支和总部之间可以基于Internet建立企业网络。

GRE产生背景
GRE产生背景

通用路由封装协议(General Routing Encapsulation,GRE)是一种三层VPN封装技术。GRE可以对某些网络层协议(如IPX、IPv4、IPv6等)的报文进行封装,使封装后的报文能够在另一种网络中(如IPv4)传输,从而解决了跨越异种网络的报文传输问题。

GRE封装IPV4TO6
GRE封装IPV4TO6

GRE隧道的两端是Tunnel接口,分别对数据报文进行封装及解封装。负责发送封装后的报文的物理接口叫做隧道源接口,对端接收此报文的物理接口叫做隧道目的接口。

总部与分支封装
总部与分支封装

GRE技术本质上是一种隧道技术。隧道技术类似于一座桥,可以在底层网络(比如:Internet)之上构建转发通道,用户可以自行构建隧道网络,不需要底层网络的管理者(比如:ISP)介入。隧道技术的方案很多,常见的隧道技术有:MPLS,GRE,L2TP,VXLAN等,隧道基本原理如下:

GRE本质为隧道
GRE本质为隧道

GRE隧道能够承载IPv4/IPv6的单播、组播、广播报文,GRE报文格式如下:

GRE报文格式
GRE报文格式
  • C:校验和验证位。如果该位置1,表示GRE头插入了校验和(Checksum)字段;该位为0表示GRE头不包含校验和字段。
  • K:关键字位。如果该位置1,表示GRE头插入了关键字(Key)字段;该位为0表示GRE头不包含关键字字段。
  • Recursion:用来表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。
  • Flags:预留字段。当前必须设为0。
  • Version:版本字段,必须置为0。Version为1是使用在相关标准的PPTP中。
  • Protocol Type:乘客协议的协议类型。
  • Checksum:对GRE头及其负载的校验和字段。-
  • Key:关键字字段,隧道接收端用于对收到的报文进行验证。

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

简单说GRE就是利用隧道技术在两端建立tunnel接口,通过封装IPV4、IPV6报文使得总部到分支的私有网络报文传输到对端,其中涉及到报文的封装与接封装,隧道模式等。

二、GRE工作原理

2.1 工作原理

GRE构成要素分为3个部分:乘客协议、封装协议和运输协议

  • 乘客协议是指用户在传输数据时所使用的原始网络协议(IPv4、IPX、IPv6等)。
  • 封装协议的作用就是用来“包装”乘客协议对应的报文,使原始报文能够在新的网络中传输,如GRE。
  • 运输协议是指被封装以后的报文在新网络中传输时所使用的网络协议如:IP协议。
GRE封装示例
GRE封装示例

上图中报文的封装过程:

  1. RTA连接企业分部的接口收到IP数据报文后,首先交由IP协议处理。
  2. IP协议检查报文头中目的地址来确定如何转发此报文。若报文的目的地址要经过GRE隧道才能到达,则IP协议将此报文发给相应的Tunnel接口。
  3. Tunnel接口收到此报文后为其封装GRE报文头,然后再交由IP协议处理。
  4. IP协议再为GRE报文封装新的IP报文头(源地址为隧道源接口IP,目的地址为隧道目的接口IP),然后根据封装后的IP报文的目的地址及路由表对报文进行转发,从相应的连接Internet的物理接口(隧道源接口)发送出去。

解封装过程与封装过程相反,具体如下:

  1. RTB从连接Internet的物理接口收到IP报文后,检查其目的地址。如果目的地址是RTB,且IP报文头中的协议号为47(表示封装的报文为GRE报文),则RTB剥掉此报文的IP报文头,交给GRE协议处理。
  2. GRE协议进行校验和关键字识别后,剥掉GRE报文头,再交由IP协议处理。
  3. IP协议将此数据报文转发到企业总部。

2.2 GRE Keepalive检测

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

GRE的Keepalive检测功能可以检测隧道状态,即检测隧道对端是否可达。

Keepalive超时时间=发送周期(默认5 s)*重试次数(默认3次)

GRE Keepalive检测
GRE Keepalive检测

前面我们讲过需要创建一个tunnel隧道接口用于GRE,这个接口类似于环回接口lookback接口,没有检测功能,不会主动关闭接口,因此需要一个机制来实现当GRE两端连接失败时断开GRE隧道。

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

  • 当GRE隧道的源端使能Keepalive检测功能后,就创建一个定时器,周期地发送Keepalive探测报文,同时通过计数器进行不可达计数。每发送一个探测报文,不可达计数加1。
  • 对端每收到一个探测报文,就给源端发送一个回应报文。
  • 如果源端的计数器值未达到预先设置的值就收到回应报文,就表明对端可达。如果源端的计数器值到达预先设置的值——重试次数(Retry Times)时,还没收到回送报文,就认为对端不可达。此时,源端将关闭隧道连接。但是源端口仍会继续发送Keepalive报文,若对端Up,则源端口也会Up,建立隧道链接。

2.3 GRE隧道安全威胁

GRE隧道的主要作用是将数据在分支-总部之间传递,数据并不加密,有被篡改的风险。GRE隧道建立也有一定风险,通过伪造IP地址,可以使得非法设备与合法设备之间建立GRE隧道。

GRE隧道安全威胁
GRE隧道安全威胁
2.3.1 GRE数据校验和验证

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

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

GRE数据校验和验证
GRE数据校验和验证

数据校验是为了确保数据是完整的,没有经过篡改的,需要开启数据校验将C置位1。

2.3.2 GRE识别关键字

为了防止非法路由器连接GRE或者伪造IP进行连接,可以开启密码认证。

识别关键字(Key)验证是指对Tunnel接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文。若GRE报文头中的K位为1,则在GRE头中插入一个四字节长关键字字段,收发双方将进行识别关键字的验证。

GRE识别关键字
GRE识别关键字

通过密码来验证GRE对端的建立,置位K,然后设置一个Key进行验证。

虽然通过上面的计算可以实现合法建立GRE隧道以及数据的完整性,但是因为GRE本身没有进行加密因此GRE报文能够清晰地查看到报文的信息,存在不安全性。因此一般情况下GRE会结合其它安全机制来搭配使用。

GRE的安全性
GRE的安全性

总结:GRE本质是一种隧道技术,利用隧道在分支和总部间建立隧道接口,结合数据验证和key对数据完整性、合法性进行校验可以建立起一个虚拟的Tunnel通道,GRE可以用于传输单播、组播、广播报文具有其优点,但是也存在一些安全性的缺陷,简单说只要有部署了Internet能够就有可能使用GRE实现分支互联。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SeggisV1 源码技术指导文档

软件下载地址: 百度网盘:链接:https://pan.baidu.com/s/1ZtwVcLsLypGo5lH6qR9oTw?pwd5856 问题咨询: https://github.com/YangJing524/Seggis

VSCode Terminal无法运行node以及node-gyp等指令

无法使用node指令,使用管理员权限启动VSCode即可,或者右键VSCode属性,修改兼容性中使用管理员权限打开。 运行node-gyp等指令出现因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID1351…

前端全栈 === 快速入 门 Redis

目录 简介 通过 docker 的形式来跑: set、get 都挺简单: incr 是用于递增的: keys 来查询有哪些 key: redis insight GUI 工具。 list 类型 left push rpush lpop 和 rpop 自然是从左边和从右边删除数据。​编辑 如果想查看数据…

计算机网络socket编程(2)_UDP网络编程实现网络字典

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络socket编程(2)_UDP网络编程实现网络字典 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨…

简单链式表

# 完成双向循环链表的判空、尾插、遍历、尾删 class Node:def __init__(self, value):self.value valueself.next Noneself.prev None class Linklist:def __init__(self,nodeNone):self.head nodeself.size 0def is_empty(self):return self.size 0def add_tail(self,va…

流水线切分策略;通过自适应的重采样和重计算策略来优化计算资源和内存使用

目录 流水线切分策略 1,2,3,4,5指的计算任务(数据切分) 大方块代表GPU计算 黄色代表显存 通过自适应的重采样和重计算策略来优化计算资源和内存使用 一是自适应重计算(Adaptive Recomputation) 二是自适应划分(Adaptive Partitioning) 流水线切分策略 1,2,3,4,5指…

不只是请求和响应:使用Fiddler抓包URL和Method全指南(中)

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 不只是请求和响应:使用Fiddler抓包HTTP协议全指南(上)-CSDN博客https://blog.csdn.net/Chunfeng6yugan/article/details/144005872?spm1001.2014.3001.5502 🙉在(上)篇博客中&#xf…

卷积神经网络(CNN)中的批量归一化层(Batch Normalization Layer)

批量归一化层(BatchNorm层),或简称为批量归一化(Batch Normalization),是深度学习中常用的一种技术,旨在加速神经网络的训练并提高收敛速度。 一、基本思想 为了让数据在训练过程中保持同一分布…

前端速通(CSS)

1.CSS介绍 1.什么是CSS? CSS(Cascading Style Sheets,层叠样式表)是一种用于控制网页的外观和布局的样式表语言。它与HTML(超文本标记语言)紧密配合,负责页面元素的样式定义,如字体、颜色、尺…

webkit浏览器内核编译(2024年11月份版本)

webkit浏览器内核编译 本文详细介绍了如何安装和配置Webkit的编译环境和工具的安装,以及在Windows上编译和运行WebKit浏览器引擎的过程,包括安装依赖、设置环境变量、生成解决方案并最终运行附带的MiniBrowser示例。 一、WebKit简介 WebKit 是一个开源的…

C++趣味编程玩转物联网:用树莓派Pico实现一位数码管动态显示

七段数码管是一种经典的电子显示器件,广泛应用于数字时钟、电子仪表等设备。本文将通过树莓派Pico开发板,介绍如何用C代码控制一位七段数码管显示数字。作为一个嵌入式开发项目,这不仅是初学者理解数码管工作原理的好机会,也是C开…

非交换几何与黎曼ζ函数:数学中的一场革命性对话

非交换几何与黎曼ζ函数:数学中的一场革命性对话 非交换几何(Noncommutative Geometry, NCG)是数学的一个分支领域,它将经典的几何概念扩展到非交换代数的框架中。非交换代数是一种结合代数,其中乘积不是交换性的&…

【CSP CCF记录】201803-1第13次认证 跳一跳

题目 样例输入 1 1 2 2 2 1 1 2 2 0 样例输出 22 思路 没有技术含量的一道题,解题的关键是理解游戏规则。用state标记跳跃状态,以下是对游戏规则的分析: 1. state1,跳到方块上但没跳到中心,得1分 2. state2&#xf…

ALSA(2) ---- DMA实践

DMA实践 本篇文章主要是学习alsa高级音频框架总结而来,ALSA的Platform侧ADMA,学习总结而来,adma驱动来源于telechips产商805x芯片; ADMA物理拓扑图 ADMA物理拓扑图如上,RX和TX ADMA是接收和发送控制器,Ar…

【机器学习】——卷积与循环的交响曲:神经网络模型在现代科技中的协奏

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

lua除法bug

故事背景,新来了一个数值,要改公式。神奇的一幕出现了,公式算出一个非常大的数。排查是lua有一个除法bug,1除以大数得到一个非常大的数。 function div(a, b)return tonumber(string.format("%.2f", a/b)) end print(1/73003) pri…

代码管理之Gitlab

文章目录 Git基础概述场景本地修改未提交,拉取远程代码修改提交本地,远程已有新提交 GitIDEA引入Git拉取仓库代码最后位置 Git基础 概述 workspace 工作区:本地电脑上看到的目录; repository 本地仓库:就是工作区中隐…

嵌入式系统应用-LVGL的应用-智能时钟 part 3

智能时钟 part 3 6 光强传感器6.1 光敏电阻介绍6.2 电路图介绍 7 ADC模块7.1 ADC模块介绍7.2 adc 转化流程7.3 规则通道和注入通道7.4 DMA 搬运7.5 TIM触发ADC和DMA搬运数据的原理 8 代码8.1 配置头文件8.2 初始化ADC 和DMA8.3 创建线程读取 值8.4 演示效果 由于丢失温湿度传感…

跨平台应用开发框架(1)----Qt(组件篇)

目录 1.Qt 1.Qt 的主要特点 2.Qt的使用场景 3.Qt的版本 2.QtSDK 1.Qt SDK 的组成部分 2.安装 Qt SDK 3.Qt SDK 的优势 3.Qt初识 1.快速上手 widget.cpp mian.cpp widget.h Helloworld.pro 2.对象树 3.坐标系 4.信号和槽 1. 信号和槽的基本概念 2. 信号和槽的…

架构-微服务-服务治理

文章目录 前言一、服务治理介绍1. 什么是服务治理2. 常见的注册中心 二、nacos简介三、nacos实战入门1. 搭建nacos环境2. 将商品微服务注册到nacos3. 将订单微服务注册到nacos 四、实现服务调用的负载均衡1. 什么是负载均衡2. 自定义实现负载均衡3. 基于Ribbon实现负载均衡 五、…