计算机网络-GRE(通用路由封装协议)简介
昨天我们学习了VPN的基本概念,虚拟专用网络在当前企业总部与分支间广泛使用。常用的划分方法为基于协议层次有GRE VPN、IPSec VPN、L2TP VPN、PPTP VPN、SSL VPN等。其实我有考虑该怎么讲,因为在IP阶段好像虚拟专用网络讲得不深,在IE的阶段会更加深入,后面想想还是算了,该怎样就怎样吧。
一、GRE通用路由封装协议概述
由于Internet的发展,Internet网有了足够的带宽和覆盖,通过Internet建立分支-总部内网通信的可行性越来越高,GRE(Generic Routing Encapsulation,通用路由封装协议) 就是在这种背景下被提出的。通过GRE隧道,分支和总部之间可以基于Internet建立企业网络。
通用路由封装协议(General Routing Encapsulation,GRE)是一种三层VPN封装技术。GRE可以对某些网络层协议(如IPX、IPv4、IPv6等)的报文进行封装,使封装后的报文能够在另一种网络中(如IPv4)传输,从而解决了跨越异种网络的报文传输问题。
GRE隧道的两端是Tunnel接口,分别对数据报文进行封装及解封装。负责发送封装后的报文的物理接口叫做隧道源接口,对端接收此报文的物理接口叫做隧道目的接口。
GRE技术本质上是一种隧道技术。隧道技术类似于一座桥,可以在底层网络(比如:Internet)之上构建转发通道,用户可以自行构建隧道网络,不需要底层网络的管理者(比如:ISP)介入。隧道技术的方案很多,常见的隧道技术有:MPLS,GRE,L2TP,VXLAN等,隧道基本原理如下:
GRE隧道能够承载IPv4/IPv6的单播、组播、广播报文,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协议。
上图中报文的封装过程:
-
RTA连接企业分部的接口收到IP数据报文后,首先交由IP协议处理。 -
IP协议检查报文头中目的地址来确定如何转发此报文。若报文的目的地址要经过GRE隧道才能到达,则IP协议将此报文发给相应的Tunnel接口。 -
Tunnel接口收到此报文后为其封装GRE报文头,然后再交由IP协议处理。 -
IP协议再为GRE报文封装新的IP报文头(源地址为隧道源接口IP,目的地址为隧道目的接口IP),然后根据封装后的IP报文的目的地址及路由表对报文进行转发,从相应的连接Internet的物理接口(隧道源接口)发送出去。
解封装过程与封装过程相反,具体如下:
-
RTB从连接Internet的物理接口收到IP报文后,检查其目的地址。如果目的地址是RTB,且IP报文头中的协议号为47(表示封装的报文为GRE报文),则RTB剥掉此报文的IP报文头,交给GRE协议处理。 -
GRE协议进行校验和关键字识别后,剥掉GRE报文头,再交由IP协议处理。 -
IP协议将此数据报文转发到企业总部。
2.2 GRE Keepalive检测
由于GRE协议并不具备检测链路状态的功能,如果对端接口不可达,隧道并不能及时关闭该Tunnel连接,这样会造成源端会不断的向对端转发数据,而对端却因隧道不通接收不到报文,由此就会形成流量中断。
GRE的Keepalive检测功能可以检测隧道状态,即检测隧道对端是否可达。
Keepalive超时时间=发送周期(默认5 s)*重试次数(默认3次)
前面我们讲过需要创建一个tunnel隧道接口用于GRE,这个接口类似于环回接口lookback接口,没有检测功能,不会主动关闭接口,因此需要一个机制来实现当GRE两端连接失败时断开GRE隧道。
Keepalive检测功能的实现过程如下:
-
当GRE隧道的源端使能Keepalive检测功能后,就创建一个定时器,周期地发送Keepalive探测报文,同时通过计数器进行不可达计数。每发送一个探测报文,不可达计数加1。 -
对端每收到一个探测报文,就给源端发送一个回应报文。 -
如果源端的计数器值未达到预先设置的值就收到回应报文,就表明对端可达。如果源端的计数器值到达预先设置的值——重试次数(Retry Times)时,还没收到回送报文,就认为对端不可达。此时,源端将关闭隧道连接。但是源端口仍会继续发送Keepalive报文,若对端Up,则源端口也会Up,建立隧道链接。
2.3 GRE隧道安全威胁
GRE隧道的主要作用是将数据在分支-总部之间传递,数据并不加密,有被篡改的风险。GRE隧道建立也有一定风险,通过伪造IP地址,可以使得非法设备与合法设备之间建立GRE隧道。
2.3.1 GRE数据校验和验证
校验和验证是指对封装的报文进行端到端校验。
若GRE报文头中的C位标识位置1,则校验和有效。发送方将根据GRE头及Payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃。
数据校验是为了确保数据是完整的,没有经过篡改的,需要开启数据校验将C置位1。
2.3.2 GRE识别关键字
为了防止非法路由器连接GRE或者伪造IP进行连接,可以开启密码认证。
识别关键字(Key)验证是指对Tunnel接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文。若GRE报文头中的K位为1,则在GRE头中插入一个四字节长关键字字段,收发双方将进行识别关键字的验证。
通过密码来验证GRE对端的建立,置位K,然后设置一个Key进行验证。
虽然通过上面的计算可以实现合法建立GRE隧道以及数据的完整性,但是因为GRE本身没有进行加密因此GRE报文能够清晰地查看到报文的信息,存在不安全性。因此一般情况下GRE会结合其它安全机制来搭配使用。
总结:GRE本质是一种隧道技术,利用隧道在分支和总部间建立隧道接口,结合数据验证和key对数据完整性、合法性进行校验可以建立起一个虚拟的Tunnel通道,GRE可以用于传输单播、组播、广播报文具有其优点,但是也存在一些安全性的缺陷,简单说只要有部署了Internet能够就有可能使用GRE实现分支互联。
本文由 mdnice 多平台发布
相关文章:
计算机网络-GRE(通用路由封装协议)简介
昨天我们学习了VPN的基本概念,虚拟专用网络在当前企业总部与分支间广泛使用。常用的划分方法为基于协议层次有GRE VPN、IPSec VPN、L2TP VPN、PPTP VPN、SSL VPN等。其实我有考虑该怎么讲,因为在IP阶段好像虚拟专用网络讲得不深,在IE的阶段会…...
开源电话机器人产品的优点是什么?
开源电话机器人产品的优点是什么? 作者:开源呼叫中心系统 FreeIPCC,Github地址:https://github.com/lihaiya/freeipcc 开源电话机器人产品作为人工智能技术的一种应用,近年来在电销、客户服务等多个领域展现出了显著的…...
Spring Boot 集成 Knife4j 的 Swagger 文档
在开发微服务应用时,API 文档的生成和维护是非常重要的一环。Swagger 是一个非常流行的 API 文档工具,可以帮助我们自动生成 RESTful API 的文档,并提供了一个友好的界面供开发者测试 API。本文将介绍如何在 Spring Boot 项目中集成 Knife4j …...
极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【一】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
C# 在Word文档模板中,按照占位符插入文字或图片
1,引入包:DocX 2,代码如下 public class CC{public static void Ma22in(){// 示例:加载现有模板并替换占位符string templatePath "报告模板.docx"; // 模板文件路径string outputPath "Output.docx"; // 输出文…...
在使用PCA算法进行数据压缩降维时,如何确定最佳维度是一个关键问题?
一、PCA算法的基本原理 PCA算法的核心思想是通过正交变换,将一组可能相关的变量转换成一组线性不相关的变量,称为主成分。这组主成分能够以最小的信息损失来尽可能多地保留原始数据集的变异性。具体来说,PCA算法包括以下几个步骤:…...
深度学习3
五、自动微分 1、基础概念 模块 autograd 负责自动计算张量操作的梯度,具有自动求导功能;autograd 创建一个动态计算图来跟踪张量的操作,每个张量是计算图中的一个节点,节点之间的操作构成图的边。 属性 requires_grad 决定…...
Qt5.14.2的安装与环境变量及一些依赖库的配置
目录 1.Qt5.14.2安装 2.Qt环境变量及一些依赖库的配置 1.Qt5.14.2安装 QT从入门到入土(一)——Qt5.14.2安装教程和VS2019环境配置 - 唯有自己强大 - 博客园 2.Qt环境变量及一些依赖库的配置 假设QT安装目录为: D:\Qt\Qt5.14.2 将目录: D:\Qt\Qt5.14.…...
PYNQ 框架 - 时钟系统 + pl_clk 时钟输出不准确问题
目录 1. 简介 2. PS 时钟计算 2.1 计算框架 2.2 KV260 的参考时钟 2.3 PL_CLK 设置 3. 测试 3.1 Block design 3.2 引脚绑定 3.3 使用 AD2 测量 3.4 调整分频 4. PYNQ 时钟驱动 4.1 源码解析 4.2 查看 PL_CLK 4.3 配置 PL_CLK 5. 总结 1. 简介 ZYNQ MPSoC 具有…...
CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标
注:本文为 “CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标” 几篇相关文章合辑。 文章中部分超链接、图片异常受引用之前的原文所限。 相机自动对焦原理 TriumphRay 于 2020-01-16 18:59:41 发布 凸透镜成像原理 这一部分大家中学应该就学过…...
类和对象--中--初始化列表(重要)、隐式类型转化(理解)、最后两个默认成员函数
1.初始化列表 1.1作用: 通过特定的值,来初始化对象。 1.2定义: 初始化列表,就相当于定义对象(开空间)。不管写不写初始化列表,每个成员变量都会走一遍初始化列表(开出对应的空间…...
uni-app运行 安卓模拟器 MuMu模拟器
最近公司开发移动端系统,使用真机时每次调试的时候换来换去的麻烦,所以使用模拟器来调试方便。记录一下安装和连接的过程 一、安装MuMu模拟器 百度搜索MuMu模拟器并打开官网或者点这里MuMu模拟器官网 点击下载模拟器 安装模拟器,如果系统…...
java 打印对象所有属性的值 循环
在Java中,如果你想要打印一个对象的所有属性值,可以使用反射(Reflection)来获取对象的所有字段,并循环遍历这些字段以打印它们的值。以下是一个示例代码,展示了如何实现这一点: 示例类 假设我…...
k8s认证、授权
在 Kubernetes 中,kubectl auth can-i 命令用于检查当前用户或指定的 ServiceAccount 是否有权限执行特定的操作: kubectl auth can-i create deployment --as system:serviceaccount:default:dev-sa这个命令的作用是检查名为 dev-sa 的 ServiceAccount…...
基于spring boot的纺织品企业财务管理系统论文
摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升&…...
@RequestBody和前端的关系以及,如何在前后端之间传递数据?
RequestBody 注解在 Spring MVC 中用于将 HTTP 请求体中的数据绑定到控制器方法的参数上。为了更好地理解 RequestBody 和前端之间的关系,我们可以从以下几个方面进行探讨: 1. 请求体的格式 前端发送的请求体通常是一个 JSON 字符串,也可以…...
详解登录MySQL时出现SSL connection error: unknown error number错误
目录 登录MySQL时出错SSL connection error: unknown error number 出错原因 使用MySQL自带的工具登录MySQL 登陆之后,使用如下命令进行查看 解决方法 找到MySQL8安装目录下的my.ini配置文件 记事本打开my.ini文件,然后按下图所示添加配置 此时再…...
【大数据学习 | Spark-Core】Spark的改变分区的算子
当分区由多变少时,不需要shuffle,也就是父RDD与子RDD之间是窄依赖。 当分区由少变多时,是需要shuffle的。 但极端情况下(1000个分区变成1个分区),这时如果将shuffle设置为false,父子RDD是窄依赖关系&…...
Spring Boot Web应用开发:测试
在Spring Boot中,测试是开发过程的一个重要部分,它确保你的应用按预期工作,并且可以帮助你在早期发现和修复问题。Spring Boot提供了多种便捷的测试工具,使得编写和运行测试案例变得简单。 Spring Boot测试简介 Spring Boot支持…...
服务器数据恢复—光纤存储FC硬盘数据恢复案例
服务器存储数据恢复环境: 某品牌光纤存储上共有16块FC硬盘。存储上的卷映射到Linux操作系统上。Linux操作系统上运行Oracle数据库。 服务器存储故障&检测: 存储上2块硬盘故障灯亮起,存储映射到linux操作系统上的卷挂载不上,业…...
Android Binder技术概览
Android中的Binder是一种基于远程过程调用(Remote Procedure Call, RPC)的轻量级通信机制,核心用于 Android 系统中的进程间通信(Inter-Process Communication, IPC)。Binder 是 Android 系统中不可或缺的一部分&#…...
09 —— Webpack搭建开发环境
搭建开发环境 —— 使用webpack-dev-server 启动Web服务,自动检测代码变化,有变化后会自动重新打包,热更新到网页(代码变化后,直接替换变化的代码,自动更新网页,不用手动刷新网页) …...
深度学习模型:卷积神经网络(CNN)
一、前言 CNN 的发展历程可以追溯到 20 世纪 80 年代和 90 年代。受生物视觉系统的启发,研究人员开始探索如何构建专门用于处理图像数据的神经网络。早期的一些研究奠定了基础,例如 Fukushima 提出的 Neocognitron 模型。 随着时间的推移,到…...
Flask 自定义路由转换器
步骤 创建自定义转换器类 继承 werkzeug.routing.BaseConverter。实现 to_python 和(可选)to_url 方法。 将转换器注册到 Flask 应用 在路由中使用转换器 示例 创建转换器 假设需要自定义一个转换器 FourDigitYearConverter,用于匹配四位年…...
【淘汰9成NLP面试者的高频面题】LSTM中的tanh和sigmoid分别用在什么地方?为什么?
博客主页: [青松] 本文专栏: NLP 大模型百面百过 【淘汰9成NLP面试者的高频面题】LSTM中的tanh和sigmoid分别用在什么地方?为什么? 重要性:★★★ 💯 本题主要考察面试者对以下问题的理解: ① 数据特征和模…...
gocv调用opencv添加中文乱码的解决方案
前言 相信很多做视觉的同学在使用opencv给图片添加中文文字的时候会出现这样的乱码显示: 而实际上你期望的是“告警时间:2011-11-11 11:11:11 告警类型:脱岗检测告警 Area:XXXXX Camera:Camera001-001”这样的显示内容,那么这篇文章我将用很简单的方法来解决乱码问题,只需…...
org.apache.log4j的日志记录级别和基础使用Demo
org.apache.log4j的日志记录级别和基础使用Demo,本次案例展示,使用是的maven项目,搭建的一个简单的爬虫案例。里面采用了大家熟悉的日志记录插件,log4j。来自apache公司的开源插件。 package com.qian.test;import org.apache.log…...
IC数字后端实现之大厂IC笔试真题(经典时序计算和时序分析题)
今天小编给大家分享下每年IC秋招春招必考题目——静态时序分析时序分析题。 数字IC后端笔试面试题库 | 经典时序Timing计算题 时序分析题1: 给定如下图所示的timing report,请回答一下几个问题。 1)这是一条setup还是hold的timing report?…...
java centos 离线使用sherpa-onnx文字转语音TTS
sherpa-onnx: https://github.com/k2-fsa/sherpa-onnx.git 文档链接;Java API — sherpa 1.3 文档 1. 项目基础介绍和主要编程语言 sherpa-onnx 是一个基于下一代 Kaldi 和 onnxruntime 的开源项目,专注于语音识别、文本转语音、说话人识别和语音活动检测(VAD)等功能。该项…...
Android 11 三方应用监听关机广播ACTION_SHUTDOWN
前言 最近有项目过程中,有做app的同事反馈,三方应用无法监听关机广播。特地研究了下关机广播为啥监听不到。 1.原因:发送关机广播的类是ShutdownThread.java,添加了flag:Intent.FLAG_RECEIVER_FOREGROUND | Intent.FLAG_RECEIVER…...
太原优化网站排名/搜索引擎营销的特点有
在引入三方的aar包到项目的libs目录下,并且在对应的模块的build.gradle文件中引入后进行同步,然后报错如下: 根据报错日志中的信息,了解到应当是合并出现问题 显示自己的高德地图Key发生了冲突,经询问了解到aar包中集…...
策划网站做营销推广/学校教育培训机构
缓存实现的过程以及淘汰旧页面的机制不同,所以会有不同缓存调度方法,就常见的就是FIFO,LRU,LFU缓存过期策略。 1.FIFO(First In First out):先见先出,淘汰最先近来的页面࿰…...
商丘做网站汉狮网络/武汉久都seo
Description 某工厂发现厂里的机器在生产产品时要消耗大量的原材料,也就是说,有大量的原材料变成了废物。因此厂里想找出消耗原材料最大的一条生产线路进行改造,以降低成本。厂里的生产线路是一个有向无环网络,有N台机器分别代表…...
川沙网站建设/最新新闻热点事件
导 读:server.htmlencode 和 server.urlencode 是asp中很常用的函数,在asp.net中也有类似的函数:htmlencode 和 urlencode (注意大小写)以下用实例来进行介绍。server.htmlencode and server.urlencode are very common functions used by as…...
wordpress 备案链接/sem竞价托管费用
正则表达式的预编译功能 学习目标正则表达式的预编译功能Pattern用法matcher用法在阿里巴巴开发手册中规定如下:【强制】在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。说明: 不要在方法体内 定义:…...
门户网站建设方法/短视频seo询盘获客系统
芯片支持库(CSL)提供了一个用于配置和控制片上外设的C语言接口。它有各个分立的模块组成,并被编译成为库文件。每个模块对应一个单独的外设,除了个别提供通用程序支持的模块。使用CSL可以方便片上外设的使用,缩短开发周…...