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

來源:文萃谷 2.45W

關於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隧道配置。

熱門標籤