全面解讀EVPN VxLAN Overlay SDN 技術(shù)原理

2023-05-12 10:07:11 來源:SDNLAB

VxLAN 數(shù)據(jù)面封裝協(xié)議


【資料圖】

2011 年 8 月,主要由 VMware 與 Cisco 公司草擬并由 IETF 發(fā)布了 RFC 7348 草案《Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks》。 VxLAN(Virtual Extensible Local Area Network,虛擬擴展本地局域網(wǎng))是 IETF 定義的 NVO3(Network Virtualization over Layer 3)標準技術(shù)之一,從名字可以看出,VxLAN 最初定位于對傳統(tǒng) VLAN協(xié)議的一種增強替代方案。本質(zhì)是一種 Tunneling(隧道)網(wǎng)絡(luò)傳輸技術(shù),又稱為 Overlay 網(wǎng)絡(luò),特點是將 L2 Frame 封裝到 UDPVxLAN Header 中,并在 L3 IP 網(wǎng)絡(luò)中進行傳輸(L2 over L3)。 通過 VxLAN 技術(shù)可以將處于不同 L3 Subnets 的 Underlay 網(wǎng)絡(luò)設(shè)備整合到一個邏輯上的 Overlay 網(wǎng)絡(luò)中。對于 Overlay 網(wǎng)絡(luò)的終端用戶而言,這些網(wǎng)絡(luò)設(shè)備似乎 “真實” 地部署在了同一個 L2 數(shù)據(jù)鏈路層網(wǎng)絡(luò)中,以此來適應大規(guī)模云計算多租戶隔離網(wǎng)絡(luò)的需求。

VxLAN 組網(wǎng)拓撲介紹

如上圖所示,首先介紹構(gòu)建一個 VxLAN 網(wǎng)絡(luò)所需要的組成部分,包括以下 3 組核心元素:

NVE / VTEP / VxLAN Tunnel

VxLAN L2 Gateway / L2 VNI / BD

VxLAN L3 Gateway / L3 VNI / VRF

NVE / VTEP / VxLAN Tunnel

在抽象的 Overlay 網(wǎng)絡(luò)中,NVE(Network Virtualization Edge,網(wǎng)絡(luò)虛擬邊緣節(jié)點)是一個處于 Underlay 網(wǎng)絡(luò)和 Overlay 網(wǎng)絡(luò)交界處的邊緣設(shè)備,提供網(wǎng)絡(luò)虛擬化功能,用于銜接 2 個不同的網(wǎng)絡(luò)類型。 根據(jù)具體的組網(wǎng)環(huán)境,NVE 可以是主機中運行的一個虛擬網(wǎng)元,也可以是一個物理網(wǎng)元(e.g. Spine/Leaf 交換機)。在本文中主要討論硬件NVE 的情況。

?軟件 NVE常見的有 OvS Tun Bridge 和 LinuxBridge + Tun 虛擬隧道網(wǎng)卡設(shè)備。

?硬件 NVE常見的有 Spine-Leaf 交換機設(shè)備。 在具體的 VxLAN Overlay 網(wǎng)絡(luò)中,NVE 需要具備 VTEP(VxLAN Tunnel Endpoints,隧道端點)功能,用于完成 VxLAN 協(xié)議棧的封裝/解封裝。兩個 VTEP(local-VTEP 和 remote-VTEP)之間具有 Underlay IP 路由可達性,繼而可以構(gòu)造一個 L3 之上的 VxLAN Tunnel。 區(qū)別于 VLAN 使用 VLAN ID 來隔離二層網(wǎng)絡(luò),VxLAN 使用了 VNI(VXLAN Network Identifier,VXLAN 網(wǎng)絡(luò)標識符)來作為隔離標記。在一個 VxLAN Tunnel 中,可用于傳輸若干個由 VNI 進行隔離的 VxLAN 虛擬網(wǎng)絡(luò)。 另外,與 VLAN 網(wǎng)絡(luò)隔離需要通過 L3 Gateway 來互聯(lián)互通類似,在 VxLAN 網(wǎng)絡(luò)隔離中同樣需要 VxLAN Gateway 來實現(xiàn) VxLAN 虛擬網(wǎng)絡(luò)與其他類型網(wǎng)絡(luò)之間的互聯(lián)互通,而且情況會更加復雜。根據(jù)用途的區(qū)別,VxLAN Gateway 大體上可以分為 VxLAN L2 Gateway 和 VxLAN L3 Gateway 這 2 種類型,對應的 VNI 也根據(jù)用途被細分為 L2 VNI 和 L3 VNI 這 2 種類型。

VxLAN L2 Gateway / L2 VNI / BD

VxLAN L2 Gateway 用于實現(xiàn) VxLAN 和 VLAN 之間的互聯(lián)。 在 Leaf NVE 中,為了實現(xiàn) VxLAN L2 Gateway 的 L2 隔離和轉(zhuǎn)發(fā)而引入了 BD(Bridge Domain)的概念,它是一個可配置的二層廣播域,類似于一個虛擬網(wǎng)橋設(shè)備。在新建一個 BD Instance 時,通常會將 BD Instance、L2 VNI、Local VLAN ID 配置為一一對應,并且在一個 BD Instance 中會同時存在 2 種類型的接口:

Overlay 側(cè)接口

是一個對內(nèi)的二層接口設(shè)備,更準確的說是一個 Host 上聯(lián) Leaf Port 的二層子接口設(shè)備(e.g. CloudEngine VAP),具有同一個 VLAN ID 的下掛終端(VM/Host)的 Original L2 Frame 會從此接口進入到 VTEP 中進行后續(xù)的封裝。

Underlay 側(cè)接口

是一個對外的三層接口設(shè)備,會被分配一個 Underlay IP,與物理網(wǎng)絡(luò)相連。在 Underlay 網(wǎng)絡(luò)中的多個 VTEP 之間具備 IP 路由可達性,用于構(gòu)建 VxLAN Tunnel。被 VTEP 封裝之后的 VxLAN 封裝包會從此接口流出進入 VxLAN Tunnel 傳輸。 另外,BD Instance 為了能夠 “縫合“ Local VLAN 和 VxLAN Tunnel 這兩段網(wǎng)絡(luò),維護了 VID-VNID 映射關(guān)系。通過這樣的方式,VxLAN L2 Gateway 就將 Local VLAN 作為了 VxLAN Tunnel 的接入點,所有加入到 Local VLAN 中的終端(VM/Host)L2 流量,就會進入到對應的 VxLAN Tunnel 中。

VxLAN L3 Gateway / L3 VNI / VRF

VxLAN L3 Gateway 用于實現(xiàn)下列 2 種互聯(lián)場景:

兩個 VNI 不同的 VxLAN 虛擬網(wǎng)絡(luò)之間的互聯(lián)互通。

VxLAN 虛擬網(wǎng)絡(luò)和外部 IP 網(wǎng)絡(luò)之間的互聯(lián)互通。

可見,VxLAN L3 Gateway 主要提供了 L3 隔離和轉(zhuǎn)發(fā)功能,具體沿用了 L3 VPN Instance 中的 VRF 技術(shù)。每個 VRF 都具有自己的 Route Tables,類似于 Linux Network Namespace,同時維護了 VRF 和 L3 VNI 的映射關(guān)系,以此在 VxLAN L3 Gateway 層面實現(xiàn)了對不同租戶之間的 L3 隔離。 另外,在常見的 Spine-Leaf 數(shù)據(jù)中心網(wǎng)絡(luò)架構(gòu)中,根據(jù)將 VxLAN L3 Gateway 部署在 Spine 或者部署在 Leaf 上的不同,又可以再細分為 2 種不同的 VxLAN 組網(wǎng)方案:

集中式 VxLAN L3 Gateway 組網(wǎng)方案

分布式 VxLAN L3 Gateway 組網(wǎng)方案

下圖中概述性的列舉了這 2 種組網(wǎng)方案的異同。

集中式 VxLAN L3 Gateway 組網(wǎng)方案

在分布的 Leaf 上部署 VxLAN L2 Gateway 功能,在集中的 Spine 上部署 VxLAN L3 Gateway 功能。這意味著所有跨網(wǎng)絡(luò)之間的流量都需要經(jīng)過 Spine 進行轉(zhuǎn)發(fā),包括:VxLAN 虛擬網(wǎng)絡(luò)之間,以及 VxLAN 虛擬網(wǎng)絡(luò)與外部 IP 網(wǎng)絡(luò)之間的流量。 該方案的優(yōu)點是跨網(wǎng)絡(luò)流量集中管理,簡化網(wǎng)關(guān)部署和管理。而缺點是:

轉(zhuǎn)發(fā)路徑并非最優(yōu)

跨網(wǎng)絡(luò)之間的流量都需要在 Spine 上進行 L3 繞行,這樣就導致了 Leaf 與 Spine 之間的鏈路上存在冗余的報文,額外占用了大量的帶寬。

Spine 的 ARP 表項壓力大

所有通過 L3 轉(zhuǎn)發(fā)的 ARP 表項(MAC-IP)都存儲在 Spine 上,當終端的數(shù)量越來越多時,Spine 就容易成為網(wǎng)絡(luò)瓶頸。 所以該方案適用于小型組網(wǎng)環(huán)境。

分布式 VxLAN L3 Gateway 組網(wǎng)方案

在分布的 Leaf 上同時部署了 VxLAN L2 和 L3 Gateway,而 Spine 只作為常規(guī) L3 轉(zhuǎn)發(fā)節(jié)點并不需要感知 VxLAN 隧道的存在。具有以下特性:

相同 VTEP 下跨網(wǎng)絡(luò)之間的流量在 Leaf 上完成 L3 轉(zhuǎn)發(fā)。

只有不同 VTEP 下跨網(wǎng)絡(luò)之間的流量需要經(jīng)過 Spine 完成 L3 轉(zhuǎn)發(fā)。

另外,只要求 Leaf 學習下掛終端的 ARP 表項,從而解決了 Spine 規(guī)格帶來的容量瓶頸問題。所以該方案適用于中大規(guī)模(5000 臺服務(wù)器及以上)的高性能網(wǎng)絡(luò)。 而缺點是網(wǎng)關(guān)部署、故障定位及網(wǎng)絡(luò)運維相對復雜,通常需要結(jié)合 EVPN Control Plane 來完成一系列的自動化配置工作,例如:基于 BGP Peer 的 VTEP 自動發(fā)現(xiàn)、VxLAN Tunnel 自動建立,ARP 表項自動生成等等。

VxLAN 協(xié)議棧解析

VxLAN 的協(xié)議棧比較簡單,定義了一種 MAC-in-IP 的報文封裝格式。

Original L2 Frame

一個原始且完整的 L2 數(shù)據(jù)幀,是業(yè)務(wù)層發(fā)出(通常是 VM)的實際 Payload 數(shù)據(jù)。

VxLAN Header(8Bytes)

將 Original L2 Frame 封裝到 VxLAN Header(8Bytes)成為 Overlay Segment。

VxLAN Flags(8bits):標記字段,如果 VNI 有效,則固定取值為 00001000。

Reserved(24bits):保留字段,固定取值為全 0。

VNI(VxLAN Network Identifier,24bits):最多支持 16777216(1600 萬)個二層隔離網(wǎng)絡(luò)。根據(jù)用途的不同可分為 L2 VNI 和 L3 VNI。

Reserved(8bits):保留字段,固定取值為全 0。

UDP Header(8Bytes)

是 Overlay 和 Underlay 的分界線。UDP 協(xié)議由于其高效率、低占用的特性常被用作隧道封裝協(xié)議的傳輸層。

UDP srcPort(16bits):由 local-VTEP 通過對 Original L2 Frame 進行 HASH 計算后得出,該特性使得 VxLAN 封裝包在 Receive Site 具備了可行的 HASH-base 負載均衡處理能力(e.g. ECMP 等價路由)。

UDP dstPort / VxLAN Port(16bits):缺省取值為 UDP 4789,根據(jù)具體設(shè)備型號可能支持配置更改。

UDP Length(16bits):指示一個 UDP 數(shù)據(jù)報的總長度。

Checksum(16bits):檢驗字段。

Outer IP Header(20Bytes)

是 Underlay 的 L3 IP Header 封裝。

srcIP 是 local-VTEP 的 IP 地址。

dstIP 可能是 remote-VTEP 的 IP 單播地址,也可能是用于 BUM 流量的多播/組播地址。

Outer MAC Header

是 Underlay 的 L2 Frame 封裝。dstMAC 和 srcMAC 地址視乎于具體的 Underlay 網(wǎng)絡(luò)拓撲。

srcMAC 是 local-VTEP 的 MAC 地址;

dstMAC 視乎于具體的 Underlay 以太網(wǎng)絡(luò)拓撲。

VxLAN 數(shù)據(jù)面轉(zhuǎn)發(fā)原理

同 VNI 的 BUM 報文轉(zhuǎn)發(fā)場景

BUM(Broadcast,Unknown-unicast,Multicast)是網(wǎng)絡(luò)中常見的 3 種流量類型,分別表示:

廣播流量(Broadcast)

指發(fā)送到網(wǎng)絡(luò)中所有設(shè)備的流量,例如:ARP 報文、DHCP 報文等。

未知單播流量(Unknown-unicast)

指發(fā)送給網(wǎng)絡(luò)中不存在的設(shè)備的流量,例如:發(fā)往一個錯誤的 MAC 地址的報文等。當交換機收到一個未知目的 MAC 地址的報文時,它需要向除了源端口外的所有端口轉(zhuǎn)發(fā)該報文,以便讓目的主機能夠收到該報文并發(fā)送響應。因此,未知單播報文也是廣播報文的一種,也會對網(wǎng)絡(luò)帶寬造成浪費。

組播流量(Multicast)

指發(fā)送給一組目標設(shè)備的流量,這些設(shè)備加入到了一個組播組,組播流量的目的地址也是特定的組播地址,因此對網(wǎng)絡(luò)帶寬的占用相較于廣播更少一些。 在網(wǎng)絡(luò)中,對于不同類型的 BUM 報文,交換機的處理方式也不同,例如,對于 Broadcast 和 Multicast 報文,交換機會將它們轉(zhuǎn)發(fā)到所有的端口,而對于 Unknown-unicast 報文,則只會將它們轉(zhuǎn)發(fā)到除源端口外的所有端口。基于這樣的特性,為了簡單理解,我們可以將 BUM 報文統(tǒng)稱為 Flooding 流量。 在大規(guī)模的 VxLAN 場景中,由于多個 Overlay 虛擬網(wǎng)絡(luò)共享 Underlay 物理網(wǎng)絡(luò),多租戶情況下,這些 Flooding(洪泛)流量對物理帶寬資源的占用尤為突出,需要特別的注意。 物理網(wǎng)絡(luò)設(shè)備對 BUM 的處理方式(數(shù)據(jù)包復制)大體上有 2 種:

頭端復制(Head-End Replication,HER)

在源頭(即發(fā)送端所在的端口)將 BUM 流量復制到多個目的地,每個目的地對應著一個收件人(e.g. 一個接收組播流的客戶端)。這種方式需要在源端口上復制和轉(zhuǎn)發(fā)每個數(shù)據(jù)包,因此可能會導致性能問題和鏈路擁塞。頭端復制適用于小規(guī)模網(wǎng)絡(luò),常用于數(shù)據(jù)中心的二層網(wǎng)絡(luò)中。

核心復制(Core Replication,CR)

將 BUM 流量復制到一組專用的核心設(shè)備,這些設(shè)備負責將流量復制到所有需要它的接收方(e.g. 接收組播流的客戶端)。這種方式通過在核心層進行復制,避免了在源端口上進行大量的復制和轉(zhuǎn)發(fā),因此對網(wǎng)絡(luò)性能的影響更小。核心復制適用于大規(guī)模網(wǎng)絡(luò),常用于廣域網(wǎng)環(huán)境中。 對應的 VxLAN 硬件 NVE 同樣有 2 種 BUM 報文處理方式:

VxLAN 頭端復制 + Underlay 單播路由

由 local-VTEP(源頭設(shè)備)負責對終端(VM/Host)發(fā)出的 BUM 報文進行復制,并采用 Underlay 單播路由的方式,經(jīng)過 VxLAN Tunnels 將 BUM 傳遞到其他多個 remote-VTEPs 接收。remote-VTEP 接收到 BUM 報文之后,就不再 Flooding,避免了環(huán)路。

再展開一下 Local LAN 流量接入 VxLAN Tunnel 的流程細節(jié)。如下圖所示,當 VTEP 接收到終端的攜帶 VLAN 的 BUM 之后,首先會通過 VLAN ID 匹配到對應的 BD,然后在該 BD 內(nèi)查找 VNI-Tunnel List,最后為 BUM 封裝上不同的 OverlayUnderlay Header 之后向 VNI-Tunnel List 指定的所有 VxLAN Tunnels 發(fā)出。

VxLAN 核心復制 + Underlay 組播路由

首先將網(wǎng)絡(luò)中所有的 VTEPs 設(shè)備都加入到同一個組播組中,部署專門的核心層設(shè)備并通過組播路由協(xié)議(e.g. PIM)或 IPv6 多播路由協(xié)議(e.g. IGMP )與 VTEPs 建立一個組播信道和相應的組播轉(zhuǎn)發(fā)表項。當終端發(fā)出 BUM 報文后,local-VTEP 會為其封裝好組播目的 IP 地址,然后進入核心層設(shè)備進行數(shù)據(jù)復制,并采用 Underlay 組播的方式,將 BUM 傳遞到同一個組播組內(nèi)的其他 remote-VTEPs 接收。

同 VNI 的單播報文轉(zhuǎn)發(fā)場景

同 VNI 的單播報文轉(zhuǎn)發(fā)場景中,一個 IP 單播報文的發(fā)送實際上可以拆分為 3 次轉(zhuǎn)發(fā)流程,分別是:

ARP Request 廣播轉(zhuǎn)發(fā);

ARP Reply 單播轉(zhuǎn)發(fā);

IP 單播轉(zhuǎn)發(fā)。

下面以較為簡單的 “VxLAN 頭端復制 + Underlay 單播路由“ 方式為例進行介紹:VM_A、VM_B、VM_C 同屬于 VNI 5000,也同屬于 10.1.1.0/24 子網(wǎng)。此時,VM_A 想與 VM_C 進行首次通信

ARP Request 廣播轉(zhuǎn)發(fā)流程

首次通信,VM_A 沒有 VM_C 的 MAC 地址,所以首先進行 ARP Request 廣播轉(zhuǎn)發(fā)流程,請求獲取 VM_C 的 MAC 地址。

VM_A 發(fā)送 srcMAC 為 MAC_A、dstMAC 為 “全 F(廣播)”、srcIP 為 IP_A、dstIP 為 IP_C 的 ARP Request 廣播報文,請求獲取 VM_C 的 MAC 地址。

VTEP_1 收到 ARP Request 后,根據(jù)二層子接口上的 VLAN 和 DB 配置判斷報文需要進入 VxLAN Tunnel。確定報文所屬 VNID 后,VTEP_1 首先會自學習 MAC_A、VNID 和 Port_1(二層子接口對應的物理接口)的映射關(guān)系,并記錄在本地 MAC Table 中。之后,VTEP_1 會根據(jù)頭端復制列表對報文進行復制,并分別進行 OverlayUnderlay Header 封裝。

封裝的 Outer srcIP 地址為 VTEP_1 的 IP 地址,Outer dstIP 地址為 remote-VTEP(VTEP_2 或 VTEP_3)的 IP 地址;Outer srcMAC 地址為 VTEP_1 的 MAC 地址,而 Outer dstMAC 地址為去往目的 IP 的網(wǎng)絡(luò)中下一跳設(shè)備的 MAC 地址。

根據(jù) Outer MAC/IP 信息,在 Underlay IP 網(wǎng)絡(luò)中進行傳輸,直至到達 remote-VTEP。

報文到達 remote-VTEP 后,對報文進行解封裝,得到 VM_A 發(fā)送的 Original L2 Frame。同時,remote-VTEP 學習 VM_A 的 MAC 地址、VNID 和 VTEP_1 的 IP 地址的映射關(guān)系,并記錄在本地 MAC Table 中。之后,remote-VTEP 根據(jù)二層子接口上 BD 和 VLAN 配置對報文在 Local LAN 二層域內(nèi)進行廣播。

VM_B 或 VM_C 接收到 ARP Request 后,比較報文中的 dstIP 地址是否為本機的 IP 地址。VM_B 發(fā)現(xiàn) dstIP 不是本機 IP,故將報文丟棄;VM_C 發(fā)現(xiàn) dstIP 是本機 IP,則對 ARP Request 做出應答。

ARP Reply 單播轉(zhuǎn)發(fā)流程

VM_C 應答 ARP Reply 時,由于 VM_C 已經(jīng)知道了 VM_A 的 MAC 地址,所以 ARP Reply 報文為單播報文。報文的 srcMAC 為 MAC_C,dstMAC 為 MAC_A, srcIP 為 IP_C、dstIP 為 IP_A。

VTEP_3 接收到 VM_C 發(fā)送的 ARP Reply 報文后,同樣先自學習 MAC_C、VNI 和 Port_3 的映射關(guān)系,并記錄在本地 MAC Table 中。然后 VTEP_3 對報文進行封裝。

封裝的 Outer srcIP 地址為 VTEP_3 的 IP 地址,Outer dstIP 地址為 VTEP_1 的 IP 地址;Outer srcMAC 地址為 VTEP_3 的 MAC 地址,而 Outer dstMAC 地址為去往目的 IP 的網(wǎng)絡(luò)中下一跳設(shè)備的 MAC 地址。

根據(jù) Outer MAC/IP 信息,在 Underlay IP 網(wǎng)絡(luò)中進行傳輸,直至到達 remote-VTEP。

報文到達 VTEP_1 后,VTEP_1 對報文進行解封裝,得到 VM_C 發(fā)送的 Original L2 Frame。同時,VTEP_1 學習 VM_C 的 MAC 地址、VNI 和 VTEP_3 的 IP 地址的映射關(guān)系,并記錄在本地 MAC Table 中。然后 VTEP_1 將解封裝后的報文發(fā)送給 VM_A。

至此,VM_A 和 VM_C 均已學習到了對方的 MAC 地址。之后,VM_A 和 VM_C 將采用 IP 單播方式進行轉(zhuǎn)發(fā)。轉(zhuǎn)發(fā)流程類似,這里不再贅述。

不同 VNI 的單播報文轉(zhuǎn)發(fā)場景

不同 VNI 的單播報文轉(zhuǎn)發(fā)場景,又稱為 “跨 VxLAN 子網(wǎng)的單播報文轉(zhuǎn)發(fā)場景“,需要結(jié)合上文中提到的 VxlAN L3 Gateway 來共同完成。 這里以較為簡單的 “集中式 VxLAN L3 Gateway 組網(wǎng)方案“ 來進行介紹:Spine 提供 L3 Forwarding 功能,VM1 和 VM4 處于不同的 VxLAN 子網(wǎng),VM1 的網(wǎng)關(guān)是 VSI-Interface10,VM4 的網(wǎng)關(guān)是 VSI-Interface20,并分別接入到不同的 VSI(Virtual Switching Instance,虛擬交換實例)中,VSI 具有傳統(tǒng)以太網(wǎng)交換機的所有功能。 假設(shè)現(xiàn)在已經(jīng)不是首次通信,VM1、VM4、VSI-Interface10、VSI-Interface20 之間的 MAC 地址都已經(jīng)互相學習到了。此時 VM1 向 VM4 發(fā)出跨子王的 IP 單播報文。

VM1 先將報文發(fā)送給 VSI-Interface10。

Leaf-A 收到 VM1 發(fā)來的報文,識別此報文屬于 VxLAN 10,查找 dstMAC G10 的表項,然后對報文進行 VxLAN 封裝后從 Tunnel2 發(fā)送出去。

Spine-C 收到 Leaf-A 發(fā)來的報文,進行 L3 Forwarding 處理:

發(fā)現(xiàn) Outer dstIP 是自己,于是對報文進行解封裝。

解完封裝后,Spine-C 發(fā)現(xiàn) Original L2 Frame 的 dstMAC 是本機 VSI-interface10 的 MAC、dstIP 是 IP4,于是根據(jù)路由表查找 IP4 的下一跳;

發(fā)現(xiàn)一下跳為 Leaf-B、出接口為 VSI-Interface20,再查詢 ARP 表項,并將 Original L2 Frame 的 srcMAC 修改為 VSI-interface20 的 MAC 地址,將 dstMAC 修改為 VM4 的 MAC 地址。

報文到達 VSI-interface20 接口時,識別到需要進入 VxLAN 20,所以根據(jù) MAC 表對報文進行封裝。

封裝的 VNI 為 20,Outer srcIP 為 Spine-C 的 IP 地址,Outer dstIP 為 Leaf-B 的 IP 地址;Outer srcMAC 為 Spine-C 的 MAC 地址,Outer dstMAC 為去往目的 IP 的網(wǎng)絡(luò)中下一跳設(shè)備的 MAC 地址。

封裝后的報文,根據(jù) Outer dstMAC/dstIP 信息,在 Underlay IP 網(wǎng)絡(luò)中進行傳輸,直至到達 remote-VTEP。

Leaf-B 收到 Spine-C 發(fā)來的報文后,解封裝,得到 Original L2 Frame。在 VxLAN 20 內(nèi)找到 dstMAC 為 MAC4 的表項,并將報文從對應的接口和 VLAN 中發(fā)送出去。

最終 VM4 收到了來自 VM1 的報文。

VxLAN/UDP 的 MTU 問題UDP(User DatagramProtocol,用戶數(shù)據(jù)報協(xié)議),是一種無連接的、非可靠的傳輸層協(xié)議,常被應用于 Tunnel 協(xié)議的傳輸層。主要原因有以下幾點:

速度快

只要應用進程將 Payload 傳給 UDP,UDP 將此數(shù)據(jù)打包后就立刻傳遞給 IP 層,而無需作其他額外的機制處理。

首部開銷小

相較于 TCP Header 都有 20Bytes 的首部開銷,UDP Header 只有 8Bytes。

負載均衡特性

因為無連接,所以 UDP srcPort 可以使用 HASH 計算值,該特性能夠在各個網(wǎng)絡(luò)環(huán)節(jié)中進行負載均衡優(yōu)化,例如:ECMP 傳輸環(huán)節(jié),CPU隊列綁定收包環(huán)節(jié)等。 但相對的,UDP 也存在一個關(guān)鍵的 MTU 分片問題,即:假如 UDP Datagram 進行分片,那么只有 First Fragment 是包含 UDP Header 的,一旦丟包就會導致 Receiver 無法重組出一個完整的 Datagram。如下圖所示。

所以,當采用 UDP 作為傳輸層時,需要十分注意 MTU 的設(shè)置,才能帶來更好的傳輸性能以及可靠性。根據(jù) VXLAN RFC7348 中的建議,VxLAN 封裝包不應該分片,否則在接收端 VTEP 上會丟棄分片的報文,導致無法正確解封裝。

通常的,VM/Host 的默認 MTU 是 1500Bytes,即 Original L2 Frame 最大為 1500Bytes。在 VTEP 封裝上 VxLAN Overhead 的 50Bytes(VxLAN header + UDP Header + Outer IP/MAC Header)之后,VxLAN 封裝包的總長度就達到了 1550Bytes。 如果希望不對 VxLAN 封裝包進行分片,可以通過 2 種常規(guī)手段來實現(xiàn):

減小 VM/Host 的 MTU。

加大 Underlay 網(wǎng)絡(luò)的 MTU。

根據(jù)實際的場景,需要考慮采用不同的實現(xiàn)方式。

DCN 場景中的 VxLAN MTU

在 DCN 場景中,由于運營商對整網(wǎng)環(huán)境具有把控能力,所以通常會采用從 “業(yè)務(wù)需求出發(fā)“ 的原則,即:調(diào)整 Underlay MTU 以適應 VM/Host MTU 的需求。所以,極端情況下,Underlay MTU 可能被設(shè)置為 9000Bytes。

DCI 場景中的 VxLAN MTU

并跨越兩個地理位置分離的 DC(數(shù)據(jù)中心),通過 L3 路由廣域網(wǎng)(WAN)或其他數(shù)據(jù)中心互連(DCI)傳輸連接的場景中。因為 VxLAN 封裝包需要經(jīng)過并非完全可控的第三方承載網(wǎng)絡(luò),所以對 MTU 的規(guī)劃需要更加嚴謹。所以通常采用 “從適配性出發(fā)“ 的原則,即:對 VM/Host MTU 進行控制,確保在整個端到端的承載網(wǎng)中均小于 Underlay MTU。 以一個內(nèi)層 ping 包(長度為 1422Bytes)為例,計算各層封裝的長度如下表,發(fā)現(xiàn)最終的 VxLAN 封裝包大于 1500Bytes,此時就需要修改 Inner MTU 以及 Inner App 的長度值,使其小于等于 1500Bytes。

EVPN MP-BGP 控制面協(xié)議

EVPN (EthernetVPN)是一個 L2 VPN(L2-in-L3)協(xié)議,最初的設(shè)計目的是為了替換落后的 VPLS(Virtual Private LAN Service),號稱為 Next Generation L2 VPN(下一代的 L2 VPN)。 后來,EVPN 逐漸演進為一套通用的 Control Plane 協(xié)議,而不是具體為了承載業(yè)務(wù)的 Data Plane 協(xié)議。EVPN Control Plane 可以與多種不同的 Data Plane 技術(shù)(包括:MPLS、SRv6、VxLAN 等)結(jié)合使用實現(xiàn)一套完整的數(shù)控分離 SDN 方案。 EVPN Control Plane 的全稱為 EVPN MP-BGP(Ethernet VPN base on Multi-Protocols BGP),是一種基于 MP-BGP 協(xié)議可擴展性的實現(xiàn)方式,增加新的協(xié)議類型和路由類型,包括:

L2 VPN AFI(Address Family Identifier,地址族標識)

EVPN SAFI(Subsequent Address Family Identifier,子地址族標識)

EVPN NLRI(Network Layer Reachability Information,網(wǎng)絡(luò)層可達性信息)

EVPN VxLAN SDN 方案

在引入 EVPN 作為 VxLAN 的 Control Plane 之前,需要通過手工的方式建立靜態(tài) VxLAN 隧道,即:手動指定 VxLAN Tunnel 的 local-VTEP 和remote-VTEP 的 IP 地址對,并構(gòu)建 Tunnel。手工靜態(tài)配置的方式在集中式 VxLAN L3 Gateway 組網(wǎng)方案中或許還能夠勉強接受,但在大規(guī)模的分布式 VxLAN L3 Gateway 組網(wǎng)方案中會出現(xiàn)較為嚴峻的挑戰(zhàn),主要有 2 個方面:

網(wǎng)絡(luò)擴展困難:網(wǎng)絡(luò)變更需要手動修改集群配置,容易出現(xiàn) “雪花設(shè)備“ 故障。

BUM 洪泛流量占比大:所有 VTEP 都需要通過 Flood and Learn(洪泛和自學習)來完成數(shù)據(jù)轉(zhuǎn)發(fā)之前的 ARP 表項和主機路由表項學習。

為了解決這個問題,需要在 VxLAN 網(wǎng)絡(luò)中引入 Control Plane 方案來提供靈活的運維管理支撐。目前最為流行和成熟的組合就是 EVPN VxLAN(RFC6624),依托于 BGP 在 E-BGP 和 I-BGP 場景中的適配性,也使得 VxLAN 不僅局限于 DCN(數(shù)據(jù)中心網(wǎng)絡(luò))場景,還能應用于 DCI(數(shù)據(jù)中心互聯(lián))場景。

相應的,采用 EVPN 作為 VxLAN 的 Control Plane 帶來了 2 個核心優(yōu)勢:

EVPN 可實現(xiàn) VTEP 自動發(fā)現(xiàn)、VxLAN Tunnel 的自動建立,從而降低網(wǎng)絡(luò)運維的復雜度和提升了網(wǎng)絡(luò)可擴展性。

EVPN 可實現(xiàn) IP、MAC、VNI 等 ARP 和主機路由信息的自動宣告,從而有效減少了 BUM 泛洪流量。

EVPN VxLAN 的路由類型

EVPN 基于 MP-BGP NLRI 擴展引入了 5 種新的路由類型(Route Type),如下:

Type1. Ethernet Auto-Discovery Route(Ethernet 自動發(fā)現(xiàn)路由)

Type2. MAC/IP Advertisement Route(MAC/IP 通告路由)

Type3. Inclusive Multicast Ethernet Tag Route(集成多播 Ethernet Tag 路由)

Type4. Ethernet Segment Route(Ethernet 段路由)

Type5. IP Prefix Route(IP 前綴路由)

在 EVPN VxLAN 場景中,NVE(交換機)充當 PE 的角色,同時具備了 BGP Peer 和 VTEP 的功能,下文中統(tǒng)稱為 VTEP Peer。其主要應用了 Type2、Type3、Type5 這 3 種路由類型,下面重點介紹這些路由類型的定義和作用。

Type2:MAC/IP Advertisement Route(MAC/IP 通告路由)

Type2 Route 的 EVPN NLRI 字段如下: ?Route Distinguisher: 指示一個 EVPN Instance 的 RD 值,用于區(qū)分不同的 EVPN Instances。每個 EVPN Instance 都具有一個對應的 BD(二層廣播域)。 ?Ethernet Segment Identifier: EVPN 允許在同一物理網(wǎng)絡(luò)上創(chuàng)建多個虛擬網(wǎng)絡(luò),這些虛擬網(wǎng)絡(luò)被稱為 Ethernet Segment。而 Ethernet Segment Identifier 就是該虛擬網(wǎng)絡(luò)的唯一標識。在 VxLAN 場景中,ES 就是 VxLAN Tunnel,ESI 用于唯一標識一個 VxLAN Tunnel 的連接。

?Ethernet Tag ID指示當前設(shè)備配置的以太網(wǎng) VLAN ID。

?MAC Address Length指示該 Route 攜帶的 host-MAC 地址的長度。

?MAC Address指示該 Route 攜帶的 host-MAC 地址。

?IP Address Length指示該 Route 攜帶的 host-IP 地址的掩碼長度,為 32bits(IPv4)或 128bits(IPv6)。

?IP Address指示該 Route 攜帶的 host-IP 地址。

?MPLS Label1指示該 Route 攜帶的 L2 VNI,用于標識不同的 BD。

?MPLS Label2指示該 Route 攜帶的 L3 VNI,用于標識不同的 VRF(L3 VPN)。VxLAN 網(wǎng)絡(luò)中為了實現(xiàn)不同租戶之間的隔離,需要通過不同的 VRF 來隔離租戶的路由表。 從上述字段可見,Type2 Route 的關(guān)鍵特性就是支持對稱 IRB(Integrated Bridging and Routing,集成的橋接和路由),能夠同時發(fā)布 L2 MAC Switching 和 L3 IP Routing 信息,以此來支撐 VxLAN L2 和 L3 Gateway 應用場景。

基于這樣的特性,Type2 Route 非常適用于云計算虛擬機遷移的場景(MAC Mobility,MAC 移動性),可以有效避免了虛擬機遷移期間所帶來的 IP 地址更改,以及重新配置網(wǎng)絡(luò)的問題。例如:當一臺 VM 從 VTEP1 遷移到 VTEP2 時,VTEP2 會學習到該 VM 的 ARP 信息(通過 VM 發(fā)出的 gARP 實現(xiàn)),并生成 VM 對應的 Type2 Route,然后傳遞給 VTEP1。VTEP1 收到后,感知到 VM 的位置發(fā)生變化,觸發(fā) ARP 探測,當探測不到 VM 時,則會撤銷 VM 在本地的 ARP 和主機路由信息。

VTEP 應用 Type2 通告 host-MAC 地址

當 VTEP 是 VxLAN L2 Gateway 時,VTEP Peer 之間可以通過 Type2 Route 來互相學習對方的 host-MAC Table,包括:host-MAC、BD、Interface 等信息。 如下圖所示,Leaf1、Leaf2 是 VxLAN L2 Gateway,Host1、Host2 屬于同一個 VxLAN 子網(wǎng),Leaf1 向 Leaf2 通告它的 host-MAC Table。

Host1 通過特定的 Interface 和 BD 接入到 Leaf1 時,通常會觸發(fā) ARP、DHCP 等廣播流量。Leaf1 以此來學習到 Host1 對應的 Host1-MAC 并記錄在 BD 的 host-MAC Table 中。

隨后 Leaf1 向 Leaf2 發(fā)送 Type2 Route,攜帶了 EVPN Instance RD、Host1-MAC、L2 VNI、VTEP IP 等信息。

Leaf2 收到 Type2 Route 后,根據(jù) L2 VNI 匹配到相應的 BD,并將 Host1-MAC 保存在 BD 的 host-MAC Table 中。

VTEP 應用 Type2 通告 host-IP 精確路由

在 VxLAN 網(wǎng)絡(luò)中,要想實現(xiàn)跨網(wǎng)絡(luò)之間的三層互訪,就需要在 VxLAN L3 Gateway 中應用 L3 VPN Instance 和隔離的 Route Table 來完成 IP Routing。 當 VTEP 是 VxLAN L3 Gateway 時,VTEP Peer 之間可以通過 Type2 Route 來互相學習對方的 host-IP Table,包括:host-IPv4 /32 或 host-IPv6 /128 精確路由、Interface、L3 VNI 等信息。 以較為復雜的 “分布式 VxLAN L3 Gateway 組網(wǎng)” 場景為例。如下圖所示,Leaf1、Leaf2 同時作為 VxLAN L2/L3 Gateway,Host1、Host2 屬于不同的 VxLAN 子網(wǎng),Leaf1 向 Leaf2 通告它的 host-IP Table。 Host1 通過特定的 Interface 和 BD 接入到 Leaf1 時,通常會觸發(fā) ARP、DHCP 等廣播流量。

L2 Gateway 特性:學習到 Host1 對應的 Host1-MAC 并記錄在 BD 的 host-MAC Table 中。

L3 Gateway 特性:學習到 Host1 對應的 Host1-IP 并記錄在 L3 VNI 對應的 VRF 的 host-IP Table 中。

隨后 Leaf1 向 Leaf2 發(fā)送 Type2 Route,攜帶了 EVPN Instance RD、Host1-MAC、Host1-IP、L2 VNI、L3 VNI、VTEP IP 等信息。 Leaf2 收到 Type2 Route 后,根據(jù) L2 VNI 匹配到相應的 BD,并將 Host1-MAC 保存在 BD 的 host-MAC Table 中。

L2 Gateway 特性:根據(jù) L2 VNI 匹配到相應的 BD,并將 Host1-MAC 保存在 BD 的 host-MAC Table 中。

L3 Gateway 特性:根據(jù) L3 VNI 匹配到相應的 VRF,并將 Host1-IP 保存在 VRF 的 host-IP Table 中。

VTEP 應用 Type2 實現(xiàn) ARP 廣播抑制

同一個 VxLAN 子網(wǎng)屬于一個 “大二層“ 虛擬網(wǎng)絡(luò),子網(wǎng)內(nèi)的主機要互相通信就需要知道對方的 MAC 地址,傳統(tǒng)的方式是發(fā)出 ARP Request 廣播報文。而在 EVPN 場景中,則可以應用 Type2 實現(xiàn) ARP 廣播抑制,能夠有效減少 ARP 洪泛的流量。

首先,VxLAN L3 Gateway 之間通過 Type2 Route 互相宣告 ARP 表項信息(host-MAC/IP)。

然后,VxLAN L3 Gateway 通過傳遞 ARP 類型路由,將 ARP 表項信息傳遞給 VxLAN L2 Gateway。

最后,VxLAN L2 Gateway 開啟 ARP 代答功能后,就會根據(jù) ARP 表項信息生成 ARP 廣播抑制表,包括:host-IP、host-MAC、VTEP、VNI 等信息。

完成控制面的配置后,當 VxLAN L2 Gateway(e.g. Leaf1)再收到從 Host1 向 Host2 發(fā)出的 ARP Request 時,就會先查看自己的 ARP 廣播抑制表,發(fā)現(xiàn)有 Host2 的 MAC-IP 記錄,則直接將 ARP Request 報文中的廣播 MAC 地址替換為目的單播 MAC 地址(廣播變單播),然后原路 Reply,從而達到 ARP 廣播抑制的目的。

但需要注意的是,Type2 Route 和 ARP 廣播抑制只是減少了 ARP 洪泛流量,但不能完全避免,例如下面場景:

新上線的可能是 “靜默主機“,它不會自動觸發(fā) ARP、DHCP 等廣播流量,所以上掛 VTEP 不能被動學習其 MAC 地址。首次訪問 “靜默主機” 時,還是需要在 VxLAN 子網(wǎng)中廣播 ARP Request 報文來獲得對方的 MAC 地址。

在 VTEP 沒來及的學習到 ARP 廣播抑制表項的時候,也會按照正常的流程進行廣播。

Type3:Inclusive Multicast Ethernet Tag Route(集成多播 Ethernet Tag 路由)

通過應用 Type3 Route 可以實現(xiàn) VTEP Peers 的自動發(fā)現(xiàn)和認證,并在 VTEP Peer 之間互相傳遞 L2 VNI 和 VTEP IP 地址信息。 Type3 Route 的 EVPN NLRI 字段如下:

Route Distinguisher:指示 EVPN Instance 的 RD 值。

Ethernet Tag ID:指示當前設(shè)備配置的以太網(wǎng) VLAN ID。在 Type3 Route 中為全 0。

IP Address Length:指示該 Route 攜帶的 local-VTEP IP 地址的掩碼長度。

Originating Router"s IP Address:指示該 Route 攜帶的 local-VTEP IP 地址。

Flags:在 VxLAN 場景中,該字段沒有實際意義。

MPLS Label:指示該 Route 攜帶的 L2 VNI,用于標識不同的 BD。

Tunnel Type:指示該 Route 攜帶的隧道類型。在 VxLAN 場景中,該字段為 “6: Ingress Replication”,即頭端復制類型。

Tunnel Identifier:指示該 Route 攜帶的隧道信息。在 VxLAN 場景中,該字段也是 local-VTEP IP 地址。

VTEP 應用 Type3 建立頭端復制列表

前面提到 Type2 Route 只能 “抑制“ ARP 洪泛流量,但不能完全避免。這些不能避免的 BUM 流量,還是需要通過頭端復制或核心復制方式來進行廣播或組播。 以頭端復制為例,VTEP Peer 之間可以通過 Type3 Route 宣告來實現(xiàn)自動創(chuàng)建頭端復制列表,包括:L2 VNI、src-VTEP IP、dst-VTEP IP 等信息。如下圖所示,Leaf1、Leaf2、Leaf3 作為 VTEP,Leaf1 向 Leaf2、Leaf3 發(fā)送 Type3 Route。

在 Leaf1 上完成 VTEP IP、L2 VNI、EVPN Instance 等相關(guān)配置后,Leaf1 會向 Leaf2、Leaf3 分別發(fā)送 Type3 Route,攜帶了 L2 VNI、local-VTEP IP、EVPN Instance RD 等信息。

Leaf2、Leaf3 收到來自 Leaf1 的 Type3 Route 后:

如果 Leaf1 VTEP IP 三層路由可達,則建立一條 VxLAN Tunnel。

如果如果 remote-VNI 與 local-VNI 相同,則新建一個頭端復制表,用于后續(xù) BUM 報文廣播。

Type5:IP Prefix Route(IP 前綴路由)

Type3 Route 的 EVPN NLRI 字段如下:

Route Distinguisher

指示 EVPN Instance 的 RD 值。

Ethernet Segment Identifier

用于唯一標識一個 VxLAN Tunnel 的連接。

Ethernet Tag ID

指示當前設(shè)備配置的以太網(wǎng) VLAN ID。

IP Prefix Length

指示該 Route 攜帶的 IP Prefix 的掩碼長度。

IP Prefix

指示該 Route 攜帶的 IP Prefix,可以是精確路由(/32 或 /128),也可以網(wǎng)段地址(/0-32 或 /0-128),主要是傳遞網(wǎng)段路由。

GW IP Address

指示默認網(wǎng)關(guān)地址。該字段在 VxLAN 場景中沒有實際意義。

MPLS Label

指示該 Route 攜帶的 L3 VNI,用于標識不同的 VRF。

VTEP 應用 Type5 通告 host-IP 網(wǎng)段路由

Type5 Route 有 2 個主要的應用場景:

在沒有 IP 地址重疊的網(wǎng)絡(luò)規(guī)劃中,可以配置 VTEP 通過 Type5 Route 宣告 host-IP 網(wǎng)段路由,而不是 host-IP 精確路由,以此來有效減少 VxLAN L3 Gateway 設(shè)備的路由表項。

在 VxLAN 網(wǎng)絡(luò)和外部 IP 網(wǎng)絡(luò)之間需要互聯(lián)互通時,可以通過 Type5 Route 將外部 IP 網(wǎng)段宣告到 VxLAN L3 Gateway,繼而實現(xiàn) VxLAN 網(wǎng)絡(luò)中的主機能夠與外部網(wǎng)絡(luò)之間進行 IP 訪問。

如下圖所示,Leaf1、Leaf2 作為 VxLAN L3 Gateway,其中 Leaf1 連接了一個外部網(wǎng)絡(luò)的 192.168.1.0/24 網(wǎng)段。

Leaf1 探測到 192.168.1.0/24 網(wǎng)段路由后,向 Leaf2 宣告 Type5 Route,包括:EVPN Instance RD、IP Prefix、L3 VNI、Leaf1 VTEP IP 地址等信息。

Leaf2 收到 Type5 Route 后,學習到 192.168.1.0/24 網(wǎng)段信息,并將其保存在相應的 Route Table 中,其下一跳為 Leaf1 VTEP IP 地址。

后續(xù),Leaf2 就可以直接轉(zhuǎn)發(fā) dstIP 為 192.168.1.0/24 網(wǎng)段的 IP 報文了。

編輯:黃飛

標簽:

上一篇:FPGA設(shè)計:GPIO怎么走全局時鐘網(wǎng)絡(luò) 環(huán)球熱訊
下一篇:最后一頁