第一个技术是GRE,全称Generic Routing Encapsulation,它是一种IP-over-IP的隧道技术。它将IP包封装在GRE包里,外面加上IP头,在隧道的一端封装数据包,并在通路上进行传输,到另外一端的时候解封装。你可以认为Tunnel是一个虚拟的、点对点的连接

在GRE头中,前32位是一定会有的,后面的都是可选的。在前4位标识位里面。这里面有个很重要的key字段,是一个32位的字段,里面存放的往往就是用于区分用户的Tunnel ID。32位

下面的格式类型专门用于网络虚拟化的GRE包头格式,称为NVGRE,也给网络ID号24位,也完全够用了。除此之外,GRE还需要有一个地方来封装和解封装GRE的包,这个地方往往是路由器或者有路由功能的Linux机器。使用GRE隧道,传输的过程就像下面这张图。这里面有两个网段、两个路由器,中间要通过GRE隧道进行通信。当隧道建立之后,会多出两个Tunnel端口,用于封包、解封包。

  1. 主机A在左边的网络,IP地址为192.168.1.102,它想要访问主机B,主机B在右边的网络,IP地址为192.168.2.115。于是发送一个包,源地址为192.168.1.102,目标地址192.168.2.115。因为要跨网段访问,于是根据默认的default路由表规则,要发给默认的网关192.168.1.1,也即左边的路由器。
  2. 根据路由表,从左边的路由器,去192.168.2.0/24这个网段,应该走一条GRE的隧道,从隧道一端的网卡Tunnel0进入隧道。
  3. 在Tunnel隧道的端点进行包的封装,在内部的IP头之外加上GRE头。对于NVGRE来讲,是在MAC头之外加上GRE头,然后加上外部的IP地址,也即路由器的外网IP地址。源IP地址为
    172.17.10.10,目标IP地址为172.16.11.10,然后从E1的物理网卡发送到公共网络里。
  4. 在公共网络里面,沿着路由器一跳一跳地走,全部都按照外部的公网IP地址进行。
  5. 当网络包到达对端路由器的时候,也要到达对端的Tunnel0,然后开始解封装,将外层的IP头取下来,然后根据里面的网络包,根据路由表,从E3口转发出去到达服务器B。

从GRE的原理可以看出,GRE通过隧道的方式,很好地解决了VLAN ID不足的问题。但是,GRE技术本身还是存在一些不足之处。

1、首先是Tunnel的数量问题。GRE是一种点对点隧道,如果有三个网络,就需要在每两个网络之间建立一个隧道。如果网络数目增多,这样隧道的数目会呈指数性增长。

2、GRE不支持组播,因此一个网络中的一个虚机发出一个广播帧后,GRE会将其广播到所有与该节点有隧道连接的节点。

3、有很多防火墙和三层网络设备无法解析GRE,因此它们无法对GRE封装包做合适地过滤和负载均衡。

最新文章

  1. Intellij IDEA 初级学习文章
  2. CSS中id与class命名规则及编码最佳习惯
  3. 直观友好的单个memcache监控工具:phpmemcache.php
  4. kindeditor 操作时同步到textarea
  5. android学习笔记六
  6. OC3-父类指针指向子类对象
  7. Swift - 实现点击UITableView单元格时自动展开单元格
  8. Cocos2dx 3.x创建Layer的步骤
  9. SQL注入相关的知识【Mysql为例子】
  10. PHP读取XML文件
  11. 20175316 盛茂淞 Arrays和String单元测试
  12. Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;
  13. Javaweb学习笔记——(四)——————JavaScript基础&DOM目录
  14. 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)
  15. iOS-利用插件实时刷新模拟器(提高效率)
  16. 综合:bool类型 命名空间 输入输出
  17. js+Ajax,Get和Post在使用上的区别
  18. 有用的Python代码片段
  19. 数据解压及if else的应用
  20. mysql 随机取数据

热门文章

  1. 洛谷P2659 美丽的序列
  2. 基于python的学生管理系统(含数据库版本)
  3. 【Codeforces】CF367D Sereja and Sets (数学)
  4. 微信小程序之页面导航栏
  5. socket http tcp ip 区别联系
  6. tensorflow运行时openssl与boringssl兼容性问题
  7. ElementUi tree 指定节点是否显示复选框
  8. linux hexdump使用
  9. Java基础 while 简单示例
  10. CFCA证书工具类