1. 程式人生 > >VXLAN 概念(Part II)- 每天5分鐘玩轉 OpenStack(109)

VXLAN 概念(Part II)- 每天5分鐘玩轉 OpenStack(109)

上一節我們介紹了 VXLAN 的封裝格式以及 VTEP。
今天我們將通過例子討論 VXLAN 封裝和轉發包的過程,以及 Linux 對 VXLAN 的原生支援。

VXLAN 包轉發流程

VXLAN 在 VTEP 間建立隧道,通過 Layer 3 網路傳輸封裝後的 Layer 2 資料。

下面的例子演示了資料如何在 VXLAN 上傳輸:

圖中 Host-A 和 Host-B 位於 VNI 10 的 VXLAN,通過 VTEP-1 和 VTEP-2 之間建立的 VXLAN 隧道通訊。資料傳輸過程如下:

  1. Host-A 向 Host-B 傳送資料時,Host-B 的 MAC 和 IP 作為資料包的目標 MAC 和 IP,Host-A 的 MAC 作為資料包的源 MAC 和 IP,然後通過 VTEP-1 將資料傳送出去。
  2. VTEP-1 從自己維護的對映表中找到 MAC-B 對應的 VTEP-2,然後執行 VXLAN 封裝,加上 VXLAN 頭,UDP 頭,以及外層 IP 和 MAC 頭。此時的外層 IP 頭,目標地址為 VTEP-2 的 IP,源地址為 VTEP-1 的 IP。同時由於下一跳是 Router-1,所以外層 MAC 頭中目標地址為 Router-1 的 MAC。
  3. 資料包從 VTEP-1 傳送出去後,外部網路的路由器會依據外層 IP 頭進行包路由,最後到達與 VTEP-2 連線的路由器 Router-2。
  4. Router-2 將資料包傳送給 VTEP-2。VTEP-2 負責解封資料包,依次去掉外層 MAC 頭,外層 IP 頭,UDP 頭 和 VXLAN 頭。
  5. VTEP-2 依據目標 MAC 地址將資料包傳送給 Host-B。

上面的流程我們看到 VTEP 是 VXLAN 的最核心元件,負責資料的封裝和解封。
隧道也是建立在 VTEP 之間的,VTEP 負責資料的傳送。

Linux 對 VXLAN 的支援

VTEP 可以由專有硬體來實現,也可以使用純軟體實現。
目前比較成熟的 VTEP 軟體實現包括:

  1. 帶 VXLAN 核心模組的 Linux
  2. Open vSwitch

我們先來看 Linux 如何支援 VXLAN,Open vSwitch 方式將在後面章節討論。

實現方式:

  1. Linux vxlan 建立一個 UDP Socket,預設在 8472 埠監聽。
  2. Linux vxlan 在 UDP socket 上接收到 vxlan 包後,解包,然後根據其中的 vxlan ID 將它轉給某個 vxlan interface,然後再通過它所連線的 linux bridge 轉給虛機。
  3. Linux vxlan 在收到虛機發來的資料包後,將其封裝為多播 UDP 包,從網絡卡發出。

到這裡,相信大家對 VXLAN 的原理已經有了大致的瞭解。
下節我們將學習如何在 Neutron 中配置和實施 VXLAN。