一、為什么需要VXLAN,傳統的VLAN技術無法解決什么問題?
1. 因為現在虛擬化技術的發展,在數據中心里服務器都模擬成虛擬機,這樣就可以方便的在物理服務器上移動、新增、刪除服務器。
這樣數據中心就會有成千上萬的VM,而且VM一般都會需要分割成組,
或者數據中心租用給很多的用戶,而每個用戶所租用的VM也需要划分成組,這樣的二層隔離,目前大多通過VLAN技術實現的。
但是VLAN技術有一個缺陷就是
VLAN頭預留的長度太短只有12位,最多只能支持4096個,是無法滿足日益增長的VLAN占用需求的。
VXLAN的報文頭內有24位,可以支持2的24次方的VNI個數。(VXLAN中通過VNI來標識,相當於VLAN ID)
2.虛擬機要求能夠移動,也就是在用戶不感知的情況下,從這個服務器遷移到另外一台服務器,還可能直接遷移到異地的數據中心(可 以自行google一下vMotion技術)。
傳統的VLAN無法解決這個問題,因為如果要用戶不感知虛擬機遷移,那么VM的IP地址不能改變,傳統的VLAN無法解決VM遷移不改 變IP地址,因為不同VLAN的IP地址段不同。
但VNI相同的VXLAN內,IP地址在一個網段內,只是使用了不同的IP地址。
二、VXLAN實現機制

如上圖,VM1與VM3可以是異地的兩個VM,但使用VXLAN它們之間可以進行二層傳輸,盡管實際上中間跨越了千山萬水,但VM1只覺得與VM3之間近在咫尺只有一台交換機。
VM發送的數據幀通過VTEP(Virtual Tunnel End Point)封裝/解封裝,在原始的數據幀上添加了VXLAN頭、外層UDP、外層IP頭、外層以太頭,如下圖:

封裝說明:
1.外層目的MAC填的是下一跳的MAC,通常是下一跳路由器的MAC
2.外層目的IP是目的VTEP的IP,源IP地址是本地VTEP的地址。
3.外層UDP的目的端口是一個VXLAN特定的端口。
假設VTEP1與VTEP2之間為初始狀態,且兩端地址如下:

1.配置好VXLAN后,管理員為每個VNI分配一個組播地址,每個VETP都加入到相應的組播轉發樹中。(具體可以參考PIM-SM的組播轉 發樹建立)
2.VM1需要發送目的地址為VM2的192.168.0.101的報文,首先發送一個ARP查詢報文。
3.VTEP1收到該ARP查詢報文,因為ARP查詢的目的地址為全F,封裝成組播報文發送到組播組中。
4.VNI內其它VTEP收到該組播報文,解封裝后學習了VM1的MAC地址與VTEP1地址的映射關系。
5.VTEP2將解封裝后的ARP查詢報文廣播到本地的VNI內所有端口,VM2收到該ARP查詢報文,學習192.168.0.100與VM1的MAC的關 系,並回復一個單播的ARP應答。
6.VTEP2收到ARP應答,封裝成發送給VTEP1的單播報文,發送給VTEP1,VTEP1進而學到VNI 864 -- VTEP2 -- MAC2的映射關系, VM1也學到了192.168.0.101 -- MAC2的映射關系。
參考資料:
《軟件定義網絡: OpenFlow 和 VxLAN》
《Arista Networks VXLAN White Paper》
以下是我個人對VXLAN的粗淺了解加上文檔的總結,請高手多多指教:)