VXlan 技術實現原理
Vxlan 概況
VXLAN(Virtual eXtential LAN)意為虛擬可拓展區域網。隨著大資料、雲端計算技術的興起以及虛擬化技術的普及,VLAN技術的弊端逐漸顯現出來,具體表現為如下3個方面:
(1) 虛擬化技術的發展促使大資料、雲端計算技術公司採用單個物理裝置虛擬多臺虛擬機器的方式來進行組網,隨著應用模組的增加,對於支援VLAN數目的要求也在提升,802.1Q標準中的最多支援4094個VLAN的能力已經無法滿足當下需求。
(2) 公有云提供商的業務要求將實體網路租借給多個不同的使用者,這些使用者對於網路的要求有所不同,而不同使用者租借的網路有很大的可能會出現IP地址、MAC地址的重疊,傳統的VLAN僅僅解決了同一鏈路層網路廣播域隔離的問題,而並沒有涉及到網路地址重疊的問題,因此需要一種新的技術來保證在多個租戶網路中存在地址重疊的情況下依舊能有效通訊的技術。
(3) 虛擬化技術的出現增加了交換機的負擔,對於大型的資料中心而言,單臺交換機必須支援數十臺以上主機的通訊連線才足以滿足應用需求,而虛擬化技術使得單臺主機可以虛擬化出多臺虛擬機器同時執行,而每臺虛擬機器都會有其唯一的MAC地址。這樣,為了保證叢集中所有虛機可以正常通訊,交換機必須儲存每臺虛機的MAC地址,這樣就導致了交換機中的MAC表異常龐大,從而影響交換機的轉發效能。
基於以上需求,VXLAN技術被提出。
VXLAN技術是網路Overlay技術的一種實現,對於Overlay技術,筆者的理解是:在基於物理網路拓撲的基礎上通過一定的技術來構建虛擬的、不同於物理網路拓撲的邏輯網路,而物理網路的拓撲結構對於Overlay終端而言是透明的,終端不會感知到物理網路的存在,而僅僅能感知到邏輯網路結構。對於終端的視角,網路的情況和直接通過物理裝置實現邏輯拓撲的效果是相同的。VXLAN技術可以基於三層網路結構來構建二層虛擬網路,通過VLAN技術可以將處於不同網段網路裝置整合在同一個邏輯鏈路層網路中,對於終端使用者而言,這些網路裝置似乎“真實地”部署在了同一個鏈路層網路中。
VXlan格式及封裝格式
VXLAN通過將邏輯網路中通訊的資料幀封裝在物理網路中進行傳輸,封裝和解封裝的過程由VTEP節點完成。VXLAN將邏輯網路中的資料幀新增VXLAN首部後,封裝在物理網路中的UDP報文中傳送,VXLAN首部的格式如下:
VXLAN首部由8個位元組組成,第1個位元組為標誌位,其中標誌位I設為1表示是一個合法的VXLAN首部,其餘標誌則保留,在傳輸過程中必須置為0;第2-4位元組為保留部分,第5-7位元組為VXLAN識別符號,用來表示唯一的一個邏輯網路;第8個位元組同樣為保留欄位,暫未使用。
VXLAN傳輸過程中,將邏輯鏈路網路的資料幀新增VXLAN首部後,依次新增UDP首部,IP首部,乙太網幀首部後,在物理網路中傳輸,資料幀的封裝格式可以用下圖來描述:
需要注意的是,外部UDP首部的目的埠號為4789,該數值為預設VXLAN解析程式的埠,外層IP首部中的源IP和目的IP地址均填寫通訊雙方的VTEP地址,協議的其餘部分和傳統網路相同。
VXlan 通訊
下面簡要說明VXLAN網路中的通訊過程。對於處於同一個VXLAN的兩臺虛擬終端,其通訊過程可以概括為如下的步驟:
① 傳送方向接收方傳送資料幀,幀中包含了傳送方和接收方的虛擬MAC地址。
② 傳送方連線的VTEP節點收到了資料幀,通過查詢傳送方所在的VXLAN以及接收方所連線的VTEP節點,將該報文新增VXLAN首部、外部UDP首部、外部IP首部後,傳送給目的VTEP節點。
③ 報文經過物理網路傳輸到達目的VTEP節點。
④ 目的VTEP節點接收到報文後,拆除報文的外部IP首部和外部UDP首部,檢查報文的VNI以及內部資料幀的目的MAC地址,確認接收方與本VTEP節點相連後,拆除VXLAN首部,將內部資料幀交付給接收方。
⑤ 接收方收到資料幀,傳輸完成。
通過以上的步驟可以看出:VXLAN的實現細節以及通訊過程對於處於VXLAN中的傳送方和接收方是不可見的,基於傳送方和接收方的視角,其通訊過程和二者真實處於同一鏈路層網路中的情況完全相同。
以上通訊方式可以用下圖來描述:
另外一篇文章對Vxlan通訊講解
VXLAN 在 VTEP 間建立隧道,通過 Layer 3 網路傳輸封裝後的 Layer 2 資料。
下面的例子演示了資料如何在 VXLAN 上傳輸:
圖中 Host-A 和 Host-B 位於 VNI 10 的 VXLAN,通過 VTEP-1 和 VTEP-2 之間建立的 VXLAN 隧道通訊。
資料傳輸過程如下:
Host-A 向 Host-B 傳送資料時,Host-B 的 MAC 和 IP 作為資料包的目標 MAC 和 IP,Host-A 的 MAC 作為資料包的源 MAC 和 IP,然後通過 VTEP-1 將資料傳送出去。
VTEP-1 從自己維護的對映表中找到 MAC-B 對應的 VTEP-2,然後執行 VXLAN 封裝,加上 VXLAN 頭,UDP 頭,以及外層 IP 和 MAC 頭。此時的外層 IP 頭,目標地址為 VTEP-2 的 IP,源地址為 VTEP-1 的 IP。同時由於下一跳是 Router-1,所以外層 MAC 頭中目標地址為 Router-1 的 MAC。
資料包從 VTEP-1 傳送出去後,外部網路的路由器會依據外層 IP 頭進行包路由,最後到達與 VTEP-2 連線的路由器 Router-2。
Router-2 將資料包傳送給 VTEP-2。VTEP-2 負責解封資料包,依次去掉外層 MAC 頭,外層 IP 頭,UDP 頭 和 VXLAN 頭。
VTEP-2 依據目標 MAC 地址將資料包傳送給 Host-B。
上面的流程我們看到 VTEP 是 VXLAN 的最核心元件,負責資料的封裝和解封。
隧道也是建立在 VTEP 之間的,VTEP 負責資料的傳送。