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

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

VXLAN 包轉發流程

VXLAN 在 VTEP 間創建隧道,經過 Layer 3 網絡傳輸封裝後的 Layer 2 數據。
下面的例子演示了數據如何在 VXLAN 上傳輸:網絡

圖中 Host-A 和 Host-B 位於 VNI 10 的 VXLAN,經過 VTEP-1 和 VTEP-2 之間創建的 VXLAN 隧道通訊。
數據傳輸過程以下:socket

  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。spa

  3. 數據包從 VTEP-1 發送出去後,外部網絡的路由器會依據外層 IP 頭進行包路由,最後到達與 VTEP-2 鏈接的路由器 Router-2。路由

  4. Router-2 將數據包發送給 VTEP-2。VTEP-2 負責解封數據包,依次去掉外層 MAC 頭,外層 IP 頭,UDP 頭 和 VXLAN 頭。it

  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。

 

blob.png

相關文章
相關標籤/搜索