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平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库 ...
随机推荐
- DOS下常用命令
0,想进入某个驱动器,直接输入盘符即可.如:“d:”1,CD--进入指定目录 2,cls--清除显示器屏幕上的内容,使DOS提示符到屏幕左上角. 3,time--显示和设置DOS的系统时间 4,dir ...
- EJB 3.1 @Startup @Singleton sequence
The annotation javax.ejb.Startup (@Startup) is used to mark an EJB so to make the EJB can be brought ...
- 双十一问题:kafka消费能力低下原因思考
抛去cpu.内存等机器原因,在每个分区皆分配一个进程消费的情况下,利用扩机器来提高kafka消费速率已无能为力 此时发现,在实际洪峰时段的消费速率元达不到先前压测时的消费速率 原因思考: 1.洪峰时段 ...
- Maven高级应用--编译全模块包-dist包
1. 在需要生成dist包的模块级别,新建文件夹xxx-xxxx-dist 2. 进入目录,新建pom.xml,建议copy 3. dependencies节点,把要编译成全局包的应用引入进来 < ...
- 在windows平台上构建自己的PHP(仅适用于php5.2)
构建步骤 1, 安装vs2008 2, 安装windows sdk 6.1 3, 下载php 5.2源码,可以从此处获取Releases(先不要解压) 4, 下载bindlib_w32.zip,htt ...
- oracle 通配符及regexp_count函数说明
通配符 通配符描述示例 %:匹配包含零个或更多字符的任意字符串.WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名. ...
- redis make报错
解压redis后,第一次make出现报错: [root@localhost redis-3.2.5]# make cd src && make allmake[1]: Entering ...
- 正则表达式和decimal format的实际项目运用
最近review测试框架底层代码,一是看看有哪些可以重构的,以便减少冗余增加重用,二是优化一下代码结构增强代码的健壮性. 其中有一个地方印象比较深刻,特记录分享如下: 背景:在电商场景中,价格是特别重 ...
- 微信小程序获取手机信息
wx.getSystemInfo({ success: function (res) { console.log(res.model)//手机型号 console.log(res.pixelRatio ...
- Python开发工具之Sublime Text 3基于文件创建项目
说明: 本地windows系统 本地已安装Sublime Text 3; 本地已创建python项目文件,如test,并在该文件夹下创建了虚拟环境venv(test/venv). 1.创建项目 依次鼠 ...