天天看點

深入 了解vxlan

 VXLAN RFC 文檔 : https://tools.ietf.org/html/rfc7348

 作為網絡虛拟化的重要技術,VXLAN備受關注,該協定是如何運作的?如何通過資料與控制層面的分離實作SDN網絡?如何部署?本博文将為您詳細介紹...

 一 . 為什麼需要Vxlan

  1. vlan的數量限制

  4096個vlan遠不能滿足大規模雲計算資料中心的需求

  2. 實體網絡基礎設施的限制

  基于IP子網的區域劃分限制了需要二層網絡連通性的應用負載的部署

  3. TOR交換機MAC表耗盡

  虛拟化以及東西向流量導緻更多的MAC表項

  4. 多租戶場景

  IP位址重疊

 二. 什麼是Vxlan

  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對應關系,避免多點傳播學習。

三. 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互動結束

四:資料傳輸

  (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将做為兩個獨立的協定棧各自工作,互相之間沒有互動。

五:Vxlan網關

  如果需要VXLAN網絡和非VXLAN網絡連接配接,必須使用VXLAN網關才能把VXLAN網絡和外部網絡進行橋接和完成VXLAN ID和VLAN ID之間的映射和路由,和VLAN一樣,VXLAN網絡之間的通信也需要三層裝置的支援,即VXLAN路由的支援。同樣VXLAN網關可由硬體和軟體來實作。從封裝的結構上來看,VXLAN提供了将二層網絡overlay在三層網絡上的能力,VXLAN Header中的VNI有24個bit,數量遠遠大于4096,并且UDP的封裝可以穿越三層網絡,比VLAN有更好的擴充性。

六.部署

  (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