最好的vxlan介紹

1 背景

云計算成為企業(yè)IT建設新形態(tài)

任何技術(shù)的產(chǎn)生,都有其特定的時代背景與實際需求,VXLAN正是為了解決云計算時代虛擬化中的一系列問題而產(chǎn)生的一項技術(shù)。

云計算,憑借其在系統(tǒng)利用率高、人力/管理成本低、靈活性/可擴展性強等方面表現(xiàn)出的優(yōu)勢,已經(jīng)成為目前企業(yè)IT建設的新形態(tài);而在云計算中,大量的采用和部署虛擬化是一個基本的技術(shù)模式。

服務器虛擬化技術(shù)的廣泛部署,極大地增加了數(shù)據(jù)中心的計算密度;同時,為了實現(xiàn)業(yè)務的靈活變更,虛擬機VM(Virtual Machine)需要能夠在網(wǎng)絡中不受限遷移(如圖1-1所示)。實際上,對于數(shù)據(jù)中心而言,虛擬機遷移已經(jīng)成為了一個常態(tài)性業(yè)務。

圖1-1


1-1.png

傳統(tǒng)數(shù)據(jù)中心網(wǎng)絡面臨的挑戰(zhàn)

虛擬機數(shù)量的快速增長與虛擬機遷移業(yè)務的日趨頻繁,給傳統(tǒng)的“二層+三層”數(shù)據(jù)中心網(wǎng)絡帶來了新的挑戰(zhàn):

  • 虛擬機規(guī)模受網(wǎng)絡設備表項規(guī)格的限制

對于同網(wǎng)段主機的通信而言,報文通過查詢MAC表進行二層轉(zhuǎn)發(fā)。服務器虛擬化后,數(shù)據(jù)中心中VM的數(shù)量比原有的物理機發(fā)生了數(shù)量級的增長,伴隨而來的便是虛擬機網(wǎng)卡MAC地址數(shù)量的空前增加。此時,處于接入側(cè)的二層設備表示“我要Hold不住了”!

一般而言,接入側(cè)二層設備的規(guī)格較小,MAC地址表項規(guī)模已經(jīng)無法滿足快速增長的VM數(shù)量。

  • 傳統(tǒng)網(wǎng)絡的隔離能力有限

VLAN作為當前主流的網(wǎng)絡隔離技術(shù),在標準定義中只有12比特,也就是說可用的VLAN數(shù)量只有4000個左右。對于公有云或其它大型虛擬化云計算服務這種動輒上萬甚至更多租戶的場景而言,VLAN的隔離能力顯然已經(jīng)力不從心。

  • 虛擬機遷移范圍受限

虛擬機遷移,顧名思義,就是將虛擬機從一個物理機遷移到另一個物理機,但是要求在遷移過程中業(yè)務不能中斷。要做到這一點,需要保證虛擬機遷移前后,其IP地址、MAC地址等參數(shù)維持不變。這就決定了,虛擬機遷移必須發(fā)生在一個二層域中。而傳統(tǒng)數(shù)據(jù)中心網(wǎng)絡的二層域,將虛擬機遷移限制在了一個較小的局部范圍內(nèi)。

值得一提的是,通過堆疊、SVF、TRILL等技術(shù)構(gòu)建物理上的大二層網(wǎng)絡,可以將虛擬機遷移的范圍擴大。但是,構(gòu)建物理上的大二層,難免需要對原來的網(wǎng)絡做大的改動,并且大二層網(wǎng)絡的范圍依然會受到種種條件的限制。

2 VXLAN粉墨登場

傳統(tǒng)數(shù)據(jù)中心網(wǎng)絡的種種限制,推動了新技術(shù)的產(chǎn)生。于是,在VMware、Cisco等全球知名廠商的共同推動下,VXLAN粉墨登場。

VXLAN是什么

VXLAN(Virtual eXtensible Local Area Network,虛擬擴展局域網(wǎng)),是由IETF定義的NVO3(Network Virtualization over Layer 3)標準技術(shù)之一,采用L2 over L4(MAC-in-UDP)的報文封裝模式,將二層報文用三層協(xié)議進行封裝,可實現(xiàn)二層網(wǎng)絡在三層范圍內(nèi)進行擴展,同時滿足數(shù)據(jù)中心大二層虛擬遷移和多租戶的需求。

NVO3是基于三層IP overlay網(wǎng)絡構(gòu)建虛擬網(wǎng)絡的技術(shù)的統(tǒng)稱,VXLAN只是NVO3技術(shù)之一。除此之外,比較有代表性的還有NVGRE、STT。

在回答VXLAN如何解決前面提到的問題之前,先讓我們來了解下VXLAN的網(wǎng)絡模型。

VXLAN網(wǎng)絡模型

圖2-1 VXLAN網(wǎng)絡模型


2-1.png

從上圖中可以發(fā)現(xiàn),VXLAN網(wǎng)絡中出現(xiàn)了以下傳統(tǒng)數(shù)據(jù)中心網(wǎng)絡中沒有的新元素:

  • VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端點)

VXLAN網(wǎng)絡的邊緣設備,是VXLAN隧道的起點和終點,VXLAN報文的相關(guān)處理均在這上面進行??傊荲XLAN網(wǎng)絡中絕對的主角。VTEP既可以是一***立的網(wǎng)絡設備(比如華為的CE系列交換機),也可以是虛擬機所在的服務器。那它究竟是如何發(fā)揮作用的呢?答案稍候揭曉。

  • VNI(VXLAN Network Identifier,VXLAN 網(wǎng)絡標識符)

前文提到,以太網(wǎng)數(shù)據(jù)幀中VLAN只占了12比特的空間,這使得VLAN的隔離能力在數(shù)據(jù)中心網(wǎng)絡中力不從心。而VNI的出現(xiàn),就是專門解決這個問題的。VNI是一種類似于VLAN ID的用戶標示,一個VNI代表了一個租戶,屬于不同VNI的虛擬機之間不能直接進行二層通信。VXLAN報文封裝時,給VNI分配了足夠的空間使其可以支持海量租戶的隔離。詳細的實現(xiàn),我們將在后文中介紹。

  • VXLAN隧道

“隧道”是一個邏輯上的概念,它并不新鮮,比如大家熟悉的GRE。說白了就是將原始報文“變身”下,加以“包裝”,好讓它可以在承載網(wǎng)絡(比如IP網(wǎng)絡)上傳輸。從主機的角度看,就好像原始報文的起點和終點之間,有一條直通的鏈路一樣。而這個看起來直通的鏈路,就是“隧道”。顧名思義,“VXLAN隧道”便是用來傳輸經(jīng)過VXLAN封裝的報文的,它是建立在兩個VTEP之間的一條虛擬通道。

見招拆招

看到這里,愛思考的你肯定又要問了,VXLAN網(wǎng)絡模型為什么是長這個樣子滴?前文已經(jīng)講到,VXLAN是為了解決云計算時代虛擬化中的一系列問題而產(chǎn)生的一項技術(shù)。下面就讓我們來看下,基于圖2-1的網(wǎng)絡模型, VXLAN是如何見招拆招來解決這一系列問題的。

  • 招式一:隱形

對于“虛擬機規(guī)模受網(wǎng)絡設備表項規(guī)格的限制”這個問題,可能有人會想:換成規(guī)格大一些的接入交換機(比如跟核心或網(wǎng)關(guān)同檔次的設備)不就行了。我只能說,如果你是“壕”,確實可以這么做。但是在不提高網(wǎng)絡建設成本的前提下,如何能解決問題呢?

既然無法提升設備表項規(guī)格,那就只能限制設備上的MAC表項,將大量VM的MAC地址“隱形”。那么,如何做到隱形呢?這時,就該VTEP出場了。

VTEP會將VM發(fā)出的原始報文封裝成一個新的UDP報文,并使用物理網(wǎng)絡的IP和MAC地址作為外層頭,對網(wǎng)絡中的其他設備只表現(xiàn)為封裝后的參數(shù)。也就是說,網(wǎng)絡中的其他設備看不到VM發(fā)送的原始報文。

如果服務器作為VTEP,那從服務器發(fā)送到接入設備的報文便是經(jīng)過封裝后的報文,這樣,接入設備就不需要學習VM的MAC地址了,它只需要根據(jù)外層封裝的報文頭負責基本的三層轉(zhuǎn)發(fā)就可以了。因此,虛擬機規(guī)模就不會受網(wǎng)絡設備表項規(guī)格的限制了。

當然,如果網(wǎng)絡設備作為VTEP,它還是需要學習VM的MAC地址。但是,從對報文進行封裝的角度來說,網(wǎng)絡設備的性能還是要比服務器強很多。

  • 招式二:擴容

對于“傳統(tǒng)網(wǎng)絡的隔離能力有限”這個問題,VXLAN采用了“擴容”的解決方法,引入了類似VLAN ID的用戶標示,也就是前文提到的VNI。一個VNI代表了一個租戶,屬于不同VNI的虛擬機之間不能直接進行二層通信。VTEP在對報文進行VXLAN封裝時,給VNI分配了24比特的空間,這就意味著VXLAN網(wǎng)絡理論上支持多達16M(即:224-1)的租戶隔離。相比VLAN,VNI的隔離能力得到了巨大的提升,有效得解決了云計算中海量租戶隔離的問題。

  • 招式三:暗度陳倉

前面提到,為了保證業(yè)務不中斷,VM的遷移就必須發(fā)生在同一個二層域內(nèi)?,F(xiàn)在,再回頭看下VXLAN網(wǎng)絡模型,你是不是驚奇地發(fā)現(xiàn),有了VTEP的封裝機制和VXLAN隧道后,所謂的 “二層域”就可以輕而易舉的突破物理上的界限?也就是說,在IP網(wǎng)絡中, “明”里傳輸?shù)氖强缭饺龑泳W(wǎng)絡的UDP報文,“暗”里卻已經(jīng)悄悄將源VM的原始報文送達目的VM。就好像在三層的網(wǎng)絡之上,構(gòu)建出了一個虛擬的二層網(wǎng)絡,而且只要IP網(wǎng)絡路由可達,這個虛擬的二層網(wǎng)絡想做多大就做多大?,F(xiàn)在,你應該明白為什么說VXLAN是一種NVO3技術(shù)了吧。

VXLAN報文長啥樣

看過上面的描述,你一定對于封裝后的VXLAN報文有了自己的想象。下面就讓我們來看下,VXLAN報文到底長啥樣。

圖2-2 VXLAN報文格式

image.png

如你所料,VTEP對VM發(fā)送的原始以太幀(Original L2 Frame)進行了以下“包裝”:

  • VXLAN Header

增加VXLAN頭(8字節(jié)),其中包含24比特的VNI字段,用來定義VXLAN網(wǎng)絡中不同的租戶。此外,還包含VXLAN Flags(8比特,取值為00001000)和兩個保留字段(分別為24比特和8比特)。

  • UDP Header

VXLAN頭和原始以太幀一起作為UDP的數(shù)據(jù)。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地址。

本章小結(jié)

本章中,我們介紹了VXLAN的概念、VXLAN網(wǎng)絡模型及VXLAN報文的封裝格式,了解了VXLAN技術(shù)是如何見招拆招解決云計算時代虛擬化中的一系列問題的??吹竭@里,相信你對于VXLAN已經(jīng)有了初步的了解。

有了以上的理論基礎,想必你一定迫不及待的想進一步了解VXLAN的控制面及轉(zhuǎn)發(fā)面的工作原理,比如:

  • VTEP如何確定跟誰建立VXLAN隧道?

  • VXLAN隧道怎么建立起來的?

  • 原始報文如何知道要進入哪條隧道呢?

  • VTEP是如何對報文進行封裝的呢?

下面我們就以CE系列交換機的實現(xiàn)為例,逐一解答你的疑惑。

3 VXLAN報文轉(zhuǎn)發(fā)機制

建立VXLAN隧道

哪些VTEP間需要建立VXLAN隧道

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


image.png

如圖3-1所示,網(wǎng)絡中存在多個VTEP,那么這其中哪些VTEP間需要建立VXLAN隧道呢?

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

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

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


image.png

3.1.2 什么是“同一大二層域”

前面提到的“同一大二層域”,就類似于傳統(tǒng)網(wǎng)絡中VLAN(虛擬局域網(wǎng))的概念,只不過在VXLAN網(wǎng)絡中,它有另外一個名字,叫做Bridge-Domain,簡稱BD。

我們知道,不同的VLAN是通過VLAN ID來進行區(qū)分的,那不同的BD是如何進行區(qū)分的呢?其實前面已經(jīng)提到了,就是通過VNI來區(qū)分的。對于CE系列交換機而言,BD與VNI是1:1的映射關(guān)系,這種映射關(guān)系是通過在VTEP上配置命令行建立起來的。配置如下:


bridge-domain 10   //表示創(chuàng)建一個“大二層廣播域”BD,其編號為10

 vxlan vni 5000  //表示在BD 10下,指定與之關(guān)聯(lián)的VNI為5000

VTEP會根據(jù)以上配置生成BD與VNI的映射關(guān)系表,該映射表可以通過命令行查看,如下所示:

<HUAWEI> display vxlan vni

Number of vxlan vni : 1

VNI            BD-ID            State 

----------------------------------

5000           10               up 

有了映射表后,進入VTEP的報文就可以根據(jù)自己所屬的BD來確定報文封裝時該添加哪個VNI。那么,報文根據(jù)什么來確定自己屬于哪個BD呢?

3.1.3 如何確定報文屬于哪個BD

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

3.1.3.1 哪些報文要進入VXLAN隧道

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

其實在VXLAN網(wǎng)絡中,VTEP上的接口也承擔著類似的任務,只不過在CE系列交換機中,這里的接口不是物理接口,而是一個叫做“二層子接口”的邏輯接口。類似的,二層子接口主要做兩件事:一是根據(jù)配置來檢查哪些報文需要進入VXLAN隧道;二是判斷對檢查通過的報***怎樣的處理。下面我們就來看下,二層子接口是如何完成這兩件事的。

在二層子接口上,可以根據(jù)需要定義不同的流封裝類型(類似于傳統(tǒng)網(wǎng)絡中不同的接口類型)。CE系列交換機目前支持三種不同的流封裝類型,分別是dot1q、untag和default,它們各自對報文的處理方式如表3-1所示。有了這張表,你就能明白哪些報文要進VXLAN隧道了。

表3-1 不同流封裝類型的接口對報文的處理方式

| 流封裝類型 |允許進入VXLAN隧道的報文類型|報文進行封裝前的處理|收到VXLAN報文并解封裝后的處理|

流封裝類型 允許進入VXLAN隧道的報文類型 報文進行封裝前的處理 收到VXLAN報文并解封裝后的處理
dot1q 只允許攜帶指定VLAN Tag的報文進入VXLAN隧道。(這里的“指定VLAN Tag”是通過命令進行配置的) 進行VXLAN封裝前,先剝掉原始報文的外層VLAN Tag。 進行VXLAN解封裝后:若內(nèi)層原始報文帶有VLAN Tag,則先將該VLAN Tag替換為指定的VLAN Tag,再轉(zhuǎn)發(fā);若內(nèi)層原始報文不帶VLAN Tag,則先將其添加指定的VLAN Tag,再轉(zhuǎn)發(fā)。
untag 只允許不攜帶VLAN Tag的報文進入VXLAN隧道。 進行VXLAN封裝前,不對原始報文做處理,即不添加任何VLAN Tag。 進行VXLAN解封裝后,若內(nèi)層原始報文帶有vlan tag,則先將該vlan tag 剝掉,再轉(zhuǎn)發(fā);若內(nèi)層原始報文不帶vlan tag,則直接轉(zhuǎn)發(fā)
default 允許所有報文進入VXLAN隧道,不論報文是否攜帶VLAN Tag。 進行VXLAN封裝前,不對原始報文做處理,即不添加/不替換/不剝掉任何VLAN Tag。 進行VXLAN封裝后,不對原始報文做處理,即不添加/不替換/不剝掉任何VLAN Tag。

VXLAN隧道兩端二層子接口的配置并不一定是完全對等的。正因為這樣,才可能實現(xiàn)屬于同一網(wǎng)段但是不同VLAN的兩個VM通過VXLAN隧道進行通信。

二層子接口加入BD

看了上面的描述,再來回答“如何確定報文屬于哪個BD”就非常簡單了。其實,只要將二層子接口加入指定的BD,然后根據(jù)二層子接口上的配置,就可以確定報文屬于哪個BD啦!

比如圖3-3所示的組網(wǎng),我們可以分別在VTEP的兩個物理接口10GE 1/0/1和10GE 1/0/2上配置不同流封裝類型的二層子接口并將其分別加入不同的BD。

圖3-3 二層子接口加入BD

image.png

基于二層物理接口10GE 1/0/1,分別創(chuàng)建二層子接口10GE 1/0/1.1和10GE 1/0/1.2,且分別配置其流封裝類型為dot1q和untag。配置如下:


interface 10GE1/0/1.1 mode l2   //創(chuàng)建二層子接口10GE1/0/1.1

 encapsulation dot1q vid 10   //只允許攜帶VLAN Tag 10的報文進入VXLAN隧道

 bridge-domain 10   //報文進入的是BD 10



interface 10GE1/0/1.2 mode l2   //創(chuàng)建二層子接口10GE1/0/1.2

 encapsulation untag   //只允許不攜帶VLAN Tag的報文進入VXLAN隧道

 bridge-domain 20   //報文進入的是BD 20

基于二層物理接口10GE 1/0/2,創(chuàng)建二層子接口10GE 1/0/2.1,且流封裝類型為default。配置如下:


interface 10GE1/0/2.1 mode l2   //創(chuàng)建二層子接口10GE1/0/2.1

 encapsulation default   //允許所有報文進入VXLAN隧道

 bridge-domain 30   //報文進入的是BD 30

此時你可能會有這樣的疑問,為什么要在10GE 1/0/1上創(chuàng)建兩個不同類型的子接口?是否還可以繼續(xù)在10GE 1/0/1上創(chuàng)建一個default類型的二層子接口?換句話說,用戶應該如何選擇配置哪種類型的二層子接口?三種類型的二層子接口之間,是否存在配置約束關(guān)系?

3.1.3.3 各類型二層子接口的應用場景

我們先來解答下是否可以在10GE 1/0/1上再創(chuàng)建一個default類型的二層子接口。答案是不可以。其實根據(jù)表3-1的描述,這一點很容易理解。因為default類型的二層子接口允許所有報文進入VXLAN隧道,而dot1q和untag類型的二層子接口只允許某一類報文進入VXLAN隧道。這就決定了,default類型的二層子接口跟其他兩種類型的二層子接口是不可以在同一物理接口上共存的。否則,報文到了接口之后如何判斷要進入哪個二層子接口呢。所以,default類型的子接口,一般應用在經(jīng)過此接口的報文均需要走同一條VXLAN隧道的場景,即下掛的VM全部屬于同一BD。例如,圖3-3中VM3和VM4均屬于BD 30,則10GE 1/0/2上就可以創(chuàng)建default類型的二層子接口。

再來看下為什么可以在10GE 1/0/1上分別創(chuàng)建dot1q和untag類型的二層子接口。如圖3-3所示,VM1和VM2分別屬于VLAN 10和VLAN 20,且分別屬于不同的大二層域BD 10和BD 20,顯然他們發(fā)出的報文要進入不同的VXLAN隧道。如果VM1和VM2發(fā)出的報文在到達VTEP的10GE 1/0/1接口時,一個是攜帶VLAN 10的Tag的,一個是不攜帶VLAN Tag的(比如二層交換機上行連接VTEP的接口上配置的接口類型是Trunk,允許通過的VLAN為10和20,PVID為VLAN 20),則為了區(qū)分兩種報文,就必須要在10GE 1/0/1上分別創(chuàng)建dot1q和untag類型的二層子接口。所以,當經(jīng)過同一物理接口的報文既有帶VLAN Tag的,又有不帶VLAN Tag的,并且他們各自要進入不同的VXLAN隧道,則可以在該物理接口上同時創(chuàng)建dot1q和untag類型的二層子接口。

當然,現(xiàn)網(wǎng)中可能存在各種不同的組網(wǎng),小編也不可能一一列舉出來。所以在實際應用中,請務必根據(jù)組網(wǎng)需求,結(jié)合表3-1,合理規(guī)劃二層子接口的流封裝類型。

3.1.4 VXLAN隧道怎么建

現(xiàn)在,我們可以來看下VXLAN隧道是怎么建立起來的了。

一般而言,隧道的建立不外乎手工方式和自動方式兩種。

  • 手工方式

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

對于CE系列交換機,以上配置是在NVE(Network Virtualization Edge)接口下完成的。配置過程如下:


interface Nve1   //創(chuàng)建邏輯接口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   

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

<HUAWEI> display vxlan vni 5000 verbose

    BD ID                  : 10

    State                  : up

    NVE                     : 288

    Source                 : 1.1.1.1

    UDP Port               : 4789

    BUM Mode               : head-end

    Group Address         : - 

    Peer List              : 2.2.2.2 2.2.2.3 

根據(jù)上表中的Peer List,本端VTEP就可以知道屬于同一BD(或同一VNI)的對端VTEP都有哪些,這也就決定了同一大二層廣播域的范圍。當VTEP收到BUM(Broadcast&Unknown-unicast&Multicast,廣播&未知單播&組播)報文時,會將報文復制并發(fā)送給Peer List中所列的所有對端VTEP(這就好比廣播報文在VLAN內(nèi)廣播)。因此,這張表也被稱為“頭端復制列表”。當VTEP收到已知單播報文時,會根據(jù)VTEP上的MAC表來確定報文要從哪條VXLAN隧道走。而此時Peer List中所列的對端,則充當了MAC表中“出接口”的角色。在后面的報文轉(zhuǎn)發(fā)流程中,你將會看到頭端復制列表是如何在VXLAN網(wǎng)絡中指導報文進行轉(zhuǎn)發(fā)的。

  • 自動方式

自動方式下VXLAN隧道的建立需要借助于其他的協(xié)議,例如BGP。CE系列交換機中,自動方式建立VXLAN隧道主要應用在EVN(Ethernet Virtual Network)和VXLAN的分布式網(wǎng)關(guān)場景中。本文不對該方式進行詳細講述,具體實現(xiàn)可參考EVN的相關(guān)資料

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

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

我們知道,基本的二三層轉(zhuǎn)發(fā)中,二層轉(zhuǎn)發(fā)依賴的是MAC表,如果沒有對應的MAC表,則主機發(fā)送ARP廣播報文請求對端的MAC地址;三層轉(zhuǎn)發(fā)依賴的是FIB表。在VXLAN中,其實也是同樣的道理。下面就讓我們來看下,VXLAN網(wǎng)絡中報文的轉(zhuǎn)發(fā)流程。相信看完下面的內(nèi)容,關(guān)于“如何確定報文要進哪條隧道”的疑惑也就迎刃而解了。

3.2 VXLAN網(wǎng)絡中報文的轉(zhuǎn)發(fā)流程

3.2.1 同子網(wǎng)互通

圖3-4 同子網(wǎng)VM互通組網(wǎng)圖

image.png

如圖3-4所示,VM_A、VM_B和VM_C同屬于10.1.1.0/24網(wǎng)段,且同屬于VNI 5000。此時,VM_A想與VM_C進行通信。

由于是首次進行通信,VM_A上沒有VM_C的MAC地址,所以會發(fā)送ARP廣播報文請求VM_C的MAC地址。

下面就讓我們根據(jù)ARP請求報文及ARP應答報文的轉(zhuǎn)發(fā)流程,來看下MAC地址是如何進行學習的。

  • ARP請求報文轉(zhuǎn)發(fā)流程

圖3-5 ARP請求報文轉(zhuǎn)發(fā)流程

image.png

如圖3-5所示,ARP請求報文的轉(zhuǎn)發(fā)流程如下:

1 VM_A發(fā)送源MAC為MAC_A、目的MAC為全F、源IP為IP_A、目的IP為IP_C的ARP廣播報文,請求VM_C的MAC地址。

2 VTEP_1收到ARP請求后,根據(jù)二層子接口上的配置判斷報文需要進入VXLAN隧道。確定了報文所屬BD后,也就確定了報文所屬的VNI。同時,VTEP_1學習MAC_A、VNI和報文入接口(Port_1,即二層子接口對應的物理接口)的對應關(guān)系,并記錄在本地MAC表中。之后,VTEP_1會根據(jù)頭端復制列表對報文進行復制,并分別進行封裝。

可以看到,這里封裝的外層源IP地址為本地VTEP(VTEP_1)的IP地址,外層目的IP地址為對端VTEP(VTEP_2和VTEP_3)的IP地址;外層源MAC地址為本地VTEP的MAC地址,而外層目的MAC地址為去往目的IP的網(wǎng)絡中下一跳設備的MAC地址。

封裝后的報文,根據(jù)外層MAC和IP信息,在IP網(wǎng)絡中進行傳輸,直至到達對端VTEP。

3 報文到達VTEP_2和VTEP_3后,VTEP對報文進行解封裝,得到VM_A發(fā)送的原始報文。同時,VTEP_2和VTEP_3學習VM_A的MAC地址、VNI和遠端VTEP的IP地址(IP_1)的對應關(guān)系,并記錄在本地MAC表中。之后,VTEP_2和VTEP_3根據(jù)二層子接口上的配置對報文進行相應的處理并在對應的二層域內(nèi)廣播。

VM_B和VM_C接收到ARP請求后,比較報文中的目的IP地址是否為本機的IP地址。VM_B發(fā)現(xiàn)目的IP不是本機IP,故將報文丟棄;VM_C發(fā)現(xiàn)目的IP是本機IP,則對ARP請求做出應答。下面,讓我們看下ARP應答報文是如何進行轉(zhuǎn)發(fā)的。

  • ARP應答報文轉(zhuǎn)發(fā)流程

圖3-6 ARP應答報文轉(zhuǎn)發(fā)流程

image.png

如圖3-6所示,ARP應答報文的轉(zhuǎn)發(fā)流程如下:

4 由于此時VM_C上已經(jīng)學習到了VM_A的MAC地址,所以ARP應答報文為單播報文。報文源MAC為MAC_C,目的MAC為MAC_A,源IP為IP_C、目的IP為IP_A。

5 VTEP_3接收到VM_C發(fā)送的ARP應答報文后,識別報文所屬的VNI(識別過程與步驟2類似)。同時,VTEP_3學習MAC_C、VNI和報文入接口(Port_3)的對應關(guān)系,并記錄在本地MAC表中。之后,VTEP_3對報文進行封裝。

可以看到,這里封裝的外層源IP地址為本地VTEP(VTEP_3)的IP地址,外層目的IP地址為對端VTEP(VTEP_1)的IP地址;外層源MAC地址為本地VTEP的MAC地址,而外層目的MAC地址為去往目的IP的網(wǎng)絡中下一跳設備的MAC地址。

封裝后的報文,根據(jù)外層MAC和IP信息,在IP網(wǎng)絡中進行傳輸,直至到達對端VTEP。

6 報文到達VTEP_1后,VTEP_1對報文進行解封裝,得到VM_C發(fā)送的原始報文。同時,VTEP_1學習VM_C的MAC地址、VNI和遠端VTEP的IP地址(IP_3)的對應關(guān)系,并記錄在本地MAC表中。之后,VTEP_1將解封裝后的報文發(fā)送給VM_A。

至此,VM_A和VM_C均已學習到了對方的MAC地址。之后,VM_A和VM_C將采用單播方式進行通信。單播報文的封裝與解封裝過程,與圖3-6中所展示的類似,本文就不再贅述啦!

不同子網(wǎng)互通

圖3-7 不同子網(wǎng)VM互通組網(wǎng)圖

image

如圖3-7所示,VM_A和VM_B分別屬于10.1.10.0/24網(wǎng)段和10.1.20.0/24網(wǎng)段,且分別屬于VNI 5000和VNI 6000。VM_A和VM_B對應的三層網(wǎng)關(guān)分別是VTEP_3上BDIF 10和BDIF 20的IP地址。VTEP_3上存在到10.1.10.0/24網(wǎng)段和10.1.20.0/24網(wǎng)段的路由。此時,VM_A想與VM_B進行通信。

BDIF接口的功能與VLANIF接口類似,是基于BD創(chuàng)建的三層邏輯接口,用以實現(xiàn)不同子網(wǎng)VM之間或VXLAN網(wǎng)絡與非VXLAN網(wǎng)絡之間的通信。

由于是首次進行通信,且VM_A和VM_B處于不同網(wǎng)段,VM_A需要先發(fā)送ARP廣播報文請求網(wǎng)關(guān)(BDIF 10)的MAC,獲得網(wǎng)關(guān)的MAC后,VM_A先將數(shù)據(jù)報文發(fā)送給網(wǎng)關(guān);之后網(wǎng)關(guān)也將發(fā)送ARP廣播報文請求VM_B的MAC,獲得VM_B的MAC后,網(wǎng)關(guān)再將數(shù)據(jù)報文發(fā)送給VM_B。以上MAC地址學習的過程與同子網(wǎng)互通中MAC地址學習的流程一致,不再贅述?,F(xiàn)在假設VM_A和VM_B均已學到網(wǎng)關(guān)的MAC、網(wǎng)關(guān)也已經(jīng)學到VM_A和VM_B的MAC,下面就讓我們看下數(shù)據(jù)報文是如何從VM_A發(fā)送到VM_B的。

圖3-8 不同子網(wǎng)VM互通報文轉(zhuǎn)發(fā)流程

image

如圖3-8所示,數(shù)據(jù)報文從VM_A發(fā)送到VM_B的流程如下:

1 VM_A先將數(shù)據(jù)報文發(fā)送給網(wǎng)關(guān)。報文的源MAC為MAC_A,目的MAC為網(wǎng)關(guān)BDIF 10的MAC_10,源IP地址為IP_A,目的IP為IP_B。

2 VTEP_1收到數(shù)據(jù)報文后,識別此報文所屬的VNI(VNI 5000),并根據(jù)MAC表項對報文進行封裝??梢钥吹?,這里封裝的外層源IP地址為本地VTEP的IP地址(IP_1),外層目的IP地址為對端VTEP的IP地址(IP_3);外層源MAC地址為本地VTEP的MAC地址(MAC_1),而外層目的MAC地址為去往目的IP的網(wǎng)絡中下一跳設備的MAC地址。

封裝后的報文,根據(jù)外層MAC和IP信息,在IP網(wǎng)絡中進行傳輸,直至到達對端VTEP。

3 報文進入VTEP_3,VTEP_3對報文進行解封裝,得到VM_A發(fā)送的原始報文。然后,VTEP_3會對報***如下處理:

  • VTEP_3發(fā)現(xiàn)該報文的目的MAC為本機BDIF 10接口的MAC,而目的IP地址為IP_B(10.1.20.1),所以會根據(jù)路由表查找到IP_B的下一跳。

  • 發(fā)現(xiàn)下一跳為10.1.20.10,出接口為BDIF 20。此時VTEP_3查詢ARP表項,并將原始報文的源MAC修改為BDIF 20接口的MAC(MAC_20),將目的MAC修改為VM_B的MAC(MAC_B)。

  • 報文到BDIF 20接口時,識別到需要進入VXLAN隧道(VNI 6000),所以根據(jù)MAC表對報文進行封裝。這里封裝的外層源IP地址為本地VTEP的IP地址(IP_3),外層目的IP地址為對端VTEP的IP地址(IP_2);外層源MAC地址為本地VTEP的MAC地址(MAC_3),而外層目的MAC地址為去往目的IP的網(wǎng)絡中下一跳設備的MAC地址。

封裝后的報文,根據(jù)外層MAC和IP信息,在IP網(wǎng)絡中進行傳輸,直至到達對端VTEP。

4 報文到達VTEP_2后,VTEP_2對報文進行解封裝,得到內(nèi)層的數(shù)據(jù)報文,并將其發(fā)送給VM_B。

VM_B回應VM_A的流程與上述過程類似,本文就不再贅述啦!

VXLAN網(wǎng)絡與非VXLAN網(wǎng)絡之間的互通,也需要借助于三層網(wǎng)關(guān)。其實現(xiàn)與圖3-8的不同點在于報文在VXLAN網(wǎng)絡側(cè)會進行封裝,而在非VXLAN網(wǎng)絡側(cè)不需要進行封裝。報文從VXLAN側(cè)進入網(wǎng)關(guān)并解封裝后,就按照普通的單播報文發(fā)送方式進行轉(zhuǎn)發(fā)

3.3 本章小結(jié)

本章主要介紹了VXLAN控制面表項的建立過程及VXLAN網(wǎng)絡中報文的轉(zhuǎn)發(fā)過程??吹竭@里,

相信你對于VXLAN已經(jīng)達到熟悉的階段了。有了上面的理論基礎,接下來,我們可以來了解下VXLAN在現(xiàn)網(wǎng)中是如何部署的了。

4 VXLAN應用部署方式

本篇我們以下圖所示的典型的“Spine-Leaf”數(shù)據(jù)中心組網(wǎng)為例,給大家介紹一下CE系列交換機VXLAN的應用場景和部署方案。

image

在上圖所示的數(shù)據(jù)中心里,企業(yè)用戶擁有多個部門(部門1和部門2),每個部門中擁有多個VM(VM1和VM3,VM2和VM4)。同部門的VM屬于同一個網(wǎng)段,不同部門的VM屬于不同的網(wǎng)段。用戶希望同一部門VM之間、不同部門VM之間,VM與Internet之間均可相互訪問。

4.1 VXLAN網(wǎng)絡的子網(wǎng)互通

4.1.1 相同子網(wǎng)互通

部署方案

如圖4-1所示,Leaf1和Leaf2作為VXLAN網(wǎng)絡的VTEP,兩個Leaf之間搭建VXLAN隧道,并在每個Leaf上部署VXLAN二層網(wǎng)關(guān),即可實現(xiàn)同一部門VM之間的相互通信。此時Spine只作為VXLAN報文的轉(zhuǎn)發(fā)節(jié)點,不感知VXLAN隧道的存在,可以是任意的三層網(wǎng)絡設備。

圖4-1 相同子網(wǎng)互通

image

4.1.2 不同子網(wǎng)互通(集中式網(wǎng)關(guān))

部署方案

如圖4-2所示,Leaf1、Leaf2和Spine作為VXLAN網(wǎng)絡的VTEP,Leaf1和Spine之間、Leaf2和Spine之間分別搭建VXLAN隧道,并在Spine上部署VXLAN三層網(wǎng)關(guān),即可實現(xiàn)不同部門VM之間的相互通信。

圖4-2 不同子網(wǎng)互通(集中式網(wǎng)關(guān))

image

4.1.3 不同子網(wǎng)互通(分布式網(wǎng)關(guān))

出現(xiàn)背景

細心的讀者可能已經(jīng)發(fā)現(xiàn),在不同子網(wǎng)互通(集中式網(wǎng)關(guān))中,同一Leaf(Leaf1)下掛的不同網(wǎng)段VM(VM1和VM2)之間的通信,都需要在Spine上進行繞行,這樣就導致Leaf與Spine之間的鏈路上,存在冗余的報文,額外占用了大量的帶寬。同時,Spine作為VXLAN三層網(wǎng)關(guān)時,所有通過三層轉(zhuǎn)發(fā)的終端租戶的表項都需要在該設備上生成。但是,Spine的表項規(guī)格有限,當終端租戶的數(shù)量越來越多時,容易成為網(wǎng)絡瓶頸。

分布式網(wǎng)關(guān)的出現(xiàn),很好的解決了這兩個問題。

部署方案

  • 同Leaf節(jié)點下不同部門VM之間的通信

如圖4-3所示,Leaf1作為VXLAN網(wǎng)絡的VTEP,在Leaf1上部署VXLAN三層網(wǎng)關(guān),即可實現(xiàn)同Leaf下不同部門VM之間的相互通信。此時,VM1和VM2互訪時,流量只需要在Leaf1節(jié)點進行轉(zhuǎn)發(fā),不再需要經(jīng)過Spine節(jié)點,從而節(jié)約了大量的帶寬資源。

  • 跨Leaf節(jié)點不同部門VM之間的通信

如圖4-3所示,Leaf1和Leaf2作為VXLAN網(wǎng)絡的VTEP,在Leaf1和Leaf2上部署VXLAN三層網(wǎng)關(guān)。兩個VXLAN三層網(wǎng)關(guān)之間通過BGP動態(tài)建立VXLAN隧道,并通過BGP的remote-nexthop屬性發(fā)布本網(wǎng)關(guān)下掛的主機路由信息給其他BGP鄰居,從而實現(xiàn)跨Leaf節(jié)點不同部門VM之間的相互通信。

圖4-3 不同子網(wǎng)互通(分布式網(wǎng)關(guān))

image

Leaf作為VXLAN三層網(wǎng)關(guān)時,只學習其下掛終端租戶的表項,而不必像集中式三層網(wǎng)關(guān)一樣,需要學習網(wǎng)絡中所有終端租戶的表項,從而解決了集中式三層網(wǎng)關(guān)帶來表項瓶頸問題。

4.2 VXLAN網(wǎng)絡的可靠性

隨著網(wǎng)絡的快速普及和應用的日益深入,基礎網(wǎng)絡的可靠性日益成為用戶關(guān)注的焦點,如何能夠保證網(wǎng)絡傳輸不中斷對于終端用戶而言非常重要。

在VXLAN網(wǎng)絡的子網(wǎng)互通中,VM與Leaf之間,Leaf與Spine之間都是通過單歸方式接入的。這種組網(wǎng)接入方式,顯然已經(jīng)不能滿足用戶對VXLAN網(wǎng)絡可靠性的需求。

這時,可以按照如下圖所示方式,提升VXLAN網(wǎng)絡的可靠性。

image

4.2.1 接入層的可靠性

通常采用堆疊(CSS)方式提升接入層的可靠性。這是因為,接入層的設備數(shù)量繁多,堆疊方式可以將多臺交換機設備組合在一起,虛擬化成一臺交換設備,所有配置均在這一臺虛擬交換機上進行,從而簡化了接入層設備的運維復雜度。此外,堆疊系統(tǒng)內(nèi)成員交換機之間在進行冗余備份的同時,能夠利用跨設備的Eth-Trunk實現(xiàn)設備間鏈路的負載分擔。

圖4-4 接入層的可靠性

image

如圖4-4所示,Leaf1和Leaf2組建為堆疊系統(tǒng)CSS-1,Leaf3和Leaf4組建為堆疊系統(tǒng)CSS-2,VM1~VM4均通過雙歸的方式接入到各自的CSS系統(tǒng)中。CSS-1和CSS-2作為VXLAN網(wǎng)絡的VTEP,兩個CSS之間搭建VXLAN隧道,并在每個CSS上部署VXLAN二層網(wǎng)關(guān),從而實現(xiàn)同一部門VM之間的相互通信。

  • 當CSS系統(tǒng)正常時,VM1與VM3之間互訪的流量,通過CSS-1堆疊系統(tǒng)中的Leaf1和Leaf2進行負載分擔轉(zhuǎn)發(fā)。

  • 當CSS系統(tǒng)故障時(Leaf1故障),VM1與VM3之間互訪的流量,全部切換到CSS-1堆疊系統(tǒng)中的Leaf2進行轉(zhuǎn)發(fā),從而實現(xiàn)了流量的不間斷,提升了接入層的可靠性。

4.2.2 核心層的可靠性

通常采用多活網(wǎng)關(guān)方式提升核心層的可靠性。這是因為,核心層設備物理位置較為分散,傳統(tǒng)的設備級備份無法滿足要求,必須通過協(xié)議級備份來實現(xiàn)。

在多活網(wǎng)關(guān)組網(wǎng)中,通過給多臺Spine設備部署相同的網(wǎng)關(guān)信息,將它們對外模擬成VXLAN網(wǎng)絡中的一個虛擬VTEP,然后在所有Spine設備上配置三層網(wǎng)關(guān),使得無論流量發(fā)到哪一個Spine,該設備都可以提供服務,將報文正確轉(zhuǎn)發(fā)給下一跳設備。此外,多活網(wǎng)關(guān)中的多臺Spine之間形成負載分擔關(guān)系,共同進行流量轉(zhuǎn)發(fā)。

圖4-5 核心層的可靠性

image

如圖4-5所示,Spine1、Spine2分別與接入層的堆疊系統(tǒng)CSS-1和CSS-2之間建立VXLAN隧道,在Spine1、Spine2上配置VXLAN三層網(wǎng)關(guān)功能,Spine1、Spine2上部署相同的網(wǎng)關(guān)MAC地址、網(wǎng)關(guān)IP地址以及源VTEP地址,以便對外模擬成一個虛擬的VTEP,從而實現(xiàn)了不同網(wǎng)段VM之間、VM與外網(wǎng)之間的互通。

l 當多活網(wǎng)關(guān)系統(tǒng)正常時,VM1與VM4之間互訪的流量、VM1與Internet之間互訪的流量,通過Spine1和Spine2進行負載分擔轉(zhuǎn)發(fā)。

l 當多活網(wǎng)關(guān)系統(tǒng)故障時(Spine1故障),VM1與VM4之間互訪的流量、VM1與Internet之間互訪的流量,全部切換到Spine2進行轉(zhuǎn)發(fā),從而實現(xiàn)了流量的不間斷,提升了核心層的可靠性。

4.3 VXLAN網(wǎng)絡的部署方案

CE系列交換機支持通過單機方式控制器方式來部署VXLAN網(wǎng)絡。這兩種方式中VXLAN網(wǎng)絡的子網(wǎng)互通以及VXLAN網(wǎng)絡的可靠性的實現(xiàn)均與前面一致,不同點在于VXLAN的配置下發(fā)方式不同:單機方式是通過CLI手動在設備上進行配置,控制器方式是通過控制器向設備下發(fā)配置或流表,設備僅作為轉(zhuǎn)發(fā)器。

下面小編以圖4-6所示組網(wǎng)為例,簡單介紹一下當前CE系列交換機支持的VXLAN控制器部署方式:SNC控制器方式和AC控制器方式。

圖4-6 控制器部署方案

image
  • SNC控制器方式

SNC控制器方式是指通過SNC控制器動態(tài)建立VXLAN隧道。

此方式下,CE系列交換機作為轉(zhuǎn)發(fā)器,無需進行VXLAN配置。VXLAN隧道的創(chuàng)建以及指導報文轉(zhuǎn)發(fā)的表項,均由SNC控制器通過OpenFlow協(xié)議向轉(zhuǎn)發(fā)器下發(fā)。

  • AC控制器方式

AC控制器方式是指通過AC控制器動態(tài)建立VXLAN隧道。

此方式下,CE系列交換機作為轉(zhuǎn)發(fā)器,需要預先完成部分基礎配置(具體配置內(nèi)容請參考產(chǎn)品配置指南),AC控制器通過NETCONF協(xié)議向轉(zhuǎn)發(fā)器下發(fā)建立VXLAN隧道的配置,通過OpenFlow協(xié)議控制報文在隧道中的轉(zhuǎn)發(fā)。

5 尾言

本篇內(nèi)容,我們通過介紹VXLAN出現(xiàn)的時代背景、VXLAN的概念及網(wǎng)絡模型、VXLAN報文的封裝格式,讓你對VXLAN有了初步的了解;通過介紹VXLAN隧道的建立及報文的轉(zhuǎn)發(fā)流程,讓你熟悉了VXLAN的控制面及轉(zhuǎn)發(fā)面的工作機制;通過介紹CE系列交換機VXLAN的應用場景和部署方案,讓你進一步了解VXLAN技術(shù)在現(xiàn)網(wǎng)中是如何運用的。

總之,VXLAN通過MAC-in-UDP的報文封裝,實現(xiàn)了二層報文在三層網(wǎng)絡上的透傳,在云端上架起了一道道無形的“彩虹”,解決了云計算中虛擬化帶來的一系列問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 本篇文章主要介紹了"VXLAN, 一種疊加在L3網(wǎng)絡上的L2網(wǎng)絡 ",主要涉及到VXLAN, 一種疊加在L3網(wǎng)絡上...
    ximitc閱讀 3,308評論 0 7
  • 1. vxlan 簡介 VXLAN 全稱是Virtual eXtensible Local Area Networ...
    殺破魂閱讀 8,974評論 0 20
  • 10點半剛下課的我飛馳在長風街正中間的車道時,風快速地掠過耳朵,晚上涼涼的空氣不像早晨那樣濃稠沉重,這時候總會問自...
    種花家的兔子_ff35閱讀 224評論 2 3
  • 《菜根譚》有言:“寵利毋居人前,德業(yè)毋落人后;受享毋逾分外,修為毋減分中?!?【大意】 追求名利時不要搶在他人之...
    哲理大師閱讀 412評論 0 0
  • 新的一周開始了,早起送走了老大,老二在我?guī)状蔚拇叽俸鸾新曋薪K于起床了(什么時候能改掉賴床的習慣呀),她生氣...
    梔子花開在五月閱讀 160評論 0 0

友情鏈接更多精彩內(nèi)容