網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

VxLAN概念

  • VxLAN(Virtual eXtensible Local Area Network):虛擬擴展LAN網絡,將VLAN技術進行了延伸。

VxLAN術語

VNI(VXLAN Network Identifier ):用於區分VXLAN段,不同VXLAN段的租戶不能直接進行二層通信。一個租戶可以有一個或多個VNI,VNI由24比特組成,支持多達16M的租戶。

BD(Bridge Domain): 類似傳統網絡中採用VLAN劃分廣播域方法,在VXLAN網絡中通過BD劃分廣播域。在VXLAN網絡中,將VNI以1:1方式映射到廣播域BD,一個BD就表示著一個廣播域,同一個BD內的主機就可以進行二層互通。

VTEP(Vxlan Tunnel End Point):VXLAN Tunnel Endpoints 對VXLAN報文進行封裝和解封裝。VXLAN報文中源IP地址為源端VTEP的IP地址,目的IP地址為目的端VTEP的IP地址。一對VTEP地址就對應著一條VXLAN隧道。在源端封裝報文後通過隧道向目的端VTEP發送封裝報文,目的端VTEP對接收到的封裝報文進行解封裝。VTEP可以是服務器也可以是網絡交換設備。

VAP(Virtual Access Point): 是VXLAN業務接入點,可以基於VLAN或報文流封裝類型接入業務:

1、 基於VLAN接入業務

2、 基於報文流封裝類型接入業務

NVE(Network Virtrualization Edge網絡虛擬邊緣節點): 是實現網絡虛擬化功能的網絡實體。報文經過NVE封裝轉換後,NVE間就可基於三層基礎網絡建立二層虛擬化網絡。

二層網關:類似傳統網絡的二層接入設備,在VXLAN網絡中通過二層網關解決租戶接入VXLAN虛擬網絡,也可用於同一VXLAN虛擬網絡的子網通信。

VxLAN出現的原因

一項新技術的興起和發展肯定是有原因的,為了解決當下的哪些問題?

  • 我們都知道傳統VLAN最大支持4096個(在Ethernet中插入4個字節的VLAN TAG,VLAN ID只有12bit),為了擴充VLAN資源同時保障不產生大的廣播域,運營商採用QinQ(802.1q in 802.1q),變向的擴充VLAN資源。而對於大型虛擬化雲計算這種動輒上萬甚至更多租戶的場景,VLAN的隔離能力無法滿足。而VxLAN進一步擴充了VLAN資源,因為8個字節的VxLAN Header,其中24bit的VLAN ID(VNI)用來標識不同的二層網絡,可以標識16M約1600萬個不同的二層網絡(租戶),有效地解決了雲計算中海量租戶隔離的問題。
  • 隨著IDC的發展,一個物理接口可能掛上百個VM,這樣大量的MAC表項是小型交換機難以承受的(MAC地址學習是flood-learn方式,是消耗交換機內存的,容易導致MAC地址表溢出,新MAC無法學習到),通過VxLAN技術將這些MAC虛擬封裝後就大大縮減了MAC表項(虛擬機的Ethernet Frame被VTEP封裝在UDP裡面,一個VTEP可以被一個物理主機上的所有虛擬機共用。從交換機的角度,交換機看到的是VTEP之間在傳遞UDP數據。通常
    一個物理主機對應一個VTEP,所以交換機的MAC地址表,只需要記錄與物理主機數量相當條目就可以了,虛擬化帶來的MAC地址表暴增的問題也不存在了。)。
  • 現在不少數據中心IDC(隨著公有云服務的興起),都需要提供多租戶的功能(也即-不同用戶之間需要保證獨立地分配IP和 MAC 地址)。
  • 數據中心大量虛擬機的部署及遷移,需要保證遷移過程不中斷業務(IP與MAC綁定保持不變),這就是大二層解決的問題,Vxlan就很好的實現了大二層網絡的通信需求(通過overlay技術實現了在L3網絡裡傳輸L2數據,使得虛機遷移中不改變IP地址也即遷移不影響業務)。


網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

數據中心中虛擬機遷移是常態工作

VxLAN報文


網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

(MAC in UDP也即L2 over L4),二層報文用三層協議進行封裝,可實現二層網絡在三層範圍

VxLAN是基於IP網絡之上,它採用的是MAC in UDP技術,其實它與GRE/IPSEC等tunnel技術類似,這種封裝技術對中間網絡沒有特殊要求,只要可以識別IP報文就可以傳送。

VTEP對VM發送的原始以太幀進行“封裝”,從上至下封裝如下所示:

  • VXLAN Header

增加VXLAN頭(8字節),其中包含24比特的VNI字段,用來定義VXLAN網絡中不同的租戶。此外,還包含VXLAN Flags(8比特,取值為00001000)和兩個保留字段(分別為24比特和8比特),增強可擴展性。

  • UDP Header

VXLAN頭和原始以太幀一起作為UDP的數據部分。UDP頭的目的端口號(VXLAN Port)固定為4789(可以修改),源端口號(UDP Src. Port)是原始以太幀通過哈希算法計算後的值。

  • Outer IP Header

封裝外層IP頭,其中的源IP地址(Outer Src. IP)為源VM所屬VTEP的IP地址,目的IP地址(Outer Dst. IP)為目的VM所屬VTEP的IP地址。

  • Outer MAC Header

封裝外層以太幀頭。其中的源MAC地址(Src. MAC Addr)為源VM所屬VTEP的MAC地址,目的MAC地址(Dst. MAC Addr)為到達目的VTEP的路徑上下一跳設備的MAC地址

  • 當目的IP為接收端的VTEP的IP時,假如不知道這個IP地址,則需要執行ARP請求來獲取,步驟如下:

1.目標IP被替換成與源虛擬機具有相同VNI的多播組IP地址;

2. 所有VTEP端都接收該多播報文,VTEP查找所在主機上的全部虛擬機來匹配源虛擬機的Inner 目的MAC。

3. 目標VTEP的虛擬機會回應該多播包,從而獲得目標VTEP的IP地址。

4. 發送端VTEP添加VNI-VTEP-虛擬機MAC的映射關係到自己的VXLAN表中,以避免再次組播學習。

VxLAN的部署

  • VxLAN存在underlay及overlay的概念,它是在原有的網絡架構上再overlay新增了一層網絡(不影響原有網絡)。因為是架構在IP層之上兩站點只需要IP可達,就可以建立VxLAN隧道(部署VxLAN)。

對於CE系列交換機而言,BD與VNI是1:1的映射關係,這種映射關係是通過在VTEP上配置命令行建立起來的。配置如下:

#

bridge-domain 20 //表示創建一個“大二層廣播域”BD,其編號為20

vxlan vni 2000 //表示在BD 20下指定與之關聯的VNI為2000

#

VTEP會根據以上配置生成BD與VNI的映射關係表,該映射表可以通過命令行查看,如下所示:

display vxlan vni

Number of vxlan vni : 1

VNI BD-ID State

----------------------------------

5000 10 up

有了映射表後,進入VTEP的報文就可以根據自己所屬的BD來確定報文封裝時該添加哪個VNI。那麼,報文根據什麼來確定自己屬於哪個BD呢?

  • 報文根據什麼去確定自己屬於哪個BD呢?

二層子接口或者物理接口根據配置來檢查哪些報文需要進入VXLAN隧道,同時對檢查通過的報文做怎樣的處理。

以華為的交換機為例:

網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

default類型允許所有報文進入VXLAN隧道,dot1q和untag類型的只允許某一類報文進入。

  1. 經過同一物理接口的報文既有帶VLAN Tag的,又有不帶VLAN Tag的,並且他們各自要進入不同的VXLAN隧道,則可以在該物理接口上同時創建dot1q和untag類型的二層子接口。
  2. default類型(應用於均需要走同一條VXLAN隧道的場景,下掛的VM全部屬於同一BD)的子接口允許所有報文進入VXLAN隧道,dot1q和untag類型的子接口只允許某一類報文進入。也即意味著前者不可與後者在同一子接口。(不然報文到了接口之後如何判斷要進入哪個二層子接口
  • VxLAN隧道的建立:分手動和自動建立

對於CE系列交換機,以上配置是在NVE(Network Virtualization Edge)接口下完成的。配置過程如下:

#

interface Nve1 //創建邏輯接口NVE 1

source 1.1.1.1 //配置源VTEP的IP地址(推薦使用Loopback接口的IP地址)

vni 5000 head-end peer-list 2.2.2.2

vni 5000 head-end peer-list 2.2.2.3 //表示屬於VNI 5000的對端VTEP有兩個,IP地址分別為2.2.2.2和2.2.2.3

display vxlan vni 5000 verbose

BD ID : 10

State : up

NVE : 288

Source : 1.1.1.1

UDP Port : 4789

BUM Mode : head-end

Group Address : -

Peer List : 2.2.2.2 2.2.2.3 //同一大二層廣播域的範圍,屬於同一個BD 10域的範圍。

//當VTEP收到BUM(Broadcast&Unknown-unicast&Multicast,廣播&未知單播&組播)報文時,會將報文複製併發送給Peer List中所列的所有對端VTEP(這就好比廣播報文在VLAN內廣播)。

//這張表也被稱為“頭端複製列表”。當VTEP收到已知單播報文時,會根據VTEP上的MAC表來確定報文要從哪條VXLAN隧道走。而此時Peer List中所列的對端,則充當了MAC表中“出接口”的角色。

  • 子網VM互通


網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

IP_A、IP_B與IP_C屬於同一子網需要互通。

1、同子網VM互通組網圖

ARP請求報文轉發流程

網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

ARP廣播去獲取對端MAC信息

ARP應答報文轉發流程

網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

arp應答

2、不同子網互通(藉助三層網關,網關不在一個設備還得進行路由)

網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

這裡三層網關在一臺設備上。

不同子網VM互通報文轉發流程:

網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

封裝外層MAC及外層IP包頭

1、VM_A先將數據報文發送給網關。報文的源MAC為MAC_A,目的MAC為網關BDIF 10的MAC_10,源IP地址為IP_A,目的IP為IP_B。

2、VTEP_1收到數據報文後,識別此報文所屬的VNI(VNI 5000),並根據MAC表項對報文進行封裝。可以看到,這裡封裝的外層源IP地址為本地VTEP的IP地址(IP_1),外層目的IP地址為對端VTEP的IP地址(IP_3);外層源MAC地址為本地VTEP的MAC地址(MAC_1),而外層目的MAC地址為去往目的IP的網絡中下一跳設備的MAC地址。封裝後的報文,根據外層MAC和IP信息,在IP網絡中進行傳輸,直至到達對端VTEP。

3、報文進入VTEP_3,VTEP_3對報文進行解封裝,得到VM_A發送的原始報文。

4、VTEP_3發現該報文的目的MAC為本機BDIF 10接口的MAC,而目的IP地址為IP_B(10.1.20.1),所以會根據路由表查找到IP_B的下一跳。

5、發現下一跳為10.1.20.10,出接口為BDIF 20。此時VTEP_3查詢ARP表項,並將原始報文的源MAC修改為BDIF 20接口的MAC(MAC_20),將目的MAC修改為VM_B的MAC(MAC_B)。

6、報文到BDIF 20接口時,識別到需要進入VXLAN隧道(VNI 6000),所以根據MAC表對報文進行封裝。這裡封裝的外層源IP地址為本地VTEP的IP地址(IP_3),外層目的IP地址為對端VTEP的IP地址(IP_2);外層源MAC地址為本地VTEP的MAC地址(MAC_3),而外層目的MAC地址為去往目的IP的網絡中下一跳設備的MAC地址。封裝後的報文,根據外層MAC和IP信息,在IP網絡中進行傳輸,直至到達對端VTEP。

7、報文到達VTEP_2後,VTEP_2對報文進行解封裝,得到內層的數據報文,並將其發送給VM_B。

同理VM_B回應VM_A的流程與上述過程類似。

VXLAN網絡與非VXLAN網絡之間的互通,當然也得藉助於三層網關(SVI接口)。實現與上圖的不同之處在於:報文在VXLAN網絡側會進行封裝,而在非VXLAN網絡側不需要進行封裝。報文從VXLAN側進入網關並解封裝後,就按照普通的單播報文發送方式進行轉發。

常見的組網方式:


網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

用戶希望同一部門VM之間、不同部門VM之間,VM與Internet之間均可相互訪問。

  • 相同子網互通


網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

此時Spine只作為VXLAN報文的轉發節點,不感知VXLAN隧道的存在,可以是任意的三層網絡設備。

  • 不同子網的互通,分集中式與分佈式

集中式:

網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

Leaf1、2通過與Spine建立VxLAN隧道實現不同BD的互通。


分佈式:轉發不經過Spine,縮減Spine的轉發壓力(在Leaf下掛大量VM的情況下建議使用分佈式轉發)

網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

Leaf1和Leaf2作為VXLAN網絡的VTEP,均部署VXLAN三層網關。三層網關之間跑比如BGP動態協議來建立VxLAN隧道

Leaf1和Leaf2作為VXLAN網絡的VTEP,在Leaf1和Leaf2上部署VXLAN三層網關。兩個VXLAN三層網關之間通過BGP動態建立VXLAN隧道,並通過BGP的remote-nexthop屬性發布本網關下掛的主機路由信息給其他BGP鄰居,從而實現跨Leaf節點不同部門VM之間的相互通信。

Leaf作為VXLAN三層網關時,只學習其下掛終端租戶的表項,而不必像集中式三層網關一樣,需要學習網絡中所有終端租戶的表項,從而解決了集中式三層網關帶來表項瓶頸問題。

VxLAN組網的冗餘可靠性組網拓撲

整體組網可靠性拓撲如下:

網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

確保不出現單點故障,鏈路冗餘,設備冗餘。


網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

核心層:通過分別與Spine建立雙隧道,保障上行的隧道的冗餘性


網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

採用交換機堆疊(華三稱為IRF)技術保證接入的冗餘性

隨著SDN(軟件定義網絡)及NFV(網絡功能虛擬化)技術的成熟,我們的VxLAN部署可以進行

控制器方式來部署,比如華為的SNC控制器方式和AC控制器方式:

網絡工程師你真的理解VxLAN技術嗎?(原來二層網絡可以這麼玩)

  • SNC控制器方式可通過SNC控制器動態建立VXLAN隧道。無需進行VXLAN配置。VXLAN隧道的創建以及指導報文轉發的表項,均由SNC控制器通過OpenFlow協議向轉發器下發。
  • 轉發器(交換機)需預先完成部分基礎配置,AC控制器通過NETCONF(南向接口)協議向轉發器下發建立VXLAN隧道的配置,通過OpenFlow協議控制報文在隧道中的轉發。

以上是關於VxLAN技術的全部內容,作為網絡工程師應該多瞭解網絡前沿技術(比如VxLAN、vBRAS、SD-WAN、Segment-routing等)。不積跬步無以至千里,大家一起努力。

特別申明:本文根據互聯網相關VxLAN文章整理而來。

對網絡前沿技術感興趣的可加關注或者評論區留言討論。


分享到:


相關文章: