Post

EVPN笔记

EVPN笔记

Ethernet tag ID 的作用

在EVPN(RFC 7432)中,Ethernet Tag ID(通常简称 Eth-Tag ID)是一个非常关键但容易被忽视的概念,特别是在将它与 VNI(VXLAN Network Identifier)或 MPLS Label 混淆时。

用最专业、最直接的一句话概括:Ethernet Tag ID 是在 EVPN 控制层面(BGP)中,用于在同一个 EVPN 实例(EVI)内部区分不同广播域(Broadcast Domain)的 32位 标识符。

以下是详细的技术拆解,我将从设计初衷(Service Models)具体作用以及与 VNI 的区别三个维度来解释。


  1. 核心作用:为什么要设计 Ethernet Tag ID?

在 EVPN 架构中,一个 EVI(EVPN Instance)相当于一个虚拟的交换机(MAC-VRF)。但是,这个“虚拟交换机”内部是如何处理 VLAN 的,有三种不同的模式(Service Interface Models)。Ethernet Tag ID 的具体值取决于你使用了哪种模式。

模式 A:VLAN-Based Service(基于 VLAN 的服务)

d4c6eac56edc2f38c650e002886de24d_MD5

  • 场景: 这是目前最常见的模式(如大多数 VXLAN 部署)。每个 VLAN 映射到一个独立的 EVI。
  • 逻辑: 既然 EVI 和 VLAN 是一一对应的(1:1),那么进入这个 EVI 的流量一定属于那个特定的 VLAN。
  • Eth-Tag ID 的值: 0
  • 解释: 因为 RD(Route Distinguisher)和 RT(Route Target)已经足够区分不同的 VLAN 了,不需要额外的 Tag ID 来区分。

模式 B:VLAN-Bundle Service(VLAN 捆绑服务)

29c8c9063321e0a5a5fea5abdeabcefd_MD5

  • 场景: 多个 VLAN 共享同一个 EVI,并且这些 VLAN 的流量在转发层面是混在一起的(共享同一个 MAC 表)。
  • 逻辑: 这种模式要求不同的 VLAN 里不能有相同的 MAC 地址(MAC 地址必须在整个 Bundle 内唯一)。
  • Eth-Tag ID 的值: 0
  • 解释: 在控制层面,BGP 并不关心具体的 VLAN ID,它只负责把 MAC 传过去。对端收到后,不需要知道这属于哪个具体的 VLAN,因为大家共用一张表。

模式 C:VLAN-Aware Bundle Service(VLAN 感知捆绑服务)—— 这是 Eth-Tag ID 的高光时刻

5c94b42eeb7521b8225d35f37c9af4d1_MD5

  • 场景: 多个 VLAN 共享同一个 EVI(为了节省 RD/RT 资源),但是每个 VLAN 依然拥有独立的 MAC 表(独立广播域)。
  • 逻辑: 比如 VLAN 10 和 VLAN 20 都映射到同一个 EVI(同一个 RD)。当 BGP 通告一个 MAC 地址时,对端设备必须知道:“这个 MAC 是属于 VLAN 10 的还是 VLAN 20 的?”
  • Eth-Tag ID 的值: 等于 VLAN ID(或映射后的 ID)。
  • 作用: 它充当了“二级复用器”的角色。RD 区分 EVI,而 Eth-Tag ID 在 EVI 内部区分具体的 Bridge Domain。

  1. 在 BGP 路由类型中的具体表现

Ethernet Tag ID 出现在 EVPN 的 NLRI(路由信息)中,不同的路由类型对它的使用略有不同:

Type 1: Ethernet Auto-Discovery Route (AD Route)

  • 作用: 用于多归属(Multi-homing)场景下的负载分担(Aliasing)和快速收敛。
  • Eth-Tag ID 作用: 告诉对端 PE,这个特定的 ES(Ethernet Segment)上跑了哪些 VLAN。
    • 如果 Eth-Tag ID = 0xFFFFFFFF (MAX-ET),表示这个路由适用于该接口上的所有 VLAN。
    • 如果是 VLAN-Aware Bundle,这里会携带具体的 Tag ID,表示“我这个接口只在这个特定的 VLAN 上是活跃的”。

Type 2: MAC/IP Advertisement Route

  • 作用: 通告 MAC 地址(以及对应的 IP)。
  • Eth-Tag ID 作用:
    • VLAN-Aware Bundle 模式下,这是核心字段。它告诉对端:“这个 MAC 地址属于 VLAN 10”。
    • 对端接收到路由后,会根据 RD + Ethernet Tag ID 找到对应的本地转发表(MAC-VRF 中的具体 VLAN 表项)。

Type 3: Inclusive Multicast Ethernet Tag Route (IMET)

  • 作用: 用于建立处理 BUM(广播、未知单播、组播)流量的隧道。
  • Eth-Tag ID 作用: 标识广播域。在 VLAN-Aware 模式下,即便多个 VLAN 共享一个 EVI,Type 3 路由也可以利用 Eth-Tag ID 来显式区分不同的广播域隧道(虽然在 VXLAN 实现中,通常是靠 VNI 来区分数据平面的,但在 BGP 控制面,Eth-Tag ID 依然是路由键值的一部分)。
特性Ethernet Tag IDVNI (VXLAN) / MPLS Label
所属层面控制平面 (Control Plane)数据平面 (Data Plane)
位置存在于 BGP Update 报文的 NLRI 中存在于实际传输的数据包头部 (VXLAN头或MPLS标签栈)
作用帮助 BGP 区分路由所属的广播域帮助转发芯片(ASIC) 查找转发表
对应关系在 VLAN-Aware 模式下,Eth-Tag ID 往往映射为 VNIVNI 是 Eth-Tag ID 在数据包里的物理载体

举个实际的例子(VXLAN 场景):

  1. 控制面(BGP): PE1 给 PE2 发送一条 Type 2 路由。
    • 内容:MAC = 00:AA:BB:CC:DD:EE, Eth-Tag ID = 10, Next-Hop = PE1。
    • PE2 收到后,看到 Eth-Tag ID = 10,知道这个 MAC 属于 EVI 内部的 VLAN 10 表项。
    • PE2 安装转发表时,会查看本地配置:VLAN 10 对应的 VNI 是多少?假设是 VNI 5010
  2. 数据面(转发):
    • PE2 收到去往该 MAC 的数据包,封装 VXLAN 头部。
    • 在 VXLAN 头部中,写入 VNI = 5010(而不是写入 Eth-Tag ID,虽然它们值可能一样,但字段不同)。
    • 注意: VXLAN 报文头里没有 “Ethernet Tag ID” 这个字段,只有 VNI。Eth-Tag ID 只是 BGP 说话时用的“语言”。

总结

  • 最常见的 EVPN-VXLAN 部署(每个 VNI 对应一个 VLAN/Subnet,即 VLAN-Based)中,Ethernet Tag ID 通常为 0,你基本上可以忽略它。
  • EVPN-MPLSVLAN-Aware Bundle 的 VXLAN 部署中,Ethernet Tag ID = VLAN ID。它是为了让 BGP 在同一个 VPN 实例中能够区分出这个路由到底是属于哪个 VLAN 的。

这就好比:EVI 是“这栋大楼”,而 Ethernet Tag ID 是“房间号”。 如果这栋楼只有你一家公司(VLAN-Based),那就不需要房间号(ID=0);如果这栋楼里住了好多家公司(VLAN-Aware),快递员(BGP)必须知道房间号才能把包裹(MAC路由)送对地方。

EVPN Route Type 1路由

Split horizon

per-ESI Ethernet A-D route

Gemini_Generated_Image_myig2xmyig2xmyig

核心特性:EVPN ESI filter label

简单来说,ESI Filter Label 是 EVPN 在 MPLS 数据平面上实现水平分割(Split Horizon)机制的关键手段,目的是为了防止在多归属站点出现环路。

  1. 背景与问题:多归属环境下的环路风险

在现代数据中心和运营商网络中,为了提高可靠性,客户边缘设备(CE)通常会同时连接到两台或多台运营商边缘设备(PE)。这称为多归属(Multihoming)

在 EVPN 中,连接同一个 CE 的这一组物理链路被定义为一个以太网段(Ethernet Segment, ES),并用一个全局唯一的 ID 来标识,即 ESI(Ethernet Segment Identifier)

问题场景(BUM 流量环路):

假设 CE1 通过 ESI 100 双归属到 PE1 和 PE2。

  1. CE1 发送一个广播帧(例如 ARP 请求)。
  2. 假设该帧到达了 PE1。
  3. PE1 根据 EVPN 的规则,需要将这个广播帧泛洪给同一个广播域(BD)内的所有其他 PE,包括 PE2。
  4. PE1 将数据包封装并通过核心网发送给 PE2。
  5. 关键风险: 当 PE2 从核心网收到这个广播包解封装后,如果没有任何检查机制,PE2 会认为这是一个需要向本地接口泛洪的广播包。PE2 可能会将其从连接 CE1 的接口再次发送回 CE1。

结果: CE1 发出的广播包又回到了 CE1,形成了二层环路。这是网络大忌。

  1. 解决方案:水平分割(Split Horizon)

为了防止上述环路,必须实施水平分割原则。

在 EVPN 多归属场景下的水平分割原则是:PE 设备从核心侧接收到的 BUM 流量,如果该流量最初是从某个 ESI 发起的,那么该 PE 绝不能将此流量转发回属于同一个 ESI 的本地接口。

换句话说,PE2 需要知道:“这个广播包虽然是从核心网过来的,但它最初是由我的邻居 PE1 从 ESI 100 接收上来的。我也是 ESI 100 的一部分,所以我不能把它发回去。”

  1. 核心机制:什么是 ESI Filter Label?

PE2 如何识别流量的“原始来源 ESI”呢?在基于 MPLS 的 EVPN 中,答案就是 ESI Filter Label(ESI 过滤标签),有时也被称为 Split Horizon Label。

  • 定义: 它是一个 MPLS 标签,用于在数据平面中标识 BUM 流量起源的以太网段(ESI)。
  • 作用: 它就像给数据包贴上的一个“原产地标签”。当接收端 PE 看到这个标签时,它不是用来指导转发的,而是用来执行“过滤”或“丢弃”操作的。
  • 本质: 它是一个特殊的 MPLS 标签,其对应的转发动作是:“禁止向关联的 ESI 接口转发”。
  1. 工作流程:控制平面与数据平面的协同

理解 ESI Filter Label 如何工作,必须结合 BGP 控制信令和数据包转发过程。

A. 控制平面(标签的分配与通告)

ESI Filter Label 是通过 BGP EVPN 路由在 PE 之间交互的。具体使用的是 Type 1 路由:Ethernet Auto-Discovery (A-D) route

  1. PE 的自我声明: PE1 和 PE2 都会发现自己连接了 ESI 100。
  2. 分配标签:
    • PE1 会为 ESI 100 在本地分配一个唯一的 MPLS 标签(假设为 Label_PE1_ESI100,例如值为 500)。
    • PE2 也会为 ESI 100 在本地分配一个唯一的 MPLS 标签(假设为 Label_PE2_ESI100,例如值为 600)。
  3. 发布路由:
    • PE1 向所有邻居(包括 PE2)发送一条 EVPN Type 1 A-D 路由。这条路由的核心含义是:“我是 PE1,我连接着 ESI 100。如果你(其他 PE)需要向我发送源自 ESI 100 的 BUM 流量用于水平分割检查,请使用标签 500。”
    • PE2 同样发送 Type 1 路由,告诉别人关于 ESI 100 请使用它的标签 600

注意:RFC 标准实现中,通常是一组共享 ESI 的 PE 互相通告自己为该 ESI 分配的标签。

B. 数据平面(标签的使用与过滤)

现在回到之前的 ARP 广播场景:

步骤 1:CE 发送流量

CE1 发送广播帧到达 PE1 的 ESI 100 接口。

步骤 2:入口 PE (PE1) 的处理与封装

PE1 决定需要将此 BUM 流量复制并发送给 PE2(因为 PE2 也在同一个广播域)。

PE1 在封装 MPLS 数据包发送给 PE2 时,数据包结构可能包含以下标签栈(从外到内):

  • 外层传输标签 (Transport Label): 用于在核心网中将数据包从 PE1 路由到 PE2(例如 LDP 或 SR 标签)。
  • 内层 EVPN 标签: 这里情况变得有趣。为了实现水平分割,PE1 需要佩戴上PE2 识别 ESI 100 所需的标签。PE1 查找之前收到的 PE2 的 Type 1 路由,找到了标签 600

PE1 构建的数据包(简化):

[传输头 | BUM 服务标签 | ESI Filter Label (600) | 原始以太帧]

(注:具体的标签栈顺序可能因厂商实现和配置略有不同,但 ESI 标签一定位于栈底附近,用于最终的出口检查)

步骤 3:核心网传输

数据包穿越核心网到达 PE2。外层传输标签被弹出。

步骤 4:出口 PE (PE2) 的处理与过滤(关键步骤)

PE2 接收到数据包,看到了内层的 ESI Filter Label (600)。

PE2 查看自己的 MPLS 转发表(LFIB):

  • 它发现标签 600 是它自己本地为 ESI 100 分配的水平分割标签。
  • 该标签对应的指令动作是:“将此数据包解封装,但在向本地接口泛洪时,绝对不要从属于 ESI 100 的任何接口发送出去。”

最终结果:

PE2 会把这个广播包发送给该广播域下连接的其他单归属 CE,但会精准地在连接 CE1 的接口上丢弃该数据包,从而成功阻止了环路。

Gemini_Generated_Image_4nf0kf4nf0kf4nf0

总结

EVPN ESI Filter Label 是:

  • 一个 MPLS 标签。
  • 通过 EVPN Type 1 (Ethernet A-D) 路由通告。
  • 在数据平面用于标识 BUM 流量的来源以太网段(ESI)。
  • 接收端 PE 利用它来执行水平分割(Split Horizon)检查,防止 BUM 流量回流到源站点,从而避免环路。

Fast convergence

per-ESI Ethernet A-D route

All-active or single-active ESI state

per-ESI Ethernet A-D route

Aliasing

per-EVI Ethernet A-D route

Per-EVI Ethernet A-D 路由的引入是为了解决多归属场景下的流量负载分担(Aliasing)和快速收敛问题。

  1. 背景:多归属与 Type 2 路由的局限

假设一个客户站点 CE1 通过一个以太网段 ESI 100 双归属接入到 PE1PE2,并且处于 All-Active(全活)模式。在这个 ESI 上运行着某个业务实例 EVI 10(比如对应 VLAN 100)。

CE1 下面有一台主机,MAC 地址是 MAC_A

  • 当 CE1 发送数据包时,可能通过哈希算法选中 PE1。
  • PE1 学习到 MAC_A,并通过 BGP EVPN 向远端 PE3 通告一条 Type 2(MAC/IP Advertisement)路由[ESI 100, MAC_A, 下一跳是 PE1]

问题来了: 远端 PE3 收到了这条路由,知道要去往 MAC_A,可以把流量发给 PE1。但是,PE3 怎么知道 PE2 其实也连接着同一个 CE1,也能到达 MAC_A 呢?

如果仅依赖 Type 2 路由,PE2 也必须学习到 MAC_A 并通告一遍。但在 All-Active 模式下,特定 MAC 的流量可能只单向流经一个 PE,另一个 PE 可能很久都学不到这个 MAC。

结果: 如果没有额外机制,远端 PE3 认为只有 PE1 能到达 MAC_A,所有流量都只会发往 PE1,无法利用 PE2 的链路进行负载分担,全活模式大打折扣。

  1. 解决方案:引入 Per-EVI Ethernet A-D Route

为了解决这个问题,EVPN 引入了 Per-EVI Ethernet A-D 路由。

它的核心思想是:将“对特定 MAC 地址的可达性”与“对整个以太网段(ESI)内特定业务(EVI)的可达性”解耦。

核心功能一:Aliasing(别名)——实现负载分担

这是 Per-EVI A-D 路由最主要的作用。

回到上面的例子:

  1. PE1 学习到 MAC_A,通告 Type 2 路由:[MAC_A, ESI 100, Next-Hop: PE1]
  2. 关键步骤: PE1 和 PE2 都会针对 EVI 10,通告一条 Per-EVI Ethernet A-D 路由。这条路由告诉网络中的所有人:
    • PE1 说:“我连接着 ESI 100,并且上面承载着 EVI 10 业务。”
    • PE2 说:“我也连接着 ESI 100,并且上面也承载着 EVI 10 业务。”
  3. 远端 PE3 的行为:
    • PE3 收到了 PE1 发来的关于 MAC_A 的 Type 2 路由,它注意到这个 MAC 关联了 ESI 100
    • PE3 查找属于 ESI 100 且业务是 EVI 10 的所有 Per-EVI A-D 路由。
    • 它发现 PE1 和 PE2 都发布了这条路由。
    • 结论: PE3 意识到,“虽然是 PE1 告诉我的 MAC_A,但 PE2 也是 ESI 100 关于此业务的合法入口(别名)”。

结果: 远端 PE3 在转发去往 MAC_A 的流量时,可以在 PE1 和 PE2 之间进行负载分担(ECMP),真正实现了 All-Active 的效益。

核心功能二:Backup Path(备份路径)——加速收敛

Single-Active(主备)模式下,PE1 是主,PE2 是备。

PE2 虽然处于阻塞状态不转发流量,但它依然会通告 Per-EVI Ethernet A-D 路由,并在路由中携带标志位声明自己是“备份”。

远端 PE3 收到后,会预先计算好:如果主路径 PE1 挂了,去往 ESI 100 的流量应该立刻切换到 PE2。这种预先安装的备份路径机制,使得在故障发生时,无需等待新的 MAC 路由泛洪,即可实现毫秒级的快速切换。

  1. 总结:为什么它不可或缺?

Per-EVI Ethernet A-D 路由是 EVPN 处理多归属复杂性的关键组件:

  • 它提供了“业务级的 ESI 可达性”声明: 告诉其他 PE,针对这个特定的 VPN 实例(EVI),哪些 PE 连接着这个网段。
  • 它弥补了 Type 2 路由的不足: Type 2 只能告诉我们“谁学到了 MAC”,而 Per-EVI A-D 路由告诉我们“谁也能到达这个 MAC 所在的网段”,从而开启了负载分担的能力。

如果没有它,EVPN 的多归属要么退化成简单的主备,要么无法实现真正的流量均衡。

2个Type的区别

EVPN Type 1 路由(Ethernet Auto-Discovery Route,以太网自动发现路由)实际上是一个“大类”。在具体的实现和应用中,它根据用途和携带信息不同,被细分成了两种截然不同的子类型:

  1. Ethernet A-D route per ESI (基于 ESI 的 A-D 路由)
  2. Ethernet A-D route per EVI (基于 EVI 的 A-D 路由)

这两者虽然都叫 Type 1 路由,都服务于多归属(Multihoming)场景,但它们解决的问题维度、作用机制和携带的内容有着本质的区别。

简而言之:

  • Per-ESI 关注的是物理链路层面的状态和 BUM 流量的防环
  • Per-EVI 关注的是具体业务实例层面的负载分担和可达性

下面我们详细拆解它们的区别:


核心区别深度对比

  1. 核心目的与解决的问题
  • Per-ESI A-D route:为了“快”和“防环”
    • 快速收敛 (Mass Withdraw): 当 PE 和 CE 之间的物理链路故障时,PE 只需要撤销这一条 Per-ESI 路由。远端 PE 收到这个撤销消息后,会立即认为通过该 PE 到达该 ESI 下 所有 业务(EVI)的 MAC 地址都不可达了。这比逐个撤销成千上万条 MAC 路由(Type 2)要快得多。
    • 水平分割 (Split Horizon): 我们之前讨论的用于防止 BUM 流量环路的 ESI Filter Label,正是通过这条路由通告出去的。
  • Per-EVI A-D route:为了“负载分担”
    • 别名 (Aliasing): 在全活(All-Active)模式下,告诉远端 PE:“虽然你只从 PE1 学到了 MAC 地址 A,但我 PE2 也连接着同一个 ESI,并且运行着同一个业务 EVI,你也可以把去往 MAC A 的单播流量发给我。”这实现了从核心网到接入侧的流量负载均衡。
    • 备份路径指示: 在主备(Single-Active)模式下,告知远端 PE 谁是主,谁是备,以便快速切换。
  1. 作用域与粒度
  • Per-ESI A-D route:粗粒度(物理接口级)
    • 它的作用范围是整个以太网段(ESI)。无论这个接口上跑了多少个 VLAN (EVI),这条路由只有一个。它描述的是 PE 到 CE 的物理连接属性。
  • Per-EVI A-D route:细粒度(业务实例级)
    • 它的作用范围是特定的 EVI(EVPN 实例/VRF)。如果一个 ESI 接口上配置了 10 个 VLAN,分别映射到 10 个 EVI,那么 PE 就会针对这一个 ESI 发布 10 条 Per-EVI A-D 路由。
  1. 关键字段差异 (技术细节)

在 BGP Update 报文中,这两者的区分体现在 Route Distinguisher (RD) 和 Route Target (RT) 的使用上:

特性Per-ESI Ethernet A-D routePer-EVI Ethernet A-D route
Route Distinguisher (RD)通常是 0:0 (或其他不绑定特定 VRF 的值)。因为它不属于任何特定的业务 VPN。使用具体业务实例 (MAC-VRF) 的 RD。因为它从属于某个特定的 VPN。
Route Target (RT)携带一个特殊的 ES-Import RT。这个 RT 只有共享同一个 ESI 的其他 PE 才会导入。用于 PE 之间的互相发现。携带具体业务实例的 Export RT。用于向所有参与该 VPN 业务的远端 PE 通告可达性。
携带的 MPLS 标签ESI Filter Label (Split Horizon Label)。用于 BUM 流量的源过滤。Unicast Label (单播标签)。用于引导远端 PE 发送该业务的单播流量到此 PE(用于 Aliasing)。
通告数量每个 ESI 通告 1 条。每个 ESI 上的每个 EVI (VLAN/VPN) 通告 1 条。

总结表

维度Per-ESI Ethernet A-D RoutePer-EVI Ethernet A-D Route
关注点物理连接状态,BUM 流量业务可达性,单播流量
核心功能快速收敛 (Mass Withdraw) 水平分割 (Split Horizon)负载分担 (Aliasing) 备份路径指示
粒度每个物理段 (ESI) 一条每个业务实例 (EVI) 一条
标签用途防止 BUM 流量环路用于单播流量转发 (负载分担)
用什么 RT 传播ES-Import RT (仅多归属 PE 间)业务 VPN RT (全网相关 PE)

所以,虽然它们都叫 Type 1 路由,但在 EVPN 的多归属机制中,它们是分工明确、相辅相成的两个组件。缺了 Per-ESI,网络没法防环且收敛慢;缺了 Per-EVI,网络做不了真正的负载均衡。

ES-Import RT

这是一个非常专业且关键的问题。深入理解 ES-Import RT 是掌握 EVPN 多归属(Multihoming)底层工作机制的最后一块拼图。

在之前的讨论中,我们对比了 Per-ESI 和 Per-EVI 两种 Type 1 路由。我们提到 Per-ESI 路由使用了一种特殊的 ES-Import RT 来进行传播,而 Per-EVI 路由使用普通的业务 VPN RT。

为什么需要这种特殊的 RT?它究竟是如何工作的?


  1. ES-Import RT 的核心定义

ES-Import RT (Ethernet Segment Import Route Target) 是 BGP EVPN 中一种特殊的扩展团体属性(Extended Community)。

它的核心使命是: 在庞大的运营商网络中,精准地帮助那些连接到同一个物理以太网段(ESI)的 PE 路由器互相“找到”对方,建立起一个小圈子,而不打扰网络中的其他无关 PE。

简单来说,它是多归属 PE 之间进行互相发现(Peer Discovery)的“联络暗号”。

  1. 为什么需要它?(解决什么痛点)

想象一个拥有上百台 PE 的大型运营商网络。

  • PE1 和 PE2 共同连接了客户站点 ESI 100。
  • PE3、PE4…PE100 在网络的其他地方,与 ESI 100 毫无关系。

为了实现多归属功能(比如防止环路、选举指定的转发者 DF),PE1 和 PE2 必须知道对方的存在:“嘿,你也连着 ESI 100 吗?我也是,我们得协调一下。”

PE1 需要发送一些信息(比如 Type 4 路由或 Per-ESI Type 1 路由)来宣告自己的存在。

问题在于: 如果 PE1 使用普通的 VPN RT 来发送这些信息,全网的所有 PE(只要参与了相关 VPN 业务)都会收到这些底层的物理状态信息。这对 PE3、PE4 来说是毫无意义的噪音,浪费了它们的控制平面资源。

解决方案: 我们需要一种机制,让 PE1 发出的这些物理层信息,只有 PE2 能接收并处理,其他 PE 自动忽略。这就是 ES-Import RT 的作用。

  1. ES-Import RT 的工作机制(步步解析)

这个机制非常巧妙,它利用了 ESI 的唯一性来自我实现。

步骤 1:自动生成 RT(对暗号)

当网络管理员在 PE1 和 PE2 上配置了相同的以太网段标识符,例如 ESI = 00:11:22:33:44:55:66:77:88:99

EVPN 协议栈会自动根据这个 ESI 值,通过特定的算法生成一个 6 字节的 Route Target 值。

  • 关键点: 由于 PE1 和 PE2 配置的 ESI 相同,它们算出来的 ES-Import RT 也一定是一模一样的。

步骤 2:自动导入策略(建立监听)

一旦 PE 设备上配置了某个 ESI,该 PE 就会自动在 BGP 中生成一条导入策略:

“只要收到携带了本 ESI 对应的那个 ES-Import RT 的路由,我就立刻接收(Import)。”

此时,PE1 和 PE2 都竖起了耳朵,监听这个特定的“暗号”。PE3 由于没有配置 ESI 100,所以它不会监听这个暗号。

步骤 3:携带 RT 发送路由(广播暗号)

PE1 开始发送用于宣告自身物理状态的路由,主要是以下两种:

  1. Type 4 Route (Ethernet Segment Route): 纯粹用于宣告“我连接着 ESI 100”。
  2. Type 1 Route (Ethernet A-D route per ESI): 用于携带水平分割标签等信息。

PE1 在发送这两条路由时,会将计算出来的那个 ES-Import RT 附加在 BGP Update 报文中发往核心网(Route Reflector)。

步骤 4:精准接收(对上暗号)

  • 核心网(RR)将这条路由反射给所有 PE。
  • PE3 收到路由: 查看 RT,发现不是自己感兴趣的业务 RT,也不是自己监听的任何 ES-Import RT。于是丢弃该路由。
  • PE2 收到路由: 查看 RT,发现这个 RT 正是自己为 ESI 100 监听的那个“暗号”。于是接收并处理这条路由。

结果

PE2 成功发现了 PE1 也连接着 ESI 100。接下来,它们就可以基于此进行后续操作:

  • DF 选举 (Designated Forwarder Election): 协商谁负责向 CE 发送广播/组播流量。
  • 交换水平分割标签 (Split Horizon Label Exchange): 也就是我们之前讨论的通过 Type 1 Per-ESI 路由交换标签,防止环路。

总结对比:ES-Import RT vs. 普通 VPN RT

为了加深理解,我们再回顾一下它和普通业务 RT 的区别:

特性ES-Import RT普通 VPN Route Target (Export/Import RT)
主要用途物理拓扑发现。用于多归属 PE 之间互相识别。业务可达性传播。用于通告 MAC/IP 地址属于哪个 VPN 实例。
作用范围局部。仅限于连接同一 ESI 的 PE 小组。全局。整个网络中参与该 VPN 业务的所有 PE。
生成方式自动。直接从 ESI 值派生而来。手动配置。由管理员根据 VPN 规划分配。
承载的路由类型Type 4 (ES Route) Type 1 (Per-ESI A-D Route)Type 2 (MAC/IP Route) Type 3 (Multicast Route) Type 1 (Per-EVI A-D Route) Type 5 (Prefix Route)

理解 ES-Import RT,就理解了 EVPN 如何在复杂的网络中保持高效:让底层的物理状态信息只在需要知道的小圈子里传播,而让上层的业务路由在全网传播。

EVPN 路由类型主要功能携带的 Route Target 类型传播范围
Type 1 (Per-ESI)快速收敛,水平分割标签交换ES-Import RT局部 (仅多归属 Peer 间)
Type 1 (Per-EVI)别名 (Aliasing),负载分担普通业务 VPN RT全局 (所有参与该业务的 PE)
Type 2 (MAC/IP)主机 MAC/IP 地址通告普通业务 VPN RT全局 (所有参与该业务的 PE)
Type 3 (Multicast)BUM 流量泛洪树构建普通业务 VPN RT全局 (所有参与该业务的 PE)
Type 4 (ES Route)PE 邻居发现,DF 选举基础ES-Import RT局部 (仅多归属 Peer 间)

EVPN Route Type 3路由

指导发送BUM流量

  1. 核心背景:为什么需要 Type 3 路由?

在传统的二层交换机网络中,如果你收到一个 ARP 广播请求,或者一个目的 MAC 地址未知的帧,交换机会怎么做?它会简单粗暴地把它从同一个 VLAN 内的所有其他接口泛洪(Flood)出去

到了 EVPN 的世界,中间跨越了复杂的 IP/MPLS 核心网,我们不能简单地“泛洪”以太网帧。PE 路由器需要知道:

  1. 谁和我一样?:网络中还有哪些 PE 上也存在同一个广播域(比如 BD 10 或 VNI 100)?
  2. 怎么发给它们?:如果我收到了 BUM 流量,我应该用什么样的隧道技术(VXLAN, MPLS P2MP, Ingress Replication)把流量复制并发送给它们?
  3. 对方怎么识别?:当我把 BUM 流量发给远端 PE 时,我需要带上什么标识(标签或 VNI),以便远端 PE 知道这个流量属于哪个广播域?

EVPN Type 3 路由就是用来回答这三个问题的。

它的核心作用是:在还没有任何实际数据流量发生之前,预先建立起用于 BUM 流量复制和泛洪的“组播分发树”或“复制列表”。


  1. Type 3 路由详解

A. 触发时机与作用范围

  • 触发: 当你在 PE 设备上创建一个新的 EVPN 实例(EVI)或者一个桥接域(Bridge Domain, BD),并为其分配了 RD 和 RT 时,PE 就会自动产生并通告 Type 3 路由。
  • 范围: Type 3 路由是基于每个广播域(BD/EVI)通告的。如果一个 PE 上有 10 个 BD,它就会通告 10 条 Type 3 路由。

B. 路由关键携带信息

一条 Type 3 路由包含以下关键信息,它实际上是在告诉其他 PE:“嘿,我也加入了这个广播组!”

  1. Route Distinguisher (RD): 标识该路由所属的特定的 EVPN 实例(EVI)。

  2. Ethernet Tag ID: 标识具体的广播域。在 VLAN-Based 模式下通常是 0;在 VLAN-Aware Bundle 模式下,它可能对应具体的 VLAN ID 或 Bridge Domain ID。

  3. Originating Router’s IP Address: 通告这条路由的 PE 自己的环回口 IP 地址。这告诉别人“我是谁”。

  4. PMSI Tunnel Attribute (最关键的属性):

    这是 Type 3 路由的灵魂。PMSI 全称 Provider Multicast Service Interface。这个属性告诉其他 PE:“如果你有属于这个 BD 的 BUM 流量要发给我,请使用这种隧道方式和这个标识符。”

    它通常包含两种重要信息:

    • 隧道类型 (Tunnel Type): 最常见的是 Ingress Replication (头端复制)。这意味着“别搞复杂的组播网了,你直接把包复制一份,点对点用单播隧道发给我”。在 VXLAN 场景下这几乎是标配。
    • MPLS Label / VNI (下游分配的 BUM 标签): 这是一个非常重要的细节。发送端 PE 会在 BGP 中告诉别人一个特定的 MPLS 标签(在 MPLS EVPN 中)
      • 注意区别: Type 2 路由携带的是用于单播的标签;Type 3 路由携带的是专门用于 BUM 流量的标签
      • 当远端 PE 收到 BUM 流量时,它看到这个特定的 BUM 标签,就知道:“哦,这是一个广播包,我需要把它泛洪到关联的本地接口。”

C. 工作流程(构建泛洪列表)

  1. 通告: 网络中所有配置了 BD 100 的 PE(假设有 PE1, PE2, PE3),都会互相通告 Type 3 路由。
  2. 接收与构建: PE1 收到了来自 PE2 和 PE3 的关于 BD 100 的 Type 3 路由。
  3. 生成复制列表(Replication List): PE1 会在本地的 BD 100 转发表中创建一个“泛洪列表”。这个列表包含 PE2 和 PE3 的隧道端点信息以及它们分配的 BUM 标签。
  4. 数据转发: 当 CE1 发送一个 ARP 广播包到 PE1 的 BD 100 时:
    • PE1 查表发现这是广播包。
    • PE1 查找泛洪列表,发现需要发给 PE2 和 PE3。
    • PE1 复制两份数据包。
    • 第一份封装发往 PE2,佩戴 PE2 在 Type 3 路由中通告的 BUM 标签。
    • 第二份封装发往 PE3,佩戴 PE3 在 Type 3 路由中通告的 BUM 标签。

image-20260110112359028

EVPN Route Type 4路由

  1. 核心目的:为什么需要 Type 4 路由?

在多归属场景下,一个客户站点(CE)通过一个以太网段(ESI,例如 ESI 100)同时连接到多台 PE(例如 PE1 和 PE2)。

问题在于:PE1 怎么知道 PE2 的存在?

PE1 知道自己连接了 ESI 100,但它无法自动得知网络中还有谁也连接了 ESI 100。如果它们互不知道,就会出现严重问题:它们可能会同时向 CE 发送同一份广播流量,导致 CE 收到重复报文甚至引发环路。

Type 4 路由的使命就是解决这个问题。它主要有两个关键作用:

作用一:以太网段的自动发现 (ES Discovery)

它允许 PE 向全网(或者更准确地说是向感兴趣的小圈子)宣告:“大家好,我是 PE Router X,我连接着物理网段 ESI Y。”

通过交换 Type 4 路由,连接到同一个 ESI 的所有 PE 就能互相“认识”,组成一个冗余组(Redundancy Group)。

作用二:指定转发器 (DF) 选举的基础

这是 Type 4 最重要的功能。在多归属(无论是全活还是主备)场景下,为了防止向 CE 发送重复的 BUM(广播、未知单播、组播)流量,必须在冗余组里选出一个“组长”。

这个组长被称为 DF (Designated Forwarder, 指定转发器)。只有 DF 有资格负责将核心网侧过来的 BUM 流量转发给 CE。

Type 4 路由携带了参与选举所需的所有必要信息(主要是 PE 的 IP 地址,用于排序)。


  1. Type 4 路由的技术解剖

当我们在 PE 的接口上配置了 ESI ID 后,PE 就会自动生成并通告 Type 4 路由。我们来看看它的 NLRI(网络层可达信息)里包含什么关键字段:

字段名称关键作用
Route Distinguisher (RD)通常设置为 0:0(或者根据实现不同),因为它不属于特定的业务 VRF,而是属于底层物理状态。
Ethernet Segment Identifier (ESI)核心字段。 这个 10 字节的全局唯一 ID,标识了这个物理连接段。这是 PE 之间“对暗号”的依据。
IP Address Length下一个字段 IP 地址的长度(32 或 128)。
Originating Router’s IP Address通告者的 IP 地址(通常是 Loopback IP)。 重点: 这个 IP 地址在 DF 选举中起决定性作用,它被用作选举算法中的排序依据(例如 IP 小的优先)。

关键的幕后英雄:ES-Import RT

你可能会问:PE1 发出的 Type 4 路由,网络中可能有 100 台 PE,难道大家都要接收并处理吗?那不是浪费资源?

EVPN 设计得非常精妙。Type 4 路由在发送时,会携带我们在前文中详细解释过的特殊扩展团体属性:ES-Import RT

这个 RT 是根据 ESI 的值自动生成的。只有那些配置了相同 ESI 的 PE,才会自动生成导入策略来接收这个特定的 RT。

因此,Type 4 路由虽然发向了核心网,但只有连接到同一个 ESI 的“自己人”才会接收和处理它,精确控制了传播范围。


  1. 工作流程与 DF 选举机制

让我们通过一个场景来把一切串联起来。

场景: CE1 通过 ESI 100 双归属到 PE1 (IP 1.1.1.1) 和 PE2 (IP 2.2.2.2)。

阶段 1:互相发现 (Discovery)

  1. 配置: 网络管理员在 PE1 和 PE2连接 CE1 的接口上都配置了 esi 00:11:22:33:44:55:66:77:88:99
  2. 通告:
    • PE1 生成一条 Type 4 路由:[ESI: ...88:99, Originator IP: 1.1.1.1],并带上对应的 ES-Import RT 发送出去。
    • PE2 生成一条 Type 4 路由:[ESI: ...88:99, Originator IP: 2.2.2.2],并带上同样的 ES-Import RT 发送出去。
  3. 接收: PE1 和 PE2 因为监听相同的 ES-Import RT,所以成功接收了对方的 Type 4 路由。
  4. 建组: 现在,PE1 知道 ESI 100 的成员有 {PE1, PE2};PE2 也知道成员有 {PE1, PE2}。发现完成。

阶段 2:DF 选举 (Election)

发现完成后,必须立刻进行 DF 选举,决定谁负责处理 BUM 流量。

  1. 创建候选人列表: PE1 和 PE2 都会基于接收到的 Type 4 路由,创建一个包含所有成员 IP 地址的列表,并进行排序。
    • 候选人列表(按 IP 升序):[1.1.1.1 (PE1), 2.2.2.2 (PE2)]
  2. 运行选举算法: 最常见的算法是基于 VLAN ID 的模运算(Modulo)。
    • 规则(简化版): 假设有两个 PE,那么 VLAN ID 是偶数的由 PE1 负责,VLAN ID 是奇数的由 PE2 负责。
  3. 结果生效:
    • 对于 VLAN 10(偶数):PE1 计算出自己是 DF,PE2 计算出自己是 NDF(Non-DF,非指定转发器)。
    • 对于 VLAN 11(奇数):PE2 计算出自己是 DF,PE1 计算出自己是 NDF。

最终效果: 当核心网传来属于 VLAN 10 的广播包时,PE1 和 PE2 都收到了,但只有作为 DF 的 PE1 会把它转发给 CE1,PE2 会默默丢弃它(针对下行方向)。从而完美避免了重复包。


  1. 总结:Type 4 与其他类型的关系

为了防止混淆,我们再做一个清晰的对比:

  • Route Type 4 (Ethernet Segment Route):
    • 作用: “我们来点个名,看看谁在 ESI 100 这一组里,然后选个组长 (DF)。”
    • 内容: ESI ID + 自己的 IP 地址。
    • 时机: 配置 ESI 后立即发送,早于任何业务数据转发。
  • Route Type 1 (Ethernet A-D Route - Per ESI):
    • 作用: “这是我们组的防环令牌 (Split Horizon Label),大家拿好。”
    • 依赖: 依赖 Type 4 先建立起对等体关系,才能交换 Type 1 里的标签信息。
  • Route Type 1 (Ethernet A-D Route - Per EVI):
    • 作用: “这是特定业务的负载分担信息。”
    • 依赖: 同样依赖 Type 4 建立的基础物理拓扑状态。

简而言之,EVPN Type 4 路由是多归属大厦的地基。它不承载任何具体的转发标签或 MAC 地址,但它建立了 PE 之间的基本信任和协作关系,决定了谁是主导者 (DF)。

Gemini_Generated_Image_1ef1ia1ef1ia1ef1

Type1 - Type4

Gemini_Generated_Image_hmeiushmeiushmei

This post is licensed under CC BY 4.0 by the author.