本文將對VLAN(VirtualLocalAreaNetwork,虛擬局域網(wǎng))和VxLAN(VirtualeXtentialLAN,虛擬可拓展局域網(wǎng))進(jìn)行探究。值得一提的是,雖然VLAN和VxLAN這兩個名字非常接近,不過其解決的問題范疇是不同。
純物理的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)具有良好的性能,但是這種寫死在電路里的拓?fù)浣Y(jié)構(gòu)不易修改,所能承載的業(yè)務(wù)需求也非常有限,因此有必要通過軟件化的方式來對網(wǎng)絡(luò)拓?fù)溥M(jìn)行改良,賦予其靈活性。
在設(shè)計(jì)物理網(wǎng)絡(luò)拓?fù)鋾r,很難把需求一一對應(yīng)到拓?fù)湓O(shè)計(jì)中,即使花了大力氣按業(yè)務(wù)需求或組織架構(gòu)把網(wǎng)絡(luò)搭建起來,未來也非常大概率需求會發(fā)生變化或組織架構(gòu)發(fā)生變化。這時候如果單一依靠物理網(wǎng)絡(luò)拓?fù)渚吞y為網(wǎng)絡(luò)架構(gòu)師了。
如上圖所示,在網(wǎng)絡(luò)搭建之初,通過交換機(jī)堆疊或級聯(lián)方式形成了一個大的二層網(wǎng)絡(luò),里面包含了PCwitheth0-1~8共8個主機(jī);后來業(yè)務(wù)需求發(fā)生了變化,同時為了安全和性能上的考慮,需要把這些連接在同一個二層網(wǎng)絡(luò)的機(jī)器區(qū)分開來,比如把eth0-1,6,7,8劃分為vlan-1子網(wǎng),把eth0-2,3,4,5劃分為vlan-2子網(wǎng)。當(dāng)eth0-1發(fā)送訊息時,它首先向交換機(jī)獲取節(jié)點(diǎn)列表,這時候交換機(jī)返回給它的是eth0-6,7,8三個節(jié)點(diǎn),其他的eth0-2~5則不會返回;也就是說,雖然這8個節(jié)點(diǎn)是連接在同一個物理層面的二層交換機(jī)群,但是邏輯上已經(jīng)被分成了兩個交換機(jī)網(wǎng)絡(luò),即兩個VLAN網(wǎng)絡(luò)。
那么,如何讓上圖中展示的vlan-1中的機(jī)器與vlan-2中的節(jié)點(diǎn)互相通信呢?既然已經(jīng)可以看做是兩個分離的交換機(jī)網(wǎng)絡(luò)了,必須通過設(shè)定IP并配置網(wǎng)關(guān)的方式才能讓這兩個子網(wǎng)里的節(jié)點(diǎn)連通。
從原理上,可以把VLAN中節(jié)點(diǎn)的互通按照同一個交換機(jī)互通和跨交換機(jī)互通分別討論。
在一臺未設(shè)置任何VLAN的二層交換機(jī)上,任何廣播幀都會被轉(zhuǎn)發(fā)給除接收端口外的所有其他端口(Flooding)。為了實(shí)現(xiàn)VLAN,
①我們可以寫一個配置文件,直接告訴交換機(jī)哪些端口屬于VLAN-1,哪些端口屬于VLAN-2。如果交換機(jī)比較高級,
②我們還可以通過Mac地址、IP地址或其他用戶信息來動態(tài)劃分VLAN,告訴交換機(jī)根據(jù)掛載到端口的節(jié)點(diǎn)的某個信息來動態(tài)地調(diào)整哪些節(jié)點(diǎn)屬于VLAN-1,哪些節(jié)點(diǎn)屬于VLAN-2。
如果僅是同一個交換機(jī),因?yàn)榕渲眯畔⒍紝懭肓讼到y(tǒng)存儲,決策哪個端口屬于哪個VLAN是非常方便的。但是,一旦涉及到跨交換機(jī),問題就變成了在多個大腦參與決策的情況下,如何實(shí)現(xiàn)信息的同步的問題。比如PCwitheth0-2向交換機(jī)-a詢問vlan-2網(wǎng)絡(luò)里的機(jī)器列表時,交換機(jī)-a除了要返回自己身上掛載的節(jié)點(diǎn)外,還需要告知交換機(jī)-b它期望得到vlan-2網(wǎng)絡(luò)里的節(jié)點(diǎn)(而不是所有連通到交換機(jī)-b的節(jié)點(diǎn))。換句話說,勢必要通過某種方式把得到vlan-2網(wǎng)絡(luò)里的節(jié)點(diǎn)而不是所有節(jié)點(diǎn)這個信息在各交換機(jī)之間同步,否則就談不上vlan-2是虛擬局域網(wǎng)了。(題外話,此刻應(yīng)該能感受到合作的首要條件是信息同步!?。。?/p>
進(jìn)一步地,
①我們可以在每當(dāng)多劃分出一個VLAN網(wǎng)絡(luò)時各交換機(jī)之間就多拉出一條線出來(通過交換機(jī)上的訪問連接);比如在交換機(jī)-a與交換機(jī)-b之間拉起兩條線,一條專門用于彼此獲取vlan-1的節(jié)點(diǎn)列表,另一條專門用于彼此獲取vlan-2的節(jié)點(diǎn)列表。這種方式對交換機(jī)的要求比較低,不過顯然可擴(kuò)展性低,試想如果我們此刻多了一個vlan-3網(wǎng)絡(luò),那豈不是還要再多拉一條線。因此有了另一種方式,
②通過匯聚鏈接(只需一條線)把各個交換機(jī)連通起來,在不同交換機(jī)間獲取節(jié)點(diǎn)列表時只需把特定vlan的信息加上;比如交換機(jī)-a向交換機(jī)-b發(fā)請求前,在請求中添加一個標(biāo)識,標(biāo)明當(dāng)前請求索要的是vlan-1的節(jié)點(diǎn),當(dāng)交換機(jī)-b接收到請求后,看到標(biāo)識位是vlan-1,于是向所有的vlan-1中的節(jié)點(diǎn)發(fā)起廣播,從而只給交換機(jī)-a傳回vlan-1中的節(jié)點(diǎn)列表。
對于多臺交換機(jī)之間的VLAN的實(shí)現(xiàn),業(yè)界有兩個具有代表性的協(xié)議:1)一個是IEEE802.1Q,俗稱“DotOneQ”,是經(jīng)過IEEE認(rèn)證的對數(shù)據(jù)幀附加VLAN識別信息的協(xié)議;2)另一個是ISL(InterSwitchLink),是Cisco產(chǎn)品支持的一種與IEEE802.1Q類似的、用于在匯聚鏈路上附加VLAN信息的協(xié)議。(可以看出來為啥Cisco牛x了吧,有實(shí)力制定底層基礎(chǔ)設(shè)施的協(xié)議!)具體協(xié)議的實(shí)現(xiàn)細(xì)節(jié)大家可以自行去搜索,這里就不詳細(xì)描述了。
十年前對云計(jì)算的論道,BAT三家給出了不同的看法,并且各家在各自的執(zhí)念中成長與發(fā)展(基于此是否可以認(rèn)為一個人未來變成什么樣子與Ta能向前看多遠(yuǎn)有正相關(guān)的關(guān)系?);其實(shí)更早時間,Amazon已經(jīng)發(fā)力在做云計(jì)算的產(chǎn)品并被業(yè)界視為典范了。那么什么是云計(jì)算呢?
假如我想自己搭建一個網(wǎng)站,于是隨便到一家云計(jì)算平臺(Amazon、阿里云、華為云、騰訊云,等等)購買一臺2CPU核1G內(nèi)存的主機(jī);云計(jì)算平臺在我下單后馬上就給了我一臺云主機(jī),而且CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤等都是購物單子里填好的參數(shù)!我上線了網(wǎng)站以后,發(fā)現(xiàn)流量比較大,覺得有必要再擴(kuò)一臺主機(jī)來承載業(yè)務(wù),于是又買了一臺4CPU核8G內(nèi)存的主機(jī),交完錢立馬就獲得了另一個期望配置的云主機(jī),CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤都是預(yù)期的配置,尤其新機(jī)器的網(wǎng)絡(luò)與我的第一臺主機(jī)在同一個網(wǎng)段里,方便我讓兩臺主機(jī)之間進(jìn)行耦合。后來有一天,云計(jì)算平臺電源故障,我的其中一個云主機(jī)正好在故障的物理機(jī)柜上面,云計(jì)算平臺的運(yùn)維第一時間聯(lián)系到我,跟我說已經(jīng)把我的云主機(jī)遷移到了另一個機(jī)房,理論上服務(wù)不會感知到,可能部分請求會出現(xiàn)超時。
上面描述的就是云計(jì)算的一種應(yīng)用場景了。
云計(jì)算能夠提供穩(wěn)定的服務(wù),給客戶非常好的體驗(yàn)。不過云主機(jī)動態(tài)實(shí)例化并且能夠幾近零故障地在物理機(jī)上漂來漂去,它的網(wǎng)絡(luò)該如何架構(gòu)才能滿足需求呢?
既然我們已經(jīng)知道是通過虛擬技術(shù)實(shí)現(xiàn)的,那么可以畫一張上圖所示的架構(gòu)圖示意云計(jì)算中的網(wǎng)絡(luò)架構(gòu);其中物理層就是《夢回課堂——重溫基礎(chǔ)網(wǎng)絡(luò)拓?fù)湓怼芬约氨疚摹熬W(wǎng)絡(luò)虛擬技術(shù)——VLAN”涉及到的技術(shù)所在的層(雖然VLAN也是一種虛擬技術(shù),不過它確實(shí)在物理層工作),虛擬層是云主機(jī)所在的層,也就是云計(jì)算平臺給客戶的交付物。
假如vm-1和vm-2是我申請到的兩臺云主機(jī),從圖上可以看到它們兩個是運(yùn)行在不同的宿主機(jī)上面的(前者在host-1上面,后者在host-2上面)。那么當(dāng)vm-1上的服務(wù)想要訪問vm-2上的服務(wù)的時候,網(wǎng)絡(luò)應(yīng)該怎么走呢?必然要基于物理網(wǎng)絡(luò)來實(shí)現(xiàn)!也就是圖中紅色虛線所示意的網(wǎng)路:vm-1《=》host-1《=》交換機(jī)+路由器《=》host-3《=》vm-2。從圖中還可以看到,vm-1的IP被分配為172.0.1.1/24,vm-2的IP被分配為172.0.1.2/24,假如這個時候host-1出現(xiàn)了故障,vm-1漂到了host-2到了vm-1‘的位置,網(wǎng)路變成了vm-1’《=》host-2《=》交換機(jī)+路由器《=》host-3《=》vm-2,但是為了保證云主機(jī)上服務(wù)的正常,需要保證vm-1‘的IP依然為172.0.1.1/24。
由上面的描述可以知道,在虛擬層里的云主機(jī)是感知不到物理層的存在的,這樣才能保證自己的完整性;也就是說,上圖(虛擬網(wǎng)絡(luò)架構(gòu)圖)中的vm-1只能看到網(wǎng)路中存在一個vm-2,但是無法知道自己運(yùn)行在哪一臺宿主機(jī)上,更不知道宿主機(jī)在什么樣的網(wǎng)絡(luò)環(huán)境中。業(yè)界把能夠滿足這種網(wǎng)絡(luò)需求的技術(shù)叫做overlay網(wǎng)絡(luò),而VxLAN是overlay網(wǎng)絡(luò)的一種具體的技術(shù)實(shí)現(xiàn),所以VxLAN也沒什么神秘的。
不過既然物理層是透明的,那么虛擬層勢必要在自己的層虛擬出交換機(jī)、路由器等基礎(chǔ)設(shè)置,也就是上圖中虛擬層基礎(chǔ)設(shè)施層所包含的組件,從而保證虛擬層中的虛擬機(jī)集群正常工作。我們可以想象,這不是一件簡單的工程實(shí)現(xiàn)。不過既然協(xié)議是分層的,那么我們可以參考OSI模型以及TCP/IP協(xié)議族的實(shí)現(xiàn)方式,給虛擬機(jī)之間的網(wǎng)絡(luò)請求再封裝一層VxLAN的協(xié)議來實(shí)現(xiàn)這一切。
如果對TCP/IP協(xié)議比較熟悉,從報文里可以比較容易地看出來VxLAN的實(shí)現(xiàn)原理。這里我以虛擬網(wǎng)絡(luò)架構(gòu)圖中vm-1與vm-2之間的通信為例描述一下數(shù)據(jù)封包的過程:1)vm-1向vm-2發(fā)起請求,由于二者在同一個虛擬網(wǎng)段中,因此vm-1與vm-2互相知道彼此的IP地址和MAC地址,因此原始請求(假設(shè)為A)中包含了這些信息。2)由于vm-1與vm-2是運(yùn)行在虛擬層的云主機(jī),其請求歸根結(jié)底還是要通過底層的物理網(wǎng)絡(luò)進(jìn)行傳輸?shù)?,因此請求A是無法進(jìn)行傳遞的;但為了實(shí)現(xiàn)信息傳遞,在請求A經(jīng)過時,虛擬層基礎(chǔ)設(shè)施層勢必會去一個全局的表里查找vm-1與vm-2各自對應(yīng)的宿主機(jī)信息,并根據(jù)這個信息以及宿主機(jī)具體的網(wǎng)絡(luò)環(huán)境把請求A在物理層的網(wǎng)路“畫”出來,給請求A封裝一層VxLAN的協(xié)議,然后就拋給物理層去處理了。3)物理層根據(jù)VxLAN協(xié)議封裝的信息把請求轉(zhuǎn)發(fā)到對應(yīng)的宿主機(jī)host-3,然后經(jīng)過虛擬層基礎(chǔ)設(shè)施層解包后,把請求A發(fā)給vm-2。vm-2回復(fù)vm-1時會走一遍相似的過程,如此vm-1與vm-2便實(shí)現(xiàn)了通信。
從上面的描述來看,虛擬層基礎(chǔ)設(shè)施層是VxLAN中的關(guān)鍵實(shí)現(xiàn)。如果我們拋開物理層的細(xì)節(jié),把物理層抽象成為多臺物理機(jī),那么虛擬層基礎(chǔ)設(shè)施層需要在這些物理機(jī)上面重新實(shí)現(xiàn)一套二層網(wǎng)絡(luò)(交換機(jī)所在層)。同時由于這個網(wǎng)絡(luò)需要整合所有物理機(jī)的資源,因此虛擬層基礎(chǔ)設(shè)施層需要對所有的物理機(jī)擁有管理權(quán)限,至少有所有物理機(jī)的特定狀態(tài)的知情權(quán)。
舉個例子,當(dāng)vm-1與vm-2添加到同一個網(wǎng)段的時候,理論上他們需要獲取彼此的MAC信息,這個時候vm-1發(fā)起廣播,這個時候就需要虛擬層基礎(chǔ)設(shè)施層用“魔法”把廣播的信息發(fā)送到vm-2去。更實(shí)際一點(diǎn),假如這個時候虛擬層基礎(chǔ)設(shè)施層還不知道該怎么傳遞信息,它將不得不給所有的物理機(jī)發(fā)送請求,遍歷所有物理機(jī)上的所有虛擬機(jī)直到找到需要的所有虛擬機(jī)的列表為止(當(dāng)然為了避免未來做重復(fù)的事情,或許會有緩存機(jī)制)。
再舉個例子,由于虛擬機(jī)可能運(yùn)行在任何一臺物理機(jī)上面,因此虛擬層基礎(chǔ)設(shè)施層中的網(wǎng)關(guān)需要有權(quán)限獲取所有的物理機(jī)上的虛擬機(jī)信息,這樣才能在對的時間把請求路由到對的虛擬機(jī)。這也隱含著另外一層信息,假如虛擬層基礎(chǔ)設(shè)施層需要把虛擬層以及物理層的復(fù)雜拓?fù)浣Y(jié)構(gòu)保存起來,存儲數(shù)據(jù)的地方應(yīng)該是一個集中化的數(shù)據(jù)庫(比如ETCD),這樣的話它的性能及穩(wěn)定性就要考慮了。
本文對VLAN和VxLAN技術(shù)進(jìn)行了探究。VLAN技術(shù)的實(shí)現(xiàn)主要依托于交換機(jī),在物理的二層網(wǎng)絡(luò)上虛擬出邏輯上的二層網(wǎng)絡(luò);VxLAN技術(shù)則在物理的三層和四層網(wǎng)絡(luò)上虛擬出邏輯上的二層網(wǎng)絡(luò)。了解完這兩個概念及其原理以后,后面再去探究Docker以及Kubernetes的網(wǎng)絡(luò)模型應(yīng)該就不難了。
責(zé)任編輯人:CC
-
VLAN
+關(guān)注
關(guān)注
1文章
278瀏覽量
35662 -
網(wǎng)絡(luò)虛擬
+關(guān)注
關(guān)注
0文章
5瀏覽量
6609 -
VxLAN
+關(guān)注
關(guān)注
0文章
24瀏覽量
3849
發(fā)布評論請先 登錄
相關(guān)推薦
評論