1. 程式人生 > >Vxlan基礎理解

Vxlan基礎理解

數量 wid 可能 prot point 方式 ade vertical vlan技術

VLAN簡介:

VLANVirtual LAN,又叫“虛擬局域網”。

VLAN的作用,主要是將一個大的廣播域隔離開來,形成多個小的廣播域,各個廣播域內可以互通,廣播域之間默認不能直接通訊。

為什麽需要VLAN?

如果一個公司的網絡,有1000臺主機,有10個部門。

如果用交換機將這些設備互聯起來,不做任何隔離的行為,默認這些主機都在同一個廣播域,那麽部門與部門之間的流量是可以互相傳遞、收到的。

如下圖:
技術分享圖片

如果做任何物理或者邏輯上的隔離,加入銷售部的一臺電腦發出了一個廣播包,這個廣播包是會泛洪到整個網絡的所有設備上,每臺電腦都會收到這個廣播包。

這會嚴重的浪費系統資源,也會造成安全隱患,比如有一個用戶在不停的發ARP包,每秒鐘發10萬個,那整個網絡的所有設備每秒鐘都要去處理大量的ARP包,這會消耗大量的CPU、內存以及帶寬,從而無法利用空閑的資源去完成真正需要的通訊。

所以,使用VLAN技術,可以將一個大的廣播域,根據需求去切割開來,分成若幹的小型的廣播域,每種數據幀(單播、廣播、組播)都只能在同一個VLAN裏泛洪,如果要傳到其他VLAN去,就必須要經過三層路由來轉發。

如下圖:

這就是規劃了三個VLAN之後網絡的通訊方式。(紅色虛線之間的設備是可以通信的)
技術分享圖片

交換機的端口加入vlan有三種方式,分別是access、trunk和hybrid。 1、access端口只能加入一個vlan,一般用來連接交換機和pc,也可以連接交換機和交換機。 2、trunk端口可以加入多個vlan,就是說可以允許多個vlan的報文通過。trunk端口有一個默認vlan,如果收到的報文沒有vlan ID,就把這個報文當做默認vlan的報文處理。trunk口一般用於連接兩臺交換機,這樣可以只用一條trunk連接實現多個vlan的擴展(因為trunk允許多個vlan的數據通過,如果用access口,那麽一個vlan就要一條連接,多個vlan要多個連接,而交換機的接口是有限的)。對於trunk口發送出去的報文,只有默認vlan的報文不帶vlan ID,其它vlan的報文都要帶vlan ID(要不然,對端的交換機不知道該報文屬於哪個vlan,無法處理,也就不能實現vlan跨交換機擴展了)。簡而言之,trunk端口的設計目的就是通過一條連接實現多個vlan的跨交換機擴展。 3、trunk端口是hybrid端口的特例,就是說hybrid端口可以實現比trunk端口更多的功能。hybrid端口可以加入多個vlan,並可以設置該vlan的報文通過該端口發送是是否帶vlan ID(trunk端口不能設置,只有默認vlan的報文不帶vlan ID進行發送)。通過下面的兩個例子(轉載的),大家應該可以看出hybrid端口的設計目的。
VID”(VLAN ID)是對VLAN的識別字段,為12位。支持4096(2^12)VLAN的識別。在4096可能的VID中,VID=0用於識別幀優先級。4095(FFF)作為預留值,所以VLAN配置的最大可能值為4094

一 . 為什麽需要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對應關系,避免組播學習。 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基礎理解