GRE 出现的背景:

随着网络(公司)规模的增大,越来越多的公司需要在跨区域之间建设自己的分公司。但随之也就出现了这样的问题,考虑这样一个场景。公司 A 在北京和上海间开设了两家公司,由于业务的需要,需要实现两家公司间的数据通信。公司考虑到未来的发展,在北京和上海启动了 IPV6 作为网络层的传输协议。但由于使用的 ISP (供应商,比如联通)在公网提供的是 IPV4 的网络层协议,这时想要通信该怎么办呢?

GRE 就是为了解决这个问题而出现的,专业些说解决的就是异种网络的传输问题。

GRE 的原理

GRE 采用了 Tunnel 技术,进行异种网络的传输。

乘客协议(Passenger):想要实现通信的协议,如例子中的 IPV6 协议

封装协议:将乘客协议封装起来的协议,按照一定的规则,进行封装和解封装。

传输协议:ISP 认识的协议,如 IPV4 协议。

将想要通信的协议封装成 GRE 协议,然后传输 GRE 协议,在对方收到 GRE 协议后,解封装,拿出想要通信的协议,然后解析。

  • checksum:校验和,用于检测整个 GRE 数据包的准确性,包括图中黄色的部分。
  • Protocol Type:使用的协议,比如 Ox0800 表示 IP 协议,公网传输的协议。
  • Key:用于隧道的认证

GRE 的配置

这里假设 R2 为 ISP 提供的公网访问接口,R1 和 R3 使用的是公司内网地址。正常来说,内网地址是无法通过公网进行传递的。公网地址接受后会将其丢掉。

如果想实现通信,就可以使用 GRE 协议,目的仅仅是想让 ISP 将 R1 的数据包发送到 R3,就像在 R1 和 R3 中间建立起了一条直连的通道。

# STEP1: R1 config interface

# config default route for R2 because we need R1 to R3 to be reachable
Router(config)# ip route 0.0.0.0 0.0.0.0 12.1.1.2 # open tunnel interface
Router(config)#in tunnel 0
Router(config-if)#tunnel mode gre ip
Router(config-if)#ip 13.1.1.1 255.255.255.0
Router(config-if)#tunnel source 12.1.1.1
Router(config-if)#tunnel destination 23.1.1.2
Router#show running-config interface tunnel 0 # transfer network traffic to Tunnel0 Interface
Router(config)#ip route 192.168.2.0 255.255.255.0 Tunnel 0 # STEP2: R2 config interface # STEP3: R3 config interface # config default route for R2 because we need R3 to R1 to be reachable
Router(config)# ip route 0.0.0.0 0.0.0.0 23.1.1.1 # open tunnel interface
Router(config)#in tunnel 0
Router(config-if)#tunnel mode gre ip
Router(config-if)#ip 13.1.1.2 255.255.255.0
Router(config-if)#tunnel source 23.1.1.2
Router(config-if)#tunnel destination 12.1.1.1
Router#show running-config interface tunnel 0 # transfer network traffic to Tunnel0 Interface
Router(config)#ip route 192.168.1.0 255.255.255.0 Tunnel 0

这里从 Router1 的接口抓包:

Tunnel 接口配置 IP 的作用:

简化流量引入的配置过程。上面的配置通过静态路由将去往 192.168.2.0 的流量引入到 Tunnel 口中。

但加入存在多个网段,这样配置较为繁琐。

所以可以将 R1 和 R3 的接口运行动态路由协议,进而不用在去手动管理。

GRE 协议 - 和 ISP 用的协议不一样怎么办的更多相关文章

  1. 在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)

    为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用 ...

  2. 协议 - OSI七层网络协议模型

    摘自:https://www.cnblogs.com/oneplace/p/5611094.html 互联网协议 本文全文转载阮一峰老师的两篇文章,自己做了一些添加内容 参考:互联网协议入门(一) 互 ...

  3. 【Win 10开发】协议-上篇:自定义应用协议

    就像系统许多内置应用可以通过URI来启动(如ms-settings-bluetooth:可以打开蓝牙设置页),我们自己开发的应用程序,如果需要的话,可以为应用程序自定义一个协议.应用程序协议在安装时会 ...

  4. HTTP协议—— 简单认识TCP/IP协议

    大学没读计算机专业,所以很多的专业知识都不知道.既然已经从事了IT这个行业,就势必要去了解下网络底层,虽然实际工作中这些东西用不到.高楼大厦,起于平川.不积跬步,无以至千里,不积小流,无以成江海.我现 ...

  5. ZeroMQ接口函数之 :zmq_tcp – 使用TCP协议的ØMQ网络单播协议

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-tcp zmq_tcp(7)          ØMQ Manual - ØMQ/4.1.0 Name zmq_t ...

  6. 基于UDP协议模拟的一个TCP协议传输系统

    TCP协议以可靠性出名,这其中包括三次握手建立连接,流控制和拥塞控制等技术.详细介绍如下: 1. TCP协议将需要发送的数据分割成数据块.数据块大小是通过MSS(maximum segment siz ...

  7. https协议了解,以及相关协议的解析

    HTTPS简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版. ...

  8. 基于SSL协议的双向认证 - SSL协议 [1]

    1  概要说明 在互联网通信方式中,目前用的最广泛的是HTTPS配合SSL和数字证书来保证传输和认证安全了. 2  详细介绍 2.1    HTTPS HTTPS全称:Hypertext Transf ...

  9. RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议

    RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...

随机推荐

  1. 二进制图片blob数据转canvas

    javascript是有操作二进制文件的方法的,在这里就不详述了. 而AJAX的核心XMLHttpRequest也可以获取服务端给的二进制Blob. 可以参考: XMLHttpRequest Leve ...

  2. scratch编程体感游戏

    体感游戏有很多种,最常见的就是摄像头和声控了,今天我们要用scratch编写一系列的体感游戏!!!是不是很激动呢? 首先我们来编摄像头类的: No.1拳头打幽灵 挥动头就能打到幽灵了哟! 具体程序如下 ...

  3. k8s极简史:K8s多集群技术发展的历史、现状与未来

    引子 随着云原生技术的普及,越来越多的企业使用Kubernetes来管理应用,并且集群规模也呈爆发式增长,企业也亟需应对随集群规模增长而带来的各种挑战.同时,为了更好地提供高可用.弹性伸缩的应用,企业 ...

  4. Azure Traffic Manager(二) 基于权重与基于优先级的路由策略为我们的Web项目提供负载均衡

    一,引言 上一片文章我们使用 Azure Traffic Manager 分发用户请求,同时演示了两种路由策略,“Performance”,“Geographic”的两种方式,今天我们继续讲解 Tra ...

  5. [spring] -- MVC篇

    流程: 客户端(浏览器)发送请求,直接请求到 DispatcherServlet. DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler. ...

  6. ajax工作原理/实例

    ajax是什么? 是一种创建交互式网页应用的一种网页技术.简单来说,就是向服务器发起请求,获得数据使交互性和用户体验更好. ajax不是一种新的技术,是一些技术的集合体.有 1.XHTML和CSS 2 ...

  7. 线上CUP负载过高排查方法

      1.top命令查看线程占据的CPU 注意:上面行的cpu是多个内核的平均CPU,不可能超过100% 下面的cpu是每个进程实际占用的cpu,可能超过100% 备注:查看多个内核cpu,只需要在输入 ...

  8. 2. 妈呀,Jackson原来是这样写JSON的

    没有人永远18岁,但永远有人18岁.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众 ...

  9. 使用java实现希表的基础功能

    用java代码完成哈希表数据结构的简单实现, 以公司雇员的添加修改作为模拟实例 具体代码如下: package com.seizedays.hashtable; import java.util.Sc ...

  10. 分布式锁-Redis方案

    #!/usr/bin/env python # coding=utf-8 import time import redis class RedisLock(object): def __init__( ...