當前位置:文思屋>社會工作>電腦培訓>

隧道和網路虛擬化:NVGRE vs VXLAN

文思屋 人氣:1.88W

關於NVGRE和VXLAN隧道協議相信大家都不陌生,但是事實上隧道協議只是虛擬化網路中的一部分,它並不提供實質性的功能,只是定義不同虛擬機器之間如何封裝、轉發資料包。本文想強調兩點:其一,NVGRE和VXLAN都是用三層協議封裝二層協議;其二,這兩項技術都解決了VLAN規模固定的問題,不再侷限於4094個。隨著各種新技術的興起,一項標準已經無法滿足需求,技術巨頭們爭先恐後的想讓自己的標準成為業內統一的標準,其中NVGRE和VXLAN就是典型的例子,那麼這兩項技術的區別到底在哪裡呢?

隧道和網路虛擬化:NVGRE vs VXLAN

VXLAN

VXLAN主要是由Cisco推出的,VXLAN的包頭有一個24bit的ID段,即意味著1600萬個獨一無二的.虛擬網段,這個ID通常是對UDP埠採取偽隨機演算法而生成的(UDP埠是由該幀中的原始MAC Hash生成的)。這樣做的好處是可以保證基於5元組的負載均衡,儲存VM之間資料包的順序,具體做法是將資料包內部的MAC組對映到唯一的UDP埠組。將二層廣播被轉換成IP組播,VXLAN使用IP組播在虛擬網段中泛洪而且依賴於動態MAC學習。VXLAN封裝將資料包大小擴充套件到50位元組,如下圖所示:

由於資料包比較大,所以VXLAN需要藉助支援大型幀的傳輸網路才能支援資料包規模的擴充套件。

NVGRE

NVGRE主要支持者是Microsoft。與VXLAN不同的是,NVGRE沒有采用標準傳輸協議(TCP/UDP),而是藉助通用路由封裝協議(GRE)。NVGRE使用GRE頭部的低24位作為租戶網路識別符號(TNI),與VXLAN一樣可以支援1600個虛擬網路。為了提供描述頻寬利用率粒度的流,傳輸網路需要使用GRE頭,但是這導致NVGRE不能相容傳統負載均衡,這是NVGRE與VXLAN相比最大的區別也是最大的不足。為了提高負載均衡能力建議每個NVGRE主機使用多個IP地址,確保更多流量能夠被負載均衡。

NVGRE不需要依賴泛洪和IP組播進行學習,而是以一種更靈活的方式進行廣播,但是這需要依賴硬體/供應商。最後一個區別關於分片,NVGRE支援減小資料包最大傳輸單元以減小內部虛擬網路資料包大小,不需要要求傳輸網路支援傳輸大型幀。

實驗

OVS(open Vswitch)可以支援這兩種隧道協議。可以實現兩個虛擬機器的簡單通訊,在兩個主機上面分別執行VM,並且在這個VM之間建立一個隧道。如果沒有GRE隧道,兩個VM就無法連線。在主機之間建立隧道的簡單步驟:

1、主機1配置如下:

ovs-vsctl add-br brgre

ovs-vsctl add-br brvm

ovs-vsctl add-port brgre eth0

ifconfig eth0 0

ifconfig brgre netmask

route add default gw brgre

ifconfig brvm netmask

ovs-vsctl add-port brvm gre1 -- set interface gre1 type=gre options:remoteip=

2、主機2配置如下:

ovs-vsctl add-br brgre

ovs-vsctl add-br brvm

ovs-vsctl add-port brgre eth0

ifconfig eth0 0

ifconfig brgre netmask

route add default gw brgre

ifconfig brvm netmask

ovs-vsctl add-port brvm gre1 -- set interface gre1 type=gre options:remoteip=

在每臺主機中建立2個橋,其中brvm用於模擬虛擬機器,另一個brgre用作與其他主機的做隧道(VTEP)連線。eth0連線brgre,brgre繫結IP用於實現隧道。為了簡化實驗,我將GRE隧道設定在同一子網中,當然可以放於不同域中使模擬場景更真實。下面就可以進行測試了,和應該是可以ping通的,這兩個VM域通過隧道連線,同樣,也可以改成VXLAN隧道配置。