通用路由封装协议——GRE,

摘要:
1、GRE简介通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一种三层隧道封装技术,使报文可以通过GRE隧道透明的传输,解决异种网络的传输问题。 在大多数常规情况下,系统拥有一个有效载荷(或负载)包,需要将它封装并发送至某个目的地。首先将有效载荷

1、GRE简介

通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一种三层隧道封装技术,使报文可以通过GRE隧道透明的传输,解决异种网络的传输问题。
在大多数常规情况下,系统拥有一个有效载荷(或负载)包,需要将它封装并发送至某个目的地。首先将有效载荷封装在一个 GRE 包中,然后将此 GRE 包封装在其它某协议中并进行转发。此外发协议即为发送协议。当 IPv4 被作为 GRE 有效载荷传输时,协议类型字段必须被设置为 0x800 。当一个隧道终点拆封此含有 IPv4 包作为有效载荷的 GRE 包时, IPv4 包头中的目的地址必须用来转发包,并且需要减少有效载荷包的 TTL 。值得注意的是,在转发这样一个包时,如果有效载荷包的目的地址就是包的封装器(也就是隧道另一端),就会出现回路现象。在此情形下,必须丢弃该包。当 GRE 包被封装在 IPv4 中时,需要使用 IPv4 协议 47 。
GRE采用了Tunnel(隧道)技术,是VPN(Virtual Private Network)的第三层隧道协议。Tunnel 是一个虚拟的点对点的连接,提供了一条通路使封装的数据报文能够在这个通路上传输,并且在一个Tunnel 的两端分别对数据报进行封装及解封装。

2、 GRE 报文格式

在这里插入图片描述

2.1 报文结构

在这里插入图片描述

2.2 GRE 各字段说明

我司的使用比较简单,只使用了prototype 类型。
在这里插入图片描述

3 Gre 安全机制

GRE本身提供两种基本的安全机制:校验和验证,识别关键字。
  1)校验和验证
  校验和验证是指对封装的报文进行端到端校验。若GRE报文头中的C位标识位置1,则校验和位有效。发送方将根据GRE头及Payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃。
  隧道两端可以根据实际应用的需要决定配置校验和或禁止校验和。如果本端配置了校验和而对端没有配置,则本端将不会对接收到的报文进行校验和检查,但对发送的报文计算校验和;相反,如果本端没有配置校验和而对端已配置,则本端将对从对端发来的报文进行校验和检查,但对发送的报文不计算校验和。
  2)识别关键字
  识别关键字(Key)验证是指对Tunnel接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文。RFC1701中规定:若GRE报文头中的K位为1,则在GRE头中插入一个四字节长关键字字段,收发双方将进行识别关键字的验证。
  关键字的作用是标志隧道中的流量,属于同一流量的报文使用相同的关键字。在报文解封装时,GRE将基于关键字来识别属于相同流量的数据报文。只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。这里的“完全一致”是指两端都不设置识别关键字,或者两端都设置相同的关键字。

4 GRE的Keepalive检测

由于GRE协议并不具备检测链路状态的功能,如果对端接口不可达,隧道并不能及时关闭该Tunnel连接,这样会造成源端会不断的向对端转发数据,而对端却因隧道不通接收不到报文,由此就会形成数据空洞。
  GRE的Keepalive检测功能可以检测隧道状态,即检测隧道对端是否可达。如果对端不可达,隧道连接就会及时关闭,避免因对端不可达而造成的数据丢失,有效防止数据空洞,保证数据传输的可靠性。Keeppalive检测功能的实现过程如下:
当GRE隧道的源端使能Keepalive检测功能后,就创建一个定时器,周期地发送Keepalive探测报文,同时通过计数器进行不可达计数。每发送一个探测报文,不可达计数加1。
对端每收到一个探测报文,就给源端发送一个回应报文
如果源端的计数器值未达到预先设置的值就收到回应报文,就表明对端可达。如果源端的计数器值到达预先设置的值——重试次数(Retry Times)时,还没收到回送报文,就认为对端不可达。此时,源端将关闭隧道连接。但是源端口仍会继续发送Keepalive报文,若对端Up,则源端口也会Up,建立隧道链接
  对于设备实现的GRE Keepalive检测功能,只要在隧道一端配置Keepalive,该端就具备Keepalive功能,而不要求隧道对端也具备该功能。隧道对端收到报文,如果是Keepalive探测报文,无论是否配置Keepalive,都会给源端发送一个回应报文。

5 基本转发流程

在这里插入图片描述

参考资料:https://www.cnblogs.com/sky5hat/p/10470456.html

免责声明:文章转载自《通用路由封装协议——GRE,》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇推荐一些顶级的Android开发书籍(转)打开IDM下载视频时弹出防火墙阻止下载,解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

iOS学习——内存泄漏检查及原因分析

由于我刚刚加入项目团队,我不熟悉所讨论的模块的代码,所以当我遇到问题时,我感到非常困难。此外,作为一名iOS新手,我真的不知道如何排除内存泄漏以及原因。因此,我也借此机会研究了iOS开发中内存泄漏的故障排除方法和原因分析。尽管当前的iOS开发基本上采用ARC模式进行内存管理,但如果不小心,就会发生内存泄漏。...

爱快路由器的一些注意事项硬件配置+多线负载均衡

以下数据仅供参考:注意:磁带载体的数量因使用环境和带宽大小的不同而不同。此外,请注意32位系统的安装。最大内存为4G,最大内存为3G-----硬盘------安装“爱快路由”时对硬盘的最低要求为1G以上。...

Spark 数据读取与保存(输入、输出)

SaveAsTextFile(字符串)scala&gt:importsscala.util.parsing.json.json(2)将json文件上载到HDFS[lxl@hadoop102spark]$hadoopfs投入。/示例/src/main/resources/people。json/(3)读取文件scala>...

PLSQL操作Oracle创建用户和表(含创建用户名和密码)

1》 打开PLSQL,填写用户名和密码,为数据库选择ORCL2,成功登录后可以在界面顶部看到以下信息system@ORCL这意味着用户系统处于登录状态。菜单栏中的会话可以登录和注销。...

电脑不识别USB blaster驱动问题

电脑不识别USB blaster,如下图: 解决办法:手动更新...

001_Three.js中的跨域问题

】当请求的资源和请求脚本不在同一域中时,将发生跨域。有关详细信息,请参见链接。这是一个需要进一步考虑的问题。它是一个装载机。它加载本地资源。为什么要跨域请求?...