什麼是VXLAN?為什麼需要VXLAN?

2024年2月6日 20点热度 0人点赞

什麼是VXLAN

VXLAN(Virtual eXtensible Local Area Network,虛擬擴展局域網),是由IETF定義的NVO3(Network Virtualization over Layer 3)標準技術之一,是對傳統VLAN協議的一種擴展。VXLAN的特點是將L2的以太幀封裝到UDP報文(即L2 over L4)中,並在L3網絡中傳輸。

如圖1-1所示,VXLAN本質上是一種隧道技術,在源網絡設備與目的網絡設備之間的IP網絡上,建立一條邏輯隧道,將用戶側報文經過特定的封裝後通過這條隧道轉發。從用戶的角度來看,接入網絡的服務器就像是連接到了一個虛擬的二層交換機的不同端口上(可把藍色虛框表示的數據中心VXLAN網絡看成一個二層虛擬交換機),可以方便地通信。

圖1-1 VXLAN是一種隧道技術

VXLAN已經成為當前構建數據中心的主流技術,是因為它能很好地滿足數據中心裡虛擬機動態遷移和多租戶等需求。

為什麼需要VXLAN

為什麼需要VXLAN呢?這和數據中心服務器側的虛擬化趨勢緊密相關,一方面服務器虛擬化後出現了虛擬機動態遷移,要求提供一個無障礙接入的網絡;另一方面,數據中心規模越發龐大,租戶數量激增,需要網絡提供隔離海量租戶的能力。采用VXLAN可以滿足上述兩個關鍵需求。

虛擬機動態遷移,要求提供一個無障礙接入的網絡

什麼是服務器虛擬化技術?

傳統的數據中心物理服務器利用率太低,平均隻有10%~15%,浪費了大量的電力能源和機房資源,所以出現了服務器虛擬化技術。如圖1-2所示,服務器虛擬化技術是把一臺物理服務器虛擬化成多臺邏輯服務器,這種邏輯服務器被稱為虛擬機(VM)。每個VM都可以獨立運行,有自己的操作系統、APP,當然也有自己獨立的MAC地址和IP地址,它們通過服務器內部的虛擬交換機(vSwitch)與外部實體網絡連接。

圖1-2 服務器虛擬化示意

通過服務器虛擬化,可以有效地提高服務器的利用率,降低能源消耗,降低數據中心的運營成本,所以虛擬化技術目前得到了廣泛的應用。

什麼是虛擬機動態遷移?

所謂虛擬機動態遷移,就是在保證虛擬機上服務正常運行的同時,將一個虛擬機系統從一個物理服務器移動到另一個物理服務器的過程。該過程對於最終用戶來說是無感知的,從而使得管理員能夠在不影響用戶正常使用的情況下,靈活調配服務器資源,或者對物理服務器進行維修和升級。

在服務器虛擬化後,虛擬機動態遷移變得常態化,為了保證遷移時業務不中斷,就要求在虛擬機遷移時,不僅虛擬機的IP地址不變,而且虛擬機的運行狀態也必須保持原狀(例如TCP會話狀態),所以虛擬機的動態遷移隻能在同一個二層域中進行,而不能跨二層域遷移。

如圖1-3所示,傳統的二三層網絡架構限制了虛擬機的動態遷移范圍,遷移隻能在一個較小的局部范圍內進行,應用受到了極大的限制。

圖1-3 傳統的二三層網絡架構限制了虛擬機的動態遷移范圍

為了打破這種限制,實現虛擬機的大范圍甚至跨地域的動態遷移,就要求把VM遷移可能涉及的所有服務器都納入同一個二層網絡域,這樣才能實現VM的大范圍無障礙遷移。

VXLAN如何滿足虛擬機動態遷移時對網絡的要求?

眾所周知,同一臺二層交換機可以實現下掛服務器之間的二層通信,而且服務器從該二層交換機的一個端口遷移到另一個端口時,IP地址是可以保持不變的。這樣就可以滿足虛擬機動態遷移的需求了。VXLAN的設計理念和目標正是由此而來的。

從上一個小節我們可以知道,VXLAN本質上是一種隧道技術,當源和目的之間有通信需求時,便在數據中心IP網絡之上創建一條虛擬的隧道,透明轉發用戶數據。而數據中心內相互通信的需求眾多,這種隧道的建立方式幾乎是全互聯形態才能滿足通信需求。

VXLAN可以提供一套方法論,在數據中心IP網絡基礎上,構建一張全互聯的二層隧道虛擬網絡,保證任意兩點之間都能通過VXLAN隧道來通信,並忽略底層網絡的結構和細節。從服務器的角度看,VXLAN為它們將整個數據中心基礎網絡虛擬成了一臺巨大的“二層交換機”,所有服務器都連接在這臺虛擬二層交換機上。而基礎網絡之內如何轉發都是這臺“巨大交換機”內部的事情,服務器完全無需關心。

圖1-4 VXLAN將整個數據中心基礎網絡虛擬成了一臺巨大的“二層交換機”

數據中心租戶數量激增,要求提供一個可隔離海量租戶的網絡

眾所周知,在傳統的VLAN網絡中,標準定義所支持的可用VLAN數量隻有4000個左右。服務器虛擬化後,一臺物理服務器中承載了多臺虛擬機,每個虛擬機都有獨立的IP地址和MAC地址,相當於接入數據中心的服務器成倍擴大了。另外,公有雲或其它大型虛擬化雲數據中心動輒需容納上萬甚至更多租戶,VLAN的能力顯然已經力不從心。

VXLAN如何來解決上述問題呢?VXLAN在VXLAN幀頭中引入了類似VLAN ID的網絡標識,稱為VXLAN網絡標識VNI(VXLAN Network ID),由24比特組成,理論上可支持多達16M的VXLAN段,從而滿足了大規模不同網絡之間的標識、隔離需求。下文我們會介紹VNI的詳細作用。

VXLAN與VLAN之間有何不同

VLAN作為傳統的網絡隔離技術,在標準定義中VLAN的數量隻有4000個左右,無法滿足大型數據中心的租戶間隔離需求。另外,VLAN的二層范圍一般較小且固定,無法支持虛擬機大范圍的動態遷移。

VXLAN完美地彌補了VLAN的上述不足,一方面通過VXLAN中的24比特VNI字段(如圖1-5所示),提供多達16M租戶的標識能力,遠大於VLAN的4000;另一方面,VXLAN本質上在兩臺交換機之間構建了一條穿越數據中心基礎IP網絡的虛擬隧道,將數據中心網絡虛擬成一個巨型“二層交換機”,滿足虛擬機大范圍動態遷移的需求。

雖然從名字上看,VXLAN是VLAN的一種擴展協議,但VXLAN構建虛擬隧道的本領已經與VLAN迥然不同了。

下面就讓我們來看下,VXLAN報文到底長啥樣。

圖1-5 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地址。

VXLAN隧道是如何建立的

本節將為您介紹VXLAN隧道的建立過程,並在這個過程中更好地理解VXLAN的工作原理。

什麼是VXLAN中的VTEP和VNI

下面讓我們來進一步了解VXLAN的網絡模型以及一些常見的概念。如圖1-6所示,兩臺服務器之間通過VXLAN網絡進行通信。

圖1-6 VXLAN網絡模型示意

從上圖中可以發現,VXLAN在兩臺TOR交換機之間建立了一條隧道,將服務器發出的原始數據幀加以“包裝”,好讓原始報文可以在承載網絡(比如IP網絡)上傳輸。當到達目的服務器所連接的TOR交換機後,離開VXLAN隧道,並將原始數據幀恢復出來,繼續轉發給目的服務器。

另外,VXLAN網絡中出現了一些傳統數據中心網絡中沒有的新元素,如VTEP、VNI等,它們的作用是什麼呢?下面將向您介紹這幾個新元素。

什麼是VXLAN VTEP

如圖1-6所示,VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端點)是VXLAN網絡的邊緣設備,是VXLAN隧道的起點和終點,VXLAN對用戶原始數據幀的封裝和解封裝均在VTEP上進行。

VTEP是VXLAN網絡中絕對的主角,VTEP既可以是一**立的網絡設備(比如華為的CloudEngine系列交換機),也可以是在服務器中的虛擬交換機。源服務器發出的原始數據幀,在VTEP上被封裝成VXLAN格式的報文,並在IP網絡中傳遞到另外一個VTEP上,並經過解封轉還原出原始的數據幀,最後轉發給目的服務器。

VTEP在VXLAN隧道的建立和轉發過程中的詳細工作,可以參見下文的VXLAN隧道是如何建立的

什麼是VXLAN VNI

前文提到,以太網數據幀中VLAN隻占了12比特的空間,這使得VLAN的隔離能力在數據中心網絡中力不從心。而VNI的出現,就是專門解決這個問題的。

如圖1-6所示,VNI(VXLAN Network Identifier,VXLAN 網絡標識符),VNI是一種類似於VLAN ID的用戶標識,一個VNI代表了一個租戶,屬於不同VNI的虛擬機之間不能直接進行二層通信。如圖1-5所示,VXLAN報文封裝時,給VNI分配了24比特的長度空間,使其可以支持海量租戶的隔離。

VNI在VXLAN隧道的建立和轉發過程中的詳細工作,可以參見下文的VXLAN隧道是如何建立的

另外,在分佈式網關部署場景下,VNI還可分為二層VNI和三層VNI,它們的作用不同:

  • 二層VNI是普通的VNI,以1:1方式映射到廣播域BD,實現VXLAN報文同子網的轉發(詳情可參見下文的什麼是“同一大二層域”)。
  • 三層VNI和VPN實例進行關聯,用於VXLAN報文跨子網的轉發(三層VNI的工作詳情將在另外一篇EVPN相關的文檔中展開描述)。

哪些VTEP之間需要建立VXLAN隧道

一條VXLAN隧道是由兩個VTEP來確定建立的。數據中心網絡中存在很多個VTEP,如圖1-7所示,那麼哪些VTEP間需要建立VXLAN隧道呢?

圖1-7 建立VXLAN隧道示意圖(1)

如前所述,通過VXLAN隧道,“二層域”可以突破物理上的界限,實現大二層網絡中VM之間的通信。所以,連接在不同VTEP上的VM之間如果有“大二層”互通的需求,這兩個VTEP之間就需要建立VXLAN隧道。換言之,同一大二層域內的VTEP之間都需要建立VXLAN隧道。

例如,假設圖1-7中VTEP_1連接的VM、VTEP_2連接的VM以及VTEP_3連接的VM之間需要“大二層”互通,那VTEP_1、VTEP_2和VTEP_3之間就需要兩兩建立VXLAN隧道,如圖1-7所示。

圖1-8 建立VXLAN隧道示意圖(2)

什麼是“同一大二層域”

上文提到的“同一大二層域”,就類似於傳統網絡中VLAN(虛擬局域網)的概念,隻不過在VXLAN網絡中,它有另外一個名字,叫做Bridge-Domain,簡稱BD。

我們知道,不同的VLAN是通過VLAN ID來進行區分的,那不同的BD是如何進行區分的呢?其實前面已經提到了,就是通過VNI來區分的。對於CloudEngine系列交換機而言,BD與VNI是1:1的映射關系,這種映射關系是通過在VTEP設備上配置命令行建立起來的,配置樣例如下:

bridge-domain 10   //表示創建一個“大二層廣播域”BD,其編號為10
 vxlan vni 5000  //表示在BD 10下,指定與之關聯的VNI為5000
#1.2.3.

VTEP設備會根據以上配置生成BD與VNI的映射關系表,該映射表可以通過命令行查看,如下所示:

display vxlan vniNumber of vxlan vni : 1 
VNI            BD-ID            State  
--------------------------------------- 
5000           10               up1.2.3.4.

有了映射表後,進入VTEP的報文就可以根據自己所屬的BD來確定報文在進行VXLAN封裝時,該添加哪個VNI標識。那麼,報文根據什麼來確定自己屬於哪個BD呢?

如何確定報文屬於哪個BD

這裡要先澄清下,VTEP隻是交換機承擔的一個角色而已,隻是交換機功能的一部分。也就是說,並非所有進入到交換機的報文都會走VXLAN隧道(也可能報文就是走普通的二三層轉發流程)。所以,我們在回答“如何確定報文屬於哪個BD”之前,必須先要回答“哪些報文要進入VXLAN隧道”。

哪些報文要進入VXLAN隧道?

回答這個問題之前,不妨先讓我們回想一下VLAN技術中,交換機對於接收和發送的報文是如何進行處理的。報文要進入交換機進行下一步處理,首先得先過接口這一關,可以說接口掌控著對報文的“生殺大權”。傳統網絡中定義了三種不同類型的接口:Access、Trunk、Hybrid。這三種類型的接口雖然應用場景不同,但它們的最終目的是一樣的:一是根據配置來檢查哪些報文是允許通過的;二是判斷對檢查通過的報文做怎樣的處理。

其實在VXLAN網絡中,VTEP上的接口也承擔著類似的任務,隻不過在CloudEngine系列交換機中,這裡的接口不是物理接口,而是一個叫做“二層子接口”的邏輯接口。類似的,二層子接口主要做兩件事:一是根據配置來檢查哪些報文需要進入VXLAN隧道;二是判斷對檢查通過的報文做怎樣的處理。在二層子接口上,可以根據需要定義不同的流封裝類型(類似於傳統網絡中不同的接口類型)。CloudEngine系列交換機目前支持的流封裝類型有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啦!

比如圖1-9所示的組網,一臺虛擬化服務器中有兩個不同VLAN的虛擬機VM1(VLAN 10)和VM2(VLAN 20),它們與其他虛擬機通信時需要接入VXLAN網絡。此時我們可以分別在VTEP的物理接口10GE 1/0/1上,分別針對VM1和VM2封裝不同的二層子接口,並將其分別加入不同的BD。這樣後續VM1和VM2的流量將會進入不同的VXLAN隧道繼續轉發。

在這個舉例中,vSwitch的上行口配置成Trunk模式,且PVID為20。這樣vSwitch發給VTEP的報文中,既有帶tag的VM1流量,又有untag的VM2流量,此時在VTEP的接入口上創建兩個二層子接口,分別配置為dot1q和untag的封裝類型。

圖1-9 將二層子接口加入BD

下面就基於上圖,結合CloudEngine交換機上的配置舉例進行說明。

在CloudEngine交換機的接入物理接口10GE 1/0/1上,分別創建二層子接口10GE 1/0/1.1和10GE 1/0/1.2,並分別配置其流封裝類型為dot1q和untag。

interface 10GE1/0/1.1 mode l2   //創建二層子接口10GE1/0/1.1
 encapsulation dot1q vid 10   //隻允許攜帶VLAN Tag 10的報文進入VXLAN隧道
 bridge-domain 10   //指定報文進入的是BD 10
#
interface 10GE1/0/1.2 mode l2   //創建二層子接口10GE1/0/1.2
 encapsulation untag   //隻允許不攜帶VLAN Tag的報文進入VXLAN隧道
 bridge-domain 20   //指定報文進入的是BD 20
#1.2.3.4.5.6.7.8.

VXLAN隧道是怎麼建立的

現在,我們可以來看下VXLAN隧道是怎麼建立起來的。一般而言,隧道的建立不外乎手工方式和自動方式兩種。

手工方式建立VXLAN隧道

這種方式需要用戶手動指定VXLAN隧道的源IP為本端VTEP的IP、目的IP為對端VTEP的IP,也就是人為地在本端VTEP和對端VTEP之間建立靜態VXLAN隧道。

對於CloudEngine系列交換機,以上配置是在NVE(Network Virtualization Edge)接口下完成的,配置舉例如下:

interface Nve1   //創建邏輯接口NVE 1
 source 1.1.1.1   //配置源VTEP的IP地址(推薦使用Loopback接口的IP地址)
 vni 5000 head-end peer-list 2.2.2.2
 vni 5000 head-end peer-list 2.2.2.3
#1.2.3.4.5.

其中,vni 5000 head-end peer-list 2.2.2.2vni 5000 head-end peer-list 2.2.2.3的配置,表示屬於VNI 5000的對端VTEP有兩個,IP地址分別為2.2.2.2和2.2.2.3。根據這兩條配置,VTEP上會生成如下所示的一張表:

display vxlan vni 5000 verbose
    BD ID                 : 10
    State                  : up
    NVE                    : 288
    Source Address      : 1.1.1.1
    Source IPv6 Address    : -
    UDP Port               : 4789
    BUM Mode               : head-end
    Group Address          : -
    Peer List            : 2.2.2.2 2.2.2.3
    IPv6 Peer List         : -1.2.3.4.5.6.7.8.9.10.11.

根據上表中的Peer List,本端VTEP就可以知道屬於同一BD(或同一VNI)的對端VTEP都有哪些,這也就決定了同一大二層廣播域的范圍。當VTEP收到BUM(Broadcast&Unknown-unicast&Multicast,廣播&未知單播&組播)報文時,會將報文復制並發送給Peer List中所列的所有對端VTEP(這就好比廣播報文在VLAN內廣播)。因此,這張表也被稱為“頭端復制列表”。當VTEP收到已知單播報文時,會根據VTEP上的MAC表來確定報文要從哪條VXLAN隧道走。而此時Peer List中所列的對端,則充當了MAC表中“出接口”的角色。

在後面的報文轉發流程中,你將會看到頭端復制列表是如何在VXLAN網絡中指導報文進行轉發的。

自動方式建立VXLAN隧道

自動方式下VXLAN隧道的建立需要借助於EVPN(Ethernet VPN)協議,這部分內容請參見《什麼是EVPN》。

如何確定報文要進哪條隧道?

屬於同一BD的VXLAN隧道可能不止一條,比如上文的頭端復制列表中,同一個源端VTEP(1.1.1.1)對應了兩個對端VTEP(2.2.2.2和2.2.2.3)。那就帶來了另一個問題,報文到底應該走哪一條隧道呢?

我們知道,基本的二三層轉發中,二層轉發依賴的是MAC表,如果沒有對應的MAC條目,則主機發送ARP廣播報文請求對端的MAC地址;三層轉發依賴的是FIB表。在VXLAN中,其實也是同樣的道理。