普定縣建設(shè)局網(wǎng)站怎么辦網(wǎng)站平臺(tái)
本章幫助網(wǎng)絡(luò)工程師或架構(gòu)師回答如下問(wèn)題:
- 什么是網(wǎng)絡(luò)虛擬化?
- 網(wǎng)絡(luò)虛擬化有哪些用途?
- 網(wǎng)絡(luò)虛擬化領(lǐng)域內(nèi)有哪些不同的技術(shù)方向?
- 網(wǎng)絡(luò)虛擬化的控制面有哪些選擇?
- 當(dāng)使用 VXLAN 時(shí)如何進(jìn)行橋接和路由?
什么是網(wǎng)絡(luò)虛擬化?
網(wǎng)絡(luò)虛擬化可以讓網(wǎng)絡(luò)運(yùn)營(yíng)者將一個(gè)物理網(wǎng)絡(luò)劃分為多個(gè)互相隔離的虛擬網(wǎng)絡(luò)。
在分組網(wǎng)絡(luò)中,每一個(gè)虛擬網(wǎng)絡(luò)總是認(rèn)為自己擁有以下資源:
- 接口或者鏈接
- 轉(zhuǎn)發(fā)表
- 其他類(lèi)型的表,比如用于執(zhí)行強(qiáng)制策略 (例如,接入控制) 以及用于完成其他數(shù)據(jù)包處理(比如,網(wǎng)絡(luò)地址轉(zhuǎn)換[NAT])。
- 數(shù)據(jù)包級(jí)緩存以及鏈路隊(duì)列
在更高的抽象層級(jí),每一個(gè)虛擬網(wǎng)絡(luò)都認(rèn)為除了自身沒(méi)有其他網(wǎng)絡(luò)的存在。為了允許存在這種幻想,每一個(gè)虛擬網(wǎng)絡(luò)都和其他虛擬網(wǎng)絡(luò)彼此隔離。為了讓擁有所有地址空間的幻想成真,一個(gè)數(shù)據(jù)包轉(zhuǎn)發(fā)表會(huì)按照多個(gè)虛擬網(wǎng)絡(luò)進(jìn)行劃分。為了確保虛擬網(wǎng)絡(luò)的流量彼此隔離,要么將一個(gè)網(wǎng)絡(luò)接口完全分配給某一個(gè)虛擬網(wǎng)絡(luò),要么為共享該鏈路的每個(gè)虛擬網(wǎng)絡(luò)邏輯地劃分出一個(gè)接口。
網(wǎng)絡(luò)虛擬化在數(shù)據(jù)中心的應(yīng)用
在當(dāng)代數(shù)據(jù)中心,網(wǎng)絡(luò)虛擬化主要有以下應(yīng)用場(chǎng)景
- 強(qiáng)制流量經(jīng)過(guò)特定的服務(wù)
- 在三層網(wǎng)絡(luò)上提供二層連接
- 多租戶(hù)
- 使交換機(jī)的管理流量和數(shù)據(jù)流量分離
強(qiáng)制將流量路由到特定路徑上
第一個(gè)用例是使用網(wǎng)絡(luò)虛擬化強(qiáng)制將流量路由到提供特定服務(wù)的節(jié)點(diǎn)上去。
展示了這種用例的一種典型設(shè)計(jì)。圖6-1(a)展示了外部網(wǎng)絡(luò)和單一內(nèi)部網(wǎng)絡(luò)的物理連接。圖6-1(b)展示了通過(guò)為外部網(wǎng)絡(luò)和內(nèi)部網(wǎng)終創(chuàng)建分離的單一虛擬網(wǎng)終來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)隔離。內(nèi)部網(wǎng)絡(luò)和外部網(wǎng)絡(luò)之間的流量必須通過(guò)防火墻,因?yàn)榉阑饓κ俏ㄒ缓蛢?nèi)部網(wǎng)絡(luò)及外部網(wǎng)絡(luò)都有連接的網(wǎng)絡(luò)節(jié)點(diǎn)。圖6-1(b)也許看起來(lái)像一個(gè)傳統(tǒng)的防火墻,但是這里的兩個(gè)邊緣路由器實(shí)際上是同一臺(tái)路由器。它的路由表分成兩部分,路由器的一側(cè)(內(nèi)部網(wǎng)絡(luò)) 并不與另一側(cè) (外部網(wǎng)絡(luò)) 直接通信。
如果有多個(gè)內(nèi)部網(wǎng)絡(luò),每一個(gè)內(nèi)部網(wǎng)絡(luò)都和外部網(wǎng)絡(luò)采取不同的策略進(jìn)行通信,那么創(chuàng)建多個(gè)虛擬網(wǎng)絡(luò)是針對(duì)這種用例的常用的解決方案
當(dāng)某個(gè)需求強(qiáng)制要求流量符合某個(gè)策略,即只有特定類(lèi)別的流量被顯式地授權(quán)之后才能真正進(jìn)行節(jié)點(diǎn)之間的通信,那么網(wǎng)絡(luò)虛擬化針對(duì)這類(lèi)用例是很有價(jià)值的。
需要二層網(wǎng)絡(luò)互聯(lián)的應(yīng)用程序
云
云本身就是支持多租戶(hù)的,因?yàn)樵品?wù)提供商基于通用及共享的計(jì)算或網(wǎng)絡(luò)基礎(chǔ)設(shè)施來(lái)支持多個(gè)客戶(hù)。網(wǎng)絡(luò)虛擬化是支持此用例的基礎(chǔ)技術(shù)。
交換機(jī)的管理網(wǎng)絡(luò)和數(shù)據(jù)網(wǎng)絡(luò)的分離
在數(shù)據(jù)中心內(nèi),網(wǎng)絡(luò)虛擬化最普遍的使用方法是交換機(jī)管理網(wǎng)絡(luò)和數(shù)據(jù)流量分離。每一臺(tái)交換機(jī)都具有一個(gè)單獨(dú)的帶外以太網(wǎng)端口,該端口僅用于管理服務(wù)器與交換機(jī)的通信。例如鏡像下載,SSH接入,借助網(wǎng)絡(luò)自動(dòng)化技術(shù)進(jìn)行配置,通過(guò) SNMP進(jìn)行監(jiān)控這類(lèi)的交換機(jī)管理任務(wù),以及其他解決方案全都是通過(guò)這種獨(dú)立的帶外管理網(wǎng)絡(luò)來(lái)進(jìn)行。此以太網(wǎng)管理端口并不會(huì)連接至轉(zhuǎn)發(fā)芯片,也不需要利用轉(zhuǎn)發(fā)芯片驅(qū)動(dòng)程序來(lái)配置交換機(jī)。
這是我所遇到過(guò)的最普遍的一種運(yùn)營(yíng)人員用來(lái)管理交換機(jī)的方法 (交換機(jī)包括路由器或網(wǎng)橋,為了明確起見(jiàn),這里加以區(qū)分) 。數(shù)據(jù)流量 (即存在于網(wǎng)絡(luò)上的業(yè)務(wù)流量) 不會(huì)使用這張管理網(wǎng)絡(luò)。
與管理網(wǎng)絡(luò)的缺省路由不同,數(shù)據(jù)流量要求的是另一條缺省路由。一臺(tái)交換機(jī)具有兩條不同的缺省路由只能是借助VRF虛擬路由轉(zhuǎn)發(fā)實(shí)現(xiàn)。
網(wǎng)絡(luò)虛擬化模型
服務(wù)抽象:二層或者三層
傳統(tǒng)上網(wǎng)絡(luò)被劃分為七層,但是從網(wǎng)絡(luò)虛擬化的角度看,僅與二層和三層相關(guān)。在三層和三層之上,網(wǎng)絡(luò)功能與其說(shuō)是網(wǎng)絡(luò)慮擬化不如說(shuō)是一種服務(wù)虛擬化。
二層虛擬網(wǎng)絡(luò)
作為一種二層服務(wù)抽象,二層虛擬網(wǎng)絡(luò)不會(huì)對(duì)負(fù)責(zé)數(shù)據(jù)包路由的網(wǎng)絡(luò)層做任何假設(shè)。二層虛擬網(wǎng)絡(luò)僅假設(shè)包轉(zhuǎn)發(fā)會(huì)使用二層 (或 MAC) 轉(zhuǎn)發(fā)表,并且地址在整個(gè)二層網(wǎng)絡(luò)是唯一的。但一個(gè)虛擬二層網(wǎng)絡(luò)并不需要讓IP地址像 MAC 地址一樣在整個(gè)二層虛擬網(wǎng)絡(luò)是唯一的。虛擬網(wǎng)絡(luò)起源于 VLAN (virtual local area network,虛擬局城網(wǎng)),VLAN 提供了一種二層服務(wù)抽象。
在傳統(tǒng)的橋接網(wǎng)絡(luò)(包括VLAN)中,STP在整個(gè)橋接網(wǎng)絡(luò)范圍內(nèi)構(gòu)建單一的生成樹(shù)用于轉(zhuǎn)發(fā)所有包,包括單播包及多目的地址包(未知單播包,多播包以及廣播包)。因此單播幀和多目的地址幀使用同樣的轉(zhuǎn)發(fā)路徑。引入 VLAN 之后,通常都會(huì)為每個(gè) VLAN 單獨(dú)創(chuàng)建一個(gè)生成樹(shù)。
三層虛擬網(wǎng)絡(luò)
作為三層服務(wù)的抽象,虛擬三層網(wǎng)絡(luò)會(huì)提供唯一的三層地址。正如在物理網(wǎng)絡(luò)中一樣,虛擬三層網(wǎng)絡(luò)通常是 IP 網(wǎng)絡(luò) (但并非總是如此)。每一個(gè)虛擬三層網(wǎng)絡(luò)會(huì)獲取一份路由表的副本,并且此副本僅歸此虛擬三層網(wǎng)絡(luò)所有。每一個(gè)虛擬網(wǎng)絡(luò)的路由表的生成方法類(lèi)似物理網(wǎng)絡(luò):要么是預(yù)先配置好,要么根據(jù)某種協(xié)議或網(wǎng)絡(luò)協(xié)議棧動(dòng)態(tài)生成。如果路由表是按照路由協(xié)議生成,那么每個(gè)虛擬三層網(wǎng)絡(luò)要么有各自單獨(dú)的路由協(xié)議的實(shí)例,要么單個(gè)路由協(xié)議實(shí)例可以區(qū)分不同虛擬三層網(wǎng)絡(luò)的地址這兩種模型都很流行且通用。
最常用的虛擬三層網(wǎng)絡(luò)技術(shù)是 VPN。各種 VPN 技術(shù)都依賴(lài)于支持虛擬三層網(wǎng)絡(luò)所必需的一種基礎(chǔ)抽象,被稱(chēng)為 VRF (Virtual Routing and Forwarding,虛擬路由和轉(zhuǎn)發(fā))。**VRF的主要任務(wù)就是為每一個(gè)虛擬三層網(wǎng)絡(luò)提供單獨(dú)的路由表。**通常由在路由查找表中添加 VRFID 字段來(lái)實(shí)現(xiàn)。在 VRF的最簡(jiǎn)單的實(shí)現(xiàn)里,VRFID 是來(lái)自數(shù)據(jù)包的接收接口。數(shù)據(jù)包本身并不提供任何可用于生成 VRFID 的信息。但是,VPN會(huì)在數(shù)據(jù)包中攜帶 VPN ID。
VPN 后來(lái)也發(fā)展到可以支持虛擬二層網(wǎng)絡(luò)。因此,支持虛擬三層網(wǎng)絡(luò)的 VPN 通常稱(chēng)為 L3VPN,以區(qū)別于 L2VPN。
內(nèi)嵌虛擬網(wǎng)絡(luò)與 Overlay 虛擬網(wǎng)絡(luò)
虛擬網(wǎng)絡(luò)還有另一類(lèi)重要的分類(lèi)標(biāo)準(zhǔn),即虛擬網(wǎng)絡(luò)是作為內(nèi)嵌網(wǎng)絡(luò)實(shí)現(xiàn)還是作為Overlay 網(wǎng)絡(luò)實(shí)現(xiàn)。在內(nèi)嵌模型中,源端和目的端的每一跳都會(huì)感知到數(shù)據(jù)包所屬的虛擬網(wǎng)絡(luò)的存在,并使用這類(lèi)信息在轉(zhuǎn)發(fā)表中做查詢(xún)。在 Overlay 網(wǎng)絡(luò)模型中,只有網(wǎng)絡(luò)的邊緣部分會(huì)關(guān)注虛擬網(wǎng)絡(luò),網(wǎng)絡(luò)的內(nèi)部并不知道虛擬網(wǎng)絡(luò)的存在。VLAN和VRF是內(nèi)嵌模型的例子,然而 MPLS,VXLAN以及其他基于IP的 VPN都是Overlay 網(wǎng)絡(luò)的例子。
內(nèi)嵌模型的主要優(yōu)點(diǎn)是透明以及沒(méi)有數(shù)據(jù)包頭的開(kāi)銷(xiāo)。但是這種模型需要路徑上的每個(gè)節(jié)點(diǎn)都能感知到虛擬網(wǎng)絡(luò)的存在,這會(huì)使得內(nèi)嵌模型不易于擴(kuò)展且低效。內(nèi)嵌模型之所以低效,是因?yàn)樵诤诵木W(wǎng)絡(luò)中,每一臺(tái)交換機(jī)或路由器都必須跟蹤每一個(gè)虛擬網(wǎng)絡(luò)以便正確的轉(zhuǎn)發(fā)數(shù)據(jù)包。這種做法非常低效,因?yàn)槿魏螌?duì)虛擬網(wǎng)絡(luò)的改動(dòng)都會(huì)影響網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)。在網(wǎng)絡(luò)中,這種行為猶如一臺(tái)機(jī)器中的活動(dòng)部件一樣,如果這類(lèi)活動(dòng)部件越多,那引入的錯(cuò)誤和造成不確定問(wèn)題的可能性就越大。任何部署過(guò) VLAN的人都非常清楚這兩個(gè)問(wèn)題。VRF 也有同樣的問(wèn)題。
因此,Overlay 虛擬網(wǎng)絡(luò)更流行,而且在數(shù)據(jù)中心里人們更傾向于使用它,尤其是需要部署成千上萬(wàn)的虛擬網(wǎng)絡(luò)的時(shí)候。
網(wǎng)絡(luò)隧道:構(gòu)建Overlay虛擬網(wǎng)絡(luò)的基礎(chǔ)
建立網(wǎng)絡(luò)隧道是很簡(jiǎn)單的:在原始數(shù)據(jù)包之外再封裝一層數(shù)據(jù)包頭。這些額外的數(shù)據(jù)包頭被稱(chēng)為隧道包頭,它包含了新的源地址和目的地址,被添加到原始數(shù)據(jù)包頭之前。這時(shí),隧道端點(diǎn)之間的網(wǎng)絡(luò)并不會(huì)感知到隧道包頭內(nèi)所封裝的任何信息。另一種理解網(wǎng)絡(luò)隧道的方式是把網(wǎng)絡(luò)隧道想象成一條虛擬鏈路,這條鏈路利用新增的隧道包頭來(lái)提供所需的網(wǎng)絡(luò)抽象。
網(wǎng)絡(luò)隧道都是被創(chuàng)建成了一個(gè)偽裝的網(wǎng)絡(luò)接口
利用圖 6-2 來(lái)理解一下網(wǎng)絡(luò)隧道里數(shù)據(jù)包轉(zhuǎn)發(fā)過(guò)程。R1,R2 以及 R3 是三臺(tái)路由器,它們的路由表狀態(tài)顯示在各自上方的方框內(nèi)。每一個(gè)箭頭表示路由器會(huì)從
一個(gè)端口將數(shù)據(jù)包按照箭頭方向發(fā)出,并到達(dá)與此箭頭所代表的路由表項(xiàng)相關(guān)聯(lián)的目的主機(jī)。
正如 R2 的路由表所顯示的那樣,R2 只知道如何將數(shù)據(jù)包轉(zhuǎn)發(fā)到 R1和R3。因此,如圖 6-2(a) 所示,當(dāng)一個(gè)源地址是A 且目的地址是 B 的數(shù)據(jù)包到達(dá)R2時(shí),R2 會(huì)拋棄掉這個(gè)數(shù)據(jù)包。在圖 6-2(b) 中,R1為此數(shù)據(jù)包添加了一個(gè)新的包頭,這個(gè)包頭表示新的數(shù)據(jù)包以 R3 為目的地址,R1 為源地址。R2 這時(shí)就知道如何轉(zhuǎn)發(fā)這個(gè)新的數(shù)據(jù)包了。當(dāng)新的數(shù)據(jù)包到達(dá) R3 時(shí),R3 除外層包頭,并將數(shù)據(jù)包發(fā)送到 B因?yàn)?R3 知道如何轉(zhuǎn)發(fā)數(shù)據(jù)包到 B。在 R1和 R3 之間,原數(shù)據(jù)包被認(rèn)為是在一條網(wǎng)絡(luò)隧道中進(jìn)行傳輸。一個(gè)常見(jiàn)的網(wǎng)絡(luò)隧道的例子就是使用 VPN。
數(shù)據(jù)包在 R1,R2和R3 之間傳輸?shù)男袨榕c Overlay 虛擬網(wǎng)絡(luò)很類(lèi)似。A和B處在一個(gè)私有網(wǎng)絡(luò)中,而核心路由器 R2 并不知道這個(gè)私有網(wǎng)絡(luò)的存在。這就是為什么通
常使用網(wǎng)絡(luò)隧道來(lái)實(shí)現(xiàn) Overlay 虛擬網(wǎng)絡(luò)的原因。在Overlay 虛擬網(wǎng)絡(luò)中,隧道的端點(diǎn)(如圖6-2中的R1和R3)被稱(chēng)為NVE (network virtualization edge,網(wǎng)絡(luò)虛擬化端)。入口NVE 代表著虛擬 Overlay 網(wǎng)絡(luò)的起點(diǎn)(如本例中的R1),它負(fù)責(zé)添加隧道包頭。出口 NVE代表著擬 Overlay 網(wǎng)絡(luò)的終點(diǎn)(如本例中的 R3),它負(fù)責(zé)剝離隧道包頭。連接 NVE 的網(wǎng)絡(luò)稱(chēng)為 Underlay 網(wǎng)絡(luò)。隧道包頭也可以攜帶數(shù)據(jù)包的虛擬網(wǎng)絡(luò) ID。遠(yuǎn)端隧道端點(diǎn)因此可以將數(shù)據(jù)包引導(dǎo)至正確的虛擬網(wǎng)絡(luò)
網(wǎng)絡(luò)隧道既可以是點(diǎn)對(duì)點(diǎn),也可以使單點(diǎn)對(duì)多點(diǎn)。在點(diǎn)對(duì)點(diǎn)的隧道中,隧道兩端正好各有一個(gè)端點(diǎn)。在單點(diǎn)對(duì)多點(diǎn)的隧道中,一個(gè)入口隧道端點(diǎn)對(duì)應(yīng)多個(gè)出口隧道端點(diǎn)。有時(shí)在單點(diǎn)對(duì)多點(diǎn)隧道中,也有可能某些流量被送至某一個(gè)目的主機(jī),看起來(lái)像是點(diǎn)對(duì)點(diǎn)隧道。三層隧道是典型的點(diǎn)對(duì)點(diǎn)隧道,然而二層隧道則兩種都有可能。
網(wǎng)絡(luò)隧道的優(yōu)點(diǎn)
-
可擴(kuò)展性
-
避免了設(shè)備整個(gè)升級(jí)
-
簡(jiǎn)化管理
-
靈活性
Clos 拓?fù)涞牟煌瑢蛹?jí) (主機(jī)或 Clos 的最低層) 都和慮擬網(wǎng)絡(luò)有關(guān),網(wǎng)絡(luò)隧道在Clos 拓?fù)涞牟煌瑢蛹?jí)的靈活性也是顯而易見(jiàn)的。一種體現(xiàn)這種靈活性的設(shè)計(jì)就是如果不是整個(gè)網(wǎng)絡(luò)都需要擬網(wǎng)絡(luò),那就讓某些專(zhuān)門(mén)的 pod支持虛擬網(wǎng)絡(luò)即可。這種解決方案并不僅僅適用于單個(gè) pod,還能按需擴(kuò)展到多個(gè) pod,而不需要升級(jí)所有網(wǎng)絡(luò)設(shè)備,因?yàn)橛行┚W(wǎng)絡(luò)設(shè)備你可能以后還需要用到。
這些優(yōu)點(diǎn)其實(shí)都來(lái)自一個(gè)設(shè)計(jì)選擇: 只需讓網(wǎng)絡(luò)邊緣的設(shè)備知道網(wǎng)絡(luò)隧道的存在,而網(wǎng)絡(luò)中的其他設(shè)備則無(wú)需知道。這種設(shè)計(jì)選擇也支持構(gòu)建網(wǎng)絡(luò)的基礎(chǔ)設(shè)施不可變模型。在構(gòu)建并配置網(wǎng)絡(luò)之后,不要再做某些改變,未來(lái)網(wǎng)絡(luò)不應(yīng)該存在因多余的配置變更和新特性而引入的錯(cuò)誤。
網(wǎng)絡(luò)隧道的缺點(diǎn)
數(shù)據(jù)包負(fù)載均衡
一個(gè)流大致可以定義為一組具有某些共同屬性的數(shù)據(jù)包。最常見(jiàn)的就是 TCP 或者 UDP 流,它們使用源IP地址,目的IP地址,四層協(xié)議 (TCP/UDP) ,四層的源端口以及四層的目的端口組成的五元組來(lái)定義。
如果一個(gè)節(jié)點(diǎn)按照不同的路徑轉(zhuǎn)發(fā)屬于同一個(gè)流的數(shù)據(jù)包,那么這些數(shù)據(jù)包到達(dá)目的主機(jī)時(shí)的順序可能會(huì)不同于源端主機(jī)發(fā)送時(shí)的順序。這種數(shù)據(jù)包的亂序到達(dá)會(huì)嚴(yán)重影響協(xié)議的性能。還有一點(diǎn)也很重要,就是要確保最大效率的利用網(wǎng)絡(luò)帶寬,這里帶寬也可以理解為到達(dá)目的主機(jī)的所有網(wǎng)絡(luò)路徑。
每一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)在決定如何轉(zhuǎn)發(fā)數(shù)據(jù)包時(shí)都要考慮到這兩種優(yōu)化從而進(jìn)行折中。
當(dāng)一個(gè)數(shù)據(jù)包在網(wǎng)絡(luò)隧道中傳輸時(shí),傳輸或承載節(jié)點(diǎn)只能看到隧道包頭。它們使用隧道包頭來(lái)判斷數(shù)據(jù)包屬于哪個(gè)流。在典型情況下,3 層隧道包頭使用不同的 4層協(xié)議類(lèi)型來(lái)標(biāo)識(shí)隧道類(lèi)型 (比如,IP 的 GRE 包頭使用IP 協(xié)議類(lèi)型為 47)。如果流量的入口和出口 NVE 都相同,那么這些流量總是具有相同的源地址和目的地址。但是,一個(gè)網(wǎng)絡(luò)隧道通常會(huì)傳輸屬于多個(gè)流的數(shù)據(jù)包。流的信息是內(nèi)嵌在隧道包頭里的?,F(xiàn)有的網(wǎng)絡(luò)設(shè)備無(wú)法看到隧道包頭內(nèi)的信息,所以同一隧道入口和出口端點(diǎn)之間的所有數(shù)據(jù)包都會(huì)按照同樣的路徑進(jìn)行轉(zhuǎn)發(fā)。因此,網(wǎng)絡(luò)隧道內(nèi)的數(shù)據(jù)包并不能充分利用節(jié)點(diǎn)之間的多路徑進(jìn)行傳輸。這會(huì)導(dǎo)致網(wǎng)絡(luò)帶寬利用率的急劇下降。早期的網(wǎng)絡(luò)很少具備多路徑傳輸能力,所以這種限制不會(huì)有什么實(shí)際的影響。但是,當(dāng)代網(wǎng)絡(luò),尤其是數(shù)據(jù)中心網(wǎng)絡(luò)中的多路徑傳輸是很常見(jiàn)的。因此需要一個(gè)方注來(lái)解決這類(lèi)問(wèn)題
解決這類(lèi)問(wèn)題的一個(gè)巧妙的方法就是使用 UDP 協(xié)議的網(wǎng)絡(luò)隧道。路由器很早就具備針對(duì) UDP 數(shù)據(jù)包進(jìn)行負(fù)載均衡的能力。類(lèi)似TCP,路由器和網(wǎng)橋可以按照同樣的路徑發(fā)送一個(gè) UDP 流的所有數(shù)據(jù)包。當(dāng)目的主機(jī)的 UDP 端口被用作隧道包頭時(shí),它表示隧道類(lèi)型。隧道包頭的源端口字段通常并不使用。因此隧道入口將負(fù)荷包頭的五元組的哈希值寫(xiě)入源端口字段的位置,以確保屬于一個(gè) TCP 流或者 UDP 流的所有數(shù)據(jù)包的源端口字段被設(shè)置為相同的值,這樣可以讓老式的網(wǎng)絡(luò)設(shè)備最大限度的利用帶寬傳輸隧道內(nèi)的數(shù)據(jù)包,而且避免了對(duì)負(fù)荷數(shù)據(jù)包的重新排序。LISP(Locator Identity Separation Protocol,位置和標(biāo)識(shí)分離協(xié)議)是第一個(gè)采用這種技巧的協(xié)議。VXLAN 完全借鑒了這個(gè)思想。
網(wǎng)卡的行為
在計(jì)算節(jié)點(diǎn)上,網(wǎng)卡提供了若干增強(qiáng)性能的功能。其中一種功能叫做 TCP 分段卸載(offloading TCP segmentation) ,還有一種叫做 IP,TCP和UDP 層數(shù)據(jù)包的校驗(yàn)和計(jì)算。這些功能都是利用網(wǎng)卡的硬件來(lái)實(shí)現(xiàn)的,這可以讓 CPU 免于執(zhí)行此類(lèi)計(jì)算密集型的工作。因此,終端主機(jī)可以大幅利用較高的帶寬收發(fā)數(shù)據(jù)包,同時(shí)也不會(huì)浪費(fèi)寶貴的 CPU 計(jì)算能力。
額外的數(shù)據(jù)包封裝或者網(wǎng)絡(luò)隧道使得網(wǎng)卡無(wú)法利用上面這些功能。因?yàn)榫W(wǎng)卡不知道該如何解析新增包頭之后的數(shù)據(jù)域,以定位 TCP/UDP/IP 負(fù)載或者向隧道的 UDP/IP包頭提供領(lǐng)外卸載功能。當(dāng)隧道技術(shù)在終端設(shè)備中采用時(shí),網(wǎng)絡(luò)性能顯著下降。雖然一些較新的網(wǎng)卡可以識(shí)別 VXLAN 的包頭,但是這類(lèi)問(wèn)題仍然是 VXLAN 一直沒(méi)能在主機(jī)上廣泛使用的主要原因。所以人們轉(zhuǎn)而求助于網(wǎng)絡(luò)來(lái)實(shí)現(xiàn) VXLAN 的封裝和解封裝的工作。于是,這就促進(jìn)了 EVPN 的興起。
最大傳輸單元
在三層網(wǎng)絡(luò)中,每個(gè)鏈接都有對(duì)應(yīng)的最大數(shù)據(jù)包長(zhǎng)度,稱(chēng)為MTU (maximum transmission unit,最大傳輸單元)。每增加一層包頭,一個(gè)數(shù)據(jù)包中所允許的載荷
的長(zhǎng)度就相應(yīng)的減少一層包頭的長(zhǎng)度。這一點(diǎn)之所以很重要的原因是,在典型情況下當(dāng)代網(wǎng)絡(luò)將不會(huì)對(duì)IP 包進(jìn)行分段,如果終端主機(jī)所配置的 MTU 沒(méi)有正確的縮減,那么虛擬網(wǎng)絡(luò)引入一個(gè)網(wǎng)絡(luò)路徑之后會(huì)導(dǎo)致難以診斷的網(wǎng)絡(luò)連接問(wèn)題。
缺乏可見(jiàn)性
典的調(diào)試工具比如 traceroute 無(wú)法揭示整個(gè)網(wǎng)絡(luò)的真實(shí)的路由路徑,它所能顯示的整個(gè)網(wǎng)絡(luò)路由路徑就只有由網(wǎng)絡(luò)隧道所代表的單一一跳。這會(huì)讓那些使用了網(wǎng)絡(luò)隧道的網(wǎng)絡(luò)中解決問(wèn)題成為一件非常痛苦的事情。
數(shù)據(jù)中心的網(wǎng)絡(luò)虛擬化
VLAN
VLAN普遍部署在網(wǎng)絡(luò)邊緣,即第一跳路由器。
VRF
VRF是一個(gè)簡(jiǎn)單的組件,用于在一個(gè)節(jié)點(diǎn)上提供被此隔離的路由表。
將彼此隔離的路由表映射到多個(gè)節(jié)點(diǎn)上提供端到端的流量隔離是其他組件需要解決的問(wèn)題。
VRF是一種內(nèi)嵌網(wǎng)絡(luò)虛似化解決方案,從源端到目的端的路由路徑上的每一個(gè)節(jié)點(diǎn)都可感知到虛擬網(wǎng)絡(luò)的存在。這就要求每個(gè)節(jié)點(diǎn)獨(dú)自負(fù)責(zé)將一個(gè)數(shù)據(jù)包和它所在的虛擬網(wǎng)絡(luò)關(guān)聯(lián)起來(lái)。各個(gè)節(jié)點(diǎn)做到這一點(diǎn)的方法是從接收到數(shù)據(jù)包的接口來(lái)推端數(shù)據(jù)包所屬的虛擬網(wǎng)絡(luò)。
一般情況下,一個(gè)物理接口可以使用 VLAN 標(biāo)簽分割成多個(gè)邏輯接口。在這種情況下VLAN不是一個(gè)二層組件,僅僅是用來(lái)區(qū)分不同的虛擬網(wǎng)絡(luò)的標(biāo)簽(merely a tag to separate the virtual network)。因?yàn)槊總€(gè)L3節(jié)點(diǎn)都會(huì)終結(jié) VLAN,在路由路徑上的每個(gè)路由器可以使用不同的 VLAN 來(lái)表示同一個(gè)VRF。但是,為了簡(jiǎn)化部署,改善網(wǎng)絡(luò)的可觀測(cè)性,以及創(chuàng)建更健壯、行為可預(yù)測(cè)的網(wǎng)絡(luò),通常在整個(gè)共享的網(wǎng)絡(luò)基礎(chǔ)架構(gòu)范圍內(nèi)會(huì)使用同樣的 VLAN 來(lái)標(biāo)識(shí)一個(gè)VRF。
VXLAN
VXLAN是無(wú)狀態(tài)的二層網(wǎng)絡(luò)隧道,它允許你在三層網(wǎng)絡(luò)基礎(chǔ)設(shè)施上建立一個(gè)二層網(wǎng)絡(luò)。
在數(shù)據(jù)中心里,VXLAN是與VRF 結(jié)合在一起來(lái)提供完整的 Overlay 虛擬網(wǎng)絡(luò)方案,此類(lèi)方案實(shí)現(xiàn)了橋接和路由功能。
VXLAN使用IP上的UDP作為封裝技術(shù),使得已有的網(wǎng)絡(luò)設(shè)備也可以在多個(gè)路路徑上實(shí)現(xiàn)數(shù)據(jù)包傳輸?shù)呢?fù)載均衡,這是數(shù)據(jù)中心網(wǎng)絡(luò)中的一個(gè)常見(jiàn)需求。VXLAN主要部署在數(shù)據(jù)中心里。在VXLAN 協(xié)議中,網(wǎng)絡(luò)隧道的一端稱(chēng)為 VTEP (VXLANTunnel Endpoints,VXLAN 隧道端點(diǎn)) 。
UDP 的源端口字段(UDP source port)是在入口 VTEP 上使用內(nèi)負(fù)荷的包頭計(jì)算得到的。這使得所有的傳輸節(jié)點(diǎn)都可以針對(duì) VXLAN 數(shù)據(jù)包實(shí)現(xiàn)正確的負(fù)載均衡。網(wǎng)絡(luò)的其他部分仍按照外部IP 包頭轉(zhuǎn)發(fā) VXLAN 數(shù)據(jù)包。
VXLAN是一種單點(diǎn)對(duì)多點(diǎn)的網(wǎng)絡(luò)隧道。網(wǎng)絡(luò)中的多播或者廣播數(shù)據(jù)包可以從一個(gè)VTEP 發(fā)送到多個(gè) VTEP。
虛擬網(wǎng)絡(luò)數(shù)量的實(shí)際限制
響虛擬網(wǎng)絡(luò)實(shí)際部署數(shù)量的主要因素依賴(lài)于以下幾點(diǎn)。
- 包頭里的虛擬網(wǎng)絡(luò) ID 字段的大小。
- 硬件造成的限制。
- 控制面和軟件的可擴(kuò)展性。
- 部署模型。
虛擬網(wǎng)絡(luò)數(shù)量的最大值就是這些因素?cái)?shù)量的最小值所共同決定。這些因素是按照所能限制的數(shù)量上限的順序羅列的。舉例來(lái)說(shuō),如果包頭只能支持 400 個(gè)虛擬網(wǎng)絡(luò)那么即使再怎么增加其他因素的上限也沒(méi)多大用處,除非采用更復(fù)雜的部署策略與此類(lèi)似,如果轉(zhuǎn)發(fā)芯片只能支持 512 個(gè)虛擬網(wǎng)絡(luò),那么即使包頭有能力支持 1600萬(wàn)個(gè)虛擬網(wǎng)絡(luò)也沒(méi)用。
包頭中虛擬網(wǎng)絡(luò) ID 字段的大小
包頭中虛擬網(wǎng)絡(luò)ID 字段的大小是限制常見(jiàn)的物理網(wǎng)絡(luò)基礎(chǔ)架構(gòu)中所能支持的虛擬網(wǎng)絡(luò)數(shù)量的關(guān)鍵因素。這個(gè)數(shù)量大小同時(shí)適用于內(nèi)嵌和Overlay 網(wǎng)絡(luò)。常見(jiàn)的限制如下:
- VLAN 包頭留有 12 比特位用于表示虛擬網(wǎng)絡(luò)數(shù)量。這意味著在連續(xù)的物理網(wǎng)絡(luò)中 VLAN 可以支持最多 4000 個(gè)虛擬網(wǎng)絡(luò)。
- MPLS 支持 20 比特位,即最多 100 萬(wàn)個(gè)虛擬網(wǎng)絡(luò),盡管 MPLS 理論上可能支持更多,只要增加 MPLS 標(biāo)簽即可。
- VXLAN 和 GRE 支持 24 比特位,即最多同時(shí)支持 1600 萬(wàn)個(gè)虛擬網(wǎng)絡(luò)。
硬件限制
限制網(wǎng)絡(luò)中虛擬網(wǎng)絡(luò)數(shù)量的下一個(gè)因素是硬件。舉例來(lái)說(shuō),即使 VXLAN 支持 1600萬(wàn)個(gè)虛擬網(wǎng)絡(luò),但單一設(shè)備上的絕大多數(shù)的轉(zhuǎn)發(fā)芯片只能支持 16K 到 64K 個(gè)虛擬網(wǎng)絡(luò)。硬件限制不僅是由包轉(zhuǎn)發(fā)表支持的虛擬網(wǎng)絡(luò)數(shù)量決定,也是由其他表如 ACL表所能支持的虛擬網(wǎng)絡(luò)數(shù)量決定。但是,如果虛擬網(wǎng)絡(luò)并不需要被所有的網(wǎng)絡(luò)設(shè)備所感知到(比如,它們都被限制在單一的 pod 中),那么你就能在整個(gè)數(shù)據(jù)中心內(nèi)支持大量的虛擬網(wǎng)絡(luò),這會(huì)比單個(gè)網(wǎng)絡(luò)設(shè)備所能支持的最大數(shù)量還要多。
控制面和軟件的可擴(kuò)展性
虛擬網(wǎng)絡(luò)的控制面在實(shí)際應(yīng)用中會(huì)對(duì)虛擬網(wǎng)絡(luò)的數(shù)量有所限制。原因如下:
運(yùn)行一個(gè)控制協(xié)議實(shí)例來(lái)攜帶所有虛擬網(wǎng)絡(luò)信息,要比為每個(gè)虛擬網(wǎng)絡(luò)運(yùn)行一個(gè)控制協(xié)議實(shí)例更具有可擴(kuò)展性。舉例來(lái)說(shuō),如果每個(gè)虛擬網(wǎng)絡(luò)運(yùn)行一個(gè)單獨(dú)的控制面協(xié)議進(jìn)程,因?yàn)?VXLAN有 24 比特位的 VNID,最大可能創(chuàng)建 1600萬(wàn)個(gè)進(jìn)程,顯然是不現(xiàn)實(shí)。
如果控制面協(xié)議使用特定的 ID 字段大小對(duì)虛擬網(wǎng)絡(luò)進(jìn)行編碼,則所能支持的虛擬網(wǎng)絡(luò)數(shù)量由此 ID 字段大小決定,與我們討論過(guò)的其他因素?zé)o關(guān)。在 Overlay 網(wǎng)絡(luò)中,核心交換機(jī)并不能感知到包轉(zhuǎn)發(fā)面內(nèi)的虛擬網(wǎng)絡(luò)的存在。但是在控制平面,控制協(xié)議仍然掌握著所有虛擬網(wǎng)絡(luò)的狀態(tài)信息,因?yàn)楹诵穆酚善饕苍S一直在將狀態(tài)信息從一個(gè) leaf 交換機(jī)中繼到其他 leaf 交換機(jī)。這會(huì)額外增加控制協(xié)議的負(fù)擔(dān),盡管通常情況下這并不是造成限制的主要因素。
部署模式
網(wǎng)絡(luò)虛擬化的控制協(xié)議
虛擬控制面和物理控制面之間的關(guān)系
內(nèi)嵌網(wǎng)絡(luò)虛擬化的控制面,典型情況下,為物理網(wǎng)絡(luò)運(yùn)行多個(gè)標(biāo)準(zhǔn)控制面的實(shí)例。比如,VLAN 使用多個(gè) STP 實(shí)例。在傳統(tǒng)最流行的模型中,PVST 為每個(gè) VLAN運(yùn)行單獨(dú)的 STP 實(shí)例。鑒于可擴(kuò)展的限制,標(biāo)準(zhǔn)化組織演化出一個(gè)變體稱(chēng)為 MSTP。雖然進(jìn)展緩慢,但是仍有進(jìn)展。
在一些稍有不同的模型中,VRF 通常使用路由協(xié)議的多個(gè)實(shí)例,即每個(gè) VRF一個(gè)實(shí)例。但是單個(gè)路由協(xié)議進(jìn)程通常支持所有這些實(shí)例。
在 Overlay 模型中,虛擬網(wǎng)絡(luò)的控制面協(xié)議至少需要交換如下信息:
- 內(nèi)部負(fù)荷的目的地址到隧道包頭中的目的地址的映射。
- 每一個(gè) Overlay 網(wǎng)絡(luò)端點(diǎn)所能支持的虛擬網(wǎng)絡(luò)列表。
還有其他可能會(huì)被交換的信息(例如,使用的隧道類(lèi)型) ,這依賴(lài)于所使用的控制協(xié)議和特性。
集中式控制模型
VXLAN
基于協(xié)議的控制模型
EVPN
舉例說(shuō)明VXLAN的橋接和路由
1)在橋接場(chǎng)景中,通過(guò)在 MAC 表中查找一個(gè)數(shù)據(jù)包的目的 MAC 地址來(lái)實(shí)現(xiàn)數(shù)據(jù)包的轉(zhuǎn)發(fā)。每一個(gè)數(shù)據(jù)包,不論被路由與否,如果接收接口是橋接接口的話(huà),通常都是在 MAC 表里查找。
2)如果接收接口不是橋接接口,比如,是路由器之間的互連接口,則數(shù)據(jù)包的目的 MAC 地址必須是該接收接口的,否則此數(shù)據(jù)包會(huì)被丟棄。如果接收到的數(shù)據(jù)包的目的 MAC 地址屬于該路由器,那此數(shù)據(jù)包就會(huì)被標(biāo)記為需要通過(guò)路由的方式發(fā)送。
- 如果接收接口是橋接接口,本地路由器上橋接接口的 MAC 地址會(huì)被標(biāo)記為要將接收到的包發(fā)送到路由器在網(wǎng)橋上的邏輯接口上,該邏輯接口通常被稱(chēng)為 SVI (Switched VLAN Interface,交換機(jī) VLAN 虛接口)。
- 如果目的MAC 地址是交換機(jī)的路由接口的,則數(shù)據(jù)包會(huì)被標(biāo)記為需要通過(guò)路由的方式發(fā)送
此概念如圖 6-4 所示。
3)如果數(shù)據(jù)包的目的 MAC 地址不是路由器的地址,那么路由器會(huì)采用接收到的數(shù)據(jù)包的 VNI 和目的MAC 地址查詢(xún) MAC表。如果查詢(xún)到的發(fā)送接口屬于某個(gè)
VXLAN 隧道,則 VXLAN 隧道包頭會(huì)被附加到數(shù)據(jù)包上。在 VXLAN 包頭附到數(shù)據(jù)包上之后,新產(chǎn)生的數(shù)據(jù)包才會(huì)被路由出去。在此次路由過(guò)程中,用于
路由表查詢(xún)的目的IP 地址變成了隧道包頭中的目的IP 地址,即出口 VTEP的IP 地址。
4)但是,如果在上一步中數(shù)據(jù)包被標(biāo)記為需要通過(guò)路由的方式發(fā)送,則數(shù)據(jù)包轉(zhuǎn)發(fā)邏輯會(huì)在路由表中查詢(xún)此數(shù)據(jù)包中的目的主機(jī) IP 地址,同時(shí)推導(dǎo)出將要發(fā)送數(shù)據(jù)包的接口 (如果有多個(gè)可能的發(fā)送接口,則必須選擇其中一個(gè))。路由表查找結(jié)果也可以確定此數(shù)據(jù)包的目的 MAC 地址,以及任何額外的信息,例如,此MAC 地址所關(guān)聯(lián)的 VNID。
5)如果發(fā)送接口是橋接接口,邏輯上此MAC 地址會(huì)在 MAC 表中再次被查詢(xún),以便推導(dǎo)出發(fā)送接口,來(lái)發(fā)送此數(shù)據(jù)包。如果通過(guò) MAC 表查找所確定的發(fā)送接口
屬于某 VXLAN隧道,則數(shù)據(jù)包的轉(zhuǎn)發(fā)和第 3 步一樣。否則,此數(shù)據(jù)包從查找所確定的發(fā)送接口轉(zhuǎn)發(fā)出去。
6)如果目的IP地址是本地 VTEP的IP地址,而且一個(gè)數(shù)據(jù)包被識(shí)別為隧道數(shù)據(jù)包那么VXLAN 的數(shù)據(jù)包頭會(huì)被剝離,而且負(fù)荷數(shù)據(jù)包會(huì)被發(fā)送回?cái)?shù)據(jù)包轉(zhuǎn)發(fā)邏
輯的開(kāi)始即第1步。這可能會(huì)導(dǎo)致從前一個(gè) VXLAN 出來(lái)的數(shù)據(jù)包被再次封裝為 VXLAN 格式發(fā)送出去,但通常會(huì)使用一個(gè)與之前不同的 VNID。
數(shù)據(jù)包被封裝并被二次路由,或者數(shù)據(jù)包被路由并被二次解封裝,這種功能被稱(chēng)為RIOT (Routing In and Out of Tunnels,進(jìn)出隧道路由)。
使用圖 6-5 所示的拓?fù)鋪?lái)展示 VXLAN 的包轉(zhuǎn)發(fā)過(guò)程。
此物理網(wǎng)絡(luò)包含兩個(gè)虛擬網(wǎng)絡(luò):
- 紫色 VNI和紫色 VLAN子網(wǎng)是
10.1.0.0/24
- 綠色 VNI和綠色 VLAN子網(wǎng)是
10.2.0.0/24
leaf 交換機(jī)L1到L4 中的IP地址是交換機(jī)的 VTEP IP 地址。比如,10.127.1.3
是L3的 VTEP IP 地址。
VXLAN 橋接示例:H1 到 H5
1)H1確定H5的IP地址 10.1.1.30
在H1的子網(wǎng)范圍內(nèi)。因此H1通過(guò) ARP協(xié)議確定H5 的MAC 地址。H1 接著發(fā)送數(shù)據(jù)包到交換機(jī) L1,其中用 H5的 MAC地址作為目的 MAC 地址,用 H1 自己的MAC 地址作為源 MAC 地址。H1在紫色 VLAN 上發(fā)送該數(shù)據(jù)包。
2)L1 接收到此數(shù)據(jù)包后用紫色 VLAN和H5的MAC 地址在 MAC 表中進(jìn)行查詢(xún)。查詢(xún)后確定使用與紫色 VNID 相關(guān)聯(lián)的 VXLAN 隧道以及 L4 交換機(jī)的出口VTEP 10.127.1.4
。
3)L1 使用 VXLAN 數(shù)據(jù)包頭將此數(shù)據(jù)包進(jìn)行封裝,目的 VTEP 為 10.127.1.4
且源VTEP 為 10.127.1.1
4)L1查詢(xún)路由表來(lái)確定到達(dá)10.127.1.4的
下一跳。因?yàn)橄乱惶?S1和S2兩種可能,L1 使用 VXLAN 數(shù)據(jù)包頭的哈希值來(lái)隨機(jī)選擇一個(gè)。我們假設(shè) L1 選擇了 S2。接下來(lái),LI 使用 S2的MAC 地址作為目的 MAC 地址,并將數(shù)據(jù)包從與 S2 相連的接口發(fā)送出去。
5)S2接收到此數(shù)據(jù)包。因?yàn)樵摂?shù)據(jù)包的目的 MAC 地址是接收接口的 MAC 地址,而接收接口又是一個(gè)路由接口,因此 S2 會(huì)對(duì)數(shù)據(jù)包的目的IP 地址10.127.1.4
進(jìn)行一次路由查詢(xún)。查詢(xún)結(jié)果顯示此數(shù)據(jù)包應(yīng)從與 L4 相連接的接口發(fā)出去。S2接下來(lái)將數(shù)據(jù)包發(fā)送到 L4,以 L4的 MAC 地址作為數(shù)據(jù)包的目的MAC 地址,以 S2 自己的 MAC 地址作為源 MAC 地址。
6)L4 收到此數(shù)據(jù)包。因?yàn)樵摂?shù)據(jù)包的目的 MAC 地址是接收接口的 MAC 地址,而該接收接口又是一個(gè)路由接口,因此 L4 會(huì)對(duì)數(shù)據(jù)包的目的 IP 地址 10.127.1.4
進(jìn)行一次路由查詢(xún)。L4 發(fā)現(xiàn)目的 IP 地址與自己的 VTEP IP 地址相同,則L4 將此數(shù)據(jù)包的 VXLAN 數(shù)據(jù)包頭剝離。
7)因?yàn)?VXLAN是一種二層 Overlay 網(wǎng)絡(luò)隧道,因此會(huì)對(duì)解封裝之后的數(shù)據(jù)包再次進(jìn)行 MAC 表查詢(xún)。解封裝之后的數(shù)據(jù)包的目的 MAC 地址是 H5 的 MAC址。在 MAC 表中,根據(jù)紫色 VNID 和此目的主機(jī) MAC 地址的查詢(xún)的返回結(jié)果確定數(shù)據(jù)包需從與 H5 相連的端口發(fā)出。所以,L4 將解封裝之后的數(shù)據(jù)包發(fā)送到H5。
8)H5 接收到此數(shù)據(jù)包。因?yàn)樵摂?shù)據(jù)包的目的 MAC 地址是接收接口的 MAC 地址(Because the destination MAC address belongs to the receiving interface),H5 接收此數(shù)據(jù)包并用目的主機(jī) IP 地址 10.1.1.30
進(jìn)行路由查詢(xún)。此查詢(xún)結(jié)果表明數(shù)據(jù)包的目的主機(jī)就是H5 自己。所以,主機(jī)將此數(shù)據(jù)包發(fā)給與其相關(guān)聯(lián)的進(jìn)程。數(shù)據(jù)包發(fā)送到此結(jié)束。
H1 構(gòu)建的原始數(shù)據(jù)包并沒(méi)被任何 VTEP 修改。
VXLAN 中對(duì)多目的地址數(shù)據(jù)幀的處理
VXLAN 提供了兩種模型來(lái)處理發(fā)送多目的地址的數(shù)據(jù)幀。這類(lèi)數(shù)據(jù)幀有廣播幀,未知單播幀以及多播幀。
在大多數(shù)常用模型中,入口 VTEP 會(huì)給每一個(gè)目的 VTEP 創(chuàng)建一個(gè)數(shù)據(jù)的副本,這稱(chēng)為頭端復(fù)制,因?yàn)槿肟?VTEP (或者稱(chēng)為頭 VTEP) 為每一個(gè)目的地址創(chuàng)建了
個(gè)數(shù)據(jù)包副本。為了避免創(chuàng)建重復(fù)的數(shù)據(jù)包及造成環(huán)路,接收到數(shù)據(jù)包的 VTEP不會(huì)再將數(shù)據(jù)包復(fù)制發(fā)送給其他 VTEP。
VXLAN和路由:H1 到 H6
H1要和另一個(gè)子網(wǎng)內(nèi)的端點(diǎn)H6進(jìn)行通信,涉及RIOT的功能。
如圖 6-5 所示,子網(wǎng) 10.1.1.x 和子網(wǎng) 10.2.1.x 跨多個(gè)leaf 交換機(jī)。在此場(chǎng)景中,常用模型是讓每個(gè)攜帶子網(wǎng)的 VTEP 作為此子網(wǎng)的缺省網(wǎng)關(guān)。例如 H1,H4和H5都會(huì)使用同樣的缺省網(wǎng)關(guān)地址,但是 L1會(huì)路由 H1 的數(shù)據(jù)包,L3 會(huì)路由 H4 的數(shù)據(jù)包,L4會(huì)路由 H5 的數(shù)據(jù)包。這稱(chēng)為分布式路由模型。
以下是當(dāng)從 HI 發(fā)送數(shù)據(jù)包到 H6 時(shí),數(shù)據(jù)包的傳輸步驟:
1)因?yàn)?H1 根據(jù)自己的IP 地址可以知道 H6 處于另一個(gè)子網(wǎng) (10.1.1.10/24
處于不同于 10.2.1.40
所在的子網(wǎng)) 。H1 用缺省網(wǎng)關(guān)的 MAC 地址作為數(shù)據(jù)包的目的MAC 地址,在本例中就是 L1的 MAC 地址。
2)L1 會(huì)接收到此數(shù)據(jù)包。由于此數(shù)據(jù)包被發(fā)送到該路由器,L1 會(huì)繼續(xù)路由此數(shù)據(jù)包。因?yàn)榇鞨6的IP 地址的子網(wǎng)跨多個(gè) leaf 交換機(jī),路由 (還有 ARP)查詢(xún)結(jié)果可以確定與 H6 的IP地址關(guān)聯(lián)的特定出口 VTEP。路由查詢(xún)可以用兩種方式確定出口 VTEP。**路由查詢(xún)可以直接返回H6的 MAC 地址,或者可以返回出口 VTEP,即路由器L4的MAC 地址。前一種方法被稱(chēng)為非對(duì)稱(chēng)路由,后者被稱(chēng)為對(duì)稱(chēng)路由。**控制協(xié)議和部署模型決定了選取哪種模型以及如何正確寫(xiě)入路由表。在任何一種模型中,VXLAN 包頭中的 VNID 都必須存在于入口和出口的 VTEP 里。
- 在非對(duì)稱(chēng)模型里,VNID 使用
10.2.1.0/24
所屬的 VNI,在此例中用綠色所示。(圖6-7) - 在對(duì)稱(chēng)模型中,用一個(gè)新的VNI代表在子網(wǎng)
10.1.1.0/24
和子網(wǎng)10.2.1.0/24
之間共享的VRF,并作為 VNID 在從L1 發(fā)送到L4的數(shù)據(jù)包中使用。(圖6-8)
3)無(wú)論 L1 選哪種路由模型,L4 總是出口 VTEP,VXLAN 的包頭總是攜帶L4的IP 地址作為目的IP 地址。在 VXLAN 的包頭被添加之后,包轉(zhuǎn)發(fā)過(guò)程和橋接方式類(lèi)似,即帶有 VXLAN 封裝的數(shù)據(jù)包通過(guò) S2(或者 S1)被路由到 L4。
4)當(dāng)數(shù)據(jù)包到達(dá) L4 之后,因?yàn)?L4 是出口 VTEP,而且 L4 接收到的數(shù)據(jù)包的目的IP地址就是 L4的IP 地址,因此 VXLAN 包頭被剝離。由于 VXLAN是一種二層網(wǎng)絡(luò)隧道,在任何一種隧道模型中,L4 都會(huì)采用解封裝后的數(shù)據(jù)包目的 MAC地址和 VXLAN頭里的 VNI進(jìn)行 MAC表查詢(xún)。
- 在非對(duì)稱(chēng)路由模型中,由于目的 MAC 地址屬于 H6,數(shù)據(jù)包直接被以橋接方式發(fā)送到 H6。
- 在對(duì)稱(chēng)路由模型中,因?yàn)槟康?MAC 地址是路由器的 MAC 地址,L4 會(huì)利用解封裝后的數(shù)據(jù)包目的 IP 地址進(jìn)行另一次路由查詢(xún)。路由查詢(xún)的結(jié)果是數(shù)據(jù)包被轉(zhuǎn)發(fā)到 H6。
圖6-7 展示了在非對(duì)稱(chēng)路由情況下從 H1 到 H6 的數(shù)據(jù)包頭的變化。除了 VNI不同以外,VXLAN 包頭看起來(lái)和橋接情況類(lèi)似,因?yàn)?H6 處于與 H1 不同的子網(wǎng)。但是H1 原始包頭的 MAC地址在L1的入口 VTEP 被重寫(xiě)。
圖 6-8 展示了在對(duì)稱(chēng)路由情況下從 H1到 H6 的數(shù)據(jù)包頭的變化。L1 處的二次路由的目的 MAC 地址是L4的 MAC 地址,而不是 H6 的。因此 L4 會(huì)將數(shù)據(jù)包路由到 H6。
VXLAN 橋接和路由的總結(jié)
正如先前描述的那樣,VXLAN 是一種二層 Overlay 虛擬網(wǎng)絡(luò),是一種網(wǎng)絡(luò)隧道。對(duì)網(wǎng)絡(luò)隧道的端點(diǎn)而言,網(wǎng)絡(luò)隧道通??雌饋?lái)像是只有一跳,如 traceroute
的命令顯示的那樣。
圖 6-9 從較高層次角度對(duì) VXLAN 進(jìn)行了總結(jié)。
在橋接的示例中,從 10.1.1.10 (H1)
到 10.1.1.30(H5)
的 traceroute 的輸出僅顯示了H1和 H5,因?yàn)檎麄€(gè)數(shù)據(jù)包被認(rèn)為是通過(guò)橋接方式傳輸?shù)摹?*VTEP 本身在橋接情況下并不被認(rèn)為是轉(zhuǎn)發(fā)路徑上的一部分。**因此即便 VXLAN 隧道起始于 L1 終止于L4,從終端主機(jī) H1和 H5 角度看,H1 和 H5 是被一根網(wǎng)線(xiàn)直接連接起來(lái)的。圖 6-9(a) 展示了這種情況。
在路由情況下,圖 6-9 (b)展示了非對(duì)稱(chēng)路由時(shí) traceroute 所能看到的跳數(shù)情況。
圖6-9 ? 展示了對(duì)稱(chēng)路由時(shí)的情況。所以,非對(duì)稱(chēng)路由的 traceroute 顯示了三跳H1,L1 和H6,然而對(duì)稱(chēng)路由時(shí) traceroute 顯示有 4跳:H1,L1,L4 和 H6。
在所有情況下,使用 VXLAN 封裝過(guò)的數(shù)據(jù)包從 L1 被路由到 L4。