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 Frame Format
 

(1)     Inner Ethernet Header[8+8+4]20字節
 
   Inner Dest MAC Address:目的虛擬機的MAC地址。
   Inner Source MAC Address:源虛擬機的MAC地址。
Optional Ethertype:可選的VLAN tag。

(2)VXLAN Header[1+3+3+1]8字節
 
Flags(8 bits) :I標記位(從左到右第5個bit)必須設置爲1,其餘7個R標記位置0。
    VXLAN Network Identifier(VNI) :24bit的值,用來標識VXLAN覆蓋網絡的編號。
    Reserved fields:24 bits + 8 bits,置爲0有效。

(3)Outer UDP Header[2+2+2+2]8字節
 
     Source端口:由VTEP提供,端口值由hash算法計算所得。
     Dest端口:爲了網絡的交互特性,一般設置爲4789。
     UDP校驗和:一般爲0,非0則此包將會被丟棄。

(4)Outer IP Header[4+4+12]20字節
 
    Outer Source IPv4 Address:發送端VTEP(見上文介紹)的IP地址。
    Protocl:置爲0x11(即17)表明包含UDP包。
Outer Dest IPv Address:可以是單播也可以是多播地址。大多數情況是目標接收端VTEP的IP地址,如果沒有則會執行ARP請求來獲取,具體步驟如下:
        1:目標IP被替換爲與源虛擬機具有相同VNI的多播組IP地址。
2:所有的VTEP端都接收此多播包,VTEP查找所在主機上的全部虛擬機來匹配源虛擬機的Inner Dest MAC Address。
        3:目標VTEP上的虛擬機會迴應這個多播包,從而獲知目標VTEP IP地址。
4:發送端VTEP添加(VNI -- VTEP -- 虛擬機MAC地址)映射關係到自己的VXLAN表中,避免再次組播學習過程。

    (5)Outer Ethernet Header[6+6+4+2]18字節
 
          Outer Dest MAC Address:一般被設置爲接收端VTEP設備的MAC地址,或者下一跳設備端口的MAC地 址。(純粹的L3網絡傳輸過程)
          Outer Source MAC Address:發送端VTEP設備的MAC地址。
          OptnlEthtype VLAN:指定Ethertype爲0x8100,並且指定VLAN tag。


四 、VXLAN網絡中VM間通信過程
在VXLAN模式的網絡環境中:源虛擬機發送出去的L2數據包(Inner Ethernet Header + Payload),由send VTEP使用VXLAN Header (由VNI標識所屬的segment)將L2數據包封裝,然後依次追加UDP Header + 標準IP Header + 標準MAC Header;發出後由L3協議通過標準IP Header轉發;根據UDP目的端口發現VXLAN包頭,匹配VNI找到receives VTEP;最後receives VTEP解包,由L2數據包頭找到目標虛擬機,交互Payload數據。

VM間通信舉例:

 

VM1要向VM2發送數據前,必須要知道VM2的MAC地址,其獲取過程如下:
         1、VM1發送ARP請求包,請求192.168.0.101[VM2_IP]的MAC地址;
         2、ARP請求包被VTEP1封裝成多播包,發給VNI=864的多播組;
         3、所有的VTEP接收此多播包,並添加(VNI–VTEP1–VM1_MAC Address)映射關係到自己的VXLAN表中;
         4、目的主機上的VTEP2接收到多播包後將其解開,並向本主機上VNI=864的所有虛擬機發送廣播包;
         5、VM2看到了ARP包後,迴應了自己的MAC地址;
         6、VTEP2再次封裝回應的單播包,通過路由發給VTEP1;
         7、VTEP1解包,並將包傳給VM1,則最終獲取了VM2的MAC地址;
         8、VTEP1將(VNI–VTEP2–VM2_MAC Address)映射關係添加到自己的VXLAN表中;

VM1獲知VM2的MAC地址後,發送數據包,過程如下:
1、  VM1發送IP數據包到VM2,即192.168.0.100 到 192.168.0.101;
2、  VTEP1查找自己的VXLAN表知道要發給VTEP2,然後依次封裝以下數據包頭;
a)VXLAN包頭,VNI=864;
b)標準UDP包頭,校驗和checksum爲0x0000,目標端口號4789;
c)標準IP包頭,目標地址爲VTEP2的IP地址,協議號設爲0x11表面爲UDP包。
d)標準MAC數據包,目標地址爲下一跳設備的MAC地址00:10:11:FE:D8:D2,可路由到目標隧道端VTEP2。
3、  VTEP2接收數據包,根據UDP的destination端口找到VXLAN數據包。接着查找所有所在VXLAN的VNI爲864的端口組,找到VM2的
4、  VM2接收並處理數據包,拿到Payload數據。


五 、VXLAN的部署場景
         VXLAN && VXLAN
 
         VXLAN多用於數據中心的虛擬機化環境中,可以穿越機架甚至是數據中心。如上圖兩個宿主機Server1和Server2,它們可以位於同一個機架也可以位於不同機架,還可以位於不同的數據中心,只要直接由L3網絡相連即可,其本質是VETP可以跨越L3。
上圖中有4個VXLAN覆蓋網絡:
VNI=11表示爲[{Server1[VM1-1]}, {Server2[VM2-4]}]
VNI=34表示爲[{Server1[VM1-2]}, {Server2[VM2-1]}]
VNI=74表示爲[{Server1[VM1-3]}, {Server2[VM2-2]}]
VNI=98表示爲[{Server1[VM1-4]}, {Server2[VM2-3]}]

         VXLAN && non-VLXAN
 

         VXLAN網絡和非VXLAN網絡互連就得需要VXLAN gateway,非VXLAN一般爲VLAN類型網絡。VXLAN網關會剝去數據包的VXLAN包頭,將數據包發送到端口MAC地址與Inner Destination MAC Address相同的端口完成數據傳輸。如果non-VXLAN網絡環境使用的VLAN協議,則應該注意Inner Ethernet Header中的VLAN ID設置,總之無論數據是進還是出,VLAN ID不用時可以丟棄不管,使用時必須正確指定。值得說明的是:VXLAN網關可用硬件實現,也可以用軟件實現。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章