网络虚拟化最基础的技术莫过于分层(Overlay、Underlay),要实现分层有两种手段。一个是映射(Mapping),一个是封装(Encapsulation)。

映射,主要思路是转发时替换报文语义,怎样替换将须要设备进行查询。

封装,则是把须要的报文语义加入到网包中。处理的时候一层层的解封装就可以,尽量对设备透明。

不少协议都实现了封装的部分或完整功能。包含IP-in-IP、Vlan、MPLS、VXLAN、NVGRE、STT等。这些协议各有各的特点,不少都是为了简单地隔离或者通过隧道连通不同网络。

特别是后面几种。设计理念大同小异,仅仅是实现细节不同。

对通用的封装协议标准的需求已经越来越强烈。于是有了Geneve: Generic Network Virtualization Encapsulation。





Geneve的出发点是解决封装时候加入的metadata信息问题(究竟多少位。该怎么用),尝试适应各种虚拟化场景,Underlay的协议是最通用的IP协议(准确的说是UDP)。





跟大部分的封装协议类似。实现Geneve一般须要两类设备:隧道终端(tunnel endpoints)和传输设备(transit devices)。

前者用来处理封装头终止隧道,后者则是非必需的。一般是支持IP转发的设备。

详细来看Geneve的封装帧,从外到里依次是

外层以太头

外层IP头(V4或V6)

外层UDP头

Geneve头(变长)

内层以太头

Payload

外层以太头的FCS





当中UDP的目标port默认是IANA分配的6081。而且支持可配置。UDP的校验和必须计算正确。也可配置为0。





Geneve支持单播、多播和广播。

网络虚拟化基础协议之Geneve的更多相关文章

  1. 网络虚拟化基础协议·Geneve

    [分层] 要实现网络虚拟化,最基础的技术肯定是分层(OverLay & UnderLay). ·UnderLay 中文释义中,老房子漏雨,在房子里面撑一把大雨伞,这把大雨伞就是UnderLay ...

  2. KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)

    网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 Open ...

  3. KVM 网络虚拟化基础

    网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 Open ...

  4. O009、KVM 网络虚拟化基础

    参考https://www.cnblogs.com/CloudMan6/p/5289590.html   网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大.   但因为网络是虚拟化中非常重要的资源, ...

  5. 网络虚拟化基础一:linux名称空间Namespaces

    一 介绍 如果把linux操作系统比作一个大房子,那命名空间指的就是这个房子中的一个个房间,住在每个房间里的人都自以为独享了整个房子的资源,但其实大家仅仅只是在共享的基础之上互相隔离,共享指的是共享全 ...

  6. OpenStack入门篇(十九)之网络虚拟化基础

    1.Linux Bridge的基本概念 假设宿主机有 1 块与外网连接的物理网卡 eth0,上面跑了 1 个虚机 VM1,现在有个问题是: 如何让 VM1 能够访问外网?① 给 VM1 分配一个虚拟网 ...

  7. Hyper-V 网络虚拟化技术细节

    Hyper-V 网络虚拟化技术细节 适用对象:Windows Server 2012 R2 服务器虚拟化能让多个服务器实例在同一台物理主机上同步运行,但各个服务器实例都是相互独立的. 每台虚拟机的运作 ...

  8. 05、ip划分+网络配置+虚拟化基础+基本路由

    -- IP   IANA (Internet Assigned Numbers Authority) ,Internet号分配机构.负责对IP地 址分配规划以及对TCP/UDP公共服务的端口定义.国际 ...

  9. 网络编程基础之C/S架构和TCP/IP协议

    一.何谓C/S架构 C指的是client(客户端软件),S指的是Server(服务端软件),既然我们的的标题是网络编程基础, 那我们就一起来学习怎样写一个C/S架构的软件,实现服务端与客户端软件基于网 ...

随机推荐

  1. 两个Vue Demo

    1 实现 person list <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  2. linux之创建临时文件的方法

    有时候,我们需要创建文件临时存放一些输出的信息,创建文件时就可能出现文件名存在的问题.如何创建唯一的文件名,Linux为我们提供几个方案: 1.mktemp(强烈推荐) The  mktemp  ut ...

  3. BZOJ 3384 上帝与集合的正确用法

    上帝与集合的正确用法 [问题描述] [输入格式] 第一行一个T,接下来T行,每行一个正整数p,代表你需要取模的值. [输出格式] T行,每行一个正整数,为答案对p取模后的值. [样例输入] 3236 ...

  4. [LeetCode] Repeated DNA Sequences hash map

    All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...

  5. PE笔记之NT头PE扩展头

    typedef struct _IMAGE_OPTIONAL_HEADER {       //       // Standard fields.       //       WORD    Ma ...

  6. C++中的explicit关键字(转)

    按默认规定,只用传一个参数的构造函数也定义了一个隐式转换.举个例子: #pragma once class CExample { public: CExample(void); CExample(); ...

  7. 设置jenkins的邮件通知功能

    1.进入系统配置页面配置邮件发送的SMTP 2. 进入项目配置页面,配置邮件通知:(每次不稳定构建时会邮件通知)

  8. 如何证明一个数的数根(digital root)就是它对9的余数?

    数根就是不断地求这个数的各位数之和,直到求到个位数为止.所以数根一定和该数模9同余,但是数根又是大于零小于10的,所以数根模9的余数就是它本身,也就是说该数模9之后余数就是数根. 证明: 假设有一个n ...

  9. Codeforces 371C Hamburgers (二分答案)

    题目链接 Hamburgers 二分答案,贪心判断即可. #include <bits/stdc++.h> using namespace std; #define REP(i,n) fo ...

  10. 【转】java:多网卡环境下获取MAC地址

    http://blog.csdn.net/10km/article/details/78569962 JDK6以后 java.net.NetworkInterface提供了完整的方法用于获取网络设备信 ...