VXLAN即虛拟擴展局域網,是大(dà)二層網絡中(zhōng)廣泛使用的網絡虛拟化技術。在源網絡設備與目的網絡設備之間建立一(yī)條邏輯VXLAN隧道,采用MAC in UDP(User Datagram Protocol)封裝方式,即,将虛拟機發出的原始以太報文完整的封裝在UDP報文中(zhōng),然後在外(wài)層使用物(wù)理網絡的IP報文頭和以太報文頭封裝,這樣,封裝後的報文就像普通IP報文一(yī)樣,可以通過路由網絡轉發,這就像給二層網絡的虛拟機插上了路由的翅膀,使虛拟機徹底擺脫了二、三層網絡的結構限制。
爲什麽需要VXLAN
與服務器的虛拟化趨勢緊密相關,一(yī)方面虛拟機動态遷移,要求虛拟機在遷移前後的IP和MAC地址不能改變;另一(yī)方面,租戶數量激增,需要網絡提供隔離(lí)海量租戶的能力。
虛拟機動态遷移
服務器虛拟化技術是把一(yī)台物(wù)理服務器虛拟化成多台邏輯服務器,這種邏輯服務器被稱爲虛拟機(VM)。通過服務器虛拟化,可以有效地提高服務器的利用率,降低能源消耗,降低運營成本,所以虛拟化技術目前得到了廣泛的應用。
在服務器虛拟化後,虛拟機動态遷移變得常态化,爲了保證遷移時業務不中(zhōng)斷,就要求在虛拟機遷移時,不僅虛拟機的IP地址不變,而且虛拟機的運行狀态也必須保持原狀(例如TCP會話(huà)狀态),所以虛拟機的動态遷移隻能在同一(yī)個二層域中(zhōng)進行,而不能跨二層域遷移。
傳統的三層網絡架構限制了虛拟機的動态遷移範圍,遷移隻能在一(yī)個較小(xiǎo)的局部範圍内進行,應用受到了極大(dà)的限制。
爲了打破這種限制,實現虛拟機的大(dà)範圍甚至跨地域的動态遷移,就要求把VM遷移可能涉及的所有服務器都納入同一(yī)個二層網絡域,這樣才能實現VM的大(dà)範圍無障礙遷移。
衆所周知(zhī),同一(yī)台二層交換機可以實現下(xià)挂服務器之間的二層通信,而且服務器從該二層交換機的一(yī)個端口遷移到另一(yī)個端口時,IP地址是可以保持不變的。這樣就可以滿足虛拟機動态遷移的需求。VXLAN的設計理念和目标正是由此而來的。
VXLAN提供一(yī)套方法論,在IP網絡基礎上,當源和目的之間有通信需求時,便在IP網絡之上創建一(yī)條虛拟的隧道,透明轉發用戶數據。任意兩點之間都能通過VXLAN隧道來通信,忽略底層網絡的結構和細節。從服務器的角度看,VXLAN爲它們将整個基礎網絡虛拟成了一(yī)台巨大(dà)的“二層交換機”,所有服務器都連接在這台虛拟二層交換機上。
VXLAN将整個基礎網絡虛拟成了一(yī)台巨大(dà)的“二層交換機”
基于這種“二層交換機”的模型,就很容易理解爲什麽VXLAN可以實現VM動态遷移了:将虛拟機從“二層交換機”的一(yī)個端口換到另一(yī)個端口,完全無需變更IP地址。
租戶數量激增
在傳統的VLAN網絡中(zhōng),标準定義所支持的可用VLAN數量隻有4000個左右。服務器虛拟化後,一(yī)台物(wù)理服務器中(zhōng)承載了多台虛拟機,每個虛拟機都有獨立的IP地址和MAC地址,相當于服務器成倍擴大(dà)。例如,公有雲或其它大(dà)型虛拟化雲數據中(zhōng)心動辄需容納上萬甚至更多租戶,VLAN顯然無法支撐大(dà)量的租戶。
針對以上問題,VXLAN在幀頭中(zhōng)引入了類似VLAN ID的網絡标識,稱爲VXLAN網絡标識VNI(VXLAN Network ID),由24比特組成,理論上可支持多達16M的VXLAN段,從而滿足了大(dà)規模不同租戶之間的标識、隔離(lí)需求。
VXLAN與VLAN之間有何不同
VLAN作爲傳統的網絡隔離(lí)技術,在标準定義中(zhōng)VLAN的數量隻有4000個左右,無法滿足大(dà)二層網絡的租戶間隔離(lí)需求。另外(wài),VLAN的二層範圍一(yī)般較小(xiǎo)且固定,無法支持虛拟機大(dà)範圍的動态遷移。
VXLAN完美地彌補了VLAN的上述不足,一(yī)方面通過VXLAN中(zhōng)的24比特VNI字段,提供多達16M租戶的标識能力,遠大(dà)于VLAN的4000;另一(yī)方面,VXLAN本質上在兩台交換機之間構建了一(yī)條穿越基礎IP網絡的虛拟隧道,将IP基礎網絡虛拟成一(yī)個巨型“二層交換機”,即大(dà)二層網絡,滿足虛拟機大(dà)範圍動态遷移的需求。
雖然從名字上看,VXLAN是VLAN的一(yī)種擴展協議,但VXLAN構建虛拟隧道的本領已經與VLAN迥然不同。
VXLAN報文格式(以外(wài)層IP頭爲IPv4格式爲例)
如上圖所示,VTEP對VM發送的原始以太幀(Original L2 Frame)進行了以下(xià)“包裝”:
-
VXLAN Header增加VXLAN頭(8字節),其中(zhōng)包含24比特的VNI字段,用來定義VXLAN網絡中(zhōng)不同的租戶。此外(wài),還包含VXLAN Flags(8比特,取值爲00001000)和兩個保留字段(分(fēn)别爲24比特和8比特)。
-
UDP HeaderVXLAN頭和原始以太幀一(yī)起作爲UDP的數據。UDP頭中(zhōng),目的端口号(VXLAN Port)固定爲4789,源端口号(UDP Src. Port)是原始以太幀通過哈希算法計算後的值。
-
Outer IP Header封裝外(wài)層IP頭。其中(zhōng),源IP地址(Outer Src. IP)爲源VM所屬VTEP的IP地址,目的IP地址(Outer Dst. IP)爲目的VM所屬VTEP的IP地址。
-
Outer MAC Header封裝外(wài)層以太頭。其中(zhōng),源MAC地址(Src. MAC Addr.)爲源VM所屬VTEP的MAC地址,目的MAC地址(Dst. MAC Addr.)爲到達目的VTEP的路徑中(zhōng)下(xià)一(yī)跳設備的MAC地址。VXLAN如何工(gōng)作
VXLAN中(zhōng)的VTEP和VNI
兩台服務器之間通過VXLAN網絡進行通信,在兩台TOR交換機之間建立了一(yī)條VXLAN隧道,TOR交換機将服務器發出的原始數據幀加以“包裝”,讓原始報文可以在承載網絡(比如IP網絡)上傳輸。當到達目的服務器所連接的TOR交換機後,離(lí)開(kāi)VXLAN隧道,并将原始數據幀恢複出來,繼續轉發給目的服務器。
什麽是VXLAN VTEN
VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端點)是VXLAN網絡的邊緣設備,是VXLAN隧道的起點和終點,源服務器發出的原始數據幀,在VTEP上被封裝成VXLAN格式的報文,并在IP網絡中(zhōng)傳遞到另外(wài)一(yī)個VTEP上,并經過解封轉還原出原始的數據幀,最後轉發給目的服務器。
什麽是VXLAN VNI
VNI還可分(fēn)爲二層VNI和三層VNI,它們的作用不同,二層VNI是普通的VNI,用于VXLAN報文同子網的轉發;三層VNI和VPN實例進行關聯,用于VXLAN報文跨子網的轉發。
VXLAN的網關
根據三層網關部署方式的不同,VXLAN三層網關又(yòu)可以分(fēn)爲集中(zhōng)式網關和分(fēn)布式網關。
- VXLAN集中(zhōng)式網關 -
集中(zhōng)式網關是指将三層網關集中(zhōng)部署在一(yī)台設備上,如下(xià)圖所示,所有跨子網的流量都經過這個三層網關轉發,實現流量的集中(zhōng)管理。
VXLAN集中(zhōng)式網關組網圖
部署集中(zhōng)式網關的優點和缺點如下(xià):
-優點:
-
對跨子網流量進行集中(zhōng)管理,網關的部署和管理比較簡單。
-缺點:
-
轉發路徑不是最優:同一(yī)二層網關下(xià)跨子網的三層流量都需要經過集中(zhōng)三層網關繞行轉發(如圖中(zhōng)藍(lán)色虛線所示)。
-
ARP表項規格瓶頸:由于采用集中(zhōng)三層網關,通過三層網關轉發的終端的ARP表項都需要在三層網關上生(shēng)成,而三層網關上的ARP表項規格有限,限制了網絡的擴展。
- VXLAN分(fēn)布式網關 -
通過部署分(fēn)布式網關可以解決集中(zhōng)式網關部署的缺點。VXLAN分(fēn)布式網關是指在典型的“Spine-Leaf”組網結構下(xià),将Leaf節點作爲VXLAN隧道端點VTEP,每個Leaf節點都可作爲VXLAN三層網關(同時也是VXLAN二層網關),Spine節點不感知(zhī)VXLAN隧道,隻作爲VXLAN報文的轉發節點。如下(xià)圖所示,Server1和Server2不在同一(yī)個網段,但是都連接到同一(yī)個Leaf節點。Server1和Server2通信時,流量隻需要在該Leaf節點上轉發,不再需要經過Spine節點。
部署分(fēn)布式網關時:
Spine節點:
-
關注于高速IP轉發,強調的是設備的高速轉發能力。
Leaf節點:
-
作爲VXLAN網絡中(zhōng)的二層網關設備,與物(wù)理服務器或VM對接,用于解決終端租戶接入VXLAN虛拟網絡的問題。
-
作爲VXLAN網絡中(zhōng)的三層網關設備,進行VXLAN報文封裝/解封裝,實現跨子網的終端租戶通信,以及外(wài)部網絡的訪問。
VXLAN分(fēn)布式網關示意圖
特點:
-
同一(yī)個Leaf節點既可以做VXLAN二層網關,也可以做VXLAN三層網關,部署靈活。
-
Leaf節點隻需要學習自身連接服務器的ARP表項,而不必像集中(zhōng)三層網關一(yī)樣,需要學習所有服務器的ARP表項,解決了集中(zhōng)式三層網關帶來的ARP表項瓶頸問題,網絡規模擴展能力強。
VXLAN隧道建立标準
“大(dà)二層網絡”可以突破物(wù)理上的界限,實現“大(dà)二層網絡”中(zhōng)VM之間的通信,同一(yī)“大(dà)二層網絡”内的VTEP之間都需要建立VXLAN隧道。VTEP_1連接的VM、VTEP_2連接的VM以及VTEP_3連接的VM之間需要“大(dà)二層”互通,那VTEP_1、VTEP_2和VTEP_3之間就需要兩兩建立VXLAN隧道。
VXLAN隧道的建立
VXLAN隧道由一(yī)對VTEP IP地址确定,創建VXLAN隧道實際上是兩端VTEP獲取對端VTEP IP地址的過程,隻要對端VTEP IP地址是三層路由可達的,VXLAN隧道就可以建立成功。
VXLAN隧道的建立分(fēn)爲靜态方式和動态方式兩種:
-
靜态方式沒有控制平面,用戶通過手動指定VXLAN隧道的源IP爲本端VTEP的IP、目的IP爲對端VTEP的IP,建立VXLAN隧道。靜态方式手工(gōng)配置工(gōng)作量大(dà),靈活性較差,不适合大(dà)規模的組網場景。
-
動态方式的VXLAN隧道的建立借助VXLAN EVPN協議作爲VXLAN的控制平面,在兩端VTEP之間建立BGP EVPN對等體(tǐ),然後對等體(tǐ)之間利用VXLAN EVPN路由實現VTEP的自動發現、主機信息相互通告等,從而實現動态建立VXLAN隧道。數據平面則依據控制平面建立的轉發表項執行報文的轉發。動态方式靈活性高,适合大(dà)規模的VXLAN組網場景。
VXLAN網絡中(zhōng)的報文如何轉發
集中(zhōng)式VXLAN中(zhōng)同子網互通流程
同子網VM互通組網圖
VM_A、VM_B和VM_C屬于同網段。此時,VM_A想與VM_C進行通信,首次進行通信,報文進行如下(xià)處理:
-
VM_A上沒有VM_C的MAC地址,所以會發送ARP廣播報文請求VM_C的MAC地址。
-
VTEP_1收到ARP請求後,先進行VXLAN封裝,然後将VXLAN報文複制多份分(fēn)别發送給所有的對端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将采用單播方式進行通信。
集中(zhōng)式VXLAN中(zhōng)跨子網互通流程
不同子網VM互通流程示意
跨子網報文轉發需要通過三層網關實現。如上圖所示,VM_A、VM_B屬于不同網段。VM_A與VM_B進行通信的報文處理過程如下(xià):
-
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的下(xià)一(yī)跳,發現出接口爲BDIF 20,VTEP_3将報文重新進行VXLAN封裝,然後将VXLAN報文發送給對端VTEP_2。
-
報文到達VTEP_2後,VTEP_2對報文進行解封裝,并将其發送給VM_B。
*注:本文素材來自華爲,版權歸作者所有