數據中心網絡(1)-VXLAN


想寫個DC系列的文章,站在傳統路由交換網絡基礎上談談數據中心網絡,一方面是給自己的學習做下總結,另一方面也想分享一些東西。

談到數據中心網絡,能想到的東西無非就VXLAN、SDN、NFV、EVPN這些概念。先從基礎協議開始再談整體架構,才疏學淺,有不對的地方請評論告知。首先針對性地拋出幾個問題:

1、為什么用VXLAN?使用場景有哪些?

    在傳統網絡中分二層三層。隨着雲計算的普及,雲主機無縫遷移的需求成了常態。為解決雲主機跨三層網絡的遷移,並且要滿足遷移后雲內網絡架構包括雲主機IP地址不能發生改變的要求孕育了大二層技術。要實現跨三層的二層網絡通信實際上就要用到隧道技術。隧道技術的解決方案也有很多,其中包括本文要講的VXLAN,還有NVGRE、STT、TRILL、VPLS等。NVGRE是由微軟提出的,只支持服務器使用。STT是Nicira這家公司提出的,Nicira已經被VMWARE收購,STT也不支持交換機使用。提到Nicira,除了STT最大的成就就是開發了Open vSwitch和Neutron(Openstack的網絡組件),而TRILL和VPLS僅僅交換機支持。所以用VXLAN解決大二層問題最為合理,而且還符合IETF標准。

    很多人在剛接觸雲平台架構的時候會有個疑問,拿Openstack舉例來說,在Neutron組件中可以啟用VXLAN,那這里與交換機的VXLAN有什么關系?前面說到VXLAN是通用協議,可以在網絡設備上使用,也可以在服務器上使用。先假設這個世界還沒有Openstack等雲架構,那么一台虛擬機要實現大二層遷移,怎么辦?這個時候VXLAN是做在上層交換設備上。那么Neutron組建的VXLAN功能有什么用?有些雲網絡中,可以借助Neutron的VXLAN功能實現大二層需求滿足雲主機遷移和互訪,然后用另一張網卡實現互聯網的訪問,如圖1。阿里雲飛天架構大二層網絡也是用VXLAN實現,封裝與解封裝均在服務器側,不同的是出公網的方式采用的是在一台服務器解封裝后做了NAT轉換的形式。

圖1 Openstack VXLAN網絡

    實際上一般較大型的數據中心架構,雲主機依靠VLAN進行隔離,不,准確的來說是租戶標識。拿Openstack來說,Neutron使用了VLAN功能,而上千個VLAN號對應租戶量已經足夠使用。雲主機帶着VLAN TAG出來后,再由交換機根據不同的VLAN TAG進行VXLAN封裝隧道來實現大二層,如圖2。這里專門映射VXLAN和VLAN的對應關系稱為橋接域。拿國產設備來說,叫bridge-domain。租戶的隔離則是通過路由標識來實現。

圖2 交換機實現大二層網絡    

     在談到什么時候用VXLAN的時候,從雲計算角度出發,以上舉的例子都是IAAS層面的情景,還有PAAS層面的。例如容器編排調度工具kubernetes,有幾套網絡模型用來實現容器之間的互相通信,我們稱為CNI(container network interface),包括Flannel、Calico、macvlan、OpenvSwitch等,其中Flannel網絡模型就是用VXLAN來實現不同容器在宿主機的隧道模式通信的。

2、VXLAN報文格式

    VXLAN數據包也可以稱為MACINUDP數據包,原本數據鏈路層允許的最大以太網數據包長度是1500字節,然而數據包經過VTEP(VXLAN的隧道端點)封裝后數據包會增加50字節,數據包格式如圖3。那么VXLAN報文長度最大達到了1550,現在有些VTEP在處理VXLAN報文的時候並不接受分片,這就需要配置設備MTU1550了。

圖3 VXLAN報文

   報文的詳細分解可以看圖4,所以VXLAN是使用UDP封裝在了傳輸層,目標端口是4789,源端口是隨機的,根據源MAC地址進行HASH產生。至於為什么源端口隨機,有一個很大的好處就是可以實現ECMP,如果源端口一成不變將導致網絡只走一條路。而用來封裝數據包的三層IP地址一般是設備的環回口地址,至於環回口地址的發布用OSPF、ISIS、BGP都可以,只要滿足三層互通就可以。

圖4 VXLAN報文分解

3、怎么配?

列舉了一個VTEP端的華為配置,基本上看到配置就明白什么意思了,另一端配置同理。

SW1:
interface nve1(NVE是實現網絡虛擬化的設備,也就是隧道的端點)
  source 2.2.2.2(vxlan隧道封裝的源點,loopback地址,事先得做三層互通)
  vni 5010 head-end peer-list 3.3.3.3(5010是vni號,也就是vxlan隧道編號,3.3.3.3是對端loopback)
 
bridge-domain 10(VLAN和VXLAN之間的聯系,用BD來做,也就是稱為橋接域,這里的10只是本地有效,並不是VLAN)
  vxlan vni 5010(對應的vxlan隧道是5010)
 
interface 10GE1/0/3
  port link-type trunk
  port trunk allow vlan 1-9,11-100(這里就不能寫10了,10要寫在單獨的子口里,access的就用pvid來做咯)
 
interface 10GE1/0/3.1 mode l2(二層端口vlan10划入DB10里)
  encapsulation dot1q vid 10
  bridge-domain 10

 4、EVPN是什么?和VXLAN是什么關系?

    EVPN要講的東西很多,會專門用一章來講,至於為什么要用,這里先說下VXLAN的廣播泛洪問題。首先介紹下BUM報文,BUM即broadcast unicast multicast,數據包在發送到一個VTEP端的時候會進行頭端復制,怎么理解頭端復制呢?其實有點類似二層廣播泛洪,一個數據包到了VTEP以后,VTEP設備根據VLAN信息找到了對應的二層廣播域,前面看配置知道,有了二層廣播域以后,對應的VNI編號也知道了,也就是知道了所有隧道列表,然后會把數據包進行報文復制,然后進行VXLAN封裝轉發到對端的多個VTEP上。對端VTEP收到報文后對VNI等信息核對,核對完后解封裝。解封裝后進行廣播處理。數據中心網絡中,特別是雲平台網絡中,終端數量是成百上千的,每個終端都發起一個ARP請求,每個請求都進行一次頭端復制那是很不合理的呀,由此就引入了ARP抑制。

    ARP抑制是一種優化機制,由於VXLAN的引入,就有了二層網關的說法,在二層網關上會存在一個IP和MAC對應關系的表,稱為ARP抑制表。當二層ARP請求發起的時候,會查找目標MAC地址有沒有在這個ARP抑制表里,如果有,目標泛洪廣播幀中FFFFFFFF會就改成實際目標MAC地址,變成一個單播幀。而有些網絡設備,比如思科的做法是代答的方式,當發現抑制表里有,就直接由二層代答,不進行頭端復制泛洪。那么問題來了,ARP抑制表怎么來的?綜上所述,VXLAN是沒有控制平面的,所有轉發都是通過泛洪獲得轉發信息,那么二層路由信息的獲取,用來找到對應的VTEP來避免泛洪,實現VXLAN的控制層面,就要借助EVPN了。EVPN依靠BGP擴展團體屬性,用於控制IP地址和MAC的路由信息的發布與接收。EVPN的更多技術細節包括與VXLAN的配合使用在第二章分享。而在第三章中分享的是Data Center Interconnection的實現。


免責聲明!

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



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