|
1. 为什么需要Vxlan 普通的VLAN数量只有4096个,无法满足大规模云计算IDC的需求,而IDC为何需求那么多VLAN呢,因为目前大部分IDC内部结构主要分为两种L2,L3。L2结构里面,所有的服务器都在一个大的局域网里面,TOR透明L2,不同交换机上的服务器互通靠MAC地址,通信隔离和广播隔离靠的vlan,网关在内网核心上。而L3结构这是从TOR级别上就开始用协议进行互联,网关在TOR上,不同交换机之间的互通靠IP地址。 在云计算IDC里,要求服务器做到虚拟化,原来这个服务器挂在TOR A上,我可以随意把它迁移到TOR B上,而不需要改变IP地址,这个有点就是L2网路的特长,因为我这个虚拟服务器和外界(网关之外)通信还靠L3,但是我网关内部互访是走L2的,这个在L3里是无法做到的。因为L3里每个IP都是唯一的,地址也是固定位置的,除非你整网段物理搬迁。因此如何在L3网络里传输L2数据呢,这就是overlay技术。 因此VXLAN(Virtual eXtensible LAN可扩展虚拟局域网)诞生了,基于IP网络之上,采用的是MAC in UDP技术,本来OSI7层模型里就是一层叠一层的,这种和GRE/IPSEC等tunnel技术是不是很像,这种封装技术对中间网络没有特殊要求,只要你能识别IP报文即可进行传送。 好了,解释清楚了,那么现在总结为何需要Vxlan: - 虚拟机规模受到网络规格的限制,大L2网络里,报文通过查询MAC地址转发,MAC表容量限制了虚拟机的数量。
- 网络隔离的限制,普通的vlan和VPN配置无法满足动态网络调整的需求,同时配置复杂
- 虚拟器搬迁受到限制,虚拟机启动后假如在业务不中断基础上将该虚拟机迁移到另外一台物理机上去,需要保持虚拟机的IP地址和MAC地址等参数保持不变,这就要求业务网络是一个二层的网络。
2. Vxlan报文格式 Outer UDP端口使用4798,但可以修改 Outer IP头封装:源IP为发送报文的虚拟机所属的VTEP的IP地址,目的IP为目的虚拟机所属的VTEP IP地址。 Outer的目的IP地址可以是单播和组播地址,单播的情况下,目的IP为VTEP(Vxlan Tunnel End Point)的IP地址,在多播的情况下引入VXLAN的管理层,利用VNI和IP多播组的映射来确定VTEP。 当目的IP为接收端的VTEP的IP时,假如不知道这个IP地址,则需要执行ARP请求来获取,步骤如下: 1. 目标IP被替换成与源虚拟机具有相同VNI的多播组IP地址; 2. 所有VTEP端都接收该多播报文,VTEP查找所在主机上的全部虚拟机来匹配源虚拟机的Inner 目的MAC。
3. 目标VTEP的虚拟机会回应该多播包,从而获得目标VTEP的IP地址。 4. 发送端VTEP添加VNI-VTEP-虚拟机MAC的映射关系到自己的VXLAN表中,以避免再次组播学习。
Outer 以太封装:SA为发送报文的虚拟机所属的VTEP MAC地址,DA为目的虚拟机所属的VTEP上路由表中下一跳MAC地址。
3. VXLAN网络结构 NVE(Network Virtrualization Edge网络虚拟边缘节点)是实现网络虚拟化的功能实体,VM里的报文经过NVE封装后,NVE之间就可以在基于L3的网络基础上建立起L2虚拟网络。网络设备实体以及服务器实体上的VSwitch都可以作为NVE。 VTEP为VXLAN隧道的端点,封装在NVE中,用于VXLAN报文的封装和解封装。VTEP与物理网络相连,分配的地址为物理网络IP地址。VXLAN报文中源IP地址为本节点的VTEP地址,VXLAN报文中目的IP地址为对端节点的VTEP地址,一对VTEP地址就对应着一个VXLAN隧道。 VNI(VXLAN Network Identifier):VXLAN网络标识VNI类似VLAN ID,用于区分VXLAN段,不同VXLAN段的虚拟机不能直接二层相互通信。一个VNI表示一个租户,即使多个终端用户属于同一个VNI,也表示一个租户。VNI由24比特组成,支持多达16M((2^24-1)/1024^2)的租户。 VAP(Virtual Access Point):虚拟接入点VAP统一为二层子接口,用于接入数据报文。为二层子接口配置不同的流封装,可实现不同的数据报文接入不同的二层子接口。
Vxlan网关VM之间的通信模式主要有3种:同VNI下的不同VM(分布在同一实体和不同实体两种),不同VNI下的跨网访问,VXLAN和非VXLAN之间的访问。 VXLAN网关分为: 二层网关:位于同一网段的终端用户通信,L2网关收到用户报文后,根据报文中包含的目的MAC类型,报文转发流程分为: 1. MAC地址为BUM(broadcast&unknown-unicast&multicast)地址,按照 BUM报文转发流程进行处理 2. MAC地址为已知单播地址,按照已知单播报文转发流程进行处理 三层网关:用于非同一网段的终端用户通信或VXLAN和非VXLAN用户间的通信。 VXLAN二层网关:L2网关主要解决的就是同一VNI下的VM之间的互访。 VXLAN 三层网关:L3网关解决的就是不同VNI以及VXLAN和非VXLAN之间的互访。L3网关分为集中式网关和分布式网关,这2者的主要区别就在于L3网关是在leaf上还是在spine上。 如上图所示,集中式L3 GW在spine上,而分布式则是L2,L3 GW都在leaf上。当网络规模较大时,需采用分布式网关,因集中式spine的ARP表项瓶颈,并且子网流量转发绕远。分布式网关时,VTEP在leaf上。spine节点不感知VXLAN隧道。 需要注意的是当VM1和VM2在同一子网,但是挂在不同leaf上时,他们的三层网关需要配置相同的网关IP地址和MAC地址,当租户的VM位置移动时,不需要更改网关任何配置。 BUM报文转发流程当BUM报文进入VXLAN隧道时,接入端VTEP采用头端复制方式(接口收到BUM报文后本地VTEP通过控制平面获取同一VNI的VTEP列表,将收到的BUM报文根据VTEP列表进行复制并发送给属于同一VNI的所有VTEP))进行报文的VXLAN封装,BUM出VXLAN隧道时,出口端VTEP对报文解封装, 综述:VXLAN网络结构定义完了,这里用通俗易懂的话解释一遍:在一台实体服务器上可以虚拟出一个交换机来,这个交换机就是VSwitch,而这个VSwitch下挂的不再是实体服务器,而是一个个VM,一个VM其实就是一个租户租用的服务器,不同租户之间肯定是不能互访的,要不然租户数据的安全性如何保障,这个隔离就是靠的VNI这个ID,其实这个你可以向下VLAN是如何隔离的,目的就是为了隔离租户。我一个租户有2个VM的话,那么我这2个之间应该可以互访吧。所以说基于VNI定义的租户,而非基于VM。内部的结构说清楚了再来说上行如何访问,在一个L2交换机你要跨网访问必然要经过网关,这个网关的IP地址就是VTEP IP,在网络上有个概念叫arp-proxy,一般用途是为了保护内部私有网络,外界的所有应答都有网关来代替回答(可以理解为门卫)。在这里外界只需要你的VTEP IP即可,对端报文到达VTEP这个网关后自己在内部走L2进行转发。因此VXLAN报文中的目的IP就是对端的网关(VTEP IP),而源地址自然也是自己的网关(VTEP IP)。而对于不同leaf上的同一VNI的VM来说,他们的VTEP IP肯定要配置相同,想下同一vlan下的服务器的网关是如何配置的就明白了。
1、概述 (1)VXLAN是建立在物理IP(overlay)网络之上的虚拟以太网 使用UDP封装完整的内层以太帧,封装报文头共五十个字节 (2)VXLAN使用24位VXLAN网络标识符(VLAN为12位) 最大支持16,000,000个逻辑网络 (3)VXLAN可跨越物理三层网络 使用UDP封装能在三层物理网络上建立二层逻辑网络 (4)VXLAN利用ip多播封装广播和多播报文 在VXLAN网内广播或多播的报文被封装在ip多播中,如ARP报文 (5)VXLAN利用ECMP(等价多路径负载均衡) 对不同数据流使用不同UDP源端口 (6)VXLAN已提交到ITEF,启动标准化进程 与Cisco, Citrix, Red Hat, Broadcom,Arista等厂商协作 2、VXLAN解决的具体技术问题 (1)VLAN的数量限制:4094个VLAN远不能满足大规模云计算中心的需求,XVLAN最大支持 16,000,000个逻辑网络 (2)物理网络基础设施的限制:基于IP子网的区域划分限制了需要二层网络连通性的应用负载 的部署 (3)ToR交换机MAC表耗尽:虚拟化以及东西向流量导致更多的MAC表项 (4)汇聚层STP(生成树协议)高负荷:由于大量VLAN配置在大量接口,汇聚层交换机的压力大 增。 3、VXLAN报文格式
Outer header:封装VXLAN的UDP报文头,VXLAN封装在UDP报文的数据部分。
VXLAN Header:VXLAN报文头,包括: F:未使用 I:表示VXLAN Network ID有效 Reserved:未使用 VXLAN Network ID:24bit,标识VXLAN网络标识,类似VLAN的ID, 只是必VLAN所表示的范围大很多 4、VXLAN网络的初始化
VTEP :VXLAN隧道终端 (VXLAN Tunneling End Point),用于多VXLAN报文进行封装/解封 装,包括mac请求报文和正常VXLAN数据报文,在一端封装报文后通过隧道向另一端VTEP发送封装报文,另一端VTEP接收到封装的报文解封装后根据被封装的MAC地址进行转发。VTEP可由支持VXLAN的硬件设备或软件来实现。 VM1及VM2连接到VXLAN网络100, 两个VXLAN主机加入IP多播组239.119.1.1 5、VXLAN网络交互过程 以ARP交互为例,其他数据报的交互类似 ARP请求:
(1)VM1以广播的形式发送ARP请求 (2)VTEP1把ARP请求报文被封装在IP多播报文中,并打上VXLAN标识为100 (3)VTEP1在ip多播组内里进行多播 (4)VTEP2接收到ip多播报文后对内层MAC地址到外层ip地址的映射进行学习,并解封装后在
本地VXLAN标识为100的虚拟局域内广播(这也是VXLAN ID的用武之地) (5)VM2接收到请求自己MAC的ARP请求后做出响应 ARP响应:
(1)VM2准备ARP响应报文后向VM1发送响应报文
(2)VTEP2接收到VM2的响应报文后把它封装在ip单播报文中(VXLAN标识依然为100),然 后向VM1发送单播 (3)VTEP1接收到单播报文后,学习内层MAC到外层ip地址的映射,解封装并根据被封装内容 的目的MAC地址转发给VM1 (4)VM1接收到ARP应答报文,ARP交互结束 6、VXLAN网络和非VXLAN网络连接 必须使用VXLAN的网关才能把VXLAN网络和外部网络进行桥接和完成VXLAN ID和VLAN ID之间的映射和路由,和VLAN一样,虚拟局域网之间的通信需要三层设备的支持,即VXLAN虚拟局域网之间的通信也需要VXLAN路由的支持。同样,网关可由硬件或软件来实现。
一 . 为什么需要Vxlan 1. vlan的数量限制 4096个vlan远不能满足大规模云计算数据中心的需求 2. 物理网络基础设施的限制 基于IP子网的区域划分限制了需要二层网络连通性的应用负载的部署 3. TOR交换机MAC表耗尽 虚拟化以及东西向流量导致更多的MAC表项 4. 多租户场景 IP地址重叠 二. 什么是Vxlan 1. Vxlan报文 vxlan(virtual Extensible LAN)虚拟可扩展局域网,是一种overlay的网络技术,使用MAC in UDP的方法进行封装,共50字节的封装报文头。具体的报文格式如下: (1) vxlan header 共计8个字节,目前使用的是Flags中的一个8bit的标识位和24bit的VNI(Vxlan Network identifier),其余部分没有定义,但是在使用的时候必须设置为0x0000。 (2) 外层的UDP报头 目的端口使用4798,但是可以根据需要进行修改。同事UDP的校验和必须设置成全0。 (3) IP报文头 目的IP地址可以是单播地址,也可以是多播地址。单播情况下,目的IP地址是Vxlan Tunnel End Point(VTEP)的IP地址。在多播情况下引入VXLAN管理层,利用VNI和IP多播组的映射来确定VTEPs。 protocol:设置值为0x11,显示说明这是UDP数据包 Source ip: 源vTEP_IP; Destination ip: 目的VTEP IP。 (4) Ethernet Header Destination Address:目的VTEP的Mac 地址,即为本地下一跳的地址(通常是网关Mac 地址); VLAN: VLAN Type被设置为0x8100, 并可以设置Vlan Id tag(这就是vxlan的vlan 标签)。 Ethertype:设置值为0x8000,指明数据包为IPv4的。 补充:VTEP的作用? 用于对VXLAN报文进行封装/解封装,包括ARP请求报文和正常的VXLAN数据报文,在一段封装报文后通过隧道向另一端VTEP发送封装报文,另一端VTEP接收到封装的报文解封装后根据封装的MAC地址进行装法。VTEP可由支持VXLAN的硬件设备或软件来实现。 从封装的结构上来看,VXLAN提供了将二层网络overlay在三层网络上的能力,VXLAN Header中的VNI有24个bit,数量远远大于4096,并且UDP的封装可以穿越三层网络,比VLAN有更好的扩展性。 2. Vxlan的数据和控制平面 (1) 数据平面---隧道机制 已经知道,VTEP为虚拟机的数据包加上了层包头,这些新的报头之有在数据到达目的VTEP后才会被去掉。中间路径的网络设备只会根据外层包头内的目的地址进行数据转发,对于转发路径上的网络来说,一个Vxlan数据包跟一个普通IP包相比,出了个头大一点外没有区别。 由于VXLAN的数据包在整个转发过程中保持了内部数据的完整,因此VXLAN的数据平面是一个基于隧道的数据平面。 (2) 控制平面----改进的二层协议 VXLAN不会在虚拟机之间维持一个长连接,所以VXLAN需要一个控制平面来记录对端地址可达情况。控制平面的表为(VNI,内层MAC,外层vtep_ip)。Vxlan学习地址的时候仍然保存着二层协议的特征,节点之间不会周期性的交换各自的路由表,对于不认识的MAC地址,VXLAN依靠组播来获取路径信息(如果有SDN Controller,可以向SDN单播获取)。 另一方面,VXLAN还有自学习的功能,当VTEP收到一个UDP数据报后,会检查自己是否收到过这个虚拟机的数据,如果没有,VTEP就会记录源vni/源外层ip/源内层mac对应关系,避免组播学习。 三. VxlanARP请求 (1) vxlan初始化 VM1和VM2连接到VXLAN网络(VNI)100,两个VXLAN主机加入IP多播组239.119.1.1 (2) ARP请求 1) VM1以广播的形式发送ARP请求; 2) VTEP1封装报文。打上VXLAN标识为100,外层IP头DA为IP多播组(239.119.1.1),SA为IP_VTEP1. 3) VTEP1在多播组内进行多播; 4) VTEP2解析接收到多播报文。填写流表(VNI, 内层mac地址,外层Ip地址),并在本地VXLAN标识为100的范围内 广播(是VXLAN的用武之地)。 5) VM2对接收到的ARP请求进行响应; (3) ARP应答 1) VM2准备ARP响应报文后向VM1发送响应报文 2)VTEP2接收到VM2的响应报文后把它封装在ip单播报文中(VXLAN标识依然为100),然 后向VM1发送单播 3)VTEP1接收到单播报文后,学习内层MAC到外层ip地址的映射,解封装并根据被封装内容的目的MAC地址转发给VM1 4)VM1接收到ARP应答报文,ARP交互结束 四:数据传输 (1) ARP请求应答之后,VM1知道了VM2的Mac地址,并且要向VM2通信(注意,VM1是以TCP的方法向VM2发送数据的)。 VTEP1 收到VM1发送数据包,用MAC地址从流表中检查VM1与VM2是否属于用一个VNI。两个VM不但位于同一个VNI中(不在同一个VNI中出网关),并且VTEP1已经知道了VM2的所有地址信息(MAC和VTEP2_IP)。VTEP1封装新的数据包。然后交给上联交换机。 (2) 上联交换机收到服务器发来的UDP包,对比目的IP地址和自己的路由表,然后将数据报转发给相应的端口。 (3) 目的VTEP收到数据包后检查器VNI,如果UDP报中VNI与VM2的VNI一致,则将数据包解封装后交给VM2进一步处理。至此一个数据包传输完成。整个Vxlan相关的行为(可能穿越多个网关)对虚拟机来说是透明的,虚拟机不会感受传输的过程。虽然VM1与VM2之间启动了TCP来传输数据,但数据包一路上实际是以UDP的形式被转发,两端的VTEP并不会检查数据是否正确或者顺序是否完整,所有的这些工作都是在VM1和VM2在接收到解封装的TCP包后完成的。也就是说如果说如果被UDP封装的是TCP连接,那么UDP和TCP将做为两个独立的协议栈各自工作,相互之间没有交互。 五:Vxlan网关 如果需要VXLAN网络和非VXLAN网络连接,必须使用VXLAN网关才能把VXLAN网络和外部网络进行桥接和完成VXLAN ID和VLAN ID之间的映射和路由,和VLAN一样,VXLAN网络之间的通信也需要三层设备的支持,即VXLAN路由的支持。同样VXLAN网关可由硬件和软件来实现。从封装的结构上来看,VXLAN提供了将二层网络overlay在三层网络上的能力,VXLAN Header中的VNI有24个bit,数量远远大于4096,并且UDP的封装可以穿越三层网络,比VLAN有更好的扩展性。 六.部署 (1) 纯VXLAN部署场景 对于连接到VXLAN内的虚拟机,由于虚拟机的VLAN信息不再作为转发的依据,虚拟机的迁移也就不再受三层网关的限制,可以实现跨越三层网关的迁移。 (2) VXLAN与VLAN混合部署 为了实现VLAN和VXLAN之间互通,VXLAN定义了VXLAN网关。VXLAN网关上同时存在两种类型的端口:VXLAN端口和普通端口。 当收到从VXLAN网络到普通网络的数据时,VXLAN网关去掉外层包头,根据内层的原始帧头转发到普通端口上;当有数据从普通网络进入到VXLAN网络时,VXLAN网关负责打上外层包头,并根据原始VLAN ID对应到一个VNI,同时去掉内层包头的VLAN ID信息。相应的如果VXLAN网关发现一个VXLAN包的内层帧头上还带有原始的二层VLAN ID,会直接将这个包丢弃。 之所以这样,是VLAN ID是一个本地信息,仅仅在一个地方的二层网络上其作用,VXLAN是隧道机制,并不依赖VLAN ID进行转发,也无法检查VLAN ID正确与否。因此,VXLAN网关连接传统网络的端口必须配置ACCESS口,不能启用TRUNK口。 七.一图贯之
|