Skip to main content

4. VXLAN

VXLAN (虚拟可扩展局域网, Virtual eXtensible Local Area Network) 解决了在存在虚拟机的多租户环境中第 2 层和第 3 层数据中心网络基础设施的上述要求。它在现有网络基础设施上运行, 并提供了一种"拉伸"第 2 层网络的方法。简而言之, VXLAN 是在第 3 层网络上的第 2 层覆盖方案。每个覆盖网络称为一个 VXLAN 段 (VXLAN Segment)。只有同一 VXLAN 段内的虚拟机才能相互通信。每个 VXLAN 段通过一个 24 位段 ID 来标识, 称为"VXLAN 网络标识符 (VXLAN Network Identifier, VNI)"。这允许在同一管理域内最多共存 16M 个 VXLAN 段。

VNI 标识由各个虚拟机发起的内部 MAC 帧的范围。因此, 您可以跨段拥有重叠的 MAC 地址, 但由于流量使用 VNI 进行隔离, 因此永远不会发生流量"交叉"。VNI 位于封装由虚拟机发起的内部 MAC 帧的外部头部中。在以下章节中, 术语"VXLAN 段"与术语"VXLAN 覆盖网络"可互换使用。

由于这种封装, VXLAN 也可以被称为一种隧道方案, 在第 3 层网络之上覆盖第 2 层网络。隧道是无状态的, 因此每个帧都根据一组规则进行封装。以下章节中讨论的隧道端点 (VXLAN 隧道端点, VXLAN Tunnel End Point 或 VTEP) 位于托管虚拟机的服务器上的 hypervisor 内。因此, VNI 和 VXLAN 相关的隧道/外部头部封装只有 VTEP 知道——虚拟机永远看不到它 (参见图 1)。请注意, VTEP 也可能位于物理交换机或物理服务器上, 并且可以在软件或硬件中实现。第 6 节关于 VXLAN 部署场景讨论了 VTEP 是物理交换机的一个用例。

以下章节讨论了使用一种控制方案——数据平面学习 (Data Plane Learning) 的 VXLAN 环境中的典型流量流场景。在这里, 虚拟机的 MAC 到 VTEP 的 IP 地址的关联是通过源地址学习发现的。组播 (Multicast) 用于传输未知目的地、广播和组播帧。

除了基于学习的控制平面之外, 还有其他可能的方案用于分发 VTEP IP 到虚拟机 MAC 映射信息的分发。选项可能包括通过各个 VTEP 进行中央权威/目录基础的查找, 通过中央权威向 VTEP 分发此映射信息等。这些有时分别被称为拉取 (Pull) 和推送 (Push) 模型。本文档将专注于数据平面学习方案作为 VXLAN 的控制平面。

4.1. Unicast VM-to-VM Communication (单播虚拟机到虚拟机通信)

考虑 VXLAN 覆盖网络内的一个虚拟机。此虚拟机不知道 VXLAN。要与不同主机上的虚拟机通信, 它会像正常情况一样发送目的地为目标的 MAC 帧。物理主机上的 VTEP 查找此虚拟机关联的 VNI。然后, 它确定目的 MAC 是否在同一段上, 以及是否存在目的 MAC 地址到远程 VTEP 的映射。如果是这样, 则在原始 MAC 帧前面添加一个外部头部, 该头部包括外部 MAC、外部 IP 头部和 VXLAN 头部 (有关帧格式, 请参见第 5 节中的图 1)。封装的数据包被转发到远程 VTEP。收到后, 远程 VTEP 验证 VNI 的有效性以及该 VNI 上是否存在使用与内部目的 MAC 地址匹配的 MAC 地址的虚拟机。如果是这样, 则数据包被剥离其封装头部并传递给目的虚拟机。目的虚拟机永远不知道 VNI 或帧是使用 VXLAN 封装传输的。

除了将数据包转发到目的虚拟机外, 远程 VTEP 还学习从内部源 MAC 到外部源 IP 地址的映射。它将此映射存储在表中, 以便当目的虚拟机发送响应数据包时, 无需对响应数据包进行"未知目的地"泛洪。

在源虚拟机传输之前确定目的虚拟机的 MAC 地址的执行方式与非 VXLAN 环境相同, 除了第 4.2 节中描述的内容。使用广播帧, 但它们封装在组播数据包中, 如第 4.2 节中详述的。

4.2. Broadcast Communication and Mapping to Multicast (广播通信和到组播的映射)

考虑源主机上的虚拟机尝试使用 IP 与目的虚拟机通信。假设它们都在同一子网上, 虚拟机发出地址解析协议 (Address Resolution Protocol, ARP) 广播帧。在非 VXLAN 环境中, 此帧将使用 MAC 广播在承载该 VLAN 的所有交换机上发出。

使用 VXLAN, 在数据包开头插入包括 VXLAN VNI 的头部以及 IP 头部和 UDP 头部。但是, 此广播数据包被发送到 VXLAN 覆盖网络实现的 IP 组播组。

为了实现这一点, 我们需要在 VXLAN VNI 和它将使用的 IP 组播组之间进行映射。此映射在管理层完成, 并通过管理通道提供给各个 VTEP。使用此映射, VTEP 可以向上游交换机/路由器提供 IGMP 成员报告, 以根据需要加入/离开与 VXLAN 相关的 IP 组播组。这将根据该主机上是否有使用特定组播地址的成员, 启用特定组播流量地址的叶节点修剪 (参见 [RFC4541])。此外, 使用协议独立组播 - 稀疏模式 (Protocol Independent Multicast - Sparse Mode, PIM-SM 参见 [RFC4601]) 等组播路由协议将在第 3 层网络内提供高效的组播树。

VTEP 将使用 (*,G) 连接。这是必需的, 因为 VXLAN 隧道源的集合是未知的, 并且可能经常变化, 因为虚拟机在不同主机上启动/关闭。这里的一个附注是, 由于每个 VTEP 可以充当组播数据包的源和目的地, 因此像双向 PIM (Bidirectional PIM, BIDIR-PIM——参见 [RFC5015]) 这样的协议会更有效。

目的虚拟机使用 IP 单播发送标准 ARP 响应。此帧将使用 IP 单播 VXLAN 封装封装回连接发起虚拟机的 VTEP。这是可能的, 因为 ARP 响应的目的 MAC 到 VXLAN 隧道端点 IP 的映射是通过 ARP 请求早先学习的。

请注意, 组播帧和"未知 MAC 目的地"帧也使用组播树发送, 类似于广播帧。

4.3. Physical Infrastructure Requirements (物理基础设施要求)

当在网络基础设施中使用 IP 组播时, 可以通过网络内的各个第 3 层 IP 路由器/交换机使用像 PIM-SM 这样的组播路由协议。这用于构建高效的组播转发树, 以便组播帧仅发送给那些请求接收它们的主机。

同样, 连接源虚拟机和目的虚拟机的实际网络不需要是第 3 层网络: VXLAN 也可以在第 2 层网络上工作。在任何一种情况下, 都可以使用 IGMP 侦听在第 2 层网络内实现高效的组播复制。

VTEP 禁止 (MUST NOT) 对 VXLAN 数据包进行分片。由于较大的帧大小, 中间路由器可能会对封装的 VXLAN 数据包进行分片。目的 VTEP 可以 (MAY) 静默丢弃此类 VXLAN 分片。为了确保端到端流量传递而不进行分片, 推荐 (RECOMMENDED) 将物理网络基础设施的 MTU (最大传输单元, Maximum Transmission Unit) 设置为可容纳由于封装而导致的较大帧大小的值。也可以 (MAY) 使用路径 MTU 发现 (参见 [RFC1191] 和 [RFC1981]) 等其他技术来解决此要求。