最全 VxLAN 知識詳解
來自:?華為
鏈接:https://support.huawei.com/enterprise/zh/doc/EDOC1100087027
如圖1-1所示,VXLAN本質(zhì)上是一種隧道技術(shù),在源網(wǎng)絡(luò)設(shè)備與目的網(wǎng)絡(luò)設(shè)備之間的IP網(wǎng)絡(luò)上,建立一條邏輯隧道,將用戶側(cè)報文經(jīng)過特定的封裝后通過這條隧道轉(zhuǎn)發(fā)。從用戶的角度來看,接入網(wǎng)絡(luò)的服務(wù)器就像是連接到了一個虛擬的二層交換機的不同端口上(可把藍色虛框表示的數(shù)據(jù)中心VXLAN網(wǎng)絡(luò)看成一個二層虛擬交換機),可以方便地通信。



VXLAN如何滿足虛擬機動態(tài)遷移時對網(wǎng)絡(luò)的要求?


VXLAN Header
UDP Header
Outer IP Header
Outer MAC Header
增加VXLAN頭(8字節(jié)),其中包含24比特的VNI字段,用來定義VXLAN網(wǎng)絡(luò)中不同的租戶。此外,還包含VXLAN Flags(8比特,取值為00001000)和兩個保留字段(分別為24比特和8比特)。
VXLAN頭和原始以太幀一起作為UDP的數(shù)據(jù)。UDP頭中,目的端口號(VXLAN Port)固定為4789,源端口號(UDP Src. Port)是原始以太幀通過哈希算法計算后的值。
封裝外層IP頭。其中,源IP地址(Outer Src. IP)為源VM所屬VTEP的IP地址,目的IP地址(Outer Dst. IP)為目的VM所屬VTEP的IP地址。
封裝外層以太頭。其中,源MAC地址(Src. MAC Addr.)為源VM所屬VTEP的MAC地址,目的MAC地址(Dst. MAC Addr.)為到達目的VTEP的路徑中下一跳設(shè)備的MAC地址。

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




dot1q:對于帶有一層VLAN Tag的報文,該類型接口只接收與指定VLAN Tag匹配的報文;對于帶有兩層VLAN Tag的報文,該類型接口只接收外層VLAN Tag與指定VLAN Tag匹配的報文。
untag:該類型接口只接收不帶VLAN Tag的報文。
qinq:該類型接口只接收帶有指定兩層VLAN Tag的報文。
default:允許接口接收所有報文,不區(qū)分報文中是否帶VLAN Tag。不論是對原始報文進行VXLAN封裝,還是解封裝VXLAN報文,該類型接口都不會對原始報文進行任何VLAN Tag處理,包括添加、替換或剝離。




VXLAN二層網(wǎng)關(guān):用于終端接入VXLAN網(wǎng)絡(luò),也可用于同一VXLAN網(wǎng)絡(luò)的子網(wǎng)通信。
VXLAN三層網(wǎng)關(guān):用于VXLAN網(wǎng)絡(luò)中跨子網(wǎng)通信以及訪問外部網(wǎng)絡(luò)。

優(yōu)點:對跨子網(wǎng)流量進行集中管理,網(wǎng)關(guān)的部署和管理比較簡單。
缺點:
轉(zhuǎn)發(fā)路徑不是最優(yōu):同一二層網(wǎng)關(guān)下跨子網(wǎng)的數(shù)據(jù)中心三層流量都需要經(jīng)過集中三層網(wǎng)關(guān)繞行轉(zhuǎn)發(fā)(如圖中藍色虛線所示)。
ARP表項規(guī)格瓶頸:由于采用集中三層網(wǎng)關(guān),通過三層網(wǎng)關(guān)轉(zhuǎn)發(fā)的終端的ARP表項都需要在三層網(wǎng)關(guān)上生成,而三層網(wǎng)關(guān)上的ARP表項規(guī)格有限,這不利于數(shù)據(jù)中心網(wǎng)絡(luò)的擴展。
Spine節(jié)點:關(guān)注于高速IP轉(zhuǎn)發(fā),強調(diào)的是設(shè)備的高速轉(zhuǎn)發(fā)能力。
Leaf節(jié)點:
作為VXLAN網(wǎng)絡(luò)中的二層網(wǎng)關(guān)設(shè)備,與物理服務(wù)器或VM對接,用于解決終端租戶接入VXLAN虛擬網(wǎng)絡(luò)的問題。
作為VXLAN網(wǎng)絡(luò)中的三層網(wǎng)關(guān)設(shè)備,進行VXLAN報文封裝/解封裝,實現(xiàn)跨子網(wǎng)的終端租戶通信,以及外部網(wǎng)絡(luò)的訪問。

同一個Leaf節(jié)點既可以做VXLAN二層網(wǎng)關(guān),也可以做VXLAN三層網(wǎng)關(guān),部署靈活。
Leaf節(jié)點只需要學(xué)習(xí)自身連接服務(wù)器的ARP表項,而不必像集中三層網(wǎng)關(guān)一樣,需要學(xué)習(xí)所有服務(wù)器的ARP表項,解決了集中式三層網(wǎng)關(guān)帶來的ARP表項瓶頸問題,網(wǎng)絡(luò)規(guī)模擴展能力強。


VM_A發(fā)送源MAC為MAC_A、目的MAC為全F、源IP為IP_A、目的IP為IP_C的ARP廣播報文,請求VM_C的MAC地址。
VTEP_1收到ARP請求后,根據(jù)二層子接口上的配置判斷報文需要進入VXLAN隧道。確定了報文所屬BD后,也就確定了報文所屬的VNI。同時,VTEP_1學(xué)習(xí)MAC_A、VNI和報文入接口(Port_1,即二層子接口對應(yīng)的物理接口)的對應(yīng)關(guān)系,并記錄在本地MAC表中。之后,VTEP_1會根據(jù)頭端復(fù)制列表對報文進行復(fù)制,并分別進行封裝。
可以看到,這里封裝的外層源IP地址為本地VTEP(VTEP_1)的IP地址,外層目的IP地址為對端VTEP(VTEP_2和VTEP_3)的IP地址;外層源MAC地址為本地VTEP的MAC地址,而外層目的MAC地址為去往目的IP的網(wǎng)絡(luò)中下一跳設(shè)備的MAC地址。封裝后的報文,根據(jù)外層MAC和IP信息,在IP網(wǎng)絡(luò)中進行傳輸,直至到達對端VTEP。
報文到達VTEP_2和VTEP_3后,VTEP對報文進行解封裝,得到VM_A發(fā)送的原始報文。同時,VTEP_2和VTEP_3學(xué)習(xí)VM_A的MAC地址、VNI和遠端VTEP的IP地址(IP_1)的對應(yīng)關(guān)系,并記錄在本地MAC表中。之后,VTEP_2和VTEP_3根據(jù)二層子接口上的配置對報文進行相應(yīng)的處理并在對應(yīng)的二層域內(nèi)廣播。
VM_B和VM_C接收到ARP請求后,比較報文中的目的IP地址是否為本機的IP地址。VM_B發(fā)現(xiàn)目的IP不是本機IP,故將報文丟棄;VM_C發(fā)現(xiàn)目的IP是本機IP,則對ARP請求做出應(yīng)答。下面,讓我們看下ARP應(yīng)答報文是如何進行轉(zhuǎn)發(fā)的。

由于此時VM_C上已經(jīng)學(xué)習(xí)到了VM_A的MAC地址,所以ARP應(yīng)答報文為單播報文。報文源MAC為MAC_C,目的MAC為MAC_A,源IP為IP_C、目的IP為IP_A。
VTEP_3接收到VM_C發(fā)送的ARP應(yīng)答報文后,識別報文所屬的VNI(識別過程與步驟②類似)。同時,VTEP_3學(xué)習(xí)MAC_C、VNI和報文入接口(Port_3)的對應(yīng)關(guān)系,并記錄在本地MAC表中。之后,VTEP_3對報文進行封裝。
可以看到,這里封裝的外層源IP地址為本地VTEP(VTEP_3)的IP地址,外層目的IP地址為對端VTEP(VTEP_1)的IP地址;外層源MAC地址為本地VTEP的MAC地址,而外層目的MAC地址為去往目的IP的網(wǎng)絡(luò)中下一跳設(shè)備的MAC地址。
封裝后的報文,根據(jù)外層MAC和IP信息,在IP網(wǎng)絡(luò)中進行傳輸,直至到達對端VTEP。
報文到達VTEP_1后,VTEP_1對報文進行解封裝,得到VM_C發(fā)送的原始報文。同時,VTEP_1學(xué)習(xí)VM_C的MAC地址、VNI和遠端VTEP的IP地址(IP_3)的對應(yīng)關(guān)系,并記錄在本地MAC表中。之后,VTEP_1將解封裝后的報文發(fā)送給VM_A。


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。
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)絡(luò)中下一跳設(shè)備的MAC地址。
封裝后的報文,根據(jù)外層MAC和IP信息,在IP網(wǎng)絡(luò)中進行傳輸,直至到達對端VTEP。
報文進入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)絡(luò)中下一跳設(shè)備的MAC地址。
封裝后的報文,根據(jù)外層MAC和IP信息,在IP網(wǎng)絡(luò)中進行傳輸,直至到達對端VTEP。
報文到達VTEP_2后,VTEP_2對報文進行解封裝,得到內(nèi)層的數(shù)據(jù)報文,并將其發(fā)送給VM_B。
推薦閱讀:
完全整理 | 365篇高質(zhì)技術(shù)文章目錄整理
專注服務(wù)器后臺技術(shù)棧知識總結(jié)分享
歡迎關(guān)注交流共同進步

