vxlan

VXLAN能解決哪些問題

1、服務器虛擬化技術,允許在物理機上運行多個MAC地址各不相同的虛擬機,隨着數量的增加,交換機上的MAC地址表將劇烈膨脹,甚至需要MAC覆蓋。
2、數據中心多以VLAN爲虛擬機劃分網絡,但是VLAN數量受制於VLAN(802.1Q)協議4096,這遠遠滿足不了現實的需求。
3、多租戶環境的要求,其每個租戶都有自己隔離的網絡環境,導致物理網絡中每個租戶所分配的MAC地址和VLAN ID會存在重疊的可能。
4、Spanning Tree Protocol (STP)算法會產生大量多路路徑冗餘。
5、支持遠距離虛擬機遷移,避免處理複雜的L2 (VLAN)網絡環境。
6、ToR(Top of Rack) Switch鏈接着物理server,它記錄着各個server/VM相的MAC地址映射表。當地址映射表滿時,ToR就會停止學習新的地址,這樣就會導致網絡泛洪,直到有記錄過期被換出,騰出空閒表項。

VXLAN介紹
VXLAN(Virtual eXtensible Local Area Network)是一種將二層報文用三層協議進行封裝的技術,可以對二層網絡在三層範圍進行擴展。每個覆蓋域被稱爲VXLAN segment,它的ID是由位於VXLAN數據包頭中的VXLAN Network Identifier(VNI)標識的。VNI字段包含24 bits,故segments最大數量爲2的24次方,約合16M個。並且只有在相同VXLAN segment內的虛擬機之間纔可以相互通信。
根據VXLAN的封包方式,也可以將它看做一種隧道模式的網絡覆蓋技術,這種隧道是無狀態的。隧道端點VTEP (VXLAN Tunnel End Point - an entity which originates and/or terminates VXLAN tunnels),它一般位於擁有虛擬機的hypervisor宿主機中,因此VNI(VXLAN Network Identifier or VXLAN Segment ID)和VXLAN隧道只有VTEP可見,對於虛擬機是透明的,那麼不同的VXLAN segment中就允許具有相同MAC地址的虛擬機。並且VTEP也可以位於物理交換機或物理主機中,甚至可以使用軟件來定義。VTEP (單播時是兩個VTEP或多播時是多個VTEP)之間完全是通過L3協議交互的,這也就意味着VTEP間可以由Router相連,而非類似於GRE模式的固定端到端隧道連接。

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

 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。

轉自:http://www.cnblogs.com/CloudMan6/p/6034721.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章