EVPN簡介

本文首發在SDNLAB,原文鏈接:EVPN簡介及實現 | SDNLAB | 專註網路創新技術

EVPN全稱是Ethernet VPN,它最開始由RFC7432定義,RFC的全稱是:BGP MPLS-Based Ethernet VPN,從名字上看,這是一個基於BGP和MPLS的L2 VPN。雖然這是一個2015年才有編號的RFC,但是當它還是草案時,很多廠商已經開始實現EVPN。

在這之前與MPLS相關的L2 VPN標準在很早前就提出過。這包括:

  • RFC4447提出基於LDP的VPWS(Virtual Private Wire Service)
  • RFC4762提出基於LDP的VPLS(Virtual Private LAN Service)
  • RFC4761提出基於BGP的VPLS。

VPLS可以看成是一個full mesh(拓撲中任意兩個PE都相連)版本的VPWS。這些L2 VPN標準方案,在2006年左右提出,現在已經實際應用。VPLS可以把SP(Service Provider)網路看成一個大的Ethernet Switch,SP提供的PE埠可以看成這個大交換機的埠,而每個CE設備看成是連接在交換機上的設備。VPLS這種架構,便於用戶理解和組建網路,但是隨著發展,VPLS最大的問題也正是,實現上太過模擬一個Ethernet交換機。

一個交換機怎麼工作的?主要這幾個動作,Learn,Flood,Filter,Forward。交換機自身有轉發表,記錄了MAC地址對應的交換機埠。與路由器的路由表不一樣,這個轉發表並沒有一個控制層(control plane)寫入,而是通過數據層(data plane)的自學習建立。當交換機收到一個Ethernet Frame,交換機首先會將Frame的源MAC和入口埠記錄在轉發表中,之後交換機根據Frame的目的MAC,查表找到相應的埠將Frame發送出去。如果目的MAC在轉發表中不存在,那麼交換機會將這個Frame發送到除了入口埠的其他所有交換機埠(Flood),在響應設備返回的Ethernet Frame中,再記錄MAC地址和交換機埠的關係。這樣下一次發往這個MAC地址的Frame,沒有必要再經過一次Flood。

VPLS採用同樣的方式構建轉發表,也就是說在數據層進行flood-learn,或者說是在SP提供的WAN上進行flood-learn。同樣的,為了避免轉發表無限膨脹,還需要給轉發表設置aging,清除不活躍的轉發條目。所有這些,隨著網路規模的增加,對PE和WAN網路的造成了很大的負擔,進而限制了VPLS的網路規模。所以,儘管VPLS還有其他的問題和限制,但其沒有控制層,或者說數據層不受控制,是VPLS發展的最大問題。現在都說SDN架構,數據控制分離,到這還基本沒有控制層,明顯不合適,因此EVPN被提出。EVPN架構是在現有的BGP VPLS(RFC4761)方案上,參考了BGP/MPLS L3 VPN(RFC4364)的架構提出的。我們知道SDN架構是控制數據分離,應用在控制層之上構建。對於EVPN來說,控制層是MP-BGP,而EVPN可以看成是構建在MP-BGP上的應用。所以EVPN不僅僅是一種技術和架構,它也有應用場景的定義。更具體的說,EVPN不僅定義了L2 VPN的一種改進方案,還定義了各個應用場景下的行為,像multi-homing,fast convergence,auto-discovery,MAC mobility等等,這些場景都非常有意思。隨著EVPN技術的討論,EVPN也被用來傳遞IP路由信息,作為VXLAN等overlay網路的控制層,用來作為數據中心互聯的控制層等。所有的這些場景和討論,在一篇文章講清楚不現實,講清楚起碼要一本書。本文只介紹EVPN的基本概念和簡單場景,雖然基本和簡單,這些內容是EVPN最核心的部分。

EVPN中的一些名詞

  • EVI(EVPN Instance):EVPN是一種虛擬私有網路,那麼在一套物理設備上必然可以有多個同時存在的EVPN實例,每個實例獨立存在。每個EVI連接了一組或者多組用戶網路,構成一個或者多個跨地域的二層網路。
  • ET(Ethernet Tag):剛剛說了,每個EVI可以構成一個或者多個二層網路。當EVI包含了多個二層網路時,通過Ethernet Tag來區分這些二層網路。如果我們把二層網路看成是廣播域的話(Broadcast Domain),那麼ET就是用來區分不同廣播域的。

簡單畫了一下它們的關係。

  • Ethernet Segment:這是在CE同時連接到多個PE時才會有的概念。本文暫時不涉及多連接的情況。
  • MAC-VRF:PE上的虛擬轉發單元,類似於BGP/MPLS L3 VPN中的VRF。通過將PE抽象出多個虛擬單元,可以支持多租戶場景,使PE同時被多個EVI使用。MAC-VRF中包含了實際的MAC轉發表。

EVPN服務模式

前面說過,每個EVI,是可以連接一組或多組網路。這與EVPN的三種服務模式相關。

VLAN-Based Service Interface

這種模式下,每個EVI只有一個廣播域,連接一組用戶網路。如下圖所示:

這種模式隔離最好,每組網路都是獨立的,缺點是太費EVI了,例如,一個用戶如果需要10組L2 VPN網路,就需要10個EVI,而通常SP能提供的EVI數量是有限的。這種模式下,在EVI內部類似於一個FLAT網路。每個MAC-VRF中只有一張MAC轉發表。

VLAN Bundle Service Interface

一個EVI有多個廣播域,連接了多組用戶網路,但是多組用戶網路共用MAC轉發表。如下圖所示:

這種模式,EVI內部類似於VLAN with SVL(Shared VLAN learning)。實際上廣播域還是一個,通過邏輯分組區分不同的VLAN。在這種模式下,每個MAC-VRF只有一張MAC轉發表,但是轉發表類似於下圖所示:

埠5連接的CE對應了三個用戶VLAN。由於多組用戶網路共用MAC轉發表,實際上是通過MAC地址來做轉發決策,因此這種模式要求所有網路中MAC地址唯一。並且,EVPN連接的用戶網路VLAN ID必須一致(如圖所示)。舉個例子,右邊VID11的網路,有一條轉發信息發送到了左邊,左邊為了實現多租戶隔離,只能對某一個入口網路開放轉發信息,這樣才能做到多租戶隔離,而由於只有一張轉發表,EVI(更確切的說是MAC-VRF)只能允許VID11的入口網路使用這條轉發信息。

VLAN-Aware Bundle Service Interface

一個EVI有多個廣播域,連接了多組用戶網路,但是每組用戶網路有自己獨立的MAC轉發表。如下圖所示:

這種模式,EVI內部類似於VLAN with IVL(Independent VLAN learning)。每個MAC-VRF有多張MAC轉發表,每張MAC轉發表對應一個用戶網路。MAC地址和ET同時用來做轉發決策,通過ET定位到MAC轉發表,再通過MAC地址在轉發表內定址。這種模式允許多組用戶網路之間存在重複的MAC地址,並且每組網路的VLAN ID可以不一致。例如,左邊VID12的轉發信息,可以直接發到VID11對應的MAC-VRF中。這種模式能解決上面兩種模式的問題,不過就是實現相對來說複雜一些。

EVPN的實現

前面說過EVPN的實現參考了BGP/MPLS L3 VPN的架構。下面這個圖就是一個BGP/MPLS L3 VPN的架構。EVPN架構在這個層面上是一樣的。

控制層(control plane)

這裡的控制層是指MAC轉發信息的傳遞和MAC-VRF中MAC轉發表的寫入。具體的說,就是CE1的MAC地址,怎麼發送到PE2,進而讓PE2收到目的MAC是CE1 MAC地址的Ethernet Frame時,知道應該通過Tunnel發送到PE1。

CE1 -> PE1

CE-PE之間通常還是通過數據層進行MAC 學習。也就是說,PE1需要通過解析CE1發來的數據包,讀取其中的源MAC地址,並記錄在MAC-VRF中的MAC轉發表中。通常這些數據包是設備發出的第一個數據包,例如DHCP,ARP等。採用這種傳統的方式,一是CE不需要關心SP網路的實現,另一個是能更好的兼容CE設備。MAC-VRF也對應了一個RD(Route Distinguisher)和一組RT(Route Target)。RD用來區分EVPN實例的信息,RT用來過濾MAC 路由。這在之前介紹BGP/MPLS L3 VPN時有過詳細的介紹,這裡就不說了。 好了,有關CE1的MAC轉發信息到達了PE1,確切的說是到達了PE1內的MAC-VRF。

PE1 -> PE2/MP-BGP

PE之間的MAC轉發信息傳遞,是通過MP-BGP來進行,也就是在EVPN內部,MAC轉發信息是通過控制層來傳輸。這是EVPN與VPLS最核心的區別。因為EVPN內部是SP網路了,SP想怎麼玩都可以。MP-BGP是BGP-4的擴展,改版多次,最新的版本由RFC4760定義。EVPN中的MP-BGP本質上還是一個IBGP。現在PE1有了CE1的MAC轉發信息,需要做的是封裝成BGP數據傳遞給PE2。首先EVPN在MP-BGP中定義了自己的地址族(AFI 25,SAFI 70)。在這個地址族下,又定義了不同的NLRI(Network Layer Reachability Information)。同時EVPN也定義了多個新的BGP Extended Community(RFC4360),具體如下表所示。

看起來似乎很多,這裡我們只看Route Type 2,也就是MAC/IP route,它的NLRI信息定義如下:

  • RD:RD與MAC-VRF關聯,RD的作用是為了區分不同的EVI之間重複的信息,因為PE之間只有一條MP-BGP連接,但是同時存在多個EVI。RD在這裡的作用與L3 VPN中一樣。
  • ESI:前面說過,Ethernet Segment是與多連接相關,ESI用來區分多連接中的每條鏈路。
  • Ethernet Tag ID:Ethernet Tag ID是4個位元組,可以包含12bit或者24bit的標識符。前面說過,Ethernet Tag是用來區分同一個EVI中的不同的廣播域的。只有在VLAN-Aware Bundle Service Interface下,才存在多個廣播域,Ethernet Tag ID才有意義。Ethernet Tag ID可以用來區分MAC/IP route屬於MAC-VRF中的哪張MAC轉發表。
  • MAC Address Length/MAC Address:MAC地址。這就是PE需要封裝到BGP中的數據。
  • IP Address Length/IP Address:IP地址。注意這裡的IP地址是可選的,這部分在後面講ARP/ND時會再說。
  • MPLS Label:VPN label。在MPLS網路中傳輸時的內層標籤。在數據層,PE根據MPLS label將收到的Ethernet Frame發送到相應的MAC-VRF,進而發送到對應的CE。

MAC/IP route還必須帶上一到多個作為Extended community存在的RT。

PE1將這個MAC/IP route發送到PE2。與L3 VPN中的作用一樣,PE2通過MAC/IP route中帶的RT和自身的MAC-VRF的RT進行匹配,定位到哪些MAC-VRF接收這條路由。由於MAC-VRF可能存在多個轉發表,因此可能還需要ET ID來確定路由具體寫入到哪個轉發表。

到此為止,PE1通過MP-BGP將MAC轉發信息寫到了PE2。現在PE2上的MAC-VRF知道了,對應的MAC應該轉發到PE1上。

PE2

控制層數據到PE2 就結束了。前面介紹PE1傳給PE2的MAC/IP route中,有一個可選的IP地址項。如果IP地址也隨著MAC/IP route傳輸到了PE2,那麼PE2已經有了響應ARP request的全部信息。此時,如果PE2收到了ARP request,沒有必要廣播出去。因此,EVPN定義PE2可以支持ARP proxy,這樣可以避免ARP request在骨幹網上廣播,減少不必要的廣播信息

這是控制層MAC學習帶來的好處。在VPLS模式下,PE2沒有辦法事先知道CE1的IP/MAC,只能通過ARP request廣播來獲取響應。

數據層(data plane)

接下來看一下數據層,例如CE2如何ping到CE1。

CE2 -> PE2

在ping之前,CE2因為不知道CE1的MAC地址,必須要先發送ARP request,通過CE1的IP地址查詢CE1的MAC地址。前面說過PE2可以配置ARP proxy,這樣PE2收到ARP request之後,直接將CE1的MAC地址放在ARP response中回送給CE2。CE2拿到MAC地址,組裝Ethernet Header,將ping包發送到PE2。

PE2 -> PE1

PE2的MAC-VRF記錄了MAC的轉發信息,因此PE2知道,目的MAC是CE1 MAC的Ethernet Frame應該發送到PE1。PE2->PE1這部分實際上是跑在SP網路上。在EVPN下,定義了三種數據層。

先假設用MPLS作為數據層,VXLAN作為數據層以後有機會再單獨介紹。

前面在控制層MAC/IP route中帶的MPLS Label(VPN Label)在這裡有用處了。它會被加到ping包中,之後為了在MPLS網路中傳輸,還會在MPLS Label Stack中加上Public Label。中間通過MPLS傳輸,這就是一個普通的MPLS unicast傳輸。到達PE1的,實際上是帶上了VPN Label的ping包。

PE1 -> CE1

PE1收到的帶VPN Label的ping包。這個VPN Label是PE1通過MP-BGP發往PE2的。因此,PE1必然知道這個VPN Label應該對應自己的哪個MAC-VRF。所以,VPN Label被剝離,ping包被發往相應的MAC-VRF,通過讀取MAC-VRF中的MAC轉發表,發往相應的埠,也就是CE1。這樣,CE2 ping到了CE1。

這就是EVPN架構中最基本的內容。總的來說,EVPN架構與BGP/MPLS L3 VPN是一樣的。只是這裡的轉發信息是MAC轉發信息,而L3 VPN中的轉發信息是IP prefix轉發信息。

EVPN的發展

EVPN的流行不僅在於它為L2 VPN帶來的改進,更多在於EVPN提供了一個L2 網路的控制層。具體可以概括為以下幾點:

  • 可以通過控制層學習L2和L3的可達信息。傳統的控制層只有L3的可達信息。
  • 通過MAC/IP route和ARP代理,減少網路廣播。
  • 完整的多連接場景定義。
  • 完整的BUM數據發送的優化定義。
  • 支持MAC遷移。
  • 支持拓撲自發現。
  • 支持多租戶。

隨著發展,EVPN開始支持更多的場景,EVPN新增了Route type 5,用來傳輸IP prefix 路由信息;作為overlay網路,例如VXLAN,的控制層;應用在數據中心互聯的場景等,雖然相應的標準還沒有最終確定,但是IETF草案已經討論改版多次。以後有機會再說說這些內容。

推薦閱讀:

Traceroute in OpenFlow based SDN
NFV 閑聊(基礎技術篇)
SDN興起對於我們這些已經多年的CCIE,不知道未來該何去何從?
SDN興起對於我們這些已經多年的CCIE,不知道未來該何去何從11?
VXLAN在數據中心大量VM互聯場景下,能否免去flood-learn學習?

TAG:MultiprotocolLabelSwitchingMPLS | SDN |