數據中心網絡(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的實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章