VXLAN简介(摘抄)
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;
- 寻找虚拟机A所在的VNI(也就是VXLAN号)
- 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
VXLAN的ARP协议过程
例如有两个虚拟机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简介(摘抄)的更多相关文章
- Vxlan简介
1.为什么需要Vxlan 1.什么是VXLAN VXLAN(Virtual eXtensible LAN可扩展虚拟局域网),是一种mac in UDP技术.传统的二层帧被封装到了UDP的报文中,通过U ...
- vxlan 协议
vxlan 协议原理简介 1. vxlan 简介 VXLAN 全称是 Virtual eXtensible Local Area Network,虚拟可扩展的局域网.它是一种 overlay 技术,通 ...
- VxLAN协议详解
版权声明:本文为Heriam博主原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 原文链接:https://jiang-hao.com/articles/2020/n ...
- 数据中心网络技术新贵:VXLAN与园区网络虚拟化
摘要:为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生. 1 概述 传统数据中心网络面临的问题 虚拟机规模受设备表项规格限制 在传统二层网络中,交换机通过查询MAC地址表来转发 ...
- Spring-Security+Freemarker 开启跨域请求伪造防护功能
CSRF简介--摘抄自<Spring实战(第4版)> 我们可以回忆一下,当一个POST请求提交到"/spittles"上时,SpittleController ...
- neutron二
第四篇neutron— 网络实践 一.虚拟机获取 ip: 用 namspace 隔离 DHCP 服务 Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 通过 ...
- 如果你的shiro没学明白,那么应该看看这篇文章,将shiro整合进springboot
最近在做项目的时候需要用到shiro做认证和授权来管理资源 在网上看了很多文章,发现大多数都是把官方文档的简介摘抄一段,然后就开始贴代码,告诉你怎么怎么做,怎么怎么做 相信很多小伙伴即使是跟着那些示例 ...
- overlay实现容器跨主机通信
本节内容: Docker容器跨主机通信方案 环境信息 升级内核 安装docker 防火墙设置和开启内核转发 安装启动consul 启动Docker 创建overlay network 创建容器 测试容 ...
- Log4net日志
log4net简介(摘抄于百度百科): log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库 ...
随机推荐
- Java字符串工具类
import java.io.ByteArrayOutputStream;import java.io.UnsupportedEncodingException;import java.lang.re ...
- liunx screen使用简单实验
liunx screen使用 今天因工作需要使用到screen工具,感觉挺有意思,记录一下 GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件.用户可以通过该软件同时连接多个本地 ...
- mem系函数总结
memset(); 原型: void *memset(void *s, int ch, size_t n); 含义: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的 ...
- nodejs+postgis实现搜周边
利用nodejs搭建服务器,并连接PostgreSQL数据库,利用前端传过来的中心点坐标和搜索半径,进行空间查询,实现简单的搜周边,下面是实现流程和nodejs的代码: app.post('/tose ...
- phpstudy mysql 升级5.7.18
1.从官网下载MySQL http://dev.mysql.com/downloads/mysql/ 2.解压到想安装到的 例如 C:\phpStudy\MySQL 进入该目录,找到my-defua ...
- Qgis里的查询过滤
查询过虑实现方式 通过给getFeatures()传递 QgsFeatureRequest对象,实现数据的过虑,下边是一个查询的例子: request = QgsFeatureRequest() re ...
- STL Vector使用
http://blog.163.com/zhoumhan_0351/blog/static/399542272010225104536463 Vector 像一个快速的数组,其具有数组的快速索引方式. ...
- php新闻静态化方法
$view=file_get_contents('./a.tpl'); //新闻详情页模板模式,需要数据位置定义标签如{title},{content} $php_content=str_replac ...
- 【译】为什么要写super(props)
译注: 原文地址 https://overreacted.io/why-do-we-write-super-props/ 正文 我听说Hooks是新的热点.好笑的是,我想通过描述一些关于class组件 ...
- JS其他类型值转化为Boolean类型规则
由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一.String类型转化为Boolean 1.转化结果为true的情况 ①任何非空字符串 PS:空白字符串也是 ...