VXLAN简介

VXLAN:Virtual eXtensible Local Area Network的缩写,虚拟扩展局域网,现代数据中心的的一种网络虚拟化技术,即在传统的三层IP网络上虚拟出一张二层的叠加网络,本质上是一种大二层的虚拟网络技术,引入一个UDP格式封装的外层隧道作为数据的链路层,原有数据报文内容作为隧道净负荷来传输,使得净荷数据可以轻松在二三层网络中传播。

VXLAN引入三层IP组播替代以太网广播;

Open vSwitch是基于软件实现的支持VxLan协议的虚拟网络交换机。

VXLAN协议标准是IETF发布的RFC 7348文档。

协议历史

协议最早由VMware,Arisa网络,思科提出,后期加入华为,博科,Red Hat,Intel等公司支持,IETF 与2012年8月发布第一个RFC Internet Draft版本,最新的标准是2014年8月RFC 7348

VxLan解决的问题

VxLan的提出,主要是云计算、现代数据中心的发展要求,主要关注的是现代数据中心的网络基础设施问题。

  • STP协议和VLAN的限制。STP解决二层帧循环转发问题,不支持多路径,无法解决服务器内部虚拟机通信问题;VLAN支持将二层网络划分为最大4094个虚拟局域网(0和4095保留,VLAN ID只有12位),在虚拟化、STP限制以及多租户环境等原因影响下,VLAN不能满足;
  • 多租户环境。公有云服务为多租户提供服务,采用二层或者三层网络隔离租户网络流量。二层网络使用VLAN,在租户过多时,VLAN不够用;三层网络隔离方案因为多用户使用相同的地址集合,需要云服务商提供特有的隔离方法,例如要求所有租户使用IP隔离网络而不是二层,或者使用非IP的3层协议用于内部虚拟机之间通信;
  • ToR交换机MAC地址表大小的限制。典型的ToR交换机可以连接24-48个物理服务器,由于虚拟化,单个物理服务器将有多个虚拟机,实际上等于连接更多的服务器,容易造成MAC表溢出,如果溢出,交换机停止学习新地址直到MAC表有空间;
  • 虚拟机迁移的需要。为保证业务的高可用性,需要迁移虚拟机到新的服务器上,例如跨数据中心,此时需要保证虚拟机IP地址和MAC地址不变,需要业务网络是一个二层网络,并且网络本身具备多路径的冗余备份和可靠性。

VXLAN协议说明

  • VXLAN报文格式:原有的以太网帧外部加上新的外部以太网头部、IP头部、UDP头部以及新增的VXLAN头部,VXLAN头部只有8字节,其中24位用来标识VXLAN,称为VNI;
  • VTEP:完成VXLAN报文的封装和解封装,VTEP与物理网络相连,分配有物理网络的IP地址,虚拟机中的数据报经过其封装可在Internet上传播,VTEP收到数据报,解封装,按照一定规则交付给后端的虚拟机;
  • VXLAN网关:实现VXLAN虚拟网络之间以及虚拟网络与物理网络之间的通信;
  • VXLAN是在现有的三层网络上覆盖二层网络,单个二层覆盖网络称为一个VXLAN分段;
  • 只有在相同的VXLAN分段的虚拟机之间可以相互通信;
  • VXLAN分段使用24位标识ID号,称为VNI(VXLAN Network Identifier),允许将近1600万的VXLAN分段;
  • VXLAN分段也可以称为VXLAN Overlay Network 覆盖网络,VXLAN是隧道协议,采用三层IP数据包分装VXLAN头部信息和虚拟机产生的MAC帧,VTEP(VXLAN Tunnel End Point)负责填充和解包,虚拟机无法看到VXLAN协议包;VETP可以采用物理的交换机和服务器实现,也可以使用Hypervisor等软件实现;
  • VXLAN控制机制负责VETP IP到虚拟机MAC地址映射学习,典型的有data plane learning,其它还有central autority-/directory-based lookup等;

VXLAN应用

虚拟机到虚拟机之间的通信

虚拟机不知道VXLAN,虚拟机A与不同主机的虚拟机B通信时,过程如下:

  • A与传统一样,发送原始MAC帧给服务器B
  • A所在的服务器主机的VTEP-A完成以下操作: 
    • 寻找虚拟机A所在的VNI(也就是VXLAN号)

      • 判断虚拟机B是否和A的VNI相同,也就判断是否在同一个VXLAN内;
      • 判断是否存在虚拟机B的MAC地址和对应的主机的VTEP-B的映射;
      • 以上条件符合,在A发送的原始MAC帧外面加上外部MAC地址,外部IP头部,UDP头部以及VXLAN头部,组成新的MAC帧,发给远端的VTEP-B;
  • B所在的VTEP-B收到A的VTEP-A发的VXLAN帧,完成如下操作: 
    • 验证VNI是否有效;B的MAC地址是否在VNI中;
    • 以上条件符合,VTEP-B解包VXLAN帧,除去加的VXLAN头部信息,还原原始的MAC帧,发送给目的虚拟机B,这个过程中对虚拟机B透明;
    • VTEP-B学习地址,将内部原始mac帧的源地址MAC:A和外部IP地址VTEP-A映射记录下,当需要响应虚拟机A时,不用再通过发广播去寻找

 广播通信、多播:

当虚拟机发送ARP广播帧请求时,在non-VXLAN环境下,该帧将被在同一个VLAN多个交换机中广播;对于VXLAN数据包只在其所在的IP多播组广播,为实现该控制需要VXLAN VNI 与 IP多播组的映射关系。VTEP负责维护该映射,提供IGMP管理成员加入或离开;

对现有设施要求

  • VXLAN主机间IP连通
  • 交换机支持IP多播(组播),支持多播路由协议支持(例如PIM-SM),打开IGMP Snooping功能;
  • VXLAN网络需要分配一个(224.0.0.0-239.255.255.255)IP多播地址
  • VTEP不能对VXLAN包进行分片,路由器对超过帧大小限制的VXLAN包进行分片,目的VTEP对于分片的VXLAN包直接扔掉。为避免分片,物理网络的MTU值应该和VXLAN包适应;

VXLAN帧格式

IPv4 VXLAN帧格式由以下几部分组成:其中前四个是VXLAN协议新增的,其余和以太网帧格式一致;

  • Outer Ethernet Header:外部以太网头部,格式和传统的以太网格式一致
  • Outer IPv4 Header:外部IPv4头部
  • Outer UDP Header: 外部UDP头部
  • VXLAN Header:VXLAN头部,8字节长度
  • Inner Ehternet Header:内部以太网头部
  • Payload:以太网数据负荷,也就是实际的数据,这里不包括原始帧的FCS字段
  • Frame Check Sequence:新的帧检测序列,检测Outer以太网帧

Outer Ethernet Header:

  • Outer Destination MAC Address:6字节,外部目的MAC地址
  • Outer Source MAC Address:6字节,外部源地址
  • OptnlEthtype = C-Tag 802.1Q:2字节,可选,802.1Q,表明支持VLAN
  • Outer.VLAN Tag Information:2字节,支持VLAN时,VLAN ID等信息
  • EtherType=0x0800:以太网数据类型,0x0800表示IPV4数据包

Outer IPv4 Header:

参见IPv4协议格式,主要包括IP数据类型(TCP、UDP)、源IPv4地址、目的IPv4地址;

  • Source IP address:源IP地址,VTEP的源地址
  • Destination IP address:目的IP地址,可以是单播地址或多播地址,单播地址时填的是目的方的VTEP地址

Outer UDP Header:

  • Source Port:2字节,源端口,推荐使用inner Ethernet frame header的hash值,端口号范围49152-65525
  • Dest Port : 2字节,VXLAN Port,IANA已经指定4789作为VXLAN UDP默认端口
  • UDP Length:2字节,UDP首部和数据长度
  • UDP Checksum:2字节,UDP校验和,校验和可以设置为0,这样不在校验,当设置不为0时,UDP报文将被校验

VXLAN Header:

  • Flag:1字节,其中第5 比特位设为1,表明是VNI有效,其余保留,设为0
  • Reserved 1:3字节,保留字段,设置为0
  • VXLAN Network Identifier/Segment ID(VNI):3字节,VXLAN网络号,不同的VNI无法通信
  • Reserved 2:1字节,保留字段,必须设为0

VXLANARP协议过程

例如有两个虚拟机VM1,VM2,其中VM1部署在服务器server1,VM2部署在服务器Server2;server1支持VXLAN协议,由VTEP1实现功能, server2 也只支持VXLAN协议,由VTEP2实现功能;

ARP请求:

  • VM1发送ARP请求,请求中包含自身MAC地址,目标地址全部设为1,广播给同一VLAN
  • server1的VTEP1负责封装上面请求报文,封装的头部填写目标IP地址为多播IP,源IP为VTEP1的IP地址
  • 报文在VXLAN中被多播,到达VTEP2所在的本地网络
  • VTEP2对报文进行解封装,学习 VM1 MAC-VTEP的映射关系,并在本地局域网广播报文

 ARP应答:

  • VM2准备ARP响应报文向VM1发送
  • VTEP2收到该报文,封装IP单播报文中,根据学习到的映射表,填充VTEP 1的IP地址和MAC地址,单播发送给VTEP1
  • VTEP1收到单播报文,学习VM2-VTEP2之间的地址映射,并解封装转发报文给VM1
  • VM1收到ARP应答报文,ARP交互结束

VXLAN报文转发

VM之间通信模式三种:同一个VXLAN下的不同VM,不同VNI下的跨网通信,VXLAN和非VXLAN之间访问。其中第一种通过二层网关支持,后两种需要三层网关支持。

VXLAN简介(摘抄)的更多相关文章

  1. Vxlan简介

    1.为什么需要Vxlan 1.什么是VXLAN VXLAN(Virtual eXtensible LAN可扩展虚拟局域网),是一种mac in UDP技术.传统的二层帧被封装到了UDP的报文中,通过U ...

  2. vxlan 协议

    vxlan 协议原理简介 1. vxlan 简介 VXLAN 全称是 Virtual eXtensible Local Area Network,虚拟可扩展的局域网.它是一种 overlay 技术,通 ...

  3. VxLAN协议详解

    版权声明:本文为Heriam博主原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 原文链接:https://jiang-hao.com/articles/2020/n ...

  4. 数据中心网络技术新贵:VXLAN与园区网络虚拟化

    摘要:为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生. 1 概述 传统数据中心网络面临的问题 虚拟机规模受设备表项规格限制 在传统二层网络中,交换机通过查询MAC地址表来转发 ...

  5. Spring-Security+Freemarker 开启跨域请求伪造防护功能

         CSRF简介--摘抄自<Spring实战(第4版)> 我们可以回忆一下,当一个POST请求提交到"/spittles"上时,SpittleController ...

  6. neutron二

    第四篇neutron— 网络实践   一.虚拟机获取 ip:   用 namspace 隔离 DHCP 服务   Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 通过 ...

  7. 如果你的shiro没学明白,那么应该看看这篇文章,将shiro整合进springboot

    最近在做项目的时候需要用到shiro做认证和授权来管理资源 在网上看了很多文章,发现大多数都是把官方文档的简介摘抄一段,然后就开始贴代码,告诉你怎么怎么做,怎么怎么做 相信很多小伙伴即使是跟着那些示例 ...

  8. overlay实现容器跨主机通信

    本节内容: Docker容器跨主机通信方案 环境信息 升级内核 安装docker 防火墙设置和开启内核转发 安装启动consul 启动Docker 创建overlay network 创建容器 测试容 ...

  9. Log4net日志

    log4net简介(摘抄于百度百科):      log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库 ...

随机推荐

  1. Java字符串工具类

    import java.io.ByteArrayOutputStream;import java.io.UnsupportedEncodingException;import java.lang.re ...

  2. liunx screen使用简单实验

    liunx screen使用 今天因工作需要使用到screen工具,感觉挺有意思,记录一下 GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件.用户可以通过该软件同时连接多个本地 ...

  3. mem系函数总结

    memset(); 原型: void *memset(void *s, int ch, size_t n); 含义:   将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的 ...

  4. nodejs+postgis实现搜周边

    利用nodejs搭建服务器,并连接PostgreSQL数据库,利用前端传过来的中心点坐标和搜索半径,进行空间查询,实现简单的搜周边,下面是实现流程和nodejs的代码: app.post('/tose ...

  5. phpstudy mysql 升级5.7.18

    1.从官网下载MySQL http://dev.mysql.com/downloads/mysql/ 2.解压到想安装到的 例如  C:\phpStudy\MySQL 进入该目录,找到my-defua ...

  6. Qgis里的查询过滤

    查询过虑实现方式 通过给getFeatures()传递 QgsFeatureRequest对象,实现数据的过虑,下边是一个查询的例子: request = QgsFeatureRequest() re ...

  7. STL Vector使用

    http://blog.163.com/zhoumhan_0351/blog/static/399542272010225104536463 Vector 像一个快速的数组,其具有数组的快速索引方式. ...

  8. php新闻静态化方法

    $view=file_get_contents('./a.tpl'); //新闻详情页模板模式,需要数据位置定义标签如{title},{content} $php_content=str_replac ...

  9. 【译】为什么要写super(props)

    译注: 原文地址 https://overreacted.io/why-do-we-write-super-props/ 正文 我听说Hooks是新的热点.好笑的是,我想通过描述一些关于class组件 ...

  10. JS其他类型值转化为Boolean类型规则

    由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一.String类型转化为Boolean 1.转化结果为true的情况 ①任何非空字符串 PS:空白字符串也是 ...