尴尬的VXLAN

本文探讨了VXLAN技术的设计初衷及其在解决数据中心多租户通信与隔离问题上的优势与局限性。文中详细分析了VXLAN技术面对的挑战,包括STP协议缺陷、VLAN数量限制、TOR交换机MAC地址表容量不足等问题,并讨论了VXLAN技术的实现细节与兼容性。

VXLAN(Virtual eXtensible Local Area Network)技术是由VMware、思科、Arista、Broadcom、Citrix和红帽共同提出的IETF草案,用以解决数据中心多租户间通信和隔离时解决vlan不够的问题;Vxlan草案里给出的封装格式是MAC-IN-UDP,即将原始报文封装在UDP报文里,其本意是在用于不同数据中心之间的VM(Virtual Machine)之间进行通信时数据报文封装格式。但是这种技术到底是否是一种完美的解决方案哪?

先对VXLAN的技术的提出其标准里主要想解决以下几个问题进行说明:

1)STP协议缺陷和VLAN ID数目少带来的限制

对于国内互联网的公司如BAT的数据中心,STP协议多数是不开启的,明显的缺陷是vxlan标准中所提及的,会导致链路带宽的大量浪费,并且一旦拓扑变化到二三百台网络设备的时候,收敛性能会明显变慢;所以大型数据中心会通过对网络的合理规划,来避免环路。

2)云计算[注]中多租户环境下的通信和隔离

对于为了提高CPU的使用率以及服务器维护/迁移等操作便捷的云计算来说,不同租户的云主机需要进行私网隔离,对于同一个租户的多个云主机私网内需要二层数据隔离而可以通过三层转发进行通信,并且当云主机在多个数据中心之间的进行热迁移时为了保持其提供服务的不间断需要保证迁移前后在一个vlan内,即多个数据中心组成的二层某个VLAN网路有多大,那么着里面的VM就能迁移有多远,也就是所谓的大二层技术。然而一个数据中心的物理服务器规模十万级在国内已经出现,国外Google等已有百万级规模的数据中心,此类环境下仅有12bit的VLAN数目对于云计算的租户数目来讲是远远不够的;其实vlan数目不够很早就被意识到,并提出了 Q-IN-Q之类的技术(还有灵活Q-IN-Q等),为什么这些技术不直接被拿来在云计算虚拟网络环境里使用哪?因为虽然我们可以在数据中心内部控制报文的TAG情况,但是一旦报文到了公网,其路径经过的网络设备是路由器还是交换机无法得知,根本无法保证让带各种不同TAG的报文安然通过公网达到对端数据中心;然后就看有了vxlan的技术被提出和应用。

3)TOR交换机的MAC地址表不充足

再讨论一下云计算环境下TOR交换机MAC地址表不足的问题,在以前TOR因为走三层转发,只会学习到与其之恋直连设备及二层相连设备的MAC;而随着大二层的出现,不仅要学习本数据中心二层的设备MAC地址,还有更多其他数据中心二层范围内的地址,包括海量的虚拟机的MAC地址都有可能要被TOR学习到,这无疑大大增加了TOR的MAC表项容量的要求。我们知道对于传统的商业交换芯片如Broadcom的ESW系列芯片,基本都有128K的MAC表项大小,这个容量相对于现代一个数据中心十万级甚至百万级设备的数据量真不算太大。

4)针对VXLAN技术的内容有以下几点讨论:

a)没有说明同一个租户下不同VNID之间如何通信;以前对于同一个vlan或不同的vlan来说两个主机通过交换机进行通信,需要添加或删除报文的vlan TAG;但是对于同一个同一个VNID或不同的VNID的主机进行通信,封装VXLAN报文还需要额外提供一个从L2以太网到L4 UDP的头部,始终让人感觉非常的怪异;

b)VLXAN技术将隔离区域数目从原来的12bit的VLAN ID扩展到现在24bit的VNI,可能犹如原先VLAN提出时看待其12bit的大小觉得已经很多了,但是现在网络规模越来越大,随着业务的需求扩展比如多个行星之间的星际通信发展后,可能很快又无法满足需求;这种扩展的方式始终是有缺陷的;

c)对原有VLAN技术的兼容

Vxlan技术如其他革命性的网络技术的出现(OSPF代替RIP或IPV6代替IPV4),应该取代vlan,并且兼容vlan,这点VXLAN技术标准文档里也有提及,即如何让VXLAN里的设备与VLAN里的设备进行通信,也可以考虑将vlan作为VXLAN一个子域的PVLAN技术;但是兼容性其他方面依然是个值得考虑的问题,比如三层交换机现有的IP转发时基于vlan创建三层接口的,可以简单理解为DIP VLAN进行查找表项,然后更改报文的VLAN ID号转发到另一个VLAN里转出;当VXLAN代替VLAN后,如何芯片基于VXLAN的VNID进行三层转发时VXLAN标准里没有提及的内容(+微信关注网络世界),还有如QOS中vlan shapping的映射等技术也存在这个问题;而且封装后还会有报文转发效率、对转发负载均衡性能等方面的影响;

d)对于vxlan技术的出现,现有网络设备支持度也不够;仅有盛科、BCM的T2等芯片,值得一提的是Openvswitch是支持的;VXLAN技术应该常规的传统L3芯片类似,应提供同一个VNI范围内的主机二层互通,不同VNI范围内的主机通过IP地址三层转发互通(一个租户有两个VNID),跨数据中心的主机流量进行二层或三层通信时需要添加含有公网IP地址的outer ip header来走外网进行通信,当然有需求可以提出在VXLAN下trunk、hybrid、access的端口属性,但是这些都没有做出规定;这个功能安装基于vlan的三层转发来讲不是什么高级的特性;但是这个技术都必须在新的交换芯片上来做,而新出的芯片都是比较高级的,比如broadcom的trident系列和Marvell的lion系列,如果在上面加这些功能,暂时没有出现Vxlan与某些技术比如MPLS、TRILL等技术兼容的方案,即如果用了vxlan,这些技术虽然被芯片支持,但很大可能是芯片的表项及其支持的功能就被浪费了;硬件支持工作还有相当大的。

为了解决vlan不够的问题,类似VXLAN的技术还有微软的NVGER和STT等,个人意见是这种技术解决问题方式是非常不彻底的,是革命性替代技术,但是兼容性不足且治标不治本。最当初利用vlan技术对网络进行隔离的选择可能是网络技术发展史上最大的一个错误,现在因为在其基础上建立的三层转发和受其限制而引发的一系列挽救技术都显得蹩脚,尤其在现在得云计算趋势下;我们是不是应该考虑从根上解决该问题而不是每次都做补丁,因为这样导致了技术的复杂性越来越大,报文的这种天价头部的多次封装又导致了传输效率的降低,慢慢的又会引入新的限制从而影响新技术被应用到各种领域,比如逐渐成熟的移动互联网。所以让我们回到二层,回到vlan没有出现的时候所遇到的网络广播风暴和安全隔离的问题上,可能会提出更好的解决办法,衍生更多的好技术,以避免今天网络的痛苦和无奈。


06-26
### VXLAN 技术原理 VXLAN(Virtual eXtensible Local Area Network)是一种网络虚拟化技术,旨在解决传统 VLAN 在大规模云计算环境中的局限性。其核心思想是通过在三层网络上构建二层逻辑网络,从而实现跨物理网络的虚拟化连接。 #### 1. **封装与解封装机制** VXLAN 使用 UDP 封装技术将原始的以太网帧(如 MAC 地址、IP 地址等)封装到 UDP 数据包中,并通过 IP 网络进行传输。这种封装过程由 VTEP(VXLAN Tunnel End Point)设备完成,它负责将本地网络的二层帧转换为 VXLAN 格式并发送到目标 VTEP,然后由目标 VTEP 解封装后转发给目标主机[^5]。 具体来说,VXLAN 报文结构包括以下几个部分: - **内层报文**:即原始的以太网帧。 - **VXLAN 头部**:包含 VXLAN 标识符(VXLAN ID),用于区分不同的 VXLAN 实例。 - **UDP 头部**:指定源端口和目的端口,其中目的端口通常为 4789。 - **外层 IP 和以太网头部**:用于在网络中路由 VXLAN 报文。 #### 2. **泛洪与学习机制** VXLAN 的通信依赖于转发表的泛洪和学习机制。当一个 VTEP 收到未知单播帧时,它会向所有其他 VTEP 发送泛洪请求,寻找目标 MAC 地址所在的节点。一旦找到目标节点,VTEP 会记录下对应的 VXLAN ID 和远端 VTEP 的 IP 地址,形成转发表项。此后,相同 VXLAN ID 内的流量可以直接通过该转发表项进行转发,无需再次泛洪[^2]。 #### 3. **多租户支持** VXLAN 支持多达 16,777,216 个逻辑网络(即 VXLAN ID 范围为 0x000000 到 0xFFFFFF),远超传统 VLAN 的 4094 个限制。这一特性使得 VXLAN 成为公有云提供商的理想选择,能够满足多个租户共享同一物理网络的需求,同时确保不同租户之间的网络隔离和地址重叠问题得到有效解决[^5]。 ### VXLAN 应用场景 #### 1. **数据中心互联** VXLAN 可以基于三层网络构建二层虚拟网络,适用于大型数据中心内部或跨数据中心的互联。例如,在多个数据中心之间部署 VXLAN,可以实现跨地理位置的虚拟机迁移、负载均衡等功能,提升数据中心的整体灵活性和可扩展性[^5]。 #### 2. **虚拟化环境中的网络隔离** 随着虚拟化技术的普及,单台物理服务器可以运行数十甚至上百台虚拟机。在这种环境下,传统的 VLAN 难以满足大规模虚拟机的网络管理需求。VXLAN 通过提供独立的逻辑网络,确保每个虚拟机可以在自己的 VXLAN 中运行,避免了 MAC 地址表膨胀的问题,提升了交换机的转发性能。 #### 3. **SDN 架构下的 Overlay 网络** VXLAN 是 SDN(Software Defined Networking)架构中常用的 Overlay 技术之一。通过 VXLAN,可以在现有的物理网络之上构建灵活的逻辑网络,而无需修改底层网络设备。这种方式不仅简化了网络配置,还提高了网络的可编程性和自动化水平。分布式控制的 VXLAN 是目前使用最广泛的方式,因为它能够适应多种 SDN 控制器的实现方式,且具有较高的灵活性和可扩展性[^4]。 #### 4. **混合云环境中的网络扩展** 在混合云环境中,企业通常需要将私有云与公有云无缝连接。VXLAN 提供了一种高效的解决方案,允许企业在不同云平台之间建立统一的虚拟网络。通过 VXLAN,企业可以在私有云和公有云之间自由迁移工作负载,同时保持一致的网络策略和服务质量[^3]。 ### VXLAN 的优势与挑战 #### 优势 - **高可扩展性**:支持超过 1600 万个逻辑网络,远超传统 VLAN 的 4094 个限制。 - **网络隔离**:通过 VXLAN ID 实现多租户网络隔离,确保不同用户之间的数据安全。 - **简化网络管理**:VXLAN 允许在现有物理网络之上构建逻辑网络,减少了对底层网络设备的依赖,降低了网络管理的复杂度。 - **支持虚拟化环境**:VXLAN 能够有效应对虚拟化带来的 MAC 地址表膨胀问题,提升网络性能。 #### 挑战 - **性能开销**:由于 VXLAN 需要进行额外的封装和解封装操作,可能会引入一定的性能开销。特别是在高吞吐量的场景下,这种开销可能会影响整体网络性能。 - **运维复杂度**:虽然 VXLAN 提供了灵活的网络架构,但同时也增加了网络调试和故障排查的难度。尤其是在分布式控制的 VXLAN 环境中,不同厂商的实现方式可能存在差异,导致运维人员需要掌握更多的专业知识。 - **兼容性问题**:VXLAN 是一种相对较新的技术,某些旧的网络设备可能不支持 VXLAN 功能,这可能导致在部署过程中遇到兼容性问题。 ### 示例代码:Linux 中的 VXLAN 配置 以下是一个简单的 Linux 环境下 VXLAN 配置示例: ```bash # 创建 VXLAN 接口 vxlan0,指定 VXLAN ID 为 10,远端 VTEP 地址为 192.168.1.2 ip link add name vxlan0 type vxlan id 10 remote 192.168.1.2 dev eth0 # 启用 VXLAN 接口 ip link set up dev vxlan0 # 为 VXLAN 接口分配 IP 地址 ip addr add 10.0.0.1/24 dev vxlan0 ``` 在这个示例中,`vxlan0` 是创建的 VXLAN 接口,`id 10` 表示 VXLAN ID 为 10,`remote 192.168.1.2` 表示远端 VTEP 的 IP 地址,`dev eth0` 表示 VXLAN 流量通过 `eth0` 接口发送。启用接口后,为其分配 IP 地址即可开始通信[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值