1 萬字 20 張圖帶你詳解 EVPN

前言

本文介紹了 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 的控制平面具有以下優勢:

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 地址,也可以攜帶網段地址:

理解 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 屬性分爲兩類:

在本例中,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 只是減少了網絡中的流量泛洪,並不會完全避免,例如在以下一些場景:

EVPN 頭端複製列表的建立

EVPN 只能相對減少網絡中的流量泛洪,並不能完全避免。那麼這些不能避免的 BUM 流量,還是需要建立頭端複製列表來進行轉發。

頭端複製列表的建立可以通過手工方式或者 EVPN 來建立,本文僅描述 EVPN 方式:

下面以圖 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,**然後:

2、Leaf2 收到 Leaf1 發來的 Type2 路由後,能夠學習到 Host1 的 IP 地址信息,並將其保存在相應的路由表中,其下一跳爲 Leaf1 的 VTEP IP 地址,同時記錄對應的三層 VNI 信息,處理過程如下:

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
#

經過以上的流程,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 的網段。

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 同子網已知單播報文轉發示意圖

  1. Host1 發送目的地址爲 Host2 的報文。如果 Host1 沒有 Host2 的 MAC 地址,會先發送廣播 ARP 請求來獲取 Host2 的 MAC 地址,此處該過程不再詳述,認爲 Host1 已經獲取了 Host2 的 MAC 地址。

  2. Leaf1 收到 Host1 的報文後,根據報文入端口或 VLAN 信息判斷其所屬的 BD,並在該 BD 內查找出接口(通過上一節使用 EVPN 學習 MAC 地址可以知道,Leaf1 上會學習到 Host2 的 MAC 地址,出接口爲 VTEP 2.2.2.2)。然後 Leaf1 會對報文進行 VXLAN 封裝後轉發。

  3. Leaf2 接收到 VXLAN 報文後,根據報文中 VNI 獲取二層廣播域,進行 VXLAN 解封裝,獲取內層的二層報文。

  4. 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 網絡中的轉發流程:

  1. 因爲 Host1 與 Host2 屬於不同網段,所以 Host1 會先將報文發送給網關(Leaf1),交由網關進行轉發。

  2. Leaf1 接收到來自 Host1 的報文,根據報文的目的地址判斷需要進行三層轉發。Leaf1 根據報文入端口或 VLAN 信息判斷其所屬的 BD,找到綁定該 BD 的 L3VPN 實例,然後在該 L3VPN 實例下查找路由表。在前面使用 EVPN 發佈主機路由和網段路由章節已經介紹過,在分佈式網關場景下,網關 Leaf1 會學習到 Host2 的主機路由。Leaf1 根據路由獲取三層 VNI、下一跳等信息,然後進行 VXLAN 封裝,將報文轉發至 Leaf2。

  3. 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 廣播變單播過程如下:

  1. Leaf2 通過 Host2 發送的 ARP 報文,可以學習到 Host2 的 ARP 表項。然後 Leaf2 可以根據 ARP 生成相應的 ARP 廣播抑制表,並通過 EVPN 向 Leaf1 發佈,這樣 Leaf1 也可以學習到 Host2 的主機信息。

  2. Host1 初次訪問 Host2,發送 ARP 廣播請求來獲取 Host2 的 MAC 地址。

  3. Leaf1 收到 ARP 廣播請求後,查詢 ARP 廣播抑制表。因爲已經有 Host2 的主機信息,所以 Leaf1 將 ARP 請求報文中的全 F 的廣播目的 MAC 替換爲 Host2 的 MAC 地址,將 ARP 廣播變爲 ARP 單播,然後再進行 VXLAN 封裝後向 Leaf2 發送。如果 Leaf1 上沒有 Host2 的 ARP 廣播抑制表,那麼依然按照正常的流程進行廣播。

  4. 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 二層代答過程如下:

  1. Leaf2 上開啓 ARP 二層代答功能後,Leaf2 會偵聽主機發送的 ARP 報文。當 Leaf2 接收到 Host2 的 ARP 報文後,可以根據 ARP 生成相應的 ARP 廣播抑制表項,並通過 EVPN 向 Leaf1 發佈,這樣 Leaf1 也可以學習到 Host2 的主機信息。

  2. Host1 初次訪問 Host2,發送 ARP 廣播請求來獲取 Host2 的 MAC 地址。

  3. Leaf1 收到 ARP 廣播請求後,查詢 ARP 廣播抑制表。因爲已經有 Host2 的主機信息,所以 Leaf1 直接對 ARP 請求進行代答。

  4. 如果 Leaf1 上沒有 Host2 的 ARP 廣播抑制表,那麼依然按照正常的流程進行廣播。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/zcEXW4uE5JE0mvb9-zfT1g