本文首發於個人公衆號 Linux雲計算網絡(id: cloud_dev),專一於乾貨分享,號內有 10T 書籍和視頻資源,後臺回覆 「1024」便可領取,歡迎你們關注,二維碼文末能夠掃。
VLAN 和 VxLAN 是否是還傻傻分不清楚,這篇文章就來告訴你。html
VxLAN 全稱是 Visual eXtensible Local Area Network(虛擬擴展本地局域網),從名字上就知道,這是一個 VLAN 的擴展協議。編程
VxLAN 本質上是一種隧道封裝技術。它使用 TCP/IP 協議棧的慣用手法——封裝/解封裝技術,將 L2 的以太網幀(Ethernet frames)封裝成 L4 的 UDP 數據報(datagrams),而後在 L3 的網絡中傳輸,效果就像 L2 的以太網幀在一個廣播域中傳輸同樣,其實是跨越了 L3 網絡,但卻感知不到 L3 網絡的存在。服務器
以下圖所示,左右兩邊是 L2 廣播域,中間跨越一個 L3 網絡,VTEP 是 VxLAN 隧道端點(VxLAN Tunnel Point),當 L2 以太網幀到達 VTEP 的時候,經過 VxLAN 的封裝,跨越 L3 層網絡完成通訊,因爲 VxLAN 的封裝"屏蔽"了 L3 網絡的存在,因此整個過程就像在同一個 L2 廣播域中傳輸同樣。網絡
VxLAN 是應網絡虛擬化技術而生的。隨着數據中心網絡不斷擴增,Cisco、VMware 和 Arista Networks 這些巨頭髮現,傳統的 VLAN 隔離已經沒法應對網絡虛擬化技術所帶來的成千上萬的設備增加,因而便聯合起草了這個協議,一直到 2014 年才定稿,由 RFC 7348 所定義。負載均衡
主要有三點考慮,使得網絡虛擬化迫切須要向 VxLAN 轉變。工具
一、VLAN ID 數量限制性能
虛擬化技術的發展,使得之前以單個物理設備組網的方式,逐步向以虛擬設備的方式過渡。學習
之前一臺物理設備(一臺服務器也好,一臺網絡設備也好),能支持幾十個端口就已經很了不得了,因此使用 VLAN 是綽綽有餘,可是虛擬化環境下就大不一樣了,一臺物理主機可能虛擬出上百上千臺虛擬設備,整個雲數據中心可能要劃分超過成千上萬個的廣播域,而 VLAN 被限制爲最多 4094 個,這就顯得捉襟見肘了。雲計算
具體咱們分析下 VLAN 的包格式就知道了。802.1Q 標準定義了 VLAN 協議的以太網幀格式以下:spa
能夠看到,VLAN 幀在以太網幀的基礎上增長了 VLAN Tag 字段,該字段包含 TPID、PCP、CFI 和 VID 4 個部分,其中 VID 即表示 VLAN ID,佔 12bit,取值範圍爲 0~4095,其中 0 和 4095 爲保留值,不能給用戶使用,因此一個以太網最多能夠劃分爲 4094 個 VLAN。這就是 4094 這個值的由來。
二、更好地利用多條網絡鏈路
VLAN 使用 STP 來管理多條網絡鏈路,避免數據傳輸時出現的環路。STP 根據優先級和成本,只會選擇其中一條鏈路工做,其他鏈路做爲備用鏈路,也就是主備模式(active-passive)。這樣雖然既避免了環路,也加強了可用性,但沒有充分利用多條線路來提高性能,對於用戶來講,等因而花 N 倍的錢,卻只享受到了 1 倍的服務。
VxLAN 則否則,VxLAN 能夠在 L3 層網絡上,透明地傳輸 L2 層數據,這讓它能夠利用 ECMP (Equal-cost multi-path,等價多路徑) 等協議實現多條路徑同時工做,也就是 active-active 模式。這樣當網絡流量較大時,能夠實現流量的負載均衡,提高數據傳輸性能。
三、TOR 交換機 MAC 地址表限制
交換機的原理是根據 MAC 地址表完成數據包的二層轉發。在虛擬化技術沒出現以前,數據中心的 TOR(Top of Rack) 交換機的一個端口鏈接一臺物理主機,並對應一個 MAC 地址,當虛擬化技術出現以後,一臺物理主機虛擬出幾十甚至上百臺虛擬機,TOR 交換機的一個端口雖然仍是鏈接一臺物理主機,但卻對應多個 MAC 地址(這還在不算 VLAN 劃分的狀況下),以下圖所示:
這無疑會形成 TOR MAC 地址表的膨脹,交換機自己 MAC 表的空間是有限的,若是溢出,就會形成交換機的不斷泛洪,增長了處理負擔。
若是使用 VxLAN 則否則,VxLAN 使用 VTEP 封裝虛擬機的二層幀,在三層網絡上傳輸,一般,一臺物理機對應一個 VTEP,一個 VTEP 能夠被該臺物理機上的全部虛擬機共有,因此,對於 TOR 交換機的 MAC 地址表來講,一臺物理機只用記錄一條 VTEP 信息便可。這樣就避免了 MAC 地址表暴增的問題。
四、靈活的虛擬機部署和遷移
採用 VLAN 的虛擬網絡環境,不存在 overlay 網絡,只有 underlay 網絡。也就是說 虛擬機的 VLAN 數據包直接在物理網絡上傳輸,和物理網絡上的 VLAN 數據包融合在一塊兒,這樣的好處是虛擬機能直接訪問到物理網絡的設備,但壞處也很明顯,虛擬網絡沒法打破物理網絡的界限,具體表如今虛擬機的部署和遷移不太靈活。
使用 VxLAN 則徹底不全在這些問題,經過 VxLAN 的封裝,在一個 L3 網絡上構建了 L2 網絡,或者說基於 underlay 網絡的 overlay 網絡,虛擬機的數據能夠打破 L2 網絡的限制,在 L3 網絡上傳輸,虛擬機的部署和遷移也不受物理網絡的限制,能夠靈活部署和遷移,使得整個數據中心保持一個平均的利用率。
VxLAN 是一種隧道封裝技術,那天然它的報文格式也是一種封裝的結構,以下圖很好地展示了 VxLAN 的封裝報文格式。
首先,最裏面是原始的 L2 以太網幀,也就是虛擬機發出的數據幀,接着封裝上 VxLAN 的頭部,而後整個 VxLAN 幀再封裝在物理網絡中的 UDP 報文中,接着是 IP 包頭,MAC 頭。爲了和內部的原始以太網幀區別,外部封裝的都加上外層 IP 頭,外層 MAC 頭。
其中,VxLAN 頭由 8Bytes 組成,分別是:
RRRRIRRR
,其中 I
必須設置爲 1,表示是是一個合法的 VxLAN ID,其它 7bits 的 R
做爲保留字段而且設置爲 0。2^24 = 16777216
,約等於 16M 個。對於 UDP 頭部,須要注意的是,目的端口(dst port) 默認設置爲 4789,這是 IANA 分配的 VxLAN 協議使用端口號。
其他字段都是咱們常見的 TCP/IP 協議字段,這裏就再也不贅述了。
若是嫌以上圖示還比較抽象,能夠參考下面這幅用 Wireshark 抓包的圖,更爲直觀:
下面經過一個具體的例子來看看基於 VxLAN 的網絡結構及數據傳輸是怎樣的。
以下圖,是一個基於 VxLAN 的網絡結構圖:
圖中,VTEP 叫作 VxLAN 隧道端點(VxLAN Tunnel Endpoint),是 VxLAN 協議中將對原始數據包進行封裝和解封裝的設備,它能夠由硬件設備實現,也能夠由軟件實現。
假如圖中 VM1 ping VM2,會是怎樣一個通訊過程:
VxLAN 相比 VLAN 有不少的優點,不過在可預見的將來,還不能徹底替代 VLAN,這須要根據使用場景具體分析。VxLAN 的優點更多體現大規模環境下,若是網絡設備規模,不管是虛擬的仍是物理的,只有百十臺的樣子,那麼直接使用 VLAN 就足夠了。另一個 VxLAN 的封裝解封裝機制也會影響性能,因此須要綜合考慮。
VxLAN 在 Linux、OVS、容器網絡等實現中都有很是多的應用,關於這些內容,留做後面具體講解了。
原創不易,若是以爲文章不錯呢,麻煩動動小指給個在看吧,或者轉發分享一下,這將會是對我原創的最大支持!謝謝!
後臺回覆「<font color=red>加羣</font>」,帶你進入高手如雲交流羣
個人公衆號 「Linux雲計算網絡」(id: cloud_dev) ,號內有 10T 書籍和視頻資源,後臺回覆 「1024」 便可領取,分享的內容包括但不限於 Linux、網絡、雲計算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術等內容,歡迎你們關注。
參考:
https://tools.ietf.org/html/r...
http://www.just4coding.com/bl...