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