《数据中心网络架构演进 — 从传统的三层网络到大二层网络架构》
《数据中心网络架构演进 — 从物理网络到虚拟化网络》
《数据中心网络架构演进 — CLOS 网络模型的第三次应用》
Overlay 网络就是基于物理网络拓扑(Underlay Network)之上,构建出一个虚拟的、不同于物理网络拓扑的逻辑网络。Overlay 网络是一个 L3 in L2 网络。也就是说,只要 L3 网络能覆盖的地方,那么 Overlay 的 L2 网络也能覆盖。Overlay 的典型思想就是隧道(Tunnel)。
隧道技术(Tunneling):使用隧道传递的数据可以是不同协议的数据帧或数据报文,隧道协议将其它协议的数据帧或数据报文重新封装后再发送。新的封装头部提供了路由信息,以便通过互联网传递被封装的真实负载数据。隧道这种方式能够使来自多种信息源的网络业务在同一个基础设施中通过不同的隧道进行点到点传输。隧道技术使用点对点通信协议(传输层)代替了交换连接,通过路由网络(网络层)来连接数据地址。
随着云计算技术的兴起以及虚拟化技术的普及,VLAN 技术的弊端逐渐显现出来,表现为以下 3 个方面:
2011 年 8 月,IETF 发布了《RFC 7348:Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks》草案,主要由 VMware 与 Cisco 公司草拟。该技术利用 L2 over UDP 机制传输原始报文、利用 VxLAN 头中 24bits 的 VNI 信息将传统 VLAN 标记扩展至 16MB。
紧接着,2011 年 9 月,IETF 发布了《RFC 7637:NVGRE: Network Virtualization Using Generic Routing Encapsulation 》案,主要由 Microsoft 草拟。该技术利用 L2 Over GRE 机制传输原始报文、利用 GRE Key 字段中的高 24bits 将 VLAN 数据扩展至 16MB。
VxLAN(Virtual eXtensible LAN,虚拟可扩展局域网)是一种基于隧道技术的 Overlay 网络虚拟化技术。VxLAN 就是在三层网络(网络层)之上构建的二层虚拟网络(数据链路层),通过 VxLAN 技术可以将处于不同网段的网络设备整合到一个逻辑上的数据链路层网络中。对于网络的终端用户而言,这些网络设备似乎 “真实地” 部署在了同一个数据链路层网络中。
与 VLAN 相比,VxLAN 有下面几个优势:
VxLAN 的本质就是一种隧道技术,通过将虚拟网络中的二层数据帧封装在实际物理网络中的三层数据报文中进行传输。
VxLAN 的传输协议是 IP+UDP,它定义了一个 MAC-in-UDP 的封装格式。在原始的 Layer 2 数据帧前加上 VxLAN Header,然后再放到 UDP 数据报和 IP 数据包中。通过 MAC-in-UDP 封装,VxLAN 能够在 Layer 3 网络上建立起了一条 Layer 2 的隧道。VxLAN 引入了 8-byte VXLAN Header,其中 VNI(VXLAN Network Identifier)占 24-bit。VxLAN Header 和原始的 L2 Frame 被封装到 UDP 数据报中。这 24-bit 的 VNI 用于标示不同的二层网段,能够支持 16777216 个 LAN。
VTEP(VxLAN tunnel endpoint,隧道端点),是 VxLAN 隧道的终结点,用于处理 VxLAN 数据报文的封装和解封装。每个 VTEP 都有两个接口,一个接口用于本地 LAN 的桥接转发;另一个接口作为 IP interface 配置上一个 IP 地址,用于连接 Transit 网络。同时,VTEP 使用该 IP 作为目的 IP 或源 IP 来封装 Layer 2 frame,并通过该 IP interface 传输和接收封装后的 VxLAN 数据包。
NOTE:VxLAN 环境需要支持多播(IPv6)和组播(IPv4),因为 VxLAN 需要这两个协议来发现目标 MAC 地址,所以首先两个 VTEP 启动的时候需要加入到同一个组播组,通过 IGMP 协议。
上图 Host-A 和 Host-B 位于 VNI 10 的 VxLAN Network,通过 VTEP-1 和 VTEP-2 之间建立的 VxLAN 隧道通信。数据传输过程如下:
Host-A 向 Host-B 发送数据时,Host-B 的 MAC/IP 作为数据报文的目标 MAC/IP,Host-A 的 MAC/IP 作为数据报文的源 MAC/IP,然后通过 VTEP-1 将数据发送出去。
VTEP-1 从自己维护的 MAC/IP 映射表中找到 MAC-B 对应的 VTEP-2,然后执行 VxLAN 封装,依次加上 VxLAN Header、UDP Header、IP Header(外层 IP)、Frame Header(外层 MAC)。此时 IP Header 的目标地址为 VTEP-2 的 IP,源地址为 VTEP-1 的 IP。同时由于下一跳是 Router-1,所以 Frame Header 的目标地址为 Router-1 的 MAC。
数据报文从 VTEP-1 发送出后,外部网络的路由器会依据 IP Header 进行路由,依据修改 Frame Header 的 MAC 地址进行传输,最后到达与 VTEP-2 连接的路由器 Router-2。
Router-2 将数据报文发送给 VTEP-2。VTEP-2 负责解封数据包,依次解析 Frame Header、IP Header、UDP Header 和 VxLAN 头,最终得到被封装到最里层的 “数据” —— 以 Host-A 的 MAC/IP 作为源 MAC/IP 以 Host-B 的 MAC/IP 作为目标 MAC/IP 的内存数据报文。VTEP-2 最后再依据内层数据报文的目标 MAC 地址将数据报文发送给 Host-B。
整个过程中,VTEP-1 和 VTEP-2 都学习到了一条知识(记录),Host-A 的 MAC 归 VTEP-1 管,Host-B 的 MAC 归 VTEP-2 管,以后两个 Host 通信的时候,不需要再通过 Flood and Learn(洪泛和自适应)来询问某个 Host 归谁管了,直接发送即可。
VTEP 可以由专有硬件来实现,也可以通过纯软件实现。目前比较成熟的 VTEP 软件实现有:
在 Linux 上实现的 VTEP 的工作流程:
基于 VxLAN 的 Overlay 网络在 L3 IP Underlay 网络之上构建了一层 L2 Overlay 网络,通过 VTEP 隧道机制传输 L2 包。例如下图中,原有的交换机网络不变,服务器之间通过 Overlay 网络实现了跨 Leaf 交换机的 L2 网络。这样,在 Overlay 网络中,服务器可以任意部署,而不用考虑现有网络的架构。
一个完整的, 基于 VxLAN Overlay 的 Spine-Leaf 网络架构如下图所示。这种网络架构称为 VxLAN Fabric,通常有两种实现方式:一种是基于原始的 Flood & Learn 模式,与传统 L2 网络类似;另一种是基于 MP-BGP EVPN 作为控制层。在该架构中的 VM 并不知道 VxLAN Overlay 的存在,VM 只是把 Ethernet Frame 发出来。待 Leaf 交换机上的 VTEP(VxLAN Overlay,需要在 Leaf 交换机上集成 VTEP)接收到 VM 的 Ethernet Frame 后,就会自动的将其封装成 VxLAN 数据包(本质是一个 UDP 包),然后在原有的 Spine-Leaf 的 Underlay 网络上进行 L3 传输。
基于 VxLAN Overlay 的 Spine-Leaf 网络架构就是通过这种方式来打破了大二层网络的限制,即将 L2 广播域限制在了 Leaf 节点上,又将 POD 的范围扩展到了整个 Overlay。
VxLAN 是用于实现大型云计算和数据中心的网络二层互通技术,其本身没有控制平面,所以单存的 VxLAN 组网是通过 Flood and Learn(洪泛和自适应)来完成转发数据之前的表项学习的。因此 VxLAN 数据转发前表项学习的泛洪流量成为了一个重要难题,好在后来制定 VxLAN 的控制面(CP)标准 BGP EVPN(RFC7432)。从此,VxLAN 基于 BGP EVPN 控制层学习 L2 和 L3 的可达信息,通过 EVPN 完成在 VxLAN 转发数据报文前 ARP 表项学习,主机路由学习和 VTEP 自动发现,VXLAN+EVPN 成为云数据中心环境下网络的首选技术,为实现数据中心虚拟化、集群和云部署大二层网络奠定夯实了网络基础。
Flood and Learn 与 BGP EVPN 的对比:
可见,BGP EVPN 主要提供以下几个功能:
通过 MP-BGP 宣告主机的 MAC/IP:把两个 VTEP 节点看成是两个 PE 设备,两个 PE 设备建立 MP-BGP 从而实现路由传递。通过 EVPN Type-2 路由(MAC/IP 路由)将主机 MAC/IP 信息传递至远端 VTEP。
通过 MP-BGP 实现 VTEP Peer 自动发现和认证:通过 EVPN Type 3 路由(Inclusive Multicast 路由)在 VxLAN 控制平面中自动发现 VTEP 和动态建立 VxLAN 隧道。在 VTEP 之间互相传递二层 VNI 和 VTEP IP 地址信息。如果对端 VTEP IP 是三层路由可达,则建立一条 VxLAN 隧道。
分布式网关: 完成 VLAN 与 VNI 的映射,然后将所有的 VTEP 上针对 SVI(主机或者虚拟主机的网关)都配置相同的 Anycast Gateway vIP/vMAC。无论主机或虚拟机连接到哪一个 VTEP(Leaf 节点),主机或者虚拟机的网关信息都不变。
ARP 抑制:Host-1 想跟 Host-2 通信,Host-1 就必须知道 Host-2 的 ARP。通常,VTEP-1 收到了 Host-1 发来的 ARP Request,VTEP-1 不会着急忙慌的将这个 ARP Request 发出去。它会先查自己本地的缓存表,如果本地有 Host-2 的信息,则 VTEP-1 将这个 ARP Request 拦截并给 Host-1 回复一个 Host-2 的 ARP 信息。这就是 ARP 抑制,避免了广播流量在 Transit 网络中大量传播,消耗资源。
头端自动发现的入站复制:在 Flood and Learn 机制下,BUM(broadcast, unknown unicast and multicast)流量会通过 Underlay 组播的形式发送。有了 BGP EVPN 就不再需要了。