通用路由封装协议GRE
GRE介绍
GRE简称通用路由封装协议(Generic Rrouting Encapsulation)他的作用是把一种协议的报文封装在另外一种协议的报文中的技术,是一种隧道技术(只要这样子做,都称为隧道技术)。所以我们抓包看到的至少有两个头部,这两个头部的作用就是穿越异种网络。而且他还可以对组播报文进行封装,这是IPsec做不到的,也就是说我们可以在GRE上面跑路由协议(可以让两个异地的设备跑动态路由),并且可以和IPsec结合,保证更高的安全性。
GRE虽然我们把它称为VPN技术,但是他一般来说不会单独使用,因为他缺乏安全性,但是他的优点很明显,非常的简单,成为来隧道技术的一个代表。
GRE通用路由封装协议(Generic Rrouting Encapsulation)
- 一种三层的VPN封装技术。
- 在任意一种网络协议上传送任意一种其他网络协议的封装方法。
- 解决了跨越异种网络(不是一种网络)的报文传输问题,异种报文传输的通道被称为隧道(Tunnel)。
- 异种网络:不是同一种网络,这些网络默认是不兼容的,通讯是有问题的。
如:私网跨越公网到达私网,IPv4跨越IPv6到达IPv4,反之亦然。本身这个技术用到的方面很广,是一种隧道技术。
GRE运用场景
GRE核心功能:建立隧道,打通私网
隧道一般配置在出口且有公网的设备上。
有了隧道以后,相当于在出口设备和对端出口设备接了一条专线,因为VPN就是用来代替专线的,可以理解为他是一条虚拟的专线,而且从路由层面上来说,正常我们数据从出口设备发出,到达目的网络会有多跳,而我们建立VPN后,只会算一跳,这些细节也会被隐藏。相当于也是减少了路径的跳数。
GRE报文格式
GRE封装后的报文结构如下图所示。
- 乘客协议(Passenger Protocol):封装前的报文称为净荷,封装前的报文协议称为乘客协议。
- 封装协议(Encapsulation Protocol):GRE Header是由封装协议完成并填充的,封装协议也称为运载协议(Carrier Protocol)。
- 传输协议(Transport Protocol或者Delivery Protocol):负责对封装后的报文进行转发的协议称为传输协议。
各字段介绍
GRE头字段 |
字段解释 |
C |
校验和验证位。该位置1,表示GRE头插入了校验和(Checksum)字段。该位置0,表示GRE头不包含校验和字段。 |
K |
关键字位。该位置1,表示GRE头插入了关键字(Key)字段。该位置0,表示GRE头不包含关键字字段。 |
Recursion |
表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。 |
Flags |
预留字段。当前必须置为0。 |
Version |
版本字段。必须置为0。 |
Protocol Type |
标识乘客协议的协议类型。常见的乘客协议为IPv4协议,协议代码为0800。 |
Checksum |
对GRE头及其负载的校验和字段。 |
Key |
关键字字段,隧道接收端用于对收到的报文进行验证。 |
GRE封装:穿马甲
在原始封装的数据报文字段中加入新的IP头部,在新的IP报头和老的IP报头中间加一个协议,这就是GRE报头。
GRE头部
把原本的IP报头当成货物,这个被称为乘客协议,GRE负责承载乘客协议的IP报文,可以理解为车辆,然后由新的IP报头在公网进行传输,公网设备只会查看新的IP报头,然后进行转发。
GRE VPN转发过程详解
私网到私网的路由不走缺省路由,要走隧道口,当我们收到一个私网路由时,这时设备会查找路由表。
查询路由表后,发现要去的地址的下一跳是隧道口,设备发现我们要走的是隧道口,所以会对数据报文进行GRE封装。
- 设备加了一个GRE头部,同时会有新的IP头部,这个新的IP头部,会有新的源和目标IP地址,就是建立时的隧道源和隧道目标。
- 隧道口的意义在于设备查找路由时找到出接口是隧道口,或者下一跳是隧道目标。
- 因此,私网数据报文保留,加上GRE报头和新的IP报头(隧道源和隧道目标)。
数据报文发送出去后,中途运营商的设备会根据外层的IP报头进行转发。
目标设备收到数据报文后,进行解封装,看到GRE报文后,会继续解封装,然后在看到原先发送的数据报文,发现是私网包头,进行查找路由,发现有就进行转发,回包也是如此,这就完成通讯。
GRE实验
Tunnel是一个虚拟的点对点的连接,在实际中可以看成仅支持点对点连接的虚拟接口,这个接口提供了一条通路使封装的数据报能够在这个通路上传输,并且在一个Tunnel的两端分别对数据报进行封装及解封 。
GRE配合动态路由
这里使用的时OSPF,当然也可以使用RIP
注意:GRE VPN路由宣告注意事项:使用动态路由协议宣告接口时千万不能宣告公网接口(只能宣告私网路由)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!