Vxlan基礎理解


一 . 為什么需要Vxlan
 
1. vlan的數量限制
   4096個vlan遠不能滿足大規模雲計算數據中心的需求
 
2. 物理網絡基礎設施的限制
   基於I P子網的區域划分限制了需要二層網絡連通性的應用負載的部署
 
3. TOR交換機MAC表耗盡
    虛擬化以及東西向流量導致更多的MAC表項
 
4. 多租戶場景
    IP地址重疊?
 
 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模式的固定端到端隧道連接。
 
1. Vxlan報文
    vxlan(virtual Extensible LAN)虛擬可擴展局域網,是一種overlay的網絡技術,使用MAC in UDP的方法進
行封裝,共50字節的封裝報文頭。具體的報文格式如下:
 
(1) vxlan header
    共計8個字節,目前使用的是Flags中的一個8bit的標識位和24bit的VNI(Vxlan Network identifier),
其余部分沒有定義,但是在使用的時候必須設置為0x0000。
 
(2) 外層的UDP報頭
     目的端口使用4798,但是可以根據需要進行修改。同時UDP的校驗和必須設置成全0。
 
(3) IP報文頭
     目的IP地址可以是單播地址,也可以是多播地址。單播情況下,目的IP地址是Vxlan Tunnel End Point
(VTEP)的IP地址。在多播情況下引入VXLAN管理層, 利用VNI和IP多播組的映射來確定VTEPs。???
  • protocol:設置值為0x11,顯示說明這是UDP數據包
  • Source ip: 源VTEP_IP;
  • Destination ip: 目的VTEP IP。
(4) Ethernet Header
  • Destination Address:目的VTEP的Mac 地址,即為本地下一跳的地址(通常是網關Mac 地址);
  • VLAN: VLAN Type被設置為0x8100, 並可以設置Vlan Id tag(這就是vxlan的vlan 標簽)。
  • Ethertype:設置值為0x8000,指明數據包為IPv4的。
補充:VTEP的作用?    
     用於對VXLAN報文進行封裝/解封裝,包括ARP請求報文和正常的VXLAN數據報文,在一段封裝報文
后通過隧道向另一端VTEP發送封裝報文,另一端VTEP接收到封裝的報文解封裝后根據封裝的MAC地址
進行轉發。VTEP可由支持VXLAN的硬件設備或軟件來實現。
 
   從封裝的結構上來看,VXLAN提供了將二層網絡overlay在三層網絡上的能力,VXLAN Header中的VNI有
24個bit,數量遠遠大於4096,並且UDP的封裝可以穿越三層網絡,比VLAN有更好的擴展性。
 
2. Vxlan的數據和控制平面
  (1) 數據平面---隧道機制
     已經知道,VTEP為虛擬機的數據包加上了層包頭,這些新的報頭之有在數據到達目的VTEP后才會被去掉。
中間路徑的網絡設備只會根據外層包頭內的目的地址進行數據轉發,對於轉發路徑上的網絡來說,一個Vxlan
數據包跟一個普通IP包相比,除了個頭大一點外沒有區別。
     由於VXLAN的數據包在整個轉發過程中保持了內部數據的完整,因此VXLAN的數據平面是一個基於隧道
的數據平面。
 
(2) 控制平面----改進的二層協議
     VXLAN不會在虛擬機之間維持一個長連接,所以VXLAN需要一個控制平面來記錄對端地址可達情況。控制
平面的表為(VNI,內層MAC,外層VTEP_ip)。Vxlan學習地址的時候仍然保存着二層協議的特征,節點之間不會
周期性的交換各自的路由表,對於不認識的MAC地址,VXLAN依靠 組播來獲取路徑信息(如果有SDN Controller,
可以向SDN單播獲取)。
    另一方面,VXLAN還有自學習的功能,當VTEP收到一個UDP數據報后,會檢查自己是否收到過這個虛擬機的
數據,如果沒有,VTEP就會記錄源vni/源外層ip/源內層mac對應關系,避免組播學習。
 
 
3. VxlanARP請求
 
(1) vxlan初始化
 
 VM1和VM2連接到VXLAN網絡(VNI)100,兩個VXLAN主機加入IP多播組239.119.1.1
 
(2) ARP請求
 
   1) VM1以廣播的形式發送ARP請求;
   2) VTEP1封裝報文。打上VXLAN標識為100,外層IP頭DA為IP多播組(239.119.1.1),SA為IP_VTEP1.
   3) VTEP1在多播組內進行多播;
   4) VTEP2解析接收到多播報文。填寫流表(VNI, 內層mac地址,外層Ip地址),並在本地VXLAN標識為100的范圍內
       廣播(是VXLAN的用武之地)。
   5) VM2對接收到的ARP請求進行響應;
 
(3) ARP應答

  1) VM2准備ARP響應報文后向VM1發送響應報文

  2)VTEP2接收到VM2的響應報文后把它封裝在ip單播報文中(VXLAN標識依然為100),然 后向VM1發送單播

  3)VTEP1接收到單播報文后,學習內層MAC到外層ip地址的映射,解封裝並根據被封裝內容的目的MAC地址轉發給VM1

  4)VM1接收到ARP應答報文,ARP交互結束
 
4  數據傳輸
    (1)  ARP請求應答之后,VM1知道了VM2的Mac地址,並且要向VM2通信(注意,VM1是以TCP的方法向VM2發送數據的)。
VTEP1 收到VM1發送數據包,用MAC地址從流表中檢查VM1與VM2是否屬於用一個VNI。兩個VM不但位於同一個VNI中
(不在同一個VNI中出網關),並且VTEP1已經知道了VM2的所有地址信息(MAC和VTEP2_IP)。VTEP1封裝新的數據包。然后
交給上聯交換機。
   (2) 上聯交換機收到服務器發來的UDP包,對比目的IP地址和自己的路由表,然后將數據報轉發給相應的端口。
   (3) 目的VTEP收到數據包后檢查器VNI,如果UDP報中VNI與VM2的VNI一致,則將數據包解封裝后交給VM2進一步處理。至此
一個數據包傳輸完成。整個Vxlan相關的行為(可能穿越多個網關)對虛擬機來說是透明的,虛擬機不會感受傳輸的過程。
 
    雖然VM1與VM2之間啟動了TCP來傳輸數據,但數據包一路上實際是以UDP的形式被轉發,兩端的VTEP並不會檢查數據是否
正確或者順序是否完整,所有的這些工作都是在VM1和VM2在接收到解封裝的TCP包后完成的。也就是說如果說如果被UDP封裝
的是TCP連接,那么UDP和TCP將做為兩個獨立的協議棧各自工作,相互之間沒有交互。
    
5 Vxlan網關
 如果需要VXLAN網絡和非VXLAN網絡連接,必須使用VXLAN網關才能把VXLAN網絡和外部網絡進行橋接和
完成VXLAN ID和VLAN ID之間的映射和路由,和VLAN一樣,VXLAN網絡之間的通信也需要三層設備的支持,
即VXLAN路由的支持。同樣VXLAN網關可由硬件和軟件來實現。
 
 從封裝的結構上來看,VXLAN提供了將二層網絡overlay在三層網絡上的能力,VXLAN Header中的VNI有
24個bit,數量遠遠大於4096,並且UDP的封裝可以穿越三層網絡,比VLAN有更好的擴展性。
 
6.部署
(1) 純VXLAN部署場景
  對於連接到VXLAN內的虛擬機,由於虛擬機的VLAN信息不再作為轉發的依據,虛擬機的遷移也就
不再受三層網關的限制,可以實現跨越三層網關的遷移。
 
 
(2) VXLAN與VLAN混合部署
 
   為了實現VLAN和VXLAN之間互通,VXLAN定義了VXLAN網關。VXLAN網關上同時存在兩種類型的端口:VXLAN端口
和普通端口。
   當收到從VXLAN網絡到普通網絡的數據時,VXLAN網關去掉外層包頭,根據內層的原始幀頭轉發到普通端口上;當有數據
從普通網絡進入到VXLAN網絡時,VXLAN網關負責打上外層包頭,並根據原始VLAN ID對應到一個VNI,同時去掉內層包頭
的VLAN ID信息。相應的如果VXLAN網關發現一個VXLAN包的內層幀頭上還帶有原始的二層VLAN ID,會直接將這個包丟棄。
之所以這樣,是VLAN ID是一個本地信息,僅僅在一個地方的二層網絡上其作用,VXLAN是隧道機制,並不依賴VLAN ID進行
轉發,也無法檢查VLAN ID正確與否。因此, VXLAN網關連接傳統網絡的端口必須配置ACCESS口,不能啟用TRUNK口
 
 
三 、VXLAN Frame Format










(1)     Inner Ethernet Header[8+8+4]20字節


<ignore_js_op>








   Inner Dest MAC Address:目的虛擬機的MAC地址。

   Inner Source MAC Address:源虛擬機的MAC地址。

Optional Ethertype:可選的VLAN tag。



(2)VXLAN Header[1+3+3+1]8字節


<ignore_js_op>








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字節


<ignore_js_op>








     Source端口:由VTEP提供,端口值由hash算法計算所得。

     Dest端口:為了網絡的交互特性,一般設置為4789。

     UDP校驗和:一般為0,非0則此包將會被丟棄。



(4)Outer IP Header[4+4+12]20字節


<ignore_js_op>








    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字節


<ignore_js_op>








          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間通信舉例:




<ignore_js_op>










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


<ignore_js_op>








       
 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


<ignore_js_op>










         VXLAN網絡和非VXLAN網絡互連就得需要VXLAN
gateway,非VXLAN一般為VLAN類型網絡。VXLAN網關會剝去數據包的VXLAN包頭,將數據包發送到端口MAC地址與Inner
Destination MAC Address相同的端口完成數據傳輸。如果non-VXLAN網絡環境使用的VLAN協議,則應該注意Inner
Ethernet Header中的VLAN ID設置,總之無論數據是進還是出,VLAN
ID不用時可以丟棄不管,使用時必須正確指定。值得說明的是:VXLAN網關可用硬件實現,也可以用軟件實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM