2019年3月25日 星期一

VXLAN vs VLAN

from:https://zhuanlan.zhihu.com/p/36165475


VXLAN(Virtual eXtensible Local Area Network)或許是目前最熱門的網絡虛擬化技術。
網絡虛擬化是指在一套物理網絡設備上虛擬出多個二層網絡。VXLAN由RFC7348定義,這是2014年定稿的一個協議,VXLAN協議將Ethernet幀封裝在UDP內,再加上8個字節的VXLAN header,用來標識不同的二層網絡。

同樣是網絡虛擬化技術的VLAN(Virtual Local Network)在1998年就提出了第一稿,並且得到廣泛的應用,VLAN直接在Ethernet幀的頭部加上4個字節的VLAN Tag,用來標識不同的二層網絡。VLAN已經在大部分的網絡設備和操作系統中得到了支持,它處理起來也比較簡單,在讀取Ethernet數據的時候,只需要根據EtherType相應的偏移4個字節就行。相比之下,VXLAN因為提出的較晚,在設備上的支持率不如VLAN,而且,VXLAN數據的封裝解封裝,要比VLAN複雜的多。看起來沒理由VXLAN搶占VLAN的地位,但是現實卻不是如此,那究竟是什麼原因導致的呢?

VXLAN協議

我們先來看看VXLAN協議,前面說過,VXLAN是將Ethernet Frame封裝在UDP包裡面,具體的協議格式如下。
除了常規的各層的header之外,VXLAN協議定義了8個字節的VXLAN Header。其中的24bit用來標識不同的二層網絡,這樣總共可以標識1600多萬個不同的二層網絡。一般的傳輸層端口號用來標識進程或者應用,但是在VXLAN協議裡面的,Ethernet Frame封裝在UDP裡面,UDP的source port被用來在ECMP或者LACP做負載均衡;destination port被用來標識VXLAN數據,IANA(Internet Assigned Numbers Authority)分配給VXLAN的端口號是4789。VXLAN數據是經過VTEP(VXLAN Tunnel EndPoint)封裝和解封裝的,相應的VXLAN數據的外層IP地址就是VTEP的IP地址。最外層的MAC地址用來實現VTEP之間的數據傳遞。
VXLAN與VLAN的最大區別在於,VLAN只是修改了原始的Ethernet Header,但是整個網絡數據包還是原來那個數據包,而VXLAN是將原始的Ethernet Frame隱藏在UDP數據裡面。經過VTEP封裝之後,在網絡線路上看起來只有VTEP之間的UDP數據傳遞,原始的網絡數據包被掩蓋了。
VXLAN並不是憑空出現,這種在UDP裡面封裝網絡數據的做法,在VXLAN之前就已經存在,例如OTV(Overlay Transport Virtualization)和LISP(Locator/ID Separation Protocol )。

為什麼要VXLAN?

相比VLAN,VXLAN顯得複雜很多。再加上VLAN的先發優勢,已經得到了廣泛的支持。那為什麼還要VXLAN?
VLAN ID數量限制
--
首先是VLAN能支持的二層網絡數量有限。VLAN Tag總共4個字節,其中有12bit用來標識不同的二層網絡,這樣總共是4000多個。而VXLAN header有8個字節,有24bit用來標識不同的二層網絡,這樣總共是1600多萬個。這或許是知名度最高的一條原因。但這是最根本的原因嗎?VLAN自身也有一些相關的協議,其中QinQ(IEEE 802.1 ad)定義在Ethernet頭部加上2個VLAN Tag,這樣總共也可以由12+12=24bit的數據用來標識不同的二層網絡。如果僅僅是因為能支持的二層網絡數量有限,只需要在現有的VLAN設備上做一些改動,直接用QinQ就好了。所以,選用VXLAN一定還有其他原因。
TOR交換機MAC地址表限制
--
數據中心的虛擬化給網絡設備帶來的最直接影響就是:之前TOR(Top Of Rack)交換機的一個端口連接一個物理主機對應一個MAC地址,但現在交換機的一個端口雖然還是連接一個物理主機但是可能進而連接幾十個甚至上百個虛擬機和相應數量的MAC地址。傳統交換機是根據MAC地址表實現二層轉發。如下圖所示,交換機在收到一個數據幀之後,根據VLAN和目的MAC地址,查找到相應的交換機端口,再將數據幀從相應的端口發出。
這個MAC地址表是通過交換機的flood-learn學習並記錄在交換機的內存。交換機的內存比較寶貴,所以MAC地址表的大小通常是有限的。現在因為虛擬化,整個數據中心的MAC地址多了幾十倍,那相應的交換機裡面的MAC地址表也需要擴大幾十倍。如果交換機不支持這麼大的MAC地址表,那麼就會導致MAC地址表溢出。溢出之後,交換機不能將新的MAC地址學習到自己的MAC地址表。如果交換機收到這些MAC地址的數據幀,因為不能通過查表轉發,會flood到所有的端口。這不但增加了交換機的負擔,還增加了網絡中其他設備的負擔。為了避免這個問題,可以用一些更大容量的交換機,但是相應的成本也要上升,而且還不能從根本上解決這個問題。
如果使用VXLAN,虛擬機的Ethernet Frame被VTEP封裝在UDP裡面,一個VTEP可以被一個物理主機上的所有虛擬機共用。從交換機的角度,交換機看到的是VTEP之間在傳遞UDP數據。通常,一個物理主機對應一個VTEP,所以交換機的MAC地址表,只需要記錄與物理主機數量相當條目就可以了,虛擬化帶來的MAC地址表暴增的問題也不存在了。這是VXLAN能解決的,而現有的VLAN沒有辦法迴避的問題。
靈活的虛機部署和部署
--
採用VLAN網絡的虛擬環境,不存在overlay網絡。虛擬機的網絡數據,被打上VLAN Tag之後,直接在物理網絡上傳輸,與物理網絡上的VLAN是融合在一起的。這樣的好處是虛擬機能直接訪問到物理網絡的設備,但是壞處是,虛擬網絡現在不能打破物理網絡的限制。比如,如果要在VLAN 100部署虛擬機,那隻能在支持VLAN 100的物理設備上部署虛機。通常不同的VLAN網絡,會被分配不同的IP地址段,通過路由器或者其他的三層設備連接在一起。設想我有下面一個環境,​​紫色區域和綠色區域分別對應不同的VLAN網絡,紫色區域裡面每個服務器已經有10個虛機,綠色區域每個服務器只有2個虛機,紫色區域雖然服務器數量更多,但是總的負擔已經夠重了。現在因為業務的需求,我們還需要向紫色網絡裡面部署虛機,因為VLAN網絡無法打破物理二層網絡的限制,虛機還是只能部署在紫色區域,這明顯不合理。
另一方面,就算不部署新的虛擬機,只是對現有的部署做一個優化,將部分虛擬機從紫色區域遷移到綠色區域,因為無法打破物理二層網絡的限制,這也是不可行的。因為業務肯定不是平均分配的,那如果採用VLAN網絡,極有可能會導致數據中心的利用率分佈不均勻。
VLAN其實有自己的解決辦法,如果將所有的交換機Trunk連接起來,那在物理上沒有明確的區域區分。但是這樣就產生了一個大的二層,相應的BUM(Broadcast,Unknown Unicast,Multicast)和交換機MAC地址表的問題也會隨之產生。
如果使用VXLAN呢?因為VXLAN通過UDP傳輸Ethernet Frame,那相應的可以在一個L3網絡上,傳遞L2的數據。又或者用官方的說法,在一個L3網絡上構建了L2網絡。物理網絡的二層邊界還存在,但是現在虛機的網絡數據在三層網絡傳輸,可以跨越物理二層網絡的限制。
不管物理網絡的二層還是三層,虛擬機現在已經感知不到了。通過VXLAN的封裝,虛擬機現在走的是一套獨立於物理網絡(underlay network)的overlay network。這樣的話,在物理網絡上,就不必把所有的交換機Trunk連起來,還是可以保持一個個小的L2 Pod。但是同時,虛擬機的部署和遷移,又不用受物理網絡的限制,整個數據中心可以保持一個平均的利用率。這是另外一個VXLAN能解決,但是VLAN無法迴避的問題。
更好的利用多條網絡鏈路
--
VLAN協議使用STP(Spanning Tree Protocol)來管理多條線路,STP根據優先級和cost,只會選出一條線路來工作,這樣可以避免數據傳遞的環路。這種主備(active-passive)的模式,比只連接一條線路肯定是有優勢,但是對於用戶來說,相當於花了N倍的錢,卻只用到了1倍的服務。當網絡流量較大的時,也不能通過增加線路來提升性能。而VXLAN因為是通過UDP封裝,在三層網絡上傳輸。雖然傳遞的還是二層的Ethernet Frame,但是VXLAN可以利用一些基於三層的協議來實現多條線路共同工作(active-active),以實現負載均衡,例如ECMP,LACP。現在對於用戶來說,花了N倍的錢,也用到了N倍的服務。當網絡流量較大時,現在可以通過增加線路來減輕現有線路的負擔。這在提升數據中心網絡性能,尤其是東西向流量的性能時,尤其重要。這是VXLAN相比VLAN,能帶來的另一個好處。

最後

所以,儘管VXLAN要復雜一些,提出的晚一些,普及率也要低一些,但是隨著數據中心規模的發展和虛擬化的普及,VXLAN逐漸成為構建數據中心網絡的趨勢。
不過理智點看,VXLAN有這麼多優點,在可以預見的未來,還是不能完全替代VLAN。首先VXLAN是一種overlay網絡,不能獨立存在,必須依賴underlay網絡,而在構建underlay網絡時,還是需要藉助VLAN。其次,這裡介紹的VXLAN的優勢,都是在大規模環境下,如果你的數據中心的規模,不論虛機還是物理的,就百十台的樣子,那直接用VLAN也可以了,沒必要上VXLAN。
VXLAN最多是在構建數據中心時的一個選項,而不是唯一的選項。套用馬斯洛的“工具法則”:當你只有一個錘子時,任何東西看起來都像是個釘子。在設計數據中心網絡時,也應該避免用一種方法解決所有問題,VXLAN,VLAN,BGP,EVPN,OpenStack應該綜合考慮。

沒有留言:

張貼留言

How to use simple speedtest in RaspberryPi CLI

  pi@ChunchaiRPI2:/tmp $  wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py --2023-06-26 10:4...