點選上方 「 Linux開源社群 」,選擇「 設為星標 」
優質文章,及時送達
轉自:網路
前言
本文介紹了EVPN(Ethernet VPN)的基本概念,EVPN基於MP-BGP,定義了一系列新的BGP EVPN路由型別,EVPN可以作為VXLAN的控制面。閱讀本文,您還可以了解BGP EVPN幾種新路由的格式和工作場景,了解EVPN在作為VXLAN控制面時是如何傳遞路由、幫助裝置建立VXLAN隧道的。
正文
EVPN簡介
EVPN基本概念
為什麽會有EVPN(Ethernet VPN)呢?最初的VXLAN方案(RFC7348)中沒有定義控制平面,是手工配置VXLAN隧道,然後透過流量泛洪的方式進行主機地址的學習。這種方式實作上較為簡單,但是會導致網路中存在很多泛洪流量、網路擴充套件起來困難。
為了解決上述問題,人們在VXLAN中引入了EVPN(Ethernet VPN)作為VXLAN的控制平面,如圖1-1所示(VXLAN是一種NVO協定)。EVPN還能作為一些其他協定的控制面,本文僅描述EVPN作為VXLAN的控制面的相關資訊。
圖1-1 將EVPN作為VXLAN的控制平面
EVPN參考了BGP/MPLS IP VPN的機制,透過擴充套件BGP協定新定義了幾種BGP EVPN路由,透過在網路中釋出EVPN路由來實作VTEP的自動發現、主機地址學習等行為。采用EVPN作為VXLAN的控制平面具有以下優勢:
可實作VTEP自動發現、VXLAN隧道自動建立,從而降低網路部署、擴充套件的難度。
EVPN可以同時釋出二層MAC和三層路由資訊。
可以減少網路中泛洪流量。
MP-BGP基本概念
在深入理解EVPN的工作原理前,我們先對MP-BGP(MultiProtocol BGP)做下簡單回顧:傳統的BGP-4使用Update報文在對等體之間交換路由資訊。一條Update報文可以通告一類具有相同路徑內容的可達路由,這些路由放在NLRI(Network Layer Reachable Information,網路層可達資訊)欄位中。因為BGP-4只能管理IPv4單播路由資訊,為了提供對多種網路層協定的支持(例如IPv6、組播),發展出了MP-BGP。MP-BGP在BGP-4基礎上對NLRI作了新擴充套件。玄機就在於新擴充套件的NLRI上,擴充套件之後的NLRI增加了地址族的描述,可以用來區分不同的網路層協定,例如IPv6單播地址族、VPN例項地址族等。
類似的,EVPN也是借用了MP-BGP的機制,在L2VPN地址族下定義了新的子地址族——EVPN地址族,在這個地址族下又新增了一種NLRI,即EVPN NLRI。EVPN NLRI定義了幾種BGP EVPN路由型別,這些路由可以攜帶主機IP、MAC、VNI、VRF等資訊。這樣,當一個VTEP學習到下掛的主機的IP、MAC地址資訊後,就可以透過MP-BGP路由將這些資訊發送給其他的VTEP,從而在控制平面實作主機IP、MAC地址的學習,抑制了數據平面的泛洪。
了解EVPN中的幾種路由型別
本節介紹EVPN NLRI中定義的幾種BGP EVPN路由型別的報文格式及其作用。
EVPN中定義的五種路由型別概覽
EVPN NLRI定義了如表1-1所示的五種EVPN路由型別。其中Type1~Type4是在RFC7432中定義的,Type5是在後來的草案中定義的。
表1-1 EVPN路由型別
其中Type1和Type4是用於EVPN ESI場景,本文主要對常見的Type2、Type3、Type5型別的路由進行重點介紹。
EVPN Type2路由
格式說明
EVPN Type2路由,也就是MAC/IP路由,主要用於VTEP之間相互通告主機IP、MAC資訊。Type2路由的NLRI部份格式如圖1-2所示。
圖1-2 Type2路由的報文格式
各欄位的解釋如下表所示:
套用說明
Type2路由在VXLAN網路中的使用場景和作用參見下表。
表1-2 Type2路由使用場景說明
EVPN Type3路由
格式說明
EVPN Type3路由主要用於在VTEP之間相互通告二層VNI、VTEP IP資訊,以建立頭端復制列表,即用於VTEP的自動發現和VXLAN隧道的動態建立:如果對端VTEP IP地址是三層路由可達的,則建立一條到對端的VXLAN隧道。同時,如果對端VNI與本端相同,則建立一個頭端復制表,用於後續BUM報文轉發。
Type3路由的NLRI是由「字首」和「PMSI」內容組成,報文格式如圖1-3所示。其中VTEP IP資訊體現在NLRI的 Originating Router's IP Address 欄位中,二層VNI資訊則體現在PMSI內容的 MPLS Label 中。
圖1-3 Type3路由的報文格式
各欄位的解釋如下表所示:
套用說明
Type3路由動態建立頭端復制列表的過程簡介請參見本文的EVPN頭端復制列表的建立。
EVPN Type5路由
格式說明
EVPN Type5路由又稱IP字首路由,主要用於傳遞網段路由。不同於Type2路由只傳遞32(IPv4)/128(IPv6)位的主機路由,Type5路由可傳遞0~32/0~128掩碼長度的網段路由。
Type5路由的報文格式如圖1-3所示。
圖1-4 Type5路由的報文格式
各欄位的解釋如下表所示:
套用說明
該型別路由的IP Prefix Length和IP Prefix欄位既可以攜帶主機IP地址,也可以攜帶網段地址:
當攜帶主機IP地址時,主要用於分布式閘道器場景中的主機/網段路由通告,請參見本文的網段路由釋出。
當攜帶網段地址時,透過傳遞該型別路由,可以實作VXLAN網路中的主機存取外部網路。
理解EVPN作為VXLAN控制面的工作過程
BGP EVPN在VXLAN網路中是如何工作的呢?本節將為您介紹BGP EVPN作為VXLAN控制面的工作過程。
在用BGP EVPN方式部署分布式VXLAN網路的場景中,控制平面的流程包括VXLAN隧道建立、MAC地址動態學習;轉發平面的流程包括同子網路已知單播報文轉發、同子網路BUM報文轉發、跨子網路報文轉發。BGP EVPN方式實作的功能全面,支持主機IP路由通告、主機MAC地址通告、主機ARP通告等,還可以使能ARP廣播抑制功能。如果在VXLAN網路中采用分布式閘道器,推薦使用BGP EVPN方式。
本文下面的內容以Underlay網路和Overlay網路均為IPv4為例,介紹EVPN作為VXLAN控制面的工作過程。
使用EVPN學習MAC地址
使用EVPN作為VXLAN的控制平面,可以用EVPN來進行MAC學習,以替代數據平面泛洪方式的MAC學習,減少泛洪流量。使用EVPN來進行MAC學習的過程,是透過在VTEP之間傳遞Type2路由完成的。
下面以圖1-5為例,介紹VTEP之間是如何透過EVPN來實作遠端主機的MAC學習的。
圖1-5 使用EVPN來學習遠端主機MAC地址的過程示意圖
圖中Leaf1和Leaf2作為VTEP,分別連線同網段的主機Host1和Host2,以Leaf1向Leaf2發送Type2路由為例。
1、Host1在連線至Leaf1時,通常會觸發ARP、DHCP等行為。透過這些流量,Leaf1上就會學習到Host1的MAC資訊,記錄在本地MAC表中。微信搜尋公眾號:架構師指南,回復:架構師 領取資料 。
Leaf1學習到本地主機的MAC表項後,會向其對等體Leaf2發送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發來的Type2路由後,能夠學習到Host1的MAC地址資訊,並將其保存在MAC表中,其下一跳為Leaf1的VTEP IP地址。
需要說明的是,Leaf2收到Leaf1發送的EVPN路由時,能否接納該路由資訊,是需要透過EVPN例項的RT(Route Target)值是否匹配來判斷的。RT是一種BGP擴充套件團體內容,用於控制EVPN路由的釋出與接收。也就是說,RT決定了本端的EVPN路由可以被哪些對端所接收,以及本端是否接收對端發來的EVPN路由。
RT內容分為兩類:
ERT(Export RT):本端發送EVPN路由時,攜帶的RT內容設定為ERT。
IRT(Import RT):本端在收到對端的EVPN路由時,將路由中攜帶的ERT與本端的IRT進行比較,只有兩者相等時才接收該路由,否則丟棄該路由。
在本例中,Leaf2上接收Leaf1發過來的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
#
經過以上的流程,在未發送廣播請求的情況下,Leaf2就可以學習到Host1的MAC地址。類似的,Leaf1也可以學習到Host2的MAC地址。
另外需要強調的是,EVPN只是減少了網路中的流量泛洪,並不會完全避免,例如在以下一些場景:
網路中存在「靜默」主機的情況,這種情況下主機不會觸發ARP、DHCP等行為,導致VTEP學習不到本地主機MAC地址,從而也就無法發送MAC地址資訊讓其他VTEP學習到。
主機首次通訊的過程中,主機會發送ARP廣播請求報文,這種也會產生泛洪。這種情況還可以透過ARP廣播抑制功能來避免泛洪,此部份在後續章節會詳細描述,此處不再贅述。
EVPN頭端復制列表的建立
EVPN只能相對減少網路中的流量泛洪,並不能完全避免。那麽這些不能避免的BUM流量,還是需要建立頭端復制列表來進行轉發。
頭端復制列表的建立可以透過手工方式或者EVPN來建立,本文僅描述EVPN方式:
手工方式就是為逐個為每個VTEP指定其鄰居VTEP,每條列表都需要人工配置。
EVPN則是透過在VTEP之間釋出Type3路由,可以為VTEP裝置之間自動建立頭端復制列表。
下面以圖1-6為列,介紹VTEP之間是如何透過Type3路由建立頭端復制列表的。
圖1-6 使用EVPN建立頭端復制列表示意圖
圖中Leaf1、Leaf2、Leaf3作為VTEP,以Leaf1向Leaf2、Leaf3發送路由為例。
1、在Leaf1上完成VTEP IP、二層VNI、EVPN例項等相關配置後(這些配置的樣例如下所示),Leaf1會向對等體Leaf2、Leaf3分別發送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發來的Type3路由後,如果Leaf1的VTEP IP三層路由可達,則建立一條到Leaf1的二層VXLAN隧道;同時,如果本地有相同的VNI,則建立一條頭端復制列表,用於後續廣播、組播、未知單播報文的轉發。
在Leaf2、Leaf3收到Leaf1發送的EVPN路由時,會基於路由攜帶的RT值(EVPN例項的ERT值)是否與本地EVPN例項的IRT值匹配,來判斷是否接納該路由。
經過以上的流程,Leaf2、Leaf3上就能建立到Leaf1的頭端復制列表,指導後續BUM報文的轉發。類似的,Leaf1上也會建立到Leaf2、Leaf3的頭端復制列表。
使用EVPN釋出主機路由和網段路由
主機路由釋出
EVPN Type2路由不僅可以釋出主機MAC地址,還可以釋出主機路由資訊,這是因為Type2路由還可以攜帶32位元掩碼的主機IP地址資訊。主機路由的釋出可以實作分布式閘道器場景下跨網段主機之間的互通。VTEP之間需要釋出下屬主機的IP路由,否則對端VTEP就無法學習到該主機的路由資訊,從而沒法進行三層轉發。簡單來說就是「你得告訴我你下面都接了什麽網段的路由,否則我怎麽知道要發給你呢」。
下面以圖1-7為列,介紹VTEP之間是如何使用EVPN來釋出主機路由的。
圖1-7 使用EVPN釋出主機路由的示意圖
圖中Leaf1和Leaf2作為VTEP,同時作為三層閘道器,分別連線不同網段的主機Host1和Host2,以Leaf1向Leaf2發送路由為例。
1、Host1在連線至Leaf1時,通常會觸發ARP、DHCP等行為。透過這些流量,Leaf1上就會學習到Host1的ARP資訊。同時,還可以根據Host1所屬的BD域,獲取相應的二層VNI、L3 VPN例項及L3 VPN例項關聯的三層VNI資訊。
為什麽會有L3 VPN和三層VNI呢?因為同一個Leaf下可能接入多個租戶的伺服器,而為了實作不同租戶之間的隔離,所以就在Leaf上透過建立不同的L3 VPN來隔離不同租戶的路由表,從而將不同租戶的路由存放在不同的私網路由表中。而三層VNI就是用來標識這些L3 VPN的,當Leaf節點收到對端發送來的資料包時(報文會攜帶三層VNI),就根據其三層VNI找到相應的L3 VPN,透過尋找該L3 VPN例項下的路由表來進行轉發。
Leaf1獲取的二層VNI、L3 VPN例項及L3 VPN例項關聯的三層VNI資訊依賴的關鍵配置範例如下:
[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例項關聯的三層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 //根據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
#
以上這些總結起來就是Leaf1會獲取Host1的: IP + MAC + Host1所屬的二層VNI + VBDIF繫結的L3VPN例項的三層VNI, 然後:
Leaf1上的EVPN例項就可以根據這些資訊生成EVPN Type2型別的路由(參見上圖中的表格),除了獲取的Host1的相關資訊外,還攜帶本端EVPN例項的ERT、路由下一跳(本端VTEP IP)、VTEP的MAC等資訊,將其發送給對等體Leaf2。
Leaf1上的EVPN例項將Host1的IP + MAC + 三層VNI發給本端的L3 VPN例項,從而在本端的L3 VPN例項中生成本地Host1的路由。
2、Leaf2收到Leaf1發來的Type2路由後,能夠學習到Host1的IP地址資訊,並將其保存在相應的路由表中,其下一跳為Leaf1的VTEP IP地址,同時記錄對應的三層VNI資訊,處理過程如下:
檢查該路由的ERT與接收端EVPN例項的IRT是否相同。如果相同,則接收該路由,同時EVPN例項提取其中包含的主機IP+MAC資訊,用於主機ARP通告。
檢查該路由的ERT與接收端L3VPN例項的IRT是否相同(如下表中的舉例所示)。如果相同,則接收該路由,同時L3VPN例項提取其中的主機IP地址+三層VNI資訊,在其路由表中生成Host1的路由。該路由的下一跳會被設定為Leaf1的VXLAN隧道介面。
Leaf1(發送端)
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 //發送端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地址,如果該地址三層路由可達,則建立一條到Leaf1的VXLAN隧道。
經過以上的流程,Leaf2就可以學習到Host1的IP路由資訊,後續轉發至Host1的報文時,可以根據尋找路由表進行轉發。類似的,Leaf1也可以學習到Host2的IP路由資訊。
網段路由釋出
網段路由的釋出流程與主機路由類似,區別在於網段路由是透過Type5路由釋出的,Type2路由只能釋出32/128位元的主機路由。Type5路由也可以釋出32/128位元的主機路由,在釋出32/128位元的主機路由時,功能與Type2路由類似。
如果閘道器裝置下連線的網段在整個網路中唯一,則可以配置釋出網段路由,否則不能配置釋出網段路由。
圖1-8 EVPN網段路由釋出示意圖
下面以圖1-8為列,介紹VTEP之間是如何釋出網段路由的。圖中Leaf1和Leaf2作為VTEP,同時作為三層閘道器,其中Leaf1連線一個192.168.1.0/24的網段。
Leaf1收集到本地IP網段路由,把該IP網段路由透過EVPN Type5路由發送給Leaf2。路由中攜帶有IP字首、掩碼長度、對應VRF的三層VNI等資訊(如上圖表格所示)。
Leaf2收到Leaf1發來的Type5路由後,能夠學習到IP網段路由資訊,並將其保存在相應的路由表中,其下一跳為Leaf1的VTEP IP地址,同時記錄對應的三層VNI資訊。
Leaf2收到Leaf1發送的EVPN路由時,根據EVPN路由攜帶的RT值(Type 5路由使用L3 VPN例項的ERT值填充)是否與本地L3 VPN例項的IRT值匹配,來將網段路由添加到對應VRF的路由表中。如果某VRF的IRT值與EVPN路由攜帶的RT值相同,則接收該路由,同時提取其中的網段路由+三層VNI資訊,在其路由表中生成網段路由。該路由的下一跳會被設定為Leaf1的VTEP IP地址。同時,如果Leaf1的VTEP IP地址三層路由可達,則建立一條到Leaf1的VXLAN隧道。
Leaf1(發送端)
ip vpn-instance vpn1
ipv4-family
route-distinguisher 20:2
vpn-target 100:5000 export-extcommunity evpn //Type5路由中發送端的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
#
經過以上的流程,Leaf2就可以學習到Leaf1的網段路由資訊,後續轉發至該網段的報文時,可以根據尋找路由表進行轉發。
VXLAN流量的轉發過程
本文下面的內容以Underlay網路和Overlay網路均為IPv4為例,介紹用BGP EVPN部署的分布式VXLAN網路中,報文的轉發過程。
同子網路報文轉發
同子網路報文轉發為二層轉發,只在VXLAN二層閘道器之間進行,三層閘道器無需感知。
同子網路已知單播報文轉發
如圖1-9所示,Host1和Host2同屬於一個子網路,下面以Host1向Host2發送已知單播報文為例介紹報文在VXLAN網路中的轉發流程。
圖1-9 同子網路已知單播報文轉發示意圖
Host1發送目的地址為Host2的報文。如果Host1沒有Host2的MAC地址,會先發送廣播ARP請求來獲取Host2的MAC地址,此處該過程不再詳述,認為Host1已經獲取了Host2的MAC地址。
Leaf1收到Host1的報文後,根據報文入埠或VLAN資訊判斷其所屬的BD,並在該BD內尋找出介面(透過上一節使用EVPN學習MAC地址可以知道,Leaf1上會學習到Host2的MAC地址,出介面為VTEP 2.2.2.2)。然後Leaf1會對報文進行VXLAN封裝後轉發。
Leaf2接收到VXLAN報文後,根據報文中VNI獲取二層廣播域,進行VXLAN解封裝,獲取內層的二層報文。
Leaf2根據內層報文的目的MAC地址,從本地MAC表中找到對應的出介面,然後轉發給對應的主機Host2。
Host2向Host1發送報文的過程與上述過程相同。
同子網路BUM報文轉發
如果是同子網路的BUM報文(廣播、組播、未知單播),則會向同子網路的所有VTEP發送一份廣播報文。
例如圖1-9所示,Host1向外發送廣播報文。Leaf1收到Host1的廣播報文後,根據報文入埠或VLAN資訊判斷其所屬的BD,並在該BD內尋找所有的隧道列表,依據獲取的隧道列表進行報文封裝後,向所有隧道發送報文,從而將報文轉發至同子網路的Host2和Host3。
跨子網路報文轉發
如圖1-10所示,在分布式閘道器場景下,Leaf1、Leaf2作為VXLAN的三層閘道器,進行VXLAN封裝及三層轉發,Spine僅作為VXLAN報文轉發節點,不進行VXLAN報文的處理。
圖1-10 分布式閘道器場景下跨子網路報文轉發示意圖
以Host1向Host2發送報文為例介紹報文在VXLAN網路中的轉發流程:
因為Host1與Host2屬於不同網段,所以Host1會先將報文發送給閘道器(Leaf1),交由閘道器進行轉發。
Leaf1接收到來自Host1的報文,根據報文的目的地址判斷需要進行三層轉發。Leaf1根據報文入埠或VLAN資訊判斷其所屬的BD,找到繫結該BD的L3VPN例項,然後在該L3VPN例項下尋找路由表。在前面使用EVPN釋出主機路由和網段路由章節已經介紹過,在分布式閘道器場景下,閘道器Leaf1會學習到Host2的主機路由。Leaf1根據路由獲取三層VNI、下一跳等資訊,然後進行VXLAN封裝,將報文轉發至Leaf2。
Leaf2收到VXLAN報文後進行解封裝,根據報文攜帶的三層VNI找到對應的L3VPN例項,透過尋找該L3VPN例項下的路由表,獲取報文的下一跳是閘道器介面地址,然後將目的MAC地址替換為Host2的MAC地址,源MAC地址替換為Leaf2閘道器的MAC地址,轉發給Host2。
Host2向Host1發送報文的過程與上述過程相同。
VXLAN網路中的ARP廣播抑制
地址解析協定ARP(Address Resolution Protocol)用來將IP地址解析為MAC地址。網路中同網段主機首次通訊時,由於沒有目標主機的MAC地址資訊,因此會發送ARP廣播請求來獲取目的MAC地址資訊。ARP廣播請求報文在VXLAN網路中會泛洪轉發,大量的ARP報文存在會占用過多的網路資源,導致網路效能下降。
為了抑制ARP廣播請求給網路帶來的負面影響,可以透過ARP廣播抑制功能來盡可能的減少ARP報文在VXLAN網路中的泛洪。ARP廣播抑制有兩種方式,一種是ARP廣播變單播的功能,另一種是ARP二層代答功能。
ARP廣播變單播
ARP廣播變單播,顧名思義,就是將ARP廣播報文轉變成ARP單播,從而以單播形式進行轉發。ARP廣播變單播的實作思路是在VXLAN三層閘道器上根據ARP生成ARP廣播抑制表(包括主機IP、MAC、VNI、VTEP IP資訊),然後透過EVPN將主機資訊發送給二層閘道器;二層閘道器在收到ARP廣播請求後,直接使用學習到的主機MAC替換原來的全F的廣播MAC,從而將廣播變為單播進行轉發。
圖1-11 ARP廣播變單播示意圖
以圖1-11所示的分布式閘道器為例,其中Host1和Host2屬於同一子網路,但是部署在不同的VTEP下。ARP廣播變單播過程如下:
Leaf2透過Host2發送的ARP報文,可以學習到Host2的ARP表項。然後Leaf2可以根據ARP生成相應的ARP廣播抑制表,並透過EVPN向Leaf1釋出,這樣Leaf1也可以學習到Host2的主機資訊。
Host1初次存取Host2,發送ARP廣播請求來獲取Host2的MAC地址。
Leaf1收到ARP廣播請求後,查詢ARP廣播抑制表。因為已經有Host2的主機資訊,所以Leaf1將ARP請求報文中的全F的廣播目的MAC替換為Host2的MAC地址,將ARP廣播變為ARP單播,然後再進行VXLAN封裝後向Leaf2發送。如果Leaf1上沒有Host2的ARP廣播抑制表,那麽依然按照正常的流程進行廣播。
Leaf2收到VXLAN報文並解封裝後,將ARP請求發送給Host2。
可以看出ARP廣播變單播功能強依賴於三層閘道器,需要三層閘道器學習到主機的ARP資訊,如果三層閘道器學習不到主機ARP,就不能抑制ARP廣播。
ARP二層代答
ARP廣播變單播的抑制方式需要三層閘道器的存在,在純二層網路中,由於不存在三層閘道器,沒有相應的ARP表項,也就無法生成ARP廣播抑制表進行ARP抑制。上述二層場景面臨的ARP抑制問題,就可以透過ARP二層代答功能來解決。
ARP二層代答的實作思路是在二層閘道器上偵聽主機ARP報文,獲取ARP報文中的主機資訊並生成ARP廣播抑制表,然後透過EVPN將主機資訊發送給其他二層閘道器;二層閘道器在收到ARP廣播請求後,根據ARP廣播抑制表中的主機資訊,直接進行ARP代答。
圖1-12 ARP二層代答示意圖
以圖1-12為例,其中Host1和Host2屬於同一子網路,ARP二層代答過程如下:
Leaf2上開啟ARP二層代答功能後,Leaf2會偵聽主機發送的ARP報文。當Leaf2接收到Host2的ARP報文後,可以根據ARP生成相應的ARP廣播抑制表項,並透過EVPN向Leaf1釋出,這樣Leaf1也可以學習到Host2的主機資訊。
Host1初次存取Host2,發送ARP廣播請求來獲取Host2的MAC地址。
Leaf1收到ARP廣播請求後,查詢ARP廣播抑制表。因為已經有Host2的主機資訊,所以Leaf1直接對ARP請求進行代答。
如果Leaf1上沒有Host2的ARP廣播抑制表,那麽依然按照正常的流程進行廣播。
-End-
讀到這裏說明你喜歡本公眾號的文章,歡迎 置頂(標星)本公眾號 Linux技術迷,這樣就可以第一時間獲取推播了~
在本公眾號,後台回復:Linux,領取2T學習資料 !
推薦閱讀
1.
2.
3.
4.