2.vxlan網絡詳解
Vxlan解決了什么問題

如圖為傳統虛機的二三層網絡環境,為了實現網絡隔離,將辦公區和生產區的主機劃分在不同的vlan,但這種環境無法實現虛機的全范圍遷移,虛機只能在給定的vlan范圍內進行遷移,且這種環境的網絡隔離無法滿足海量租戶隔離的網絡,因為vlan數量只能在10-4096,約為4000個,數量有限
vxlan就是為了解決這些問題而生:
1.vxlan在2個具有交換機功能的設備間打通一條隧道,其余用戶或主機無法進入,隔離了所有用戶,大大提升隔離范圍
2.vxlan提供了16M左右的id供用戶使用,解決了id數不足的問題
vxlan報文

vxlan包頭:封裝了VNI標識,供隧道兩端識別
UDP包頭:記錄了用于轉發的源端口(哈希值,通過隨即哈希均勻使用所有源端口,充分利用所有端口)、目的端口(默認為4789)
外部IP包頭:源虛機、目的虛機所屬VTEP設備的IP地址
外部MAC包頭
VXLAN網絡傳輸流程

s主機與d主機中間的兩個交換機就是兩端的VTEP設備(vxlan tunnel endpoints),他對原始報文進行封裝,對端VTEP通過解封將原始報文恢復出來,然后發送給目的主機
VTEP概述
vxlan隧道傳輸的端點:起點和終點,它可以對數據報文進行封裝和解封裝
VNI(vxlan network identifier)概述
類似于vlan的網絡標識,在vxlan中主機要實現相互通信必須要在同一VNI
二層VNI:常見的VNI,以1:1映射到bridge domain
三層VNI:和VPN關聯,用于vxlan跨網段傳輸
疑問:既然vxlan可以對原始報文進行封裝,那么對端并不關心真實源地址是多少,也就無需考慮是否是同一子網,個人認為是可以實現跨網段轉發,為什么只有三層才可以?
大二層域
也叫做bridge domain,一個BD下對應一個VNI,它們在VTEP配置如下

哪些報文要進入VXLAN隧道
cloud engine系列交換機可以實現vxlan技術,它有一個邏輯上的二層子接口,這個接口對發來的報文做2件事
1.根據自身配置確認報文是否要進入VXLAN隧道
2.對檢查通過的報文做什么操作
cloud engine的4種流封裝類型

疑問:IEEE 802.1Q協議規定在目的MAC地址和源MAC地址之后封裝4個字節的VLAN Tag,用以標識VLAN的相關信息。Mac地址屬于數據鏈路層。為什么還有兩層vlan標簽的報文?都在哪兩層?

內層VLAN Tag為用戶私網VLAN Tag,外層VLAN Tag為運營商分配給用戶的VLAN Tag。在公網中,報文只根據外層VLAN Tag進行轉發,并將報文的源MAC地址表項學習到外層Tag所在VLAN的MAC地址表中,而用戶的私網VLAN Tag在傳輸過程中將被當作報文中的數據部分來進行傳輸。
QinQ主要可以解決如下幾個問題:
1、緩解日益緊缺的公網VLAN ID資源問題。
2、用戶可以規劃自己的私網VLAN ID,不會導致和公網VLAN ID沖突。
3、為小型城域網或企業網提供一種較為簡單的二層VPN解決方案。
將二層子接口加入BD:示例

虛機VM1和VM2分別位于不同vlan,如何實現兩臺虛機都可以訪問其他虛機?
1.將管理VM1和VM2的交換機設為trunk模式,因為trunk模式可以整合所有vlan,這樣可以接收所有vlan的報文,且設置pvid為20
2.vlan10的報文與pvid不匹配,會被打上標簽,屬于dot1q封裝類型;vlan20則與pvid匹配,不會打標簽,屬于untag類型;在VTEP設備配置2個二層子接口
10GE1/0/1.1和10GE 1/0/1.2這兩個接口要想將報文加入vxlan隧道,需要配置類型分別為dot1q和untag
具體命令如下

建立vxlan隧道的2種方式
手動建立

根據peer list這張列表,交換機就會知道對應BD域中都有哪些VTEP設備,VTEP設備收到BUM(Broadcast&Unknown-unicast&Multicast,廣播&未知單播&組播)報文時會將報文復制并發給列表中所有VTEP,所以這張列表叫做頭端復制列表
當VTEP收到單播報文時,會根據VTEP的MAC表判斷要發給哪個VTEP,進而確定要走哪個vxlan隧道
自動建立
vxlan網關
不同VNI的主機,以及不同vxlan網絡中的主機不能直接通信,需要vxlan網關
二層網關:處理同一vxlan網絡通信
三層網關:處理不同vxlan網絡間通信
三層網關的分類
Spine節點:VXLAN中的三層網關,關注于高速IP轉發,強調的是設備的高速轉發能力。
Leaf節點:作為VXLAN網絡中的二層網關設備,與物理服務器或VM對接,用于解決終端租戶接入VXLAN虛擬網絡的問題。
作為VXLAN網絡中的三層網關設備,進行VXLAN報文封裝/解封裝,實現跨子網的終端租戶通信,以及外部網絡的訪問。
vxlan集中式網關:將三層網關部署在同一設備,對跨子網傳輸進行統一管理

優點:對跨子網流量進行集中管理,網關的部署和管理比較簡單。
缺點:轉發路徑不是最優: 同一二層網關下跨子網的數據中心三層流量都需要經過集中三層網關繞行轉發(如圖中藍色虛線所示)。
ARP表項規格瓶頸: 由于采用集中三層網關,通過三層網關轉發的終端的ARP表項都需要在三層網關上生成,而三層網關上的ARP表項規格有限,這不利于數據中心網絡的擴展。
VXLAN分布式網關
VXLAN分布式網關特點:
同一個Leaf節點既可以做VXLAN二層網關,也可以做VXLAN三層網關,部署靈
活。
Leaf節點只需要學習自身連接服務器的ARP表項,而不必像集中三層網關一樣,
需要學習所有服務器的ARP表項,解決了集中式三層網關帶來的ARP表項瓶頸問
題,網絡規模擴展能力強。
同子網通信
ARP 請求報文轉發流程

VM_A、VM_B和VM_C同屬于10.1.1.0/24網段,且同屬于VNI 5000。此時,VM_A想與VM_C進行通信,由于是首次進行通信,VM_A上沒有VM_C的MAC地址,所以會發送ARP廣播報文請求VM_C的MAC地址

1. VM_A發送源MAC為MAC_A、目的MAC為全F、源IP為IP_A、目的IP為IP_C的ARP廣播報文,請求VM_C的MAC地址。
2. VTEP_1收到ARP請求后,根據二層子接口上的配置判斷報文需要進入VXLAN隧道。確定了報文所屬BD后,也就確定了報文所屬的VNI,這是知道將報文接入哪個隧道。同時,VTEP_1學習MAC_A、VNI和報文入接口(Port_1,即二層子接口對應的物理接口)的對應關系,并記錄在本地MAC表中。之后,VTEP_1會根據頭端復制列表對報文進行復制,并分別進行封裝。可以看到,這里封裝的外層源IP地址為本地VTEP(VTEP_1)的IP地址,外層目的IP地址為對端VTEP(VTEP_2和VTEP_3)的IP地址;外層源MAC地址為本地VTEP的MAC地址,而外層目的MAC地址為去往目的IP的網絡中下一跳設備的MAC地址。封裝后的報文,根據外層MAC和IP信息,在IP網絡中進行傳輸,直至到達對端VTEP。
3. 報文到達VTEP_2和VTEP_3后,VTEP對報文進行解封裝,得到VM_A發送的原始報文。同時,VTEP_2和VTEP_3學習VM_A的MAC地址、VNI和遠端VTEP的IP地(IP_1)的對應關系,并記錄在本地MAC表中。之后,VTEP_2和VTEP_3根據二層子接口上的配置對報文進行相應的處理并在對應的二層域內廣播。VM_B和VM_C接收到ARP請求后,比較報文中的目的IP地址是否為本機的IP地址。VM_B發現目的IP不是本機IP,故將報文丟棄;VM_C發現目的IP是本機IP,則對ARP請求做出應答。下面,讓我們看下ARP應答報文是如何進行轉發的。
ARP 應答報文轉發流程

1. 由于此時VM_C上已經學習到了VM_A的MAC地址,所以ARP應答報文為單播報文。報文源MAC為MAC_C,目的MAC為MAC_A,源IP為IP_C、目的IP為IP_A。
2. VTEP_3接收到VM_C發送的ARP應答報文后,識別報文所屬的VNI(識別過程與步驟②類似)。同時,VTEP_3學習MAC_C、VNI和報文入接口(Port_3)的對應關系,并記錄在本地MAC表中。之后,VTEP_3對報文進行封裝??梢钥吹?,這里封裝的外層源IP地址為本地VTEP(VTEP_3)的IP地址,外層目的IP地址為對端VTEP(VTEP_1)的IP地址;外層源MAC地址為本地VTEP的MAC地址,而外層目的MAC地址為去往目的IP的網絡中下一跳設備的MAC地址。封裝后的報文,根據外層MAC和IP信息,在IP網絡中進行傳輸,直至到達對端VTEP。
3. 報文到達VTEP_1后,VTEP_1對報文進行解封裝,得到VM_C發送的原始報文。同時VTEP_1學習VM_C的MAC地址、VNI和遠端VTEP的IP地址(IP_3)的對應關系,并記錄在本地MAC表中。之后,VTEP_1將解封裝后的報文發送給VM_A。
缺點:除了源VTEP設備,該子網內其余所有VTEP都要接收報文,并學習,造成不必要的網絡開銷
集中式 VXLAN 中不同子網互通

VM_A和VM_B分別屬于10.1.10.0/24網段和10.1.20.0/24網段,且分別屬于VNI 5000和VNI 6000。VM_A和VM_B對應的三層網關分別是VTEP_3上BDIF 10和BDIF 20的IP地址。VTEP_3上存在到10.1.10.0/24網段和10.1.20.0/24網段的路由。此時,VM_A想與VM_B進行通信
BDIF接口是bridge domain下的接口,用于實現跨vxlan通信和vxlan與非vxlan通信
過程:源主機發出ARP廣播,請求目的IP的MAC地址,三層網關收到請求后根據配置確定需要發往哪個BD域和接口,并再次廣播,學習目的主機的MAC地址表,注意:二層網關不會學習其他vxlan地址表,所以源主機對應的VTEP1不會學習目的主機的MAC地址。
接下來進行報文封裝,封裝過程相同,不再表述,回復報文過程相同,略。
報文轉發流程

現在假設VM_A和VM_B均已學到網關的MAC、網關也已經學到VM_A和VM_B的MAC,下面就讓我們看下數據報文是如何從VM_A發送到VM_B的
1 VM_A轉發報文至當前vxlan二層網關VTEP1,源MAC為本機MAC,目的MAC為三層網關VTEP3 BDIF10接口的MAC,源IP和目的IP分別是VM_A和VM_B
2 VTEP1收到報文后,根據自身學習的VNI與MAC、接口映射表發現該報文所屬VNI為5000,于是對原始報文封裝:外層源IP為當前VTEP1IP,目的IP為三層網關VTEP3IP,外層源MAC為當前VTEP1的MAC,目的MAC為下一跳MAC,不是VTEP3的MAC
3 VTEP3收到報文后進行解封裝,發現目的MAC為自身的10接口MAC,目的IP為VM_B的IP
查詢路由表發現到達下一跳地址就是VM_B的IP,出接口為自身的20接口,VTEP修改原始報文:源MAC為自身20接口的MAC,目的MAC為VM_B的MAC
報文轉發至20接口后,根據自身配置的映射表發現需要將報文進入VNI為6000的vxlan隧道,VM_B所屬網關為VTEP2,于是對原始報文進行封裝:外層源IP為當前VTEP的IP,目的IP為VTEP2的IP,源MAC為VTEP3的MAC,目的MAC為下一跳的MAC
4 報文到達VTEP2后,設備對其解封裝,將原始報文轉給VM_B
浙公網安備 33010602011771號