什麼是VXLAN?

前言
VXLAN即 ,是大二層網路中廣泛使用的網路虛擬化技術。在來源網路設備與目的網路設備之間建立一條邏輯VXLAN隧道,採用MAC in UDP(User Datagram Protocol)封裝方式,即,將虛擬機發出的原始以太報文完整的封裝在UDP報文中,然後在外層使用物理網絡的IP報文頭和以太報文頭封裝,這樣,封裝後的報文就像普通IP報文一樣,可以通過路由網絡轉發,這就像給二層網絡的虛擬機插上了路由的翅膀,使二層網格的翅膀限制了。

01為什麼需要VXLAN?為什麼需要VXLAN?這和伺服器的虛擬化趨勢緊密相關,一方面出現了虛擬機器動態遷移,要求虛擬機器在遷移前後的IP和MAC位址不能改變;另一方面,租戶數量激增,需要網路提供隔離海量租戶的能力。
1.1    虛擬機器動態遷移
伺服器虛擬化技術是把一台實體伺服器虛擬化成多台邏輯伺服器,這種邏輯伺服器稱為虛擬機器(VM)。透過伺服器虛擬化,可以有效提高伺服器的利用率,降低能源消耗,降低營運成本,所以虛擬化技術目前得到了廣泛的應用。
伺服器虛擬化後,虛擬機動態遷移變得常態化,為了確保遷移時業務不會中斷,就要求在虛擬機遷移時,不僅虛擬機的IP位址不變,而且虛擬機的運作狀態也必須保持原狀(例如TCP會話狀態),所以虛擬機的動態遷移只能在同一個二層域中進行,而不能跨二層域遷移。
傳統的三層網路架構限制了虛擬機器的動態遷移範圍,如下圖所示,遷移只能在一個較小的局部範圍內進行,應用程式受到了極大的限制。

統的三層網路架構限制了虛擬機器的動態遷移範圍

為了打破這個限制,實現虛擬機器的大範圍甚至跨地域的動態遷移,就要求把VM遷移可能涉及的所有伺服器都納入同一個二層網路域,這樣才能實現VM的大範圍無障礙遷移。
眾所周知,同一台二層交換機可以實現下掛伺服器之間的二層通信,而且伺服器從該二層交換器的一個端口遷移到另一個端口時,IP地址是可以保持不變的。這樣就可以滿足虛擬機器動態遷移的需求了。 VXLAN的設計理念和目標正是由此而來的。
VXLAN提供一套方法論,在IP網路基礎上,當來源與目的之間有通訊需求時,便在IP網路之上建立一條虛擬的隧道,透明轉送使用者資料。任兩點之間都能透過VXLAN隧道來通信,忽略底層網路的結構與細節。從伺服器的角度看,VXLAN為它們將整個基礎網路虛擬成了一台巨大的“二層交換器”,所有伺服器都連接在這台虛擬二層交換器上。而基礎網路之內如何轉送都是這台「巨大交換器」內部的事情,伺服器完全無需關心。

VXLAN将整个基础网络虚拟成了一台巨大的“二层交换机”
基於這個「二層交換器」的模型,就很容易理解為什麼VXLAN可以實現VM動態遷移了:將虛擬機從「二層交換器」的一個端口換到另一個端口,完全無需變更IP位址。
1.2  租戶數量激增,要求提供一個可隔離海量租戶的網絡
在傳統的VLAN網路中,標準定義所支援的可用VLAN數量只有4000個左右。伺服器虛擬化後,一台實體伺服器中承載了多台虛擬機,每個虛擬機都有獨立的IP位址和MAC位址,相當於伺服器倍增了。例如,公有雲或其它大型虛擬化雲端資料中心動輒需容納數萬甚至更多租戶,VLAN的能力顯然已經力不從心。 VXLAN如何來解決上述問題呢? VXLAN在VXLAN幀頭中引入了類似VLAN ID的網路標識,稱為VXLAN網路標識VNI(VXLAN Network ID),由24位元組成,理論上可支援多達16M的VXLAN段,從而滿足了大規模不同租戶之間的標識、隔離需求。 02     VXLAN與VLAN之間有何不同?
VLAN作為傳統的網路隔離技術,在標準定義中VLAN的數量只有4000個左右,無法滿足大二層網路的租戶間隔離需求。另外,VLAN的二層範圍一般較小且固定,無法支援虛擬機器大範圍的動態遷移。
VXLAN完美地彌補了VLAN的上述不足,一方面透過VXLAN中的24位元VNI字段,提供多達16M租戶的識別能力,遠大於VLAN的4000;另一方面,VXLAN本質上在兩台交換器之間構建了一條穿越基礎IP網絡的虛擬隧道,將IP基礎網絡虛擬成一個巨型“二層交換機之間構建了一條穿越基礎IP網絡的虛擬隧道,將IP基礎網絡虛擬成一個巨型“二層交換機之間構建了一條穿越基礎IP網絡的虛擬隧道,將IP基礎網絡虛擬成一個巨型“二層交換機之間構建了一條主要遷移的
雖然從名字來看,VXLAN是VLAN的一種擴充協議,但VXLAN建構虛擬隧道的本領已經與VLAN迥然不同了。
下面來介紹下,VXLAN報文到底長啥樣。

VXLAN封包格式(以外層IP頭為IPv4格式為例)
如上圖所示,VTEP對VM發送的原始以太幀(Original L2 Frame)進行了以下「包裝」:
VXLAN Header增加VXLAN頭(8位元組),其中包含24位元的VNI字段,用來定義VXLAN網路中不同的租戶。此外,還包含VXLAN Flags(8比特,取值為00001000)和兩個保留欄位(分別為24比特和8比特)。
UDP Header
VXLAN頭和原始以太幀一起作為UDP的資料。在 UDP頭中,目的連接埠號碼(VXLAN Port)固定為4789,來源連接埠號碼(UDP Src. Port)是原始以太幀透過雜湊演算法計算後的值。
Outer IP Header封裝外層IP頭。其中,來源IP位址(Outer Src. IP)為來源VM所屬VTEP的IP位址,目的IP位址(Outer Dst. IP)為目的VM所屬VTEP的IP位址。
Outer MAC Header
封裝外層以太頭。其中,來源MAC位址(Src. MAC Addr.)為來源VM所屬VTEP的MAC位址,目的MAC位址(Dst. MAC Addr.)為到達目的VTEP的路徑中下一跳設備的MAC位址。
03VXLAN是如何運作的?
本節將為您介紹VXLAN隧道的建立過程,並在這個過程中更了解VXLAN的工作原理。 3.1  VXLAN中的VTEP和VNI
在介紹VXLAN隧道的建立過程前,先來了解VXLAN網路模型中一些常見的概念。如下圖所示,兩台伺服器之間透過VXLAN網路進行通訊。在兩台TOR交換器之間建立了一條VXLAN隧道,TOR交換器將伺服器發出的原始資料幀加以“包裝”,以便原始訊息可以在承載網路(例如IP網路)上傳輸。當到達目的伺服器所連接的TOR交換器後,離開VXLAN隧道,並將原始資料幀恢復出來,繼續轉送給目的伺服器。

VXLAN網路中出現了一些傳統網路中沒有的新元素,如VTEP、VNI等,它們的作用是什麼呢?以下將向您介紹這幾個新元素。
3.2  什麼是VXLAN VTEP
VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端點)是VXLAN網絡的邊緣設備,是VXLAN隧道的起點和終點,源服務器發出的原始數據幀,在VTEP上被封裝成VXLAN格式的報文,並在IP網絡中傳遞到另外一個VTEP上,並經過解封轉還原出原始的數據幀,最後轉發給目的服務器。
3.3  什麼是VXLAN VNI
VNI(VXLAN Network Identifier,VXLAN 網路識別碼),VNI是一種類似VLAN ID的使用者標識,一個VNI代表了一個租用戶,屬於不同VNI的虛擬機器之間不能直接進行二層通訊。
VNI也可分為二層VNI和三層VNI,它們的作用不同,二層VNI是普通的VNI,用於VXLAN封包同子網路的轉送;三層VNI和VPN實例進行關聯,用於VXLAN封包跨子網路的轉送。
3.4  VXLAN的網關
和VLAN類似,不同VNI之間的主機,以及VXLAN網路和非VXLAN網路中的主機不能直接相互通訊。為了滿足這些通訊需求,VXLAN引進了VXLAN閘道的概念。 VXLAN網關分為二層網關和三層網關,VXLAN二層網關用於終端接入VXLAN網絡,也可用於同一VXLAN網路的子網路通訊;VXLAN三層網關用於VXLAN網路中跨子網路通訊以及存取外部網路。
依三層閘道部署方式的不同,VXLAN三層閘道又可分為集中式閘道器和分散式閘道。
VXLAN集中式網關
集中式網關是指將三層網關集中部署在一台設備上,如下圖所示,所有跨子網路的流量都經過這個三層網關轉發,實現流量的集中管理。

VXLAN集中式網關網路圖
部署集中式網關的優點和缺點如下:
優點:對跨子網路流量進行集中管理,網關的部署和管理較簡單。
缺點:
轉送路徑不是最優:同一二層閘道下跨子網路的三層流量都需要經過集中三層閘道繞行轉送(如圖中藍色虛線所示)。
ARP表項規格瓶頸:由於採用集中三層網關,透過三層網關轉送的終端的ARP表項都需要在三層網關上生成,而三層網關上的ARP表項規格有限,限制了網路的擴展。 VXLAN分散式網關
透過部署分散式網關可以解決集中式網關部署的缺點。 VXLAN分散式閘道是指在典型的「Spine-Leaf」組網結構下,將Leaf節點作為VXLAN隧道端點VTEP,每個Leaf節點可作為VXLAN三層閘道(同時也是VXLAN二層閘道),Spine節點不感知VXLAN隧道,只作為VXLAN封包的轉送節點。如下圖所示,Server1和Server2不在同一個網段,但是都連接到同一個Leaf節點。 Server1和Server2通訊時,流量只需要在該Leaf節點上轉發,不再需要經過Spine節點。
部署分散式網關時:
Spine節點:
專注於高速IP轉發,強調的是設備的高速轉發能力。
Leaf節點:作為VXLAN網路中的二層閘道設備,與實體伺服器或VM對接,用於解決終端租用戶接取VXLAN虛擬網路的問題。
作為VXLAN網路中的三層閘道設備,進行VXLAN封包封裝/解封裝,實現跨子網路的終端租戶通信,以及外部網路的存取。

VXLAN分散式閘道示意圖

VXLAN分散式閘道具有以下特點:
同一個Leaf節點可以做VXLAN二層網關,也可以做VXLAN三層網關,部署靈活。
Leaf節點只需要學習自身連接伺服器的ARP表項,而不必像集中三層網關一樣,需要學習所有伺服器的ARP表項,解決了集中式三層網關帶來的ARP表項瓶頸問題,網路規模擴展能力強。 3.5  哪些VTEP之間需要建立VXLAN隧道
「大二層網路」可以突破物理上的界限,實現「大二層網路」中VM之間的通信,同一「大二層網路」內的VTEP之間都需要建立VXLAN隧道。如下圖VTEP_1連接的VM、VTEP_2連接的VM以及VTEP_3連接的VM之間需要「大二層」互通,那麼VTEP_1、VTEP_2和VTEP_3之間就需要兩兩建立VXLAN隧道。

建立VXLAN隧道示意圖
3.6  VXLAN隧道的建立
VXLAN隧道由一對VTEP IP位址決定,創建VXLAN隧道實際上是兩端VTEP取得對端VTEP IP位址的過程,只要對端VTEP IP位址是三層路由可達的,VXLAN隧道就可以建立成功。
VXLAN隧道的建立分為靜態方式和動態方式兩種。
靜態方式沒有控制平面,使用者透過手動指定VXLAN隧道的來源IP為本端VTEP的IP、目的IP為對端VTEP的IP,建立VXLAN隧道。靜態方式手動配置工作量大,彈性較差,不適合大規模的網路場景。
動態方式的VXLAN隧道的建立借助VXLAN EVPN協定作為VXLAN的控制平面,在兩端VTEP之間建立BGP EVPN對等體,然後對等體之間利用VXLAN EVPN路由實現VTEP的自動發現、主機資訊相互通告等,從而實現動態建立VXLAN隧道。資料平面則依據控制平面建立的轉發表項執行封包的轉送。動態方式靈活性高,適合大規模的VXLAN網路場景。
3.7  如何確定封包屬於哪一個VXLAN隧道
「大二層網路」就類似傳統網路中VLAN(虛擬區域網路)的概念,在VXLAN網路中,不同的「大二層網路」用Bridge-Domain標識,簡稱BD,不同的BD透過VNI來區分的。在建立VXLAN隧道時,需要在VTEP設備上配置BD與VNI的映射關係,進入VTEP的封包根據BD與VNI的映射關係表確定封包在進行VXLAN封裝時,該新增哪個VNI標識,即封包透過哪個VXLAN隧道轉送。那麼,報文根據什麼來決定自己屬於哪個BD呢?
如何確定報文屬於哪個BD
VTEP只是設備承擔的一個角色而已,只是設備功能的一部分。也就是說,並非所有進入到設備的封包都會走VXLAN隧道(也可能封包就是走普通的二、三層轉送流程)。所以,在回答「如何確定封包屬於哪個BD」之前,必須先回答「哪些報文要進入VXLAN隧道」。
哪些封包要進入VXLAN隧道?
在回答這個問題之前,不妨先回想一下VLAN技術中,設備對於接收和發送的訊息是如何進行處理的。報文要進入設備進行下一步處理,首先得先過接口這一關,可以說接口掌控著對報文的「生殺大權」。傳統網路中定義了三種不同類型的介面:Access、Trunk、Hybrid。這三種類型的介面雖然應用場景不同,但它們的最終目的是一樣的:一是根據配置來檢查哪些報文是允許通過的;二是判斷對檢查通過的報文做怎樣的處理。
在VXLAN網路中,VTEP上的接口也承擔著類似的任務,只不過這裡的接口不是物理接口,而是一個叫做「二層子接口」的邏輯接口。類似的,二層子介面主要做兩件事:一是根據配置來檢查哪些封包需要進入VXLAN隧道;二是判斷對檢查通過的封包做怎樣的處理。在二層子介面上,為簡化配置管理,根據業務定義了不同的流封裝類型(類似於傳統網路中不同的介面類型)。目前主要的流封裝類型有dot1q、untag、qinq和default四種類型:
dot1q:對於帶有一層VLAN Tag的封包,此類型子介面只接收與指定VLAN Tag相符的封包;對於具有兩層VLAN Tag的封包,此類型子介面只會接收外層VLAN Tag與指定VLAN Tag相符的封包。
untag:此類型子介面只接收不帶VLAN Tag的封包。
qinq:此類型子介面只接收帶有指定兩層VLAN Tag的封包。
default:允許子介面接收所有封包,不區分封包中是否有VLAN Tag。不論是對原始封包進行VXLAN封裝,或是解封裝VXLAN封包,此型別子介面都不會對原始封包進行任何VLAN Tag處理,包括新增、取代或剝離。
除二層子介面外,還可以將VLAN作為業務存取點。將VLAN綁定到廣播域BD後,加入此VLAN的介面即為VXLAN業務存取點,進入介面的封包由VXLAN隧道處理。
將二層子介面加入BD現在再來回答「如何確定封包屬於哪個BD」就非常簡單了。其實,只要將二層子介面加入指定的BD,然後根據二層子介面上的配置,設備就可以確定封包屬於哪個BD啦!
04什麼是VXLAN EVPN?
EVPN(Ethernet Virtual Private Network)是一種用於二層網路互聯的VPN技術。 EVPN技術採用類似BGP/MPLS IP VPN的機制,在BGP協定的基礎上定義了一個新的NLRI(Network Layer Reachability Information,網路層可達資訊)即EVPN NLRI,EVPN NLRI定義了幾種新的BGP EVPN路由類型,用於處在二層網路的不同站點之間的MAC NLRI定義了幾種新的BGP EVPN路由類型,用於處在二層網路的不同站點之間的MAC位址學習和發布。
最初的VXLAN方案(RFC7348)中沒有定義控制平面,是手工配置VXLAN隧道,然後透過資料平面的流量泛洪的方式進行VTEP發現和主機資訊(包括IP位址、MAC位址、VNI、網關VTEP IP位址)學習的。這種方式實作上較為簡單,但是會導致網路中存在許多泛洪流量、網路擴展起來困難。為了解決上述問題,在VXLAN中引入了EVPN作為VXLAN的控制平面,即透過VXLAN EVPN路由傳遞VTEP位址和主機訊息,把原本依賴資料平面的VTEP發現和主機資訊學習轉移到控制平面。

將EVPN作為VXLAN的控制平面
採用EVPN作為VXLAN的控制平面具有下列優勢:
可實現VTEP自動發現、VXLAN隧道自動建立,進而降低網路部署、擴充的難度。
EVPN可以同時發布二層MAC資訊和三層路由資訊。
可以減少網路中的泛洪流量。
4.1  VXLAN EVPN的路由類型有哪些?
在EVPN NLRI中定義以下幾種應用於VXLAN控制平面的BGP EVPN路由類型:
Type2路由:又稱MAC/IP路由,主要用於VTEP之間相互通告主機IP、MAC資訊。
Type3路由:主要用於在VTEP之間相互通告二層VNI、VTEP IP訊息,以建立頭端複製列表,指導後續BUM封包的轉送。
Type5路由:又稱IP前綴路由,主要用於傳遞網段路由。
4.2  使用EVPN發布VTEP路由
在主機同子網路互通場景下,因為只需要在同一個二層廣播域(BD)內互通,所以只要兩端VTEP的IP位址路由可達,VXLAN隧道就可以建立,所以同子網路VXLAN隧道的動態建立需要在兩端VTEP之間建立BGP ENI對等體,然後對等體之間透過互動式訊息類型32020202號,來實現資訊。
4.3  使用EVPN發布主機路由
在主機跨子網路互通場景下,需要在不同二層廣播域(BD)內互通,主機之間的互通需要知道對端主機的IP路由。 Type2路由攜帶32位元遮罩的主機IP位址訊息,VTEP之間透過EVPN Type2路由發布主機路由訊息,使VTEP學習到主機的路由訊息,從而進行三層轉送。
4.4  使用EVPN發布網段路由
網段路由的發布流程與主機路由類似,差別在於網段路由是透過Type5路由發布的,Type2路由只能發布32/128位元的主機路由。 Type5路由也可以發佈32/128位元的主機路由,在發佈32/128位元的主機路由時,功能與Type2路由類似。
4.5  使用EVPN學習MAC位址
在VXLAN網路中,為了減少網路管理員手動維護工作量和減少泛洪流量,需要支援MAC位址動態學習。跨子網路互通需要進行三層轉發,MAC位址學習只在本端主機和閘道之間透過動態ARP封包實現,這裡不再詳述。在同子網路主機互通場景下,使用EVPN作為VXLAN的控制平面,可以用EVPN來進行MAC學習。 Type2路由不僅攜帶IP路由訊息,還攜帶MAC位址訊息,使用EVPN來進行MAC學習的過程,是透過在VTEP之間傳遞Type2路由路由完成的。
05 VXLAN網路中的封包是如何轉送的?
基本的二三層轉送中,二層轉送依賴的是MAC表,三層轉送依賴的是FIB表。在VXLAN中,其實也是同樣的道理。以下以集中式VXLAN網路(VXLAN隧道的建立)為例,分別介紹同子網路內、跨子網路間是如何進行通訊的,幫助您理解VXLAN中的概念。
5.1  集中式VXLAN中同子網路互通流程
如下圖所示,VM_A、VM_B和VM_C屬於同網段。此時,VM_A想與VM_C進行通信,首次進行通信,封包進行如下處理:
VM_A上沒有VM_C的MAC位址,所以會傳送ARP廣播封包請求VM_C的MAC位址。
VTEP_1收到ARP請求後,先進行VXLAN封裝,然後將VXLAN封包複製多份分別傳送給所有的對端VTEP。
封包到達VTEP_2和VTEP_3後,VTEP對封包進行解封裝,得到VM_A發送的原始訊息。 VTEP_2和VTEP_3在對應的二層域內廣播。
當VM_C收到該請求封包後,發現目的IP與本機IP相同,因此VM_C將進行ARP應答。而其他VM收到該請求封包會被丟棄。
經過上述過程,VM_A和VM_C都已學習到了對方的MAC位址。之後,VM_A和VM_C將採用單播方式進行通訊。

同子網路VM互通組網圖
5.2  集中式VXLAN中跨子網路互通流程
跨子網路封包轉送需要透過三層閘道實現。如下圖所示,VM_A、VM_B屬於不同網段。 VM_A與VM_B進行通訊的封包處理流程如下:
VM_A先將資料封包傳送給VTEP_1。
VTEP_1收到後進行VXLAN封裝,然後將VXLAN封包傳送至對端VTEP_3。
VTEP_3收到VXLAN封包後進行解封裝,發現目的MAC是三層閘道介面BDIF的MAC位址MAC_10,而目的IP位址為IP_B(10.1.20.1),因此需要進行三層轉送。
VTEP_3根據路由表查找到IP_B的下一跳,發現出介面為BDIF 20,VTEP_3將封包重新進行VXLAN封裝,然後將VXLAN封包傳送給對端VTEP_2。
封包到達VTEP_2後,VTEP_2對封包進行解封裝,並將其傳送至VM_B。

不同子網路VM互通流程示意圖.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *