前言
本文介紹了EVPN(Ethernet VPN)的基本概念,EVPN基于MP-BGP,定義了一系列新的BGP EVPN路由類型,EVPN可以作為VXLAN的控制面。閱讀本文,您還可以了解BGP EVPN幾種新路由的格式和工作場景,了解EVPN在作為VXLAN控制面時是如何傳遞路由、幫助設(shè)備建立VXLAN隧道的。
正文
EVPN簡介 EVPN基本概念
為什么會有EVPN(Ethernet VPN)呢?最初的VXLAN方案(RFC7348)中沒有定義控制平面,是手工配置VXLAN隧道,然后通過流量泛洪的方式進(jìn)行主機(jī)地址的學(xué)習(xí)。這種方式實現(xiàn)上較為簡單,但是會導(dǎo)致網(wǎng)絡(luò)中存在很多泛洪流量、網(wǎng)絡(luò)擴(kuò)展起來困難。
為了解決上述問題,人們在VXLAN中引入了EVPN(Ethernet VPN)作為VXLAN的控制平面,如圖1-1所示(VXLAN是一種NVO協(xié)議)。EVPN還能作為一些其他協(xié)議的控制面,本文僅描述EVPN作為VXLAN的控制面的相關(guān)信息。
圖1-1 將EVPN作為VXLAN的控制平面
EVPN參考了BGP/MPLS IP VPN的機(jī)制,通過擴(kuò)展BGP協(xié)議新定義了幾種BGP EVPN路由,通過在網(wǎng)絡(luò)中發(fā)布EVPN路由來實現(xiàn)VTEP的自動發(fā)現(xiàn)、主機(jī)地址學(xué)習(xí)等行為。采用EVPN作為VXLAN的控制平面具有以下優(yōu)勢:
可實現(xiàn)VTEP自動發(fā)現(xiàn)、VXLAN隧道自動建立,從而降低網(wǎng)絡(luò)部署、擴(kuò)展的難度。
EVPN可以同時發(fā)布二層MAC和三層路由信息。
可以減少網(wǎng)絡(luò)中泛洪流量。
MP-BGP基本概念
在深入理解EVPN的工作原理前,我們先對MP-BGP(MultiProtocol BGP)做下簡單回顧:傳統(tǒng)的BGP-4使用Update報文在對等體之間交換路由信息。一條Update報文可以通告一類具有相同路徑屬性的可達(dá)路由,這些路由放在NLRI(Network Layer Reachable Information,網(wǎng)絡(luò)層可達(dá)信息)字段中。因為BGP-4只能管理IPv4單播路由信息,為了提供對多種網(wǎng)絡(luò)層協(xié)議的支持(例如IPv6、組播),發(fā)展出了MP-BGP。MP-BGP在BGP-4基礎(chǔ)上對NLRI作了新擴(kuò)展。玄機(jī)就在于新擴(kuò)展的NLRI上,擴(kuò)展之后的NLRI增加了地址族的描述,可以用來區(qū)分不同的網(wǎng)絡(luò)層協(xié)議,例如IPv6單播地址族、VPN實例地址族等。
類似的,EVPN也是借用了MP-BGP的機(jī)制,在L2VPN地址族下定義了新的子地址族——EVPN地址族,在這個地址族下又新增了一種NLRI,即EVPN NLRI。EVPN NLRI定義了幾種BGP EVPN路由類型,這些路由可以攜帶主機(jī)IP、MAC、VNI、VRF等信息。這樣,當(dāng)一個VTEP學(xué)習(xí)到下掛的主機(jī)的IP、MAC地址信息后,就可以通過MP-BGP路由將這些信息發(fā)送給其他的VTEP,從而在控制平面實現(xiàn)主機(jī)IP、MAC地址的學(xué)習(xí),抑制了數(shù)據(jù)平面的泛洪。
了解EVPN中的幾種路由類型
本節(jié)介紹EVPN NLRI中定義的幾種BGP EVPN路由類型的報文格式及其作用。
EVPN中定義的五種路由類型概覽
EVPN NLRI定義了如表1-1所示的五種EVPN路由類型。其中Type1~Type4是在RFC7432中定義的,Type5是在后來的草案中定義的。
表1-1 EVPN路由類型
其中Type1和Type4是用于EVPN ESI場景,本文主要對常見的Type2、Type3、Type5類型的路由進(jìn)行重點介紹。
EVPN Type2路由
格式說明
EVPN Type2路由,也就是MAC/IP路由,主要用于VTEP之間相互通告主機(jī)IP、MAC信息。Type2路由的NLRI部分格式如圖1-2所示。
圖1-2 Type2路由的報文格式
各字段的解釋如下表所示:
應(yīng)用說明
Type2路由在VXLAN網(wǎng)絡(luò)中的使用場景和作用參見下表。
表1-2 Type2路由使用場景說明
EVPN Type3路由
格式說明
EVPN Type3路由主要用于在VTEP之間相互通告二層VNI、VTEP IP信息,以建立頭端復(fù)制列表,即用于VTEP的自動發(fā)現(xiàn)和VXLAN隧道的動態(tài)建立:如果對端VTEP IP地址是三層路由可達(dá)的,則建立一條到對端的VXLAN隧道。同時,如果對端VNI與本端相同,則創(chuàng)建一個頭端復(fù)制表,用于后續(xù)BUM報文轉(zhuǎn)發(fā)。
Type3路由的NLRI是由“前綴”和“PMSI”屬性組成,報文格式如圖1-3所示。其中VTEP IP信息體現(xiàn)在NLRI的Originating Router's IP Address字段中,二層VNI信息則體現(xiàn)在PMSI屬性的MPLS Label中。
圖1-3 Type3路由的報文格式
各字段的解釋如下表所示:
應(yīng)用說明
Type3路由動態(tài)建立頭端復(fù)制列表的過程簡介請參見本文的EVPN頭端復(fù)制列表的建立。
EVPN Type5路由
格式說明
EVPN Type5路由又稱IP前綴路由,主要用于傳遞網(wǎng)段路由。不同于Type2路由只傳遞32(IPv4)/128(IPv6)位的主機(jī)路由,Type5路由可傳遞0~32/0~128掩碼長度的網(wǎng)段路由。
Type5路由的報文格式如圖1-3所示。
圖1-4 Type5路由的報文格式
各字段的解釋如下表所示:
應(yīng)用說明
該類型路由的IP Prefix Length和IP Prefix字段既可以攜帶主機(jī)IP地址,也可以攜帶網(wǎng)段地址:
當(dāng)攜帶主機(jī)IP地址時,主要用于分布式網(wǎng)關(guān)場景中的主機(jī)/網(wǎng)段路由通告,請參見本文的網(wǎng)段路由發(fā)布。
當(dāng)攜帶網(wǎng)段地址時,通過傳遞該類型路由,可以實現(xiàn)VXLAN網(wǎng)絡(luò)中的主機(jī)訪問外部網(wǎng)絡(luò)。
理解EVPN作為VXLAN控制面的工作過程
BGP EVPN在VXLAN網(wǎng)絡(luò)中是如何工作的呢?本節(jié)將為您介紹BGP EVPN作為VXLAN控制面的工作過程。
在用BGP EVPN方式部署分布式VXLAN網(wǎng)絡(luò)的場景中,控制平面的流程包括VXLAN隧道建立、MAC地址動態(tài)學(xué)習(xí);轉(zhuǎn)發(fā)平面的流程包括同子網(wǎng)已知單播報文轉(zhuǎn)發(fā)、同子網(wǎng)BUM報文轉(zhuǎn)發(fā)、跨子網(wǎng)報文轉(zhuǎn)發(fā)。BGP EVPN方式實現(xiàn)的功能全面,支持主機(jī)IP路由通告、主機(jī)MAC地址通告、主機(jī)ARP通告等,還可以使能ARP廣播抑制功能。如果在VXLAN網(wǎng)絡(luò)中采用分布式網(wǎng)關(guān),推薦使用BGP EVPN方式。
本文下面的內(nèi)容以Underlay網(wǎng)絡(luò)和Overlay網(wǎng)絡(luò)均為IPv4為例,介紹EVPN作為VXLAN控制面的工作過程。
使用EVPN學(xué)習(xí)MAC地址
使用EVPN作為VXLAN的控制平面,可以用EVPN來進(jìn)行MAC學(xué)習(xí),以替代數(shù)據(jù)平面泛洪方式的MAC學(xué)習(xí),減少泛洪流量。使用EVPN來進(jìn)行MAC學(xué)習(xí)的過程,是通過在VTEP之間傳遞Type2路由完成的。
下面以圖1-5為例,介紹VTEP之間是如何通過EVPN來實現(xiàn)遠(yuǎn)程主機(jī)的MAC學(xué)習(xí)的。
圖1-5 使用EVPN來學(xué)習(xí)遠(yuǎn)程主機(jī)MAC地址的過程示意圖
圖中Leaf1和Leaf2作為VTEP,分別連接同網(wǎng)段的主機(jī)Host1和Host2,以Leaf1向Leaf2發(fā)送Type2路由為例。
1、Host1在連接至Leaf1時,通常會觸發(fā)ARP、DHCP等行為。通過這些流量,Leaf1上就會學(xué)習(xí)到Host1的MAC信息,記錄在本地MAC表中。
Leaf1學(xué)習(xí)到本地主機(jī)的MAC表項后,會向其對等體Leaf2發(fā)送EVPN Type2路由。該路由會攜帶本端EVPN實例的ERT、VTEP IP地址、二層VNI、Host1的MAC地址等信息。其中本端的EVPN實例的ERT、VTEP IP地址、二層VNI這些信息來源于本端VTEP上的配置,樣例如下:
[Leaf1] bridge-domain 10 vxlan vni 10 //二層VNI evpn route-distinguisher 10:1 vpn-target 0:10 export-extcommunity //EVPN實例的ERT vpn-target 100:5000 export-extcommunity vpn-target 0:10 import-extcommunity # interface Nve1 source 1.1.1.1 //Leaf1的VTEP IP地址 vni 10 head-end peer-list protocol bgp #
2、Leaf2收到Leaf1發(fā)來的Type2路由后,能夠?qū)W習(xí)到Host1的MAC地址信息,并將其保存在MAC表中,其下一跳為Leaf1的VTEP IP地址。
需要說明的是,Leaf2收到Leaf1發(fā)送的EVPN路由時,能否接納該路由信息,是需要通過EVPN實例的RT(Route Target)值是否匹配來判斷的。RT是一種BGP擴(kuò)展團(tuán)體屬性,用于控制EVPN路由的發(fā)布與接收。也就是說,RT決定了本端的EVPN路由可以被哪些對端所接收,以及本端是否接收對端發(fā)來的EVPN路由。
RT屬性分為兩類:
ERT(Export RT):本端發(fā)送EVPN路由時,攜帶的RT屬性設(shè)置為ERT。
IRT(Import RT):本端在收到對端的EVPN路由時,將路由中攜帶的ERT與本端的IRT進(jìn)行比較,只有兩者相等時才接收該路由,否則丟棄該路由。
在本例中,Leaf2上接收Leaf1發(fā)過來的EVPN路由,則需保證Leaf2上配置的IRT(Import RT)與Leaf1配置的ERT(Export RT)一致,例如Leaf2上EVPN中的IRT配置為0:10,與上文中Leaf1上的ERT一致:
[Leaf2] bridge-domain 10 vxlan vni 10 //二層VNI evpn route-distinguisher 10:2 vpn-target 0:10 export-extcommunity vpn-target 100:5000 export-extcommunity vpn-target 0:10 import-extcommunity //EVPN實例的IRT #
經(jīng)過以上的流程,在未發(fā)送廣播請求的情況下,Leaf2就可以學(xué)習(xí)到Host1的MAC地址。類似的,Leaf1也可以學(xué)習(xí)到Host2的MAC地址。
另外需要強(qiáng)調(diào)的是,EVPN只是減少了網(wǎng)絡(luò)中的流量泛洪,并不會完全避免,例如在以下一些場景:
網(wǎng)絡(luò)中存在“靜默”主機(jī)的情況,這種情況下主機(jī)不會觸發(fā)ARP、DHCP等行為,導(dǎo)致VTEP學(xué)習(xí)不到本地主機(jī)MAC地址,從而也就無法發(fā)送MAC地址信息讓其他VTEP學(xué)習(xí)到。
主機(jī)首次通信的過程中,主機(jī)會發(fā)送ARP廣播請求報文,這種也會產(chǎn)生泛洪。這種情況還可以通過ARP廣播抑制功能來避免泛洪,此部分在后續(xù)章節(jié)會詳細(xì)描述,此處不再贅述。
EVPN頭端復(fù)制列表的建立
EVPN只能相對減少網(wǎng)絡(luò)中的流量泛洪,并不能完全避免。那么這些不能避免的BUM流量,還是需要建立頭端復(fù)制列表來進(jìn)行轉(zhuǎn)發(fā)。
頭端復(fù)制列表的建立可以通過手工方式或者EVPN來建立,本文僅描述EVPN方式:
手工方式就是為逐個為每個VTEP指定其鄰居VTEP,每條列表都需要人工配置。
EVPN則是通過在VTEP之間發(fā)布Type3路由,可以為VTEP設(shè)備之間自動創(chuàng)建頭端復(fù)制列表。
下面以圖1-6為列,介紹VTEP之間是如何通過Type3路由建立頭端復(fù)制列表的。
圖1-6 使用EVPN建立頭端復(fù)制列表示意圖
圖中Leaf1、Leaf2、Leaf3作為VTEP,以Leaf1向Leaf2、Leaf3發(fā)送路由為例。
1、在Leaf1上完成VTEP IP、二層VNI、EVPN實例等相關(guān)配置后(這些配置的樣例如下所示),Leaf1會向?qū)Φ润wLeaf2、Leaf3分別發(fā)送EVPN Type3路由。路由中會攜帶二層VNI、本端VTEP IP、EVPN實例的RD、出方向VPN-Target(ERT)等信息。
[Leaf1] bridge-domain 10 vxlan vni 10 //二層VNI evpn route-distinguisher 1:10 //EVPN實例的RD vpn-target 0:10 export-extcommunity //EVPN實例的ERT vpn-target 100:5000 export-extcommunity vpn-target 0:10 import-extcommunity # interface Nve1 source 1.1.1.1 //Leaf1的VTEP IP地址 vni 10 head-end peer-list protocol bgp #
2、Leaf2、Leaf3收到Leaf1發(fā)來的Type3路由后,如果Leaf1的VTEP IP三層路由可達(dá),則建立一條到Leaf1的二層VXLAN隧道;同時,如果本地有相同的VNI,則建立一條頭端復(fù)制列表,用于后續(xù)廣播、組播、未知單播報文的轉(zhuǎn)發(fā)。
在Leaf2、Leaf3收到Leaf1發(fā)送的EVPN路由時,會基于路由攜帶的RT值(EVPN實例的ERT值)是否與本地EVPN實例的IRT值匹配,來判斷是否接納該路由。
經(jīng)過以上的流程,Leaf2、Leaf3上就能建立到Leaf1的頭端復(fù)制列表,指導(dǎo)后續(xù)BUM報文的轉(zhuǎn)發(fā)。類似的,Leaf1上也會建立到Leaf2、Leaf3的頭端復(fù)制列表。
使用EVPN發(fā)布主機(jī)路由和網(wǎng)段路由
主機(jī)路由發(fā)布
EVPN Type2路由不僅可以發(fā)布主機(jī)MAC地址,還可以發(fā)布主機(jī)路由信息,這是因為Type2路由還可以攜帶32位掩碼的主機(jī)IP地址信息。主機(jī)路由的發(fā)布可以實現(xiàn)分布式網(wǎng)關(guān)場景下跨網(wǎng)段主機(jī)之間的互通。VTEP之間需要發(fā)布下屬主機(jī)的IP路由,否則對端VTEP就無法學(xué)習(xí)到該主機(jī)的路由信息,從而沒法進(jìn)行三層轉(zhuǎn)發(fā)。簡單來說就是“你得告訴我你下面都接了什么網(wǎng)段的路由,否則我怎么知道要發(fā)給你呢”。
下面以圖1-7為列,介紹VTEP之間是如何使用EVPN來發(fā)布主機(jī)路由的。
圖1-7 使用EVPN發(fā)布主機(jī)路由的示意圖
圖中Leaf1和Leaf2作為VTEP,同時作為三層網(wǎng)關(guān),分別連接不同網(wǎng)段的主機(jī)Host1和Host2,以Leaf1向Leaf2發(fā)送路由為例。
1、Host1在連接至Leaf1時,通常會觸發(fā)ARP、DHCP等行為。通過這些流量,Leaf1上就會學(xué)習(xí)到Host1的ARP信息。同時,還可以根據(jù)Host1所屬的BD域,獲取相應(yīng)的二層VNI、L3 VPN實例及L3 VPN實例關(guān)聯(lián)的三層VNI信息。
為什么會有L3 VPN和三層VNI呢?因為同一個Leaf下可能接入多個租戶的服務(wù)器,而為了實現(xiàn)不同租戶之間的隔離,所以就在Leaf上通過創(chuàng)建不同的L3 VPN來隔離不同租戶的路由表,從而將不同租戶的路由存放在不同的私網(wǎng)路由表中。而三層VNI就是用來標(biāo)識這些L3 VPN的,當(dāng)Leaf節(jié)點收到對端發(fā)送來的數(shù)據(jù)報文時(報文會攜帶三層VNI),就根據(jù)其三層VNI找到相應(yīng)的L3 VPN,通過查找該L3 VPN實例下的路由表來進(jìn)行轉(zhuǎn)發(fā)。
Leaf1獲取的二層VNI、L3 VPN實例及L3 VPN實例關(guān)聯(lián)的三層VNI信息依賴的關(guān)鍵配置示例如下:
[Leaf1] ip vpn-instance vpn1 //L3 VPN實例 ipv4-family route-distinguisher 20:4 vpn-target 100:5000 export-extcommunity evpn vpn-target 100:5000 import-extcommunity evpn vxlan vni 5000 //L3 VPN實例關(guān)聯(lián)的三層VNI # bridge-domain 10 vxlan vni 10 //二層VNI evpn route-distinguisher 10:4 vpn-target 0:10 export-extcommunity vpn-target 100:5000 export-extcommunity vpn-target 0:10 import-extcommunity # interface Vbdif10 //根據(jù)BD信息獲取三層Vbdif接口和此接口綁定的L3 VPN實例 ip binding vpn-instance vpn1 ip address 192.168.1.1 255.255.255.0 mac-address 0000-5e00-0102 vxlan anycast-gateway enable arp collect host enable #
以上這些總結(jié)起來就是Leaf1會獲取Host1的:IP + MAC + Host1所屬的二層VNI + VBDIF綁定的L3VPN實例的三層VNI,然后:
Leaf1上的EVPN實例就可以根據(jù)這些信息生成EVPN Type2類型的路由(參見上圖中的表格),除了獲取的Host1的相關(guān)信息外,還攜帶本端EVPN實例的ERT、路由下一跳(本端VTEP IP)、VTEP的MAC等信息,將其發(fā)送給對等體Leaf2。
Leaf1上的EVPN實例將Host1的IP + MAC + 三層VNI發(fā)給本端的L3 VPN實例,從而在本端的L3 VPN實例中生成本地Host1的路由。
2、Leaf2收到Leaf1發(fā)來的Type2路由后,能夠?qū)W習(xí)到Host1的IP地址信息,并將其保存在相應(yīng)的路由表中,其下一跳為Leaf1的VTEP IP地址,同時記錄對應(yīng)的三層VNI信息,處理過程如下:
檢查該路由的ERT與接收端EVPN實例的IRT是否相同。如果相同,則接收該路由,同時EVPN實例提取其中包含的主機(jī)IP+MAC信息,用于主機(jī)ARP通告。
檢查該路由的ERT與接收端L3VPN實例的IRT是否相同(如下表中的舉例所示)。如果相同,則接收該路由,同時L3VPN實例提取其中的主機(jī)IP地址+三層VNI信息,在其路由表中生成Host1的路由。該路由的下一跳會被設(shè)置為Leaf1的VXLAN隧道接口。
Leaf1(發(fā)送端) ip vpn-instance vpn1 ipv4-family route-distinguisher 20:2 vpn-target 100:5000 export-extcommunity evpn vpn-target 100:5000 import-extcommunity evpn vxlan vni 5000 # bridge-domain 10 vxlan vni 10 evpn route-distinguisher 10:2 vpn-target 100:10 export-extcommunity vpn-target 100:5000 export-extcommunity //發(fā)送端EVPN中的ERT vpn-target 100:10 import-extcommunity #
Leaf2(接收端) ip vpn-instance vpn1 ipv4-family route-distinguisher 20:3 vpn-target 100:5000 export-extcommunity evpn vpn-target 100:5000 import-extcommunity evpn //接收端L3 VPN中的IRT(eIRT) vxlan vni 5000 # bridge-domain 20 vxlan vni 20 evpn route-distinguisher 10:3 vpn-target 100:20 export-extcommunity vpn-target 100:5000 export-extcommunity vpn-target 100:20 import-extcommunity #
接收端EVPN實例或L3 VPN實例接收該路由后會通過下一跳獲取Leaf1的VTEP IP地址,如果該地址三層路由可達(dá),則建立一條到Leaf1的VXLAN隧道。
經(jīng)過以上的流程,Leaf2就可以學(xué)習(xí)到Host1的IP路由信息,后續(xù)轉(zhuǎn)發(fā)至Host1的報文時,可以根據(jù)查找路由表進(jìn)行轉(zhuǎn)發(fā)。類似的,Leaf1也可以學(xué)習(xí)到Host2的IP路由信息。
網(wǎng)段路由發(fā)布
網(wǎng)段路由的發(fā)布流程與主機(jī)路由類似,區(qū)別在于網(wǎng)段路由是通過Type5路由發(fā)布的,Type2路由只能發(fā)布32/128位的主機(jī)路由。Type5路由也可以發(fā)布32/128位的主機(jī)路由,在發(fā)布32/128位的主機(jī)路由時,功能與Type2路由類似。
如果網(wǎng)關(guān)設(shè)備下連接的網(wǎng)段在整個網(wǎng)絡(luò)中唯一,則可以配置發(fā)布網(wǎng)段路由,否則不能配置發(fā)布網(wǎng)段路由。
圖1-8 EVPN網(wǎng)段路由發(fā)布示意圖
下面以圖1-8為列,介紹VTEP之間是如何發(fā)布網(wǎng)段路由的。圖中Leaf1和Leaf2作為VTEP,同時作為三層網(wǎng)關(guān),其中Leaf1連接一個192.168.1.0/24的網(wǎng)段。
Leaf1收集到本地IP網(wǎng)段路由,把該IP網(wǎng)段路由通過EVPN Type5路由發(fā)送給Leaf2。路由中攜帶有IP前綴、掩碼長度、對應(yīng)VRF的三層VNI等信息(如上圖表格所示)。
Leaf2收到Leaf1發(fā)來的Type5路由后,能夠?qū)W習(xí)到IP網(wǎng)段路由信息,并將其保存在相應(yīng)的路由表中,其下一跳為Leaf1的VTEP IP地址,同時記錄對應(yīng)的三層VNI信息。
Leaf2收到Leaf1發(fā)送的EVPN路由時,根據(jù)EVPN路由攜帶的RT值(Type 5路由使用L3 VPN實例的ERT值填充)是否與本地L3 VPN實例的IRT值匹配,來將網(wǎng)段路由添加到對應(yīng)VRF的路由表中。如果某VRF的IRT值與EVPN路由攜帶的RT值相同,則接收該路由,同時提取其中的網(wǎng)段路由+三層VNI信息,在其路由表中生成網(wǎng)段路由。該路由的下一跳會被設(shè)置為Leaf1的VTEP IP地址。同時,如果Leaf1的VTEP IP地址三層路由可達(dá),則建立一條到Leaf1的VXLAN隧道。
Leaf1(發(fā)送端) ip vpn-instance vpn1 ipv4-family route-distinguisher 20:2 vpn-target 100:5000 export-extcommunity evpn //Type5路由中發(fā)送端的ERT使用L3 VPN實例中的ERT(eERT) vpn-target 100:5000 import-extcommunity evpn vxlan vni 5000 # bridge-domain 10 vxlan vni 10 evpn route-distinguisher 10:2 vpn-target 100:10 export-extcommunity vpn-target 100:5000 export-extcommunity vpn-target 100:10 import-extcommunity #
Leaf2(接收端) ip vpn-instance vpn1 ipv4-family route-distinguisher 20:3 vpn-target 100:5000 export-extcommunity evpn vpn-target 100:5000 import-extcommunity evpn //接收端L3 VPN實例中的IRT(eIRT) vxlan vni 5000 # bridge-domain 20 vxlan vni 20 evpn route-distinguisher 10:3 vpn-target 100:20 export-extcommunity vpn-target 100:5000 export-extcommunity vpn-target 100:20 import-extcommunity #
經(jīng)過以上的流程,Leaf2就可以學(xué)習(xí)到Leaf1的網(wǎng)段路由信息,后續(xù)轉(zhuǎn)發(fā)至該網(wǎng)段的報文時,可以根據(jù)查找路由表進(jìn)行轉(zhuǎn)發(fā)。
VXLAN流量的轉(zhuǎn)發(fā)過程
本文下面的內(nèi)容以Underlay網(wǎng)絡(luò)和Overlay網(wǎng)絡(luò)均為IPv4為例,介紹用BGP EVPN部署的分布式VXLAN網(wǎng)絡(luò)中,報文的轉(zhuǎn)發(fā)過程。
同子網(wǎng)報文轉(zhuǎn)發(fā)
同子網(wǎng)報文轉(zhuǎn)發(fā)為二層轉(zhuǎn)發(fā),只在VXLAN二層網(wǎng)關(guān)之間進(jìn)行,三層網(wǎng)關(guān)無需感知。
同子網(wǎng)已知單播報文轉(zhuǎn)發(fā)
如圖1-9所示,Host1和Host2同屬于一個子網(wǎng),下面以Host1向Host2發(fā)送已知單播報文為例介紹報文在VXLAN網(wǎng)絡(luò)中的轉(zhuǎn)發(fā)流程。
圖1-9 同子網(wǎng)已知單播報文轉(zhuǎn)發(fā)示意圖
Host1發(fā)送目的地址為Host2的報文。如果Host1沒有Host2的MAC地址,會先發(fā)送廣播ARP請求來獲取Host2的MAC地址,此處該過程不再詳述,認(rèn)為Host1已經(jīng)獲取了Host2的MAC地址。
Leaf1收到Host1的報文后,根據(jù)報文入端口或VLAN信息判斷其所屬的BD,并在該BD內(nèi)查找出接口(通過上一節(jié)使用EVPN學(xué)習(xí)MAC地址可以知道,Leaf1上會學(xué)習(xí)到Host2的MAC地址,出接口為VTEP 2.2.2.2)。然后Leaf1會對報文進(jìn)行VXLAN封裝后轉(zhuǎn)發(fā)。
Leaf2接收到VXLAN報文后,根據(jù)報文中VNI獲取二層廣播域,進(jìn)行VXLAN解封裝,獲取內(nèi)層的二層報文。
Leaf2根據(jù)內(nèi)層報文的目的MAC地址,從本地MAC表中找到對應(yīng)的出接口,然后轉(zhuǎn)發(fā)給對應(yīng)的主機(jī)Host2。
Host2向Host1發(fā)送報文的過程與上述過程相同。
同子網(wǎng)BUM報文轉(zhuǎn)發(fā)
如果是同子網(wǎng)的BUM報文(廣播、組播、未知單播),則會向同子網(wǎng)的所有VTEP發(fā)送一份廣播報文。
例如圖1-9所示,Host1向外發(fā)送廣播報文。Leaf1收到Host1的廣播報文后,根據(jù)報文入端口或VLAN信息判斷其所屬的BD,并在該BD內(nèi)查找所有的隧道列表,依據(jù)獲取的隧道列表進(jìn)行報文封裝后,向所有隧道發(fā)送報文,從而將報文轉(zhuǎn)發(fā)至同子網(wǎng)的Host2和Host3。
跨子網(wǎng)報文轉(zhuǎn)發(fā)
如圖1-10所示,在分布式網(wǎng)關(guān)場景下,Leaf1、Leaf2作為VXLAN的三層網(wǎng)關(guān),進(jìn)行VXLAN封裝及三層轉(zhuǎn)發(fā),Spine僅作為VXLAN報文轉(zhuǎn)發(fā)節(jié)點,不進(jìn)行VXLAN報文的處理。
圖1-10 分布式網(wǎng)關(guān)場景下跨子網(wǎng)報文轉(zhuǎn)發(fā)示意圖
以Host1向Host2發(fā)送報文為例介紹報文在VXLAN網(wǎng)絡(luò)中的轉(zhuǎn)發(fā)流程:
因為Host1與Host2屬于不同網(wǎng)段,所以Host1會先將報文發(fā)送給網(wǎng)關(guān)(Leaf1),交由網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)。
Leaf1接收到來自Host1的報文,根據(jù)報文的目的地址判斷需要進(jìn)行三層轉(zhuǎn)發(fā)。Leaf1根據(jù)報文入端口或VLAN信息判斷其所屬的BD,找到綁定該BD的L3VPN實例,然后在該L3VPN實例下查找路由表。在前面使用EVPN發(fā)布主機(jī)路由和網(wǎng)段路由章節(jié)已經(jīng)介紹過,在分布式網(wǎng)關(guān)場景下,網(wǎng)關(guān)Leaf1會學(xué)習(xí)到Host2的主機(jī)路由。Leaf1根據(jù)路由獲取三層VNI、下一跳等信息,然后進(jìn)行VXLAN封裝,將報文轉(zhuǎn)發(fā)至Leaf2。
Leaf2收到VXLAN報文后進(jìn)行解封裝,根據(jù)報文攜帶的三層VNI找到對應(yīng)的L3VPN實例,通過查找該L3VPN實例下的路由表,獲取報文的下一跳是網(wǎng)關(guān)接口地址,然后將目的MAC地址替換為Host2的MAC地址,源MAC地址替換為Leaf2網(wǎng)關(guān)的MAC地址,轉(zhuǎn)發(fā)給Host2。
Host2向Host1發(fā)送報文的過程與上述過程相同。
VXLAN網(wǎng)絡(luò)中的ARP廣播抑制
地址解析協(xié)議ARP(Address Resolution Protocol)用來將IP地址解析為MAC地址。網(wǎng)絡(luò)中同網(wǎng)段主機(jī)首次通信時,由于沒有目標(biāo)主機(jī)的MAC地址信息,因此會發(fā)送ARP廣播請求來獲取目的MAC地址信息。ARP廣播請求報文在VXLAN網(wǎng)絡(luò)中會泛洪轉(zhuǎn)發(fā),大量的ARP報文存在會占用過多的網(wǎng)絡(luò)資源,導(dǎo)致網(wǎng)絡(luò)性能下降。
為了抑制ARP廣播請求給網(wǎng)絡(luò)帶來的負(fù)面影響,可以通過ARP廣播抑制功能來盡可能的減少ARP報文在VXLAN網(wǎng)絡(luò)中的泛洪。ARP廣播抑制有兩種方式,一種是ARP廣播變單播的功能,另一種是ARP二層代答功能。
ARP廣播變單播
ARP廣播變單播,顧名思義,就是將ARP廣播報文轉(zhuǎn)變成ARP單播,從而以單播形式進(jìn)行轉(zhuǎn)發(fā)。ARP廣播變單播的實現(xiàn)思路是在VXLAN三層網(wǎng)關(guān)上根據(jù)ARP生成ARP廣播抑制表(包括主機(jī)IP、MAC、VNI、VTEP IP信息),然后通過EVPN將主機(jī)信息發(fā)送給二層網(wǎng)關(guān);二層網(wǎng)關(guān)在收到ARP廣播請求后,直接使用學(xué)習(xí)到的主機(jī)MAC替換原來的全F的廣播MAC,從而將廣播變?yōu)閱尾ミM(jìn)行轉(zhuǎn)發(fā)。
圖1-11 ARP廣播變單播示意圖
以圖1-11所示的分布式網(wǎng)關(guān)為例,其中Host1和Host2屬于同一子網(wǎng),但是部署在不同的VTEP下。ARP廣播變單播過程如下:
Leaf2通過Host2發(fā)送的ARP報文,可以學(xué)習(xí)到Host2的ARP表項。然后Leaf2可以根據(jù)ARP生成相應(yīng)的ARP廣播抑制表,并通過EVPN向Leaf1發(fā)布,這樣Leaf1也可以學(xué)習(xí)到Host2的主機(jī)信息。
Host1初次訪問Host2,發(fā)送ARP廣播請求來獲取Host2的MAC地址。
Leaf1收到ARP廣播請求后,查詢ARP廣播抑制表。因為已經(jīng)有Host2的主機(jī)信息,所以Leaf1將ARP請求報文中的全F的廣播目的MAC替換為Host2的MAC地址,將ARP廣播變?yōu)锳RP單播,然后再進(jìn)行VXLAN封裝后向Leaf2發(fā)送。如果Leaf1上沒有Host2的ARP廣播抑制表,那么依然按照正常的流程進(jìn)行廣播。
Leaf2收到VXLAN報文并解封裝后,將ARP請求發(fā)送給Host2。
可以看出ARP廣播變單播功能強(qiáng)依賴于三層網(wǎng)關(guān),需要三層網(wǎng)關(guān)學(xué)習(xí)到主機(jī)的ARP信息,如果三層網(wǎng)關(guān)學(xué)習(xí)不到主機(jī)ARP,就不能抑制ARP廣播。
ARP二層代答
ARP廣播變單播的抑制方式需要三層網(wǎng)關(guān)的存在,在純二層網(wǎng)絡(luò)中,由于不存在三層網(wǎng)關(guān),沒有相應(yīng)的ARP表項,也就無法生成ARP廣播抑制表進(jìn)行ARP抑制。上述二層場景面臨的ARP抑制問題,就可以通過ARP二層代答功能來解決。
ARP二層代答的實現(xiàn)思路是在二層網(wǎng)關(guān)上偵聽主機(jī)ARP報文,獲取ARP報文中的主機(jī)信息并生成ARP廣播抑制表,然后通過EVPN將主機(jī)信息發(fā)送給其他二層網(wǎng)關(guān);二層網(wǎng)關(guān)在收到ARP廣播請求后,根據(jù)ARP廣播抑制表中的主機(jī)信息,直接進(jìn)行ARP代答。
圖1-12 ARP二層代答示意圖
以圖1-12為例,其中Host1和Host2屬于同一子網(wǎng),ARP二層代答過程如下:
Leaf2上開啟ARP二層代答功能后,Leaf2會偵聽主機(jī)發(fā)送的ARP報文。當(dāng)Leaf2接收到Host2的ARP報文后,可以根據(jù)ARP生成相應(yīng)的ARP廣播抑制表項,并通過EVPN向Leaf1發(fā)布,這樣Leaf1也可以學(xué)習(xí)到Host2的主機(jī)信息。
Host1初次訪問Host2,發(fā)送ARP廣播請求來獲取Host2的MAC地址。
Leaf1收到ARP廣播請求后,查詢ARP廣播抑制表。因為已經(jīng)有Host2的主機(jī)信息,所以Leaf1直接對ARP請求進(jìn)行代答。
如果Leaf1上沒有Host2的ARP廣播抑制表,那么依然按照正常的流程進(jìn)行廣播。
-
路由
+關(guān)注
關(guān)注
0文章
278瀏覽量
41835 -
VTEP
+關(guān)注
關(guān)注
0文章
3瀏覽量
9793 -
VxLAN
+關(guān)注
關(guān)注
0文章
24瀏覽量
3846
原文標(biāo)題:1萬字 20張圖帶你詳解 EVPN
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論