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口。
七.一圖貫之
