GRE tunnel 2
1、GRE简介
通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。
GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一种三层隧道封装技术,使报文可以通过GRE隧道透明的传输,解决异种网络的传输问题。
GRE实现机制简单,对隧道两端的设备负担小。GRE隧道可以通过IPv4网络连通多种网络协议的本地网络,有效利用了原有的网络架构,降低成本。GRE隧道扩展了跳数受限网络协议的工作范围,支持企业灵活设计网络拓扑。GRE隧道可以封装组播数据,和IPSec结合使用时可以保证语音、视频等组播业务的安全。GRE隧道支持使能MPLS LDP,使用GRE隧道承载MPLS LDP报文,建立LDP LSP,实现MPLS骨干网的互通。GRE隧道将不连续的子网连接起来,用于组建VPN,实现企业总部和分支间安全的连接。
2、GRE实现过程
报文在GRE隧道中传输包括封装和解封装两个过程。
图1 通过GRE隧道实现X协议互通组网图
如上图1所示,如果X协议报文从Ingress PE向Egress PE传输,则封装在Ingress PE上完成,而解封装在Egress PE上进行。封装后的数据报文在网络中传输的路径,称为GRE隧道。
1、封装
Ingress PE从连接X协议的接口接收到X协议报文后,首先交由X协议处理。
X协议根据报文头中的目的地址在路由表或转发表中查找出接口,确定如何转发此报文。如果发现出接口是GRE Tunnel接口,则对报文进行GRE封装,即添加GRE头。
根据骨干网传输协议为IP,给报文加上IP头。IP头的源地址就是隧道源地址,目的地址就是隧道目的地址。
根据该IP头的目的地址(即隧道目的地址),在骨干网路由表中查找相应的出接口并发送报文。之后,封装后的报文将在该骨干网中传输。
2、解封装
解封装过程和封装过程相反。
Egress PE从GRE Tunnel接口收到该报文,分析IP头发现报文的目的地址为本设备,则Egress PE去掉IP头后交给GRE协议处理。
GRE协议剥掉GRE报头,获取X协议,再交由X协议对此数据报文进行后续的转发处理。
3、GRE报文格式
图2 GRE报文结构
GRE封装后的报文结构如上图2所示。
1、乘客协议(Passenger Protocol):
封装前的报文称为净荷,封装前的报文协议称为乘客协议。
2、封装协议(Encapsulation Protocol):
GRE Header是由封装协议完成并填充的,封装协议也称为运载协议(Carrier Protocol)。
3、传输协议(Transport Protocol或者Delivery Protocol):
负责对封装后的报文进行转发的协议称为传输协议。
GRE头的各字段解释如下表1所示。
表1 GRE头的各字段解释 |
|
GRE头字段 |
字段解释 |
C |
校验和验证位。 该位置1,表示GRE头插入了校验和(Checksum)字段。 该位置0,表示GRE头不包含校验和字段。 |
K |
关键字位。 该位置1,表示GRE头插入了关键字(Key)字段。 该位置0,表示GRE头不包含关键字字段。 |
Recursion |
表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。 RFC1701规定该字段默认值为0。 RFC2784规定当发送和接受端该字段不一致时不会引起异常,且接收端必须忽略该字段。 设备实现时该字段仅在加封装报文时用作标记隧道嵌套层数,GRE解封装报文时不感知该字段,不会影响报文的处理。 |
Flags |
预留字段。当前必须置为0。 |
Version |
版本字段。必须置为0。 |
Protocol Type |
标识乘客协议的协议类型。常见的乘客协议为IPv4协议,协议代码为0800。 |
Checksum |
对GRE头及其负载的校验和字段。 |
Key |
关键字字段,隧道接收端用于对收到的报文进行验证。 |
因为目前实现的GRE头不包含源路由字段,所以Bit 1、Bit 3和Bit 4都置为0。
4、GRE的安全机制
GRE本身提供两种基本的安全机制:校验和验证,识别关键字。
1、校验和验证
校验和验证是指对封装的报文进行端到端校验。
若GRE报文头中的C位标识位置1,则校验和有效。发送方将根据GRE头及Payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃。
隧道两端可以根据实际应用的需要决定配置校验和或禁止校验和。如果本端配置了校验和而对端没有配置,则本端将不会对接收到的报文进行校验和检查,但对发送的报文计算校验和;相反,如果本端没有配置校验和而对端已配置,则本端将对从对端发来的报文进行校验和检查,但对发送的报文不计算校验和。
2、识别关键字
识别关键字(Key)验证是指对Tunnel接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文。
RFC1701中规定:若GRE报文头中的K位为1,则在GRE头中插入一个四字节长关键字字段,收发双方将进行识别关键字的验证。
关键字的作用是标志隧道中的流量,属于同一流量的报文使用相同的关键字。在报文解封装时,GRE将基于关键字来识别属于相同流量的数据报文。只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。这里的“完全一致”是指两端都不设置识别关键字,或者两端都设置相同的关键字。
5、GRE的Keepalive检测
由于GRE协议并不具备检测链路状态的功能,如果对端接口不可达,隧道并不能及时关闭该Tunnel连接,这样会造成源端会不断的向对端转发数据,而对端却因隧道不通接收不到报文,由此就会形成数据空洞。
GRE的Keepalive检测功能可以检测隧道状态,即检测隧道对端是否可达。如果对端不可达,隧道连接就会及时关闭,避免因对端不可达而造成的数据丢失,有效防止数据空洞,保证数据传输的可靠性。
Keepalive检测功能的实现过程如下:
当GRE隧道的源端使能Keepalive检测功能后,就创建一个定时器,周期地发送Keepalive探测报文,同时通过计数器进行不可达计数。每发送一个探测报文,不可达计数加1。
对端每收到一个探测报文,就给源端发送一个回应报文。
如果源端的计数器值未达到预先设置的值就收到回应报文,就表明对端可达。如果源端的计数器值到达预先设置的值——重试次数(Retry Times)时,还没收到回送报文,就认为对端不可达。此时,源端将关闭隧道连接。但是源端口仍会继续发送Keepalive报文,若对端Up,则源端口也会Up,建立隧道链接。
对于设备实现的GRE Keepalive检测功能,只要在隧道一端配置Keepalive,该端就具备Keepalive功能,而不要求隧道对端也具备该功能。隧道对端收到报文,如果是Keepalive探测报文,无论是否配置Keepalive,都会给源端发送一个回应报文。
华为通用路由封装协议GRE介绍(二):http://www.023wg.com/vpn/391.html
GRE tunnel 2相关推荐
- gre tunnel源码分析之接收流程
GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中 ...
- GRE tunnel源码分析之发送流程
GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中 ...
- 在Ubuntu上创建并测试GRE tunnel
使用两台Ubuntu虚拟机进行GRE tunnel测试,则两台虚拟机位于同一网段,但并不影响观察测试结果. 测试环境: 在一台PC上同时运行两个Ubuntu虚拟机: ubuntu-gnome-16.0 ...
- JUNOS Olive GRE Tunnel Configuration
still same topology used as previous posts. Added GRE tunnel in the topology with two new OSPF areas ...
- 配置IPsec on GRE Tunnel with IOS Firewall and NAT
配置IPsec on GRE Tunnel with IOS Firewall and NAT <?xml:namespace prefix = o ns = "urn:schemas ...
- OSPF——GRE Tunnel(含配置命令)详解
目录 一.GRE 技术介绍: 二.GRE Tunnel 简介图解 三.GRE Tunnel 基本配置: (1)隧道的建立: (2)配置通关Tunnel的路由--静态路由 (2)配置通关Tunnel ...
- GRE Tunnel实现企业网中的***
虚拟专用网(×××)被定义为通过一个公用网络(通常是因特网)建立一个临时的.安全的连接,是一条穿过混乱的公用网络的安全.稳定的隧道.虚拟专用网是对企业内部网的扩展. 虚拟专用网可以帮助远程用户.公司分 ...
- 【Cisco NA】单臂路由+DHCP+DHCP中继+GRE Tunnel
①配置单臂路由 ✔ ②在Branch上开启DHCP,同时PC1.PC2能通过DHCP获取到IP地址,并且互相能访问 ✔ ③关闭Branch上DHCP并配上DHCP中继,在server上配置DHCP ...
- 另类L2TP Tunnel
说到L2TP VPN,大家肯定会想到xl2tpd和openswan的组合,这是传统L2TP VPN所需要的组件.安装配置步骤相对比较复杂.通常用作Point to Site模式,即:多个接入点(PC. ...
- GRE over IPSEC ×××
由于IPSEC ×××不能支持组播和广播,因此不能运行动态路由协议,由于我们需要把一条×××链路作为一条专线使用,还必须建立GRE tunnel隧道,以支持动态路由协议. 实验拓扑: 基本配置步骤如下 ...
最新文章
- 数据库副本的自动种子设定(自增长)
- C#面向对象9 字符串
- vscode如何用浏览器预览运行html文件
- 我的世界手机版java安装失败_我的世界中国版JAVA路径错误的解决方法分享
- JAVA面试题(part2)--位运算符
- EM算法(Expectation Maximization Algorithm)
- [Spring5]IOC容器_底层原理
- ORM系列之Entity FrameWork详解
- 依赖注入和控制反转的理解,写的太好了。
- 第二十八章:化学学校
- Android 系统(41)---善用工具
- 精美剪纸风三维感海报合集分享,这样的质感你喜欢吗?
- Hadoop——HDFS(2)
- 高等数学关于切线,法线,切平面,法平面的详细解释
- 人力资源管理专业知识与实务(初级)【6】
- 基于springboot的校园食堂订餐系统
- 《2022中国数据智能产业图谱2.0版》重磅发布
- icewm+rox-filer美化过程(转)
- 分享一个项目平台原型图
- Python Excel插入图片
热门文章
- notepad++反向查找/向上查找
- 2天玩转单反相机(第二讲)
- 二十一天学通JavaScript:cookie的安全性
- pandas小记:pandas索引和选择
- php支付宝授权登录,PHP实现支付宝登录
- 获得密钥_《哪吒》公映密钥延期一个月?关于“密钥延期”的全揭秘来了
- win10如何设置任务栏在左侧显示
- Android Listview设置每条信息的间距
- 1046 划拳 (15 分)—PAT (Basic Level) Practice (中文)
- Java 利用 split 方法切割字符串