每日英文
sometimes, if you persist in doing that which you least like to do, in the end you will receive that which you want the most.
有時候,堅持了你最不想幹的事情之後,便可得到你最想要的東西。
每日掏心話
人譽我謙,又增一美;自誇自敗,又增一毀。無論是何時何地,我們永遠都應保持一顆謙卑的心。
來自:華為 | 責編:樂樂
後端架構師(id:study_tech)第 1056 次推文
往日回顧:中國聯通官網被發現含木馬腳本,可向使用者推廣色情app
正文
本文介紹了什麼是vxlan,以及vxlan的基本概念和工作原理。
什麼是vxlan
vxlan(virtual extensible local area network,虛拟擴充區域網路),是由ietf定義的nvo3(network virtualization over layer 3)标準技術之一,是對傳統vlan協定的一種擴充。vxlan的特點是将l2的以太幀封裝到udp封包(即l2 over l4)中,并在l3網絡中傳輸。
如圖1-1所示,vxlan本質上是一種隧道技術,在源網絡裝置與目的網絡裝置之間的ip網絡上,建立一條邏輯隧道,将使用者側封包經過特定的封裝後通過這條隧道轉發。從使用者的角度來看,接入網絡的伺服器就像是連接配接到了一個虛拟的二層交換機的不同端口上(可把藍色虛框表示的資料中心vxlan網絡看成一個二層虛拟交換機),可以友善地通信。
圖1-1 vxlan是一種隧道技術
vxlan已經成為目前建構資料中心的主流技術,是因為它能很好地滿足資料中心裡虛拟機動态遷移和多租戶等需求。
為什麼需要vxlan
為什麼需要vxlan呢?這和資料中心伺服器側的虛拟化趨勢緊密相關,一方面伺服器虛拟化後出現了虛拟機動态遷移,要求提供一個無障礙接入的網絡;另一方面,資料中心規模越發龐大,租戶數量激增,需要網絡提供隔離海量租戶的能力。采用vxlan可以滿足上述兩個關鍵需求。
虛拟機動态遷移,要求提供一個無障礙接入的網絡
什麼是伺服器虛拟化技術?
傳統的資料中心實體伺服器使用率太低,平均隻有10%~15%,浪費了大量的電力能源和機房資源,是以出現了伺服器虛拟化技術。如圖1-2所示,伺服器虛拟化技術是把一台實體伺服器虛拟化成多台邏輯伺服器,這種邏輯伺服器被稱為虛拟機(vm)。每個vm都可以獨立運作,有自己的作業系統、app,當然也有自己獨立的mac位址和ip位址,它們通過伺服器内部的虛拟交換機(vswitch)與外部實體網絡連接配接。
圖1-2 伺服器虛拟化示意
通過伺服器虛拟化,可以有效地提高伺服器的使用率,降低能源消耗,降低資料中心的營運成本,是以虛拟化技術目前得到了廣泛的應用。
什麼是虛拟機動态遷移?
所謂虛拟機動态遷移,就是在保證虛拟機上服務正常運作的同時,将一個虛拟機系統從一個實體伺服器移動到另一個實體伺服器的過程。該過程對于最終使用者來說是無感覺的,進而使得管理者能夠在不影響使用者正常使用的情況下,靈活調配伺服器資源,或者對實體伺服器進行維修和更新。
在伺服器虛拟化後,虛拟機動态遷移變得常态化,為了保證遷移時業務不中斷,就要求在虛拟機遷移時,不僅虛拟機的ip位址不變,而且虛拟機的運作狀态也必須保持原狀(例如tcp會話狀态),是以虛拟機的動态遷移隻能在同一個二層域中進行,而不能跨二層域遷移。
如圖1-3所示,傳統的二三層網絡架構限制了虛拟機的動态遷移範圍,遷移隻能在一個較小的局部範圍内進行,應用受到了極大的限制。
圖1-3 傳統的二三層網絡架構限制了虛拟機的動态遷移範圍
為了打破這種限制,實作虛拟機的大範圍甚至跨地域的動态遷移,就要求把vm遷移可能涉及的所有伺服器都納入同一個二層網絡域,這樣才能實作vm的大範圍無障礙遷移。
vxlan如何滿足虛拟機動态遷移時對網絡的要求?
衆所周知,同一台二層交換機可以實作下挂伺服器之間的二層通信,而且伺服器從該二層交換機的一個端口遷移到另一個端口時,ip位址是可以保持不變的。這樣就可以滿足虛拟機動态遷移的需求了。vxlan的設計理念和目标正是由此而來的。
從上一個小節我們可以知道,vxlan本質上是一種隧道技術,當源和目的之間有通信需求時,便在資料中心ip網絡之上建立一條虛拟的隧道,透明轉發使用者資料。而資料中心内互相通信的需求衆多,這種隧道的建立方式幾乎是全互聯形态才能滿足通信需求。
vxlan可以提供一套方法論,在資料中心ip網絡基礎上,建構一張全互聯的二層隧道虛拟網絡,保證任意兩點之間都能通過vxlan隧道來通信,并忽略底層網絡的結構和細節。從伺服器的角度看,vxlan為它們将整個資料中心基礎網絡虛拟成了一台巨大的“二層交換機”,所有伺服器都連接配接在這台虛拟二層交換機上。而基礎網絡之内如何轉發都是這台“巨大交換機”内部的事情,伺服器完全無需關心。
圖1-4 vxlan将整個資料中心基礎網絡虛拟成了一台巨大的“二層交換機”
基于這種“二層交換機”的模型,就很容易了解為什麼vxlan可以實作vm動态遷移了:将虛拟機從“二層交換機”的一個端口換到另一個端口,完全無需變更ip位址。使用這種理念的技術協定,除了vxlan外,還有nvgre、stt等,本文僅對vxlan進行說明。
在公衆号後端架構師背景回複“java”,擷取java面試題和答案。
資料中心租戶數量激增,要求提供一個可隔離海量租戶的網絡
衆所周知,在傳統的vlan網絡中,标準定義所支援的可用vlan數量隻有4000個左右。伺服器虛拟化後,一台實體伺服器中承載了多台虛拟機,每個虛拟機都有獨立的ip位址和mac位址,相當于接入資料中心的伺服器成倍擴大了。另外,公有雲或其它大型虛拟化雲資料中心動辄需容納上萬甚至更多租戶,vlan的能力顯然已經力不從心。
vxlan如何來解決上述問題呢?vxlan在vxlan幀頭中引入了類似vlan id的網絡辨別,稱為vxlan網絡辨別vni(vxlan network id),由24比特組成,理論上可支援多達16m的vxlan段,進而滿足了大規模不同網絡之間的辨別、隔離需求。下文我們會介紹vni的詳細作用。
vxlan與vlan之間有何不同
vlan作為傳統的網絡隔離技術,在标準定義中vlan的數量隻有4000個左右,無法滿足大型資料中心的租戶間隔離需求。另外,vlan的二層範圍一般較小且固定,無法支援虛拟機大範圍的動态遷移。
vxlan完美地彌補了vlan的上述不足,一方面通過vxlan中的24比特vni字段(如圖1-5所示),提供多達16m租戶的辨別能力,遠大于vlan的4000;另一方面,vxlan本質上在兩台交換機之間建構了一條穿越資料中心基礎ip網絡的虛拟隧道,将資料中心網絡虛拟成一個巨型“二層交換機”,滿足虛拟機大範圍動态遷移的需求。
雖然從名字上看,vxlan是vlan的一種擴充協定,但vxlan建構虛拟隧道的本領已經與vlan迥然不同了。
下面就讓我們來看下,vxlan封包到底長啥樣。
圖1-5 vxlan封包格式(以外層ip頭為ipv4格式為例)
如上圖所示,vtep對vm發送的原始以太幀(original l2 frame)進行了以下“包裝”:
vxlan header
增加vxlan頭(8位元組),其中包含24比特的vni字段,用來定義vxlan網絡中不同的租戶。此外,還包含vxlan flags(8比特,取值為00001000)和兩個保留字段(分别為24比特和8比特)。
udp header
vxlan頭和原始以太幀一起作為udp的資料。udp頭中,目的端口号(vxlan port)固定為4789,源端口号(udp src. port)是原始以太幀通過雜湊演算法計算後的值。
outer ip header
封裝外層ip頭。其中,源ip位址(outer src. ip)為源vm所屬vtep的ip位址,目的ip位址(outer dst. ip)為目的vm所屬vtep的ip位址。
outer mac header
封裝外層以太頭。其中,源mac位址(src. mac addr.)為源vm所屬vtep的mac位址,目的mac位址(dst. mac addr.)為到達目的vtep的路徑中下一跳裝置的mac位址。
vxlan隧道是如何建立的
本節将為您介紹vxlan隧道的建立過程,并在這個過程中更好地了解vxlan的工作原理。
什麼是vxlan中的vtep和vni
下面讓我們來進一步了解vxlan的網絡模型以及一些常見的概念。如圖1-6所示,兩台伺服器之間通過vxlan網絡進行通信。
圖1-6 vxlan網絡模型示意
從上圖中可以發現,vxlan在兩台tor交換機之間建立了一條隧道,将伺服器發出的原始資料幀加以“包裝”,好讓原始封包可以在承載網絡(比如ip網絡)上傳輸。當到達目的伺服器所連接配接的tor交換機後,離開vxlan隧道,并将原始資料幀恢複出來,繼續轉發給目的伺服器。
另外,vxlan網絡中出現了一些傳統資料中心網絡中沒有的新元素,如vtep、vni等,它們的作用是什麼呢?下面将向您介紹這幾個新元素。
什麼是vxlan vtep
如圖1-6所示,vtep(vxlan tunnel endpoints,vxlan隧道端點)是vxlan網絡的邊緣裝置,是vxlan隧道的起點和終點,vxlan對使用者原始資料幀的封裝和解封裝均在vtep上進行。
vtep是vxlan網絡中絕對的主角,vtep既可以是一台獨立的網絡裝置(比如華為的cloudengine系列交換機),也可以是在伺服器中的虛拟交換機。源伺服器發出的原始資料幀,在vtep上被封裝成vxlan格式的封包,并在ip網絡中傳遞到另外一個vtep上,并經過解封轉還原出原始的資料幀,最後轉發給目的伺服器。
vtep在vxlan隧道的建立和轉發過程中的詳細工作,可以參見下文的vxlan隧道是如何建立的
什麼是vxlan vni
前文提到,以太網資料幀中vlan隻占了12比特的空間,這使得vlan的隔離能力在資料中心網絡中力不從心。而vni的出現,就是專門解決這個問題的。
如圖1-6所示,vni(vxlan network identifier,vxlan 網絡辨別符),vni是一種類似于vlan id的使用者辨別,一個vni代表了一個租戶,屬于不同vni的虛拟機之間不能直接進行二層通信。如圖1-5所示,vxlan封包封裝時,給vni配置設定了24比特的長度空間,使其可以支援海量租戶的隔離。
vni在vxlan隧道的建立和轉發過程中的詳細工作,可以參見下文的vxlan隧道是如何建立的
另外,在分布式網關部署場景下,vni還可分為二層vni和三層vni,它們的作用不同:
二層vni是普通的vni,以1:1方式映射到廣播域bd,實作vxlan封包同子網的轉發(詳情可參見下文的什麼是“同一大二層域”)。
三層vni和vpn執行個體進行關聯,用于vxlan封包跨子網的轉發(三層vni的工作詳情将在另外一篇evpn相關的文檔中展開描述)。
哪些vtep之間需要建立vxlan隧道
一條vxlan隧道是由兩個vtep來确定建立的。資料中心網絡中存在很多個vtep,如圖1-7所示,那麼哪些vtep間需要建立vxlan隧道呢?
圖1-7 建立vxlan隧道示意圖(1)
如前所述,通過vxlan隧道,“二層域”可以突破實體上的界限,實作大二層網絡中vm之間的通信。是以,連接配接在不同vtep上的vm之間如果有“大二層”互通的需求,這兩個vtep之間就需要建立vxlan隧道。換言之,同一大二層域内的vtep之間都需要建立vxlan隧道。
例如,假設圖1-7中vtep_1連接配接的vm、vtep_2連接配接的vm以及vtep_3連接配接的vm之間需要“大二層”互通,那vtep_1、vtep_2和vtep_3之間就需要兩兩建立vxlan隧道,如圖1-8所示。
圖1-8 建立vxlan隧道示意圖(2)
什麼是“同一大二層域”
上文提到的“同一大二層域”,就類似于傳統網絡中vlan(虛拟區域網路)的概念,隻不過在vxlan網絡中,它有另外一個名字,叫做bridge-domain,簡稱bd。
我們知道,不同的vlan是通過vlan id來進行區分的,那不同的bd是如何進行區分的呢?其實前面已經提到了,就是通過vni來區分的。對于cloudengine系列交換機而言,bd與vni是1:1的映射關系,這種映射關系是通過在vtep裝置上配置指令行建立起來的,配置樣例如下:
vtep裝置會根據以上配置生成bd與vni的映射關系表,該映射表可以通過指令行檢視,如下所示:
有了映射表後,進入vtep的封包就可以根據自己所屬的bd來确定封包在進行vxlan封裝時,該添加哪個vni辨別。那麼,封包根據什麼來确定自己屬于哪個bd呢?
如何确定封包屬于哪個bd
這裡要先澄清下,vtep隻是交換機承擔的一個角色而已,隻是交換機功能的一部分。也就是說,并非所有進入到交換機的封包都會走vxlan隧道(也可能封包就是走普通的二三層轉發流程)。是以,我們在回答“如何确定封包屬于哪個bd”之前,必須先要回答“哪些封包要進入vxlan隧道”。
哪些封包要進入vxlan隧道?
回答這個問題之前,不妨先讓我們回想一下vlan技術中,交換機對于接收和發送的封包是如何進行處理的。封包要進入交換機進行下一步處理,首先得先過接口這一關,可以說接口掌控着對封包的“生殺大權”。傳統網絡中定義了三種不同類型的接口:access、trunk、hybrid。這三種類型的接口雖然應用場景不同,但它們的最終目的是一樣的:一是根據配置來檢查哪些封包是允許通過的;二是判斷對檢查通過的封包做怎樣的處理。
其實在vxlan網絡中,vtep上的接口也承擔着類似的任務,隻不過在cloudengine系列交換機中,這裡的接口不是實體接口,而是一個叫做“二層子接口”的邏輯接口。類似的,二層子接口主要做兩件事:一是根據配置來檢查哪些封包需要進入vxlan隧道;二是判斷對檢查通過的封包做怎樣的處理。在二層子接口上,可以根據需要定義不同的流封裝類型(類似于傳統網絡中不同的接口類型)。cloudengine系列交換機目前支援的流封裝類型有dot1q、untag、qinq和default四種類型:
dot1q:對于帶有一層vlan tag的封包,該類型接口隻接收與指定vlan tag比對的封包;對于帶有兩層vlan tag的封包,該類型接口隻接收外層vlan tag與指定vlan tag比對的封包。
untag:該類型接口隻接收不帶vlan tag的封包。
qinq:該類型接口隻接收帶有指定兩層vlan tag的封包。
default:允許接口接收所有封包,不區分封包中是否帶vlan tag。不論是對原始封包進行vxlan封裝,還是解封裝vxlan封包,該類型接口都不會對原始封包進行任何vlan tag處理,包括添加、替換或剝離。
vxlan隧道兩端二層子接口的配置并不一定是完全對等的。正因為這樣,才可能實作屬于同一網段但是不同vlan的兩個vm通過vxlan隧道進行通信。
除二層子接口外,還可以将vlan作為業務接入點。将vlan綁定到廣播域bd後,加入該vlan的接口即為vxlan業務接入點,進入接口的封包由vxlan隧道處理。
将二層子接口加入bd
現在我們再來回答“如何确定封包屬于哪個bd”就非常簡單了。其實,隻要将二層子接口加入指定的bd,然後根據二層子接口上的配置,裝置就可以确定封包屬于哪個bd啦!
比如圖1-9所示的組網,一台虛拟化伺服器中有兩個不同vlan的虛拟機vm1(vlan 10)和vm2(vlan 20),它們與其他虛拟機通信時需要接入vxlan網絡。此時我們可以分别在vtep的實體接口10ge 1/0/1上,分别針對vm1和vm2封裝不同的二層子接口,并将其分别加入不同的bd。這樣後續vm1和vm2的流量将會進入不同的vxlan隧道繼續轉發。
在這個舉例中,vswitch的上行口配置成trunk模式,且pvid為20。這樣vswitch發給vtep的封包中,既有帶tag的vm1流量,又有untag的vm2流量,此時在vtep的接入口上建立兩個二層子接口,分别配置為dot1q和untag的封裝類型。
圖1-9 将二層子接口加入bd
下面就基于上圖,結合cloudengine交換機上的配置舉例進行說明。
在cloudengine交換機的接入實體接口10ge 1/0/1上,分别建立二層子接口10ge 1/0/1.1和10ge 1/0/1.2,并分别配置其流封裝類型為dot1q和untag。
vxlan隧道是怎麼建立的
現在,我們可以來看下vxlan隧道是怎麼建立起來的。一般而言,隧道的建立不外乎手工方式和自動方式兩種。
手工方式建立vxlan隧道
這種方式需要使用者手動指定vxlan隧道的源ip為本端vtep的ip、目的ip為對端vtep的ip,也就是人為地在本端vtep和對端vtep之間建立靜态vxlan隧道。
對于cloudengine系列交換機,以上配置是在nve(network virtualization edge)接口下完成的,配置舉例如下:
其中,vni 5000 head-end peer-list 2.2.2.2和vni 5000 head-end peer-list 2.2.2.3的配置,表示屬于vni 5000的對端vtep有兩個,ip位址分别為2.2.2.2和2.2.2.3。根據這兩條配置,vtep上會生成如下所示的一張表:
根據上表中的peer list,本端vtep就可以知道屬于同一bd(或同一vni)的對端vtep都有哪些,這也就決定了同一大二層廣播域的範圍。當vtep收到bum(broadcast&unknown-unicast&multicast,廣播&未知單點傳播&多點傳播)封包時,會将封包複制并發送給peer list中所列的所有對端vtep(這就好比廣播封包在vlan内廣播)。是以,這張表也被稱為“頭端複制清單”。當vtep收到已知單點傳播封包時,會根據vtep上的mac表來确定封包要從哪條vxlan隧道走。而此時peer list中所列的對端,則充當了mac表中“出接口”的角色。
在公衆号後端架構師背景回複“offer”,擷取算法面試題和答案。
在後面的封包轉發流程中,你将會看到頭端複制清單是如何在vxlan網絡中指導封包進行轉發的。
自動方式建立vxlan隧道
自動方式下vxlan隧道的建立需要借助于evpn(ethernet vpn)協定。這部分内容可以先參見此材料:請進入華為技術支援網站,選擇相應的cloudengine交換機款型後,打開華為cloudengine交換機的《産品文檔》,進入“配置 > vxlan配置指南”節點繼續閱讀。
如何确定封包要進哪條隧道?
屬于同一bd的vxlan隧道可能不止一條,比如上文的頭端複制清單中,同一個源端vtep(1.1.1.1)對應了兩個對端vtep(2.2.2.2和2.2.2.3)。那就帶來了另一個問題,封包到底應該走哪一條隧道呢?
我們知道,基本的二三層轉發中,二層轉發依賴的是mac表,如果沒有對應的mac條目,則主機發送arp廣播封包請求對端的mac位址;三層轉發依賴的是fib表。在vxlan中,其實也是同樣的道理。在下一小節中,将介紹vxlan網絡中封包的轉發流程,相信看完下面的内容,關于“如何确定封包要進哪條隧道”的疑惑也就迎刃而解了。
vxlan網關有哪些種類
vxlan二層網關與三層網關
和vlan類似,不同vni之間的主機,以及vxlan網絡和非vxlan網絡中的主機不能直接互相通信。為了滿足這些通信需求,vxlan引入了vxlan網關的概念。vxlan網關分為二層網關和三層網關:
vxlan二層網關:用于終端接入vxlan網絡,也可用于同一vxlan網絡的子網通信。
vxlan三層網關:用于vxlan網絡中跨子網通信以及通路外部網絡。
vxlan集中式網關與分布式網關
根據三層網關部署方式的不同,vxlan三層網關又可以分為集中式網關和分布式網關。
vxlan集中式網關
集中式網關是指将三層網關集中部署在一台裝置上,如下圖所示,所有跨子網的流量都經過這個三層網關轉發,實作流量的集中管理。
圖1-10 vxlan集中式網關組網圖
部署集中式網關的優點和缺點如下:
優點:對跨子網流量進行集中管理,網關的部署和管理比較簡單。
缺點:
轉發路徑不是最優:同一二層網關下跨子網的資料中心三層流量都需要經過集中三層網關繞行轉發(如圖中藍色虛線所示)。
arp表項規格瓶頸:由于采用集中三層網關,通過三層網關轉發的終端的arp表項都需要在三層網關上生成,而三層網關上的arp表項規格有限,這不利于資料中心網絡的擴充。
vxlan分布式網關
通過部署分布式網關可以解決集中式網關部署的缺點。vxlan分布式網關是指在典型的“spine-leaf”組網結構下,将leaf節點作為vxlan隧道端點vtep,每個leaf節點都可作為vxlan三層網關(同時也是vxlan二層網關),spine節點不感覺vxlan隧道,隻作為vxlan封包的轉發節點。如下圖所示,server1和server2不在同一個網段,但是都連接配接到一個leaf節點。server1和server2通信時,流量隻需要在leaf1節點進行轉發,不再需要經過spine節點。
部署分布式網關時:
spine節點:關注于高速ip轉發,強調的是裝置的高速轉發能力。
leaf節點:
作為vxlan網絡中的二層網關裝置,與實體伺服器或vm對接,用于解決終端租戶接入vxlan虛拟網絡的問題。
作為vxlan網絡中的三層網關裝置,進行vxlan封包封裝/解封裝,實作跨子網的終端租戶通信,以及外部網絡的通路。
圖1-11 vxlan分布式網關示意圖
vxlan分布式網關具有如下特點:
同一個leaf節點既可以做vxlan二層網關,也可以做vxlan三層網關,部署靈活。
leaf節點隻需要學習自身連接配接伺服器的arp表項,而不必像集中三層網關一樣,需要學習所有伺服器的arp表項,解決了集中式三層網關帶來的arp表項瓶頸問題,網絡規模擴充能力強。
vxlan網絡中封包是如何轉發的
本節以靜态方式部署的集中式vxlan網絡為例,分别介紹相同子網内、不同子網間是如何進行通信的,幫助您了解上文所介紹到的概念。
分布式vxlan中封包的轉發過程,可以先參見此材料:請進入華為技術支援網站,選擇相應的cloudengine交換機款型後,打開華為cloudengine交換機的《産品文檔》,進入“配置 > vxlan配置指南”節點繼續閱讀。
集中式vxlan中同子網互通流程
如圖1-12所示,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-12 同子網vm互通組網圖
下面就讓我們根據arp請求封包及arp應答封包的轉發流程,來看下mac位址是如何進行學習的。
arp請求封包轉發流程
結合圖1-13,我們來一起了解一下arp請求封包的轉發流程。
圖1-13 arp請求封包轉發流程示意
vm_a發送源mac為mac_a、目的mac為全f、源ip為ip_a、目的ip為ip_c的arp廣播封包,請求vm_c的mac位址。
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。
封包到達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-14,我們來一起了解一下arp應答封包的轉發流程。
圖1-14 arp應答封包轉發流程示意
由于此時vm_c上已經學習到了vm_a的mac位址,是以arp應答封包為單點傳播封包。封包源mac為mac_c,目的mac為mac_a,源ip為ip_c、目的ip為ip_a。
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。
封包到達vtep_1後,vtep_1對封包進行解封裝,得到vm_c發送的原始封包。同時,vtep_1學習vm_c的mac位址、vni和遠端vtep的ip位址(ip_3)的對應關系,并記錄在本地mac表中。之後,vtep_1将解封裝後的封包發送給vm_a。
至此,vm_a和vm_c均已學習到了對方的mac位址。之後,vm_a和vm_c将采用單點傳播方式進行通信。單點傳播封包的封裝與解封裝過程,與圖1-14中所展示的類似,本文就不再贅述啦!
集中式vxlan中不同子網互通流程
如圖1-16所示,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進行通信。
圖1-15 不同子網vm互通流程示意
bdif接口的功能與vlanif接口類似,是基于bd建立的三層邏輯接口,用以實作不同子網之間的通信,或vxlan網絡與非vxlan網絡之間的通信。
由于是首次進行通信,且vm_a和vm_b處于不同網段,vm_a需要先發送arp廣播封包請求網關(bdif 10)的mac。獲得網關的mac後,vm_a先将資料封包發送給網關;之後網關也将發送arp廣播封包請求vm_b的mac,獲得vm_b的mac後,網關再将資料封包發送給vm_b。以上mac位址學習的過程與集中式vxlan中同子網互通流程中mac位址學習的流程一緻,不再贅述。現在假設vm_a和vm_b均已學到網關的mac、網關也已經學到vm_a和vm_b的mac,下面就讓我們看下資料封包是如何從vm_a發送到vm_b的。
圖1-16 不同子網vm互通封包轉發流程
如上圖所示,資料封包從vm_a發送到vm_b的流程如下:
vm_a先将資料封包發送給網關。封包的源mac為mac_a,目的mac為網關bdif 10的mac_10,源ip位址為ip_a,目的ip為ip_b。
vtep_1收到資料封包後,識别此封包所屬的vni(vni 5000),并根據mac表項對封包進行封裝。可以看到,這裡封裝的外層源ip位址為本地vtep的ip位址(ip_1),外層目的ip位址為對端vtep的ip位址(ip_3);外層源mac位址為本地vtep的mac位址(mac_1),而外層目的mac位址為去往目的ip的網絡中下一跳裝置的mac位址。
封包進入vtep_3,vtep_3對封包進行解封裝,得到vm_a發送的原始封包。然後,vtep_3會對封包做如下處理:
vtep_3發現該封包的目的mac為本機bdif 10接口的mac,而目的ip位址為ip_b(10.1.20.1),是以會根據路由表查找到ip_b的下一跳。
發現下一跳為10.1.20.10,出接口為bdif 20。此時vtep_3查詢arp表項,并将原始封包的源mac修改為bdif 20接口的mac(mac_20),将目的mac修改為vm_b的mac(mac_b)。
封包到bdif 20接口時,識别到需要進入vxlan隧道(vni 6000),是以根據mac表對封包進行封裝。這裡封裝的外層源ip位址為本地vtep的ip位址(ip_3),外層目的ip位址為對端vtep的ip位址(ip_2);外層源mac位址為本地vtep的mac位址(mac_3),而外層目的mac位址為去往目的ip的網絡中下一跳裝置的mac位址。
封包到達vtep_2後,vtep_2對封包進行解封裝,得到内層的資料封包,并将其發送給vm_b。
vm_b回應vm_a的流程與上述過程類似,本文就不再贅述啦!
vxlan網絡與非vxlan網絡之間的互通,也需要借助于三層網關,其實作與圖1-16的不同點在于:封包在vxlan網絡側會進行封裝,而在非vxlan網絡側不需要進行封裝。封包從vxlan側進入網關并解封裝後,就按照普通的單點傳播封包發送方式進行轉發。
ps:歡迎在留言區留 下你的觀點,一起讨論提高。如果今天的文章讓你有新的啟發,歡迎轉發分享給更多人。
猜你還想看
阿裡、騰訊、百度、華為、京東最新面試題彙集
spring boot + vue 如此強大?竟然可以開發基于 c/s 架構的應用
剛剛,python 之父放棄退休,64歲的他宣布加入微軟!
一步步實作 redis 搜尋引擎
嘿,你在看嗎?