溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

VXLAN協(xié)議的原理介紹

發(fā)布時間:2021-09-16 02:40:08 來源:億速云 閱讀:179 作者:chen 欄目:云計(jì)算

這篇文章主要介紹“VXLAN協(xié)議的原理介紹”,在日常操作中,相信很多人在VXLAN協(xié)議的原理介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”VXLAN協(xié)議的原理介紹”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

VXLAN(Virtual eXtensible Local Area Network,虛擬可擴(kuò)展局域網(wǎng)),是一種虛擬化隧道通信技術(shù)。它是一種 Overlay(覆蓋網(wǎng)絡(luò))技術(shù),通過三層的網(wǎng)絡(luò)來搭建虛擬的二層網(wǎng)絡(luò)。

簡單來講,VXLAN 是在底層物理網(wǎng)絡(luò)(underlay)之上使用隧道技術(shù),借助 UDP 層構(gòu)建的 Overlay 的邏輯網(wǎng)絡(luò),使邏輯網(wǎng)絡(luò)與物理網(wǎng)絡(luò)解耦,實(shí)現(xiàn)靈活的組網(wǎng)需求。它對原有的網(wǎng)絡(luò)架構(gòu)幾乎沒有影響,不需要對原網(wǎng)絡(luò)做任何改動,即可架設(shè)一層新的網(wǎng)絡(luò)。也正是因?yàn)檫@個特性,很多 CNI 插件(Kubernetes 集群中的容器網(wǎng)絡(luò)接口,這個大家應(yīng)該都知道了吧,如果你不知道,現(xiàn)在你知道了)才會選擇 VXLAN 作為通信網(wǎng)絡(luò)。

VXLAN 不僅支持一對一,也支持一對多,一個 VXLAN 設(shè)備能通過像網(wǎng)橋一樣的學(xué)習(xí)方式學(xué)習(xí)到其他對端的 IP 地址,還可以直接配置靜態(tài)轉(zhuǎn)發(fā)表。

一個典型的數(shù)據(jù)中心 VXLAN 網(wǎng)絡(luò)拓?fù)鋱D如圖所示:

VXLAN協(xié)議的原理介紹

其中 VM 指的是虛擬機(jī),Hypervisor 指的是虛擬化管理器。

1. 為什么需要 VXLAN?

與 VLAN 相比,VXLAN 很明顯要復(fù)雜很多,再加上 VLAN 的先發(fā)優(yōu)勢,已經(jīng)得到了廣泛的支持,那還要 VXLAN 干啥?

VLAN ID 數(shù)量限制

VLAN tag 總共有 4 個字節(jié),其中有 12 bit 用來標(biāo)識不同的二層網(wǎng)絡(luò)(即 LAN ID),故而最多只能支持 $2^{12}$,即 4096 個子網(wǎng)的劃分。而虛擬化(虛擬機(jī)和容器)的興起使得一個數(shù)據(jù)中心會有成千上萬的機(jī)器需要通信,這時候 VLAN 就無法滿足需求了。而 VXLAN 的報(bào)文 Header 預(yù)留了 24 bit 來標(biāo)識不同的二層網(wǎng)絡(luò)(即 VNI,VXLAN Network Identifier),即 3 個字節(jié),可以支持 $2^{24}$ 個子網(wǎng)。

交換機(jī) MAC 地址表限制

對于同網(wǎng)段主機(jī)的通信而言,報(bào)文到底交換機(jī)后都會查詢 MAC 地址表進(jìn)行二層轉(zhuǎn)發(fā)。數(shù)據(jù)中心虛擬化之后,VM 的數(shù)量與原有的物理機(jī)相比呈數(shù)量級增長,而應(yīng)用容器化之后,容器與 VM 相比也是呈數(shù)量級增長。。。而交換機(jī)的內(nèi)存是有限的,因而 MAC 地址表也是有限的,隨著虛擬機(jī)(或容器)網(wǎng)卡 MAC 地址數(shù)量的空前增加,交換機(jī)表示壓力山大??!

而 VXLAN 就厲害了,它用 VTEP(后面會解釋)將二層以太網(wǎng)幀封裝在 UDP 中,一個 VTEP 可以被一個物理機(jī)上的所有 VM(或容器)共用,一個物理機(jī)對應(yīng)一個 VTEP。從交換機(jī)的角度來看,只是不同的 VTEP 之間在傳遞 UDP 數(shù)據(jù),只需要記錄與物理機(jī)數(shù)量相當(dāng)?shù)?MAC 地址表?xiàng)l目就可以了,一切又回到了和從前一樣。

虛機(jī)或容器遷移范圍受限

VLAN 與物理網(wǎng)絡(luò)融合在一起,不存在 Overlay 網(wǎng)絡(luò),帶來的問題就是虛擬網(wǎng)絡(luò)不能打破物理網(wǎng)絡(luò)的限制。舉個例子,如果要在 VLAN 100 部署虛擬機(jī)(或容器),那只能在支持 VLAN 100 的物理設(shè)備上部署。

VLAN 其實(shí)也有解決辦法,就是將所有的交換機(jī) Trunk 連接起來,產(chǎn)生一個大的二層,這樣帶來的問題就是廣播域過分?jǐn)U大,也包括更多未知的單播和多播,即 BUM(Broadcast,Unknown Unicast,Multicast),同時交換機(jī) MAC 地址表也會有承受不住的問題。

而 VXLAN 將二層以太網(wǎng)幀封裝在 UDP 中(上面說過了),相當(dāng)于在三層網(wǎng)絡(luò)上構(gòu)建了二層網(wǎng)絡(luò)。這樣不管你物理網(wǎng)絡(luò)是二層還是三層,都不影響虛擬機(jī)(或容器)的網(wǎng)絡(luò)通信,也就無所謂部署在哪臺物理設(shè)備上了,可以隨意遷移。

總的來說,傳統(tǒng)二層和三層的網(wǎng)絡(luò)在應(yīng)對這些需求時變得力不從心,雖然很多改進(jìn)型的技術(shù)比如堆疊、SVF、TRILL 等能夠增加二層的范圍,努力改進(jìn)經(jīng)典網(wǎng)絡(luò),但是要做到對網(wǎng)絡(luò)改動盡可能小的同時保證靈活性卻非常困難。為了解決這些問題,有很多方案被提出來,Overlay 就是其中之一,而 VXLANOverlay 的一種典型的技術(shù)方案。下面就對 Overlay 做一個簡要的介紹。

2. Overlay 是個啥?

Overlay 在網(wǎng)絡(luò)技術(shù)領(lǐng)域,指的是一種網(wǎng)絡(luò)架構(gòu)上疊加的虛擬化技術(shù)模式,其大體框架是對基礎(chǔ)網(wǎng)絡(luò)不進(jìn)行大規(guī)模修改的條件下,實(shí)現(xiàn)應(yīng)用在網(wǎng)絡(luò)上的承載,并能與其它網(wǎng)絡(luò)業(yè)務(wù)分離,并且以基于 IP 的基礎(chǔ)網(wǎng)絡(luò)技術(shù)為主。

IETF 在 Overlay 技術(shù)領(lǐng)域提出 VXLAN、NVGRE、STT 三大技術(shù)方案。大體思路均是將以太網(wǎng)報(bào)文承載到某種隧道層面,差異性在于選擇和構(gòu)造隧道的不同,而底層均是 IP 轉(zhuǎn)發(fā)。VXLANSTT 對于現(xiàn)網(wǎng)設(shè)備而言對流量均衡要求較低,即負(fù)載鏈路負(fù)載分擔(dān)適應(yīng)性好,一般的網(wǎng)絡(luò)設(shè)備都能對 L2-L4 的數(shù)據(jù)內(nèi)容參數(shù)進(jìn)行鏈路聚合或等價(jià)路由的流量均衡,而 NVGRE 則需要網(wǎng)絡(luò)設(shè)備對 GRE 擴(kuò)展頭感知并對 flow ID 進(jìn)行 HASH,需要硬件升級;STT 對于 TCP 有較大修改,隧道模式接近 UDP 性質(zhì),隧道構(gòu)造技術(shù)屬于革新性,且復(fù)雜度較高,而 VXLAN 利用了現(xiàn)有通用的 UDP 傳輸,成熟性極高。

總體比較,VLXAN 技術(shù)具有更大優(yōu)勢,而且當(dāng)前 VLXAN 也得到了更多廠家和客戶的支持,已經(jīng)成為 Overlay 技術(shù)的主流標(biāo)準(zhǔn)。

3. VXLAN 協(xié)議原理

VXLAN 有幾個常見的術(shù)語:

  • VTEP(VXLAN Tunnel Endpoints,VXLAN 隧道端點(diǎn))

    VXLAN 網(wǎng)絡(luò)的邊緣設(shè)備,用來進(jìn)行 VXLAN 報(bào)文的處理(封包和解包)。VTEP 可以是網(wǎng)絡(luò)設(shè)備(比如交換機(jī)),也可以是一臺機(jī)器(比如虛擬化集群中的宿主機(jī))。

  • VNI(VXLAN Network Identifier,VXLAN 網(wǎng)絡(luò)標(biāo)識符)

    VNI 是每個 VXLAN 段的標(biāo)識,是個 24 位整數(shù),一共有 $2^{24} = 16777216$(一千多萬),一般每個 VNI 對應(yīng)一個租戶,也就是說使用 VXLAN 搭建的公有云可以理論上可以支撐千萬級別的租戶。

  • Tunnel(VXLAN 隧道)

    隧道是一個邏輯上的概念,在 VXLAN 模型中并沒有具體的物理實(shí)體向?qū)?yīng)。隧道可以看做是一種虛擬通道,VXLAN 通信雙方認(rèn)為自己是在直接通信,并不知道底層網(wǎng)絡(luò)的存在。從整體來說,每個 VXLAN 網(wǎng)絡(luò)像是為通信的虛擬機(jī)搭建了一個單獨(dú)的通信通道,也就是隧道。

VXLAN協(xié)議的原理介紹

上圖所示為 VXLAN 的工作模型,它創(chuàng)建在原來的 IP 網(wǎng)絡(luò)(三層)上,只要是三層可達(dá)(能夠通過 IP 相互通信)的網(wǎng)絡(luò)就能部署 VXLAN。在 VXLAN 網(wǎng)絡(luò)的每個端點(diǎn)都有一個 VTEP 設(shè)備,負(fù)責(zé) VXLAN 協(xié)議報(bào)文的解包和封包,也就是在虛擬報(bào)文上封裝 VTEP 通信的報(bào)文頭部。

物理網(wǎng)絡(luò)上可以創(chuàng)建多個 VXLAN 網(wǎng)絡(luò),可以將這些 VXLAN 網(wǎng)絡(luò)看成一個隧道,不同節(jié)點(diǎn)上的虛擬機(jī)/容器能夠通過隧道直連。通過 VNI 標(biāo)識不同的 VXLAN 網(wǎng)絡(luò),使得不同的 VXLAN 可以相互隔離。

VXLAN 的報(bào)文結(jié)構(gòu)如下圖所示:

VXLAN協(xié)議的原理介紹

  • VXLAN Header : 在原始二層幀的前面增加 8 字節(jié)的 VXLAN 的頭部,其中最主要的是 VNID,占用 3 個字節(jié)(即 24 bit),類似 VLAN ID,可以具有 $2^{24}$ 個網(wǎng)段。

  • UDP Header : 在 VXLAN 和原始二層幀的前面使用 8 字節(jié) UDP 頭部進(jìn)行封裝(MAC IN UDP),目的端口號缺省使用 4789,源端口按流隨機(jī)分配(通過 MAC,IP,四層端口號進(jìn)行 hash 操作), 這樣可以更好的做 ECMP。

    IANA(Internet As-signed Numbers Autority)分配了 4789 作為 VXLAN 的默認(rèn)目的端口號。

在上面添加的二層封裝之后,再添加底層網(wǎng)絡(luò)的 IP 頭部(20 字節(jié))和 MAC 頭部(14 字節(jié)),這里的 IP 和 MAC 是宿主機(jī)的 IP 地址和 MAC 地址。

同時,這里需要注意 MTU 的問題,傳統(tǒng)網(wǎng)絡(luò) MTU 一般為 1500,這里加上 VXLAN 的封裝多出的(36+14/18,對于 14 的情況為 access 口,省去了 4 字節(jié)的 VLAN Tag)5054 字節(jié),需要調(diào)整 MTU 為 15501554,防止頻繁分包。

VXLAN協(xié)議的原理介紹

VXLAN 的 Flood 與 Learn

總的來說,VXLAN 報(bào)文的轉(zhuǎn)發(fā)過程就是:原始報(bào)文經(jīng)過 VTEP,被 Linux 內(nèi)核添加上 VXLAN 頭部以及外層的 UDP 頭部,再發(fā)送出去,對端 VTEP 接收到 VXLAN 報(bào)文后拆除外層 UDP 頭部,并根據(jù) VXLAN 頭部的 VNI 把原始報(bào)文發(fā)送到目的服務(wù)器。但這里有一個問題,第一次通信前雙方如何知道所有的通信信息?這些信息包括:

  • 哪些 VTEP 需要加到一個相同的 VNI 組?

  • 發(fā)送方如何知道對方的 MAC 地址?

  • 如何知道目的服務(wù)器在哪個節(jié)點(diǎn)上(即目的 VTEP 的地址)?

第一個問題簡單,VTEP 通常由網(wǎng)絡(luò)管理員來配置。要回答后面兩個問題,還得回到 VXLAN 協(xié)議的報(bào)文上,看看一個完整的 VXLAN 報(bào)文需要哪些信息:

  • 內(nèi)層報(bào)文 : 通信雙方的 IP 地址已經(jīng)明確,只需要 VXLAN 填充對方的 MAC 地址,因此需要一個機(jī)制來實(shí)現(xiàn) ARP 功能。

  • VXLAN 頭部 : 只需要知道 VNI。一般直接配置在 VTEP 上,要么提前規(guī)劃,要么根據(jù)內(nèi)層報(bào)文自動生成。

  • UDP 頭部 : 需要知道源端口和目的端口,源端口由系統(tǒng)自動生成,目的端口默認(rèn)是 4789。

  • IP 頭部 : 需要知道對端 VTEP 的 IP 地址,這個是最關(guān)鍵的部分。

    實(shí)際上,VTEP 也會有自己的轉(zhuǎn)發(fā)表,轉(zhuǎn)發(fā)表通過泛洪和學(xué)習(xí)機(jī)制來維護(hù),對于目標(biāo) MAC 地址在轉(zhuǎn)發(fā)表中不存在的未知單播,廣播流量,都會被泛洪給除源 VTEP 外所有的 VTEP,目標(biāo) VTEP 響應(yīng)數(shù)據(jù)包后,源 VTEP 會從數(shù)據(jù)包中學(xué)習(xí)到 MAC,VNIVTEP 的映射關(guān)系,并添加到轉(zhuǎn)發(fā)表中,后續(xù)當(dāng)再有數(shù)據(jù)包轉(zhuǎn)發(fā)到這個 MAC 地址時,VTEP 會從轉(zhuǎn)發(fā)表中直接獲取到目標(biāo) VTEP 地址,從而發(fā)送單播數(shù)據(jù)到目標(biāo) VTEP。

    VXLAN協(xié)議的原理介紹

    VTEP 轉(zhuǎn)發(fā)表的學(xué)習(xí)可以通過以下兩種方式:

    • 多播

    • 外部控制中心(如 Flannel、Cilium 等 CNI 插件)

  • MAC 頭部 : 確定了 VTEP 的 IP 地址,后面就好辦了,MAC 地址可以通過經(jīng)典的 ARP 方式獲取。

4. Linux 的 VXLAN

Linux 對 VXLAN 協(xié)議的支持時間并不久,2012 年 Stephen Hemminger 才把相關(guān)的工作合并到 kernel 中,并最終出現(xiàn)在 kernel 3.7.0 版本。為了穩(wěn)定性和很多的功能,可能會看到某些軟件推薦在 3.9.0 或者 3.10.0 以后版本的 kernel 上使用 VXLAN。

到了 kernel 3.12 版本,Linux 對 VXLAN 的支持已經(jīng)完備,支持單播和組播,IPv4 和 IPv6。利用 man 查看 ip 的 link 子命令,可以查看是否有 VXLAN type:

$ man ip-link

搜索 VXLAN,可以看到如下描述:

VXLAN協(xié)議的原理介紹

管理 VXLAN 接口

Linux VXLAN 接口的基本管理如下:

  1. 創(chuàng)建點(diǎn)對點(diǎn)的 VXLAN 接口:

    $ ip link add vxlan0 type vxlan id 4100 remote 192.168.1.101 local 192.168.1.100 dstport 4789 dev eth0


    其中 id 為 VNI,remote 為遠(yuǎn)端主機(jī)的 IP,local 為你本地主機(jī)的 IP,dev 代表 VXLAN 數(shù)據(jù)從哪個接口傳輸。

    在 VXLAN 中,一般將 VXLAN 接口(本例中即 vxlan0)叫做 VTEP。

  2. 創(chuàng)建多播模式的 VXLAN 接口:

    $ ip link add vxlan0 type vxlan id 4100 group 224.1.1.1 dstport 4789 dev eth0


    多播組主要通過 ARP 泛洪來學(xué)習(xí) MAC 地址,即在 VXLAN 子網(wǎng)內(nèi)廣播 ARP 請求,然后對應(yīng)節(jié)點(diǎn)進(jìn)行響應(yīng)。group 指定多播組的地址。

  3. 查看 VXLAN 接口詳細(xì)信息:

    $ ip -d link show vxlan0


FDB 表

FDB(Forwarding Database entry,即轉(zhuǎn)發(fā)表)是 Linux 網(wǎng)橋維護(hù)的一個二層轉(zhuǎn)發(fā)表,用于保存遠(yuǎn)端虛擬機(jī)/容器的 MAC地址,遠(yuǎn)端 VTEP IP,以及 VNI 的映射關(guān)系,可以通過 bridge fdb 命令來對 FDB 表進(jìn)行操作:

  • 條目添加:

    $ bridge fdb add <remote_host_mac> dev <vxlan_interface> dst <remote_host_ip>


  • 條目刪除:

    $ bridge fdb del <remote_host_mac> dev <vxlan_interface>


  • 條目更新:

    $ bridge fdb replace <remote_host_mac> dev <vxlan_interface> dst <remote_host_ip>


  • 條目查詢:

    $ bridge fdb show


到此,關(guān)于“VXLAN協(xié)議的原理介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI