什麼是 VxLAN?

本文首發於個人公衆號 Linux雲計算網絡(id: cloud_dev),專一於乾貨分享,號內有 10T 書籍和視頻資源,後臺回覆 「1024」便可領取,歡迎你們關注,二維碼文末能夠掃。

VLAN 和 VxLAN 是否是還傻傻分不清楚,這篇文章就來告訴你。html

01 什麼是 VxLAN?

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 所定義。負載均衡

02 爲何須要 VxLAN?

主要有三點考慮,使得網絡虛擬化迫切須要向 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 數據包融合在一塊兒,這樣的好處是虛擬機能直接訪問到物理網絡的設備,但壞處也很明顯,虛擬網絡沒法打破物理網絡的界限,具體表如今虛擬機的部署和遷移不太靈活。

  • 部署 :若是要在 VLAN 100 上部署虛擬機,那麼只能在支持 VLAN 100 的物理機上部署,以下圖所示,假設左右兩個區域分屬 VLAN 100 和 VLAN 200,如今 VLAN 100 已經部署了不少虛擬機,而 VLAN 200 卻纔部署了少許的虛擬機,若是這時須要繼續往 VLAN 100 部署新的虛擬機,那麼也只能選擇在左邊區域部署,這就會形成左邊區域負擔太重。
  • 遷移 :一樣,若是從左邊區域往右邊區域遷移虛擬機,由於兩邊分屬於不一樣的 VLAN,虛機所分配的 IP 地址不一樣,沒法直接進行遷移,這會形成整個集羣機器的負載分配不均。

使用 VxLAN 則徹底不全在這些問題,經過 VxLAN 的封裝,在一個 L3 網絡上構建了 L2 網絡,或者說基於 underlay 網絡的 overlay 網絡,虛擬機的數據能夠打破 L2 網絡的限制,在 L3 網絡上傳輸,虛擬機的部署和遷移也不受物理網絡的限制,能夠靈活部署和遷移,使得整個數據中心保持一個平均的利用率。

03 VxLAN 的報文格式

VxLAN 是一種隧道封裝技術,那天然它的報文格式也是一種封裝的結構,以下圖很好地展示了 VxLAN 的封裝報文格式。

首先,最裏面是原始的 L2 以太網幀,也就是虛擬機發出的數據幀,接着封裝上 VxLAN 的頭部,而後整個 VxLAN 幀再封裝在物理網絡中的 UDP 報文中,接着是 IP 包頭,MAC 頭。爲了和內部的原始以太網幀區別,外部封裝的都加上外層 IP 頭,外層 MAC 頭。

其中,VxLAN 頭由 8Bytes 組成,分別是:

  • Flags:佔 8bits,具體是 RRRRIRRR,其中 I 必須設置爲 1,表示是是一個合法的 VxLAN ID,其它 7bits 的 R 做爲保留字段而且設置爲 0。
  • VNI(VxLAN Network Identifier):佔 24bits,VxLAN 的 ID 標識,這個字段就對比於 12bits 的 VLAN ID,支持 ID 個數擴展爲 2^24 = 16777216,約等於 16M 個。
  • Reserved:有兩個字段,分別佔 24 bits 和 8 bits,做爲保留字段而且設置爲 0。

對於 UDP 頭部,須要注意的是,目的端口(dst port) 默認設置爲 4789,這是 IANA 分配的 VxLAN 協議使用端口號。

其他字段都是咱們常見的 TCP/IP 協議字段,這裏就再也不贅述了。

若是嫌以上圖示還比較抽象,能夠參考下面這幅用 Wireshark 抓包的圖,更爲直觀:

04 VxLAN 的數據傳輸

下面經過一個具體的例子來看看基於 VxLAN 的網絡結構及數據傳輸是怎樣的。

以下圖,是一個基於 VxLAN 的網絡結構圖:

圖中,VTEP 叫作 VxLAN 隧道端點(VxLAN Tunnel Endpoint),是 VxLAN 協議中將對原始數據包進行封裝和解封裝的設備,它能夠由硬件設備實現,也能夠由軟件實現。

假如圖中 VM1 ping VM2,會是怎樣一個通訊過程:

  1. VM1 不知道 VM2 的 MAC 地址,會發出 ARP 請求。
  2. VM1 所在主機的 VTEP 封裝 ARP 請求包,並向網絡中其他 VTEP 廣播。同時在 MAC 地址表中記錄 VM1 的表項。
  3. VM2 所在主機的 VTEP 接收 ARP 請求包,解封裝以後將原始包發到 VM2,同時記錄 VM1 的 MAC 地址表項。
  4. VM2 發出 ARP 響應,通過 VTEP,再次封裝以後,因爲以前學習到 VM1 的地址,因此直接單播發給 VM1 所在主機的 VTEP,同時記錄 VM2 的 MAC 地址表項。
  5. VM1 所在主機 VTEP 接收 ARP 響應包,解封裝以後發給 VM1,同時記錄 VM2 的 MAC 地址表項。
  6. VM1 拿到 VM2 的 MAC 地址以後,發出 ICMP 包,這個時候 VTEP 的 MAC 地址表中已經學習到 VM2 的地址,因此直接封裝以後,單播發給 VM2 所在主機 VTEP。
  7. VM2 所在主機 VTEP 解封裝以後,直接發給 VM2。
  8. VM2 構造 ICMP 的響應包,一樣的過程發給 VM1,至此完成整個 ping 的過程。

05 總結

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...

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

https://www.openstack.org/ass...

相關文章
相關標籤/搜索