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 的区别三个维度来解释。
- 核心作用:为什么要设计 Ethernet Tag ID?
在 EVPN 架构中,一个 EVI(EVPN Instance)相当于一个虚拟的交换机(MAC-VRF)。但是,这个“虚拟交换机”内部是如何处理 VLAN 的,有三种不同的模式(Service Interface Models)。Ethernet Tag ID 的具体值取决于你使用了哪种模式。
模式 A:VLAN-Based Service(基于 VLAN 的服务)
- 场景: 这是目前最常见的模式(如大多数 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 捆绑服务)
- 场景: 多个 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 的高光时刻
- 场景: 多个 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。
- 在 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 ID | VNI (VXLAN) / MPLS Label |
|---|---|---|
| 所属层面 | 控制平面 (Control Plane) | 数据平面 (Data Plane) |
| 位置 | 存在于 BGP Update 报文的 NLRI 中 | 存在于实际传输的数据包头部 (VXLAN头或MPLS标签栈) |
| 作用 | 帮助 BGP 区分路由所属的广播域 | 帮助转发芯片(ASIC) 查找转发表 |
| 对应关系 | 在 VLAN-Aware 模式下,Eth-Tag ID 往往映射为 VNI | VNI 是 Eth-Tag ID 在数据包里的物理载体 |
举个实际的例子(VXLAN 场景):
- 控制面(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。
- 数据面(转发):
- 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-MPLS 或 VLAN-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
核心特性:EVPN ESI filter label
简单来说,ESI Filter Label 是 EVPN 在 MPLS 数据平面上实现水平分割(Split Horizon)机制的关键手段,目的是为了防止在多归属站点出现环路。
- 背景与问题:多归属环境下的环路风险
在现代数据中心和运营商网络中,为了提高可靠性,客户边缘设备(CE)通常会同时连接到两台或多台运营商边缘设备(PE)。这称为多归属(Multihoming)。
在 EVPN 中,连接同一个 CE 的这一组物理链路被定义为一个以太网段(Ethernet Segment, ES),并用一个全局唯一的 ID 来标识,即 ESI(Ethernet Segment Identifier)。
问题场景(BUM 流量环路):
假设 CE1 通过 ESI 100 双归属到 PE1 和 PE2。
- CE1 发送一个广播帧(例如 ARP 请求)。
- 假设该帧到达了 PE1。
- PE1 根据 EVPN 的规则,需要将这个广播帧泛洪给同一个广播域(BD)内的所有其他 PE,包括 PE2。
- PE1 将数据包封装并通过核心网发送给 PE2。
- 关键风险: 当 PE2 从核心网收到这个广播包解封装后,如果没有任何检查机制,PE2 会认为这是一个需要向本地接口泛洪的广播包。PE2 可能会将其从连接 CE1 的接口再次发送回 CE1。
结果: CE1 发出的广播包又回到了 CE1,形成了二层环路。这是网络大忌。
- 解决方案:水平分割(Split Horizon)
为了防止上述环路,必须实施水平分割原则。
在 EVPN 多归属场景下的水平分割原则是:PE 设备从核心侧接收到的 BUM 流量,如果该流量最初是从某个 ESI 发起的,那么该 PE 绝不能将此流量转发回属于同一个 ESI 的本地接口。
换句话说,PE2 需要知道:“这个广播包虽然是从核心网过来的,但它最初是由我的邻居 PE1 从 ESI 100 接收上来的。我也是 ESI 100 的一部分,所以我不能把它发回去。”
- 核心机制:什么是 ESI Filter Label?
PE2 如何识别流量的“原始来源 ESI”呢?在基于 MPLS 的 EVPN 中,答案就是 ESI Filter Label(ESI 过滤标签),有时也被称为 Split Horizon Label。
- 定义: 它是一个 MPLS 标签,用于在数据平面中标识 BUM 流量起源的以太网段(ESI)。
- 作用: 它就像给数据包贴上的一个“原产地标签”。当接收端 PE 看到这个标签时,它不是用来指导转发的,而是用来执行“过滤”或“丢弃”操作的。
- 本质: 它是一个特殊的 MPLS 标签,其对应的转发动作是:“禁止向关联的 ESI 接口转发”。
- 工作流程:控制平面与数据平面的协同
理解 ESI Filter Label 如何工作,必须结合 BGP 控制信令和数据包转发过程。
A. 控制平面(标签的分配与通告)
ESI Filter Label 是通过 BGP EVPN 路由在 PE 之间交互的。具体使用的是 Type 1 路由:Ethernet Auto-Discovery (A-D) route。
- PE 的自我声明: PE1 和 PE2 都会发现自己连接了 ESI 100。
- 分配标签:
- PE1 会为 ESI 100 在本地分配一个唯一的 MPLS 标签(假设为 Label_PE1_ESI100,例如值为 500)。
- PE2 也会为 ESI 100 在本地分配一个唯一的 MPLS 标签(假设为 Label_PE2_ESI100,例如值为 600)。
- 发布路由:
- 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 的接口上丢弃该数据包,从而成功阻止了环路。
总结
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)和快速收敛问题。
- 背景:多归属与 Type 2 路由的局限
假设一个客户站点 CE1 通过一个以太网段 ESI 100 双归属接入到 PE1 和 PE2,并且处于 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 的链路进行负载分担,全活模式大打折扣。
- 解决方案:引入 Per-EVI Ethernet A-D Route
为了解决这个问题,EVPN 引入了 Per-EVI Ethernet A-D 路由。
它的核心思想是:将“对特定 MAC 地址的可达性”与“对整个以太网段(ESI)内特定业务(EVI)的可达性”解耦。
核心功能一:Aliasing(别名)——实现负载分担
这是 Per-EVI A-D 路由最主要的作用。
回到上面的例子:
- PE1 学习到
MAC_A,通告 Type 2 路由:[MAC_A, ESI 100, Next-Hop: PE1]。 - 关键步骤: PE1 和 PE2 都会针对 EVI 10,通告一条 Per-EVI Ethernet A-D 路由。这条路由告诉网络中的所有人:
- PE1 说:“我连接着 ESI 100,并且上面承载着 EVI 10 业务。”
- PE2 说:“我也连接着 ESI 100,并且上面也承载着 EVI 10 业务。”
- 远端 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 收到了 PE1 发来的关于
结果: 远端 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 路由泛洪,即可实现毫秒级的快速切换。
- 总结:为什么它不可或缺?
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,以太网自动发现路由)实际上是一个“大类”。在具体的实现和应用中,它根据用途和携带信息不同,被细分成了两种截然不同的子类型:
- Ethernet A-D route per ESI (基于 ESI 的 A-D 路由)
- Ethernet A-D route per EVI (基于 EVI 的 A-D 路由)
这两者虽然都叫 Type 1 路由,都服务于多归属(Multihoming)场景,但它们解决的问题维度、作用机制和携带的内容有着本质的区别。
简而言之:
- Per-ESI 关注的是物理链路层面的状态和 BUM 流量的防环。
- Per-EVI 关注的是具体业务实例层面的负载分担和可达性。
下面我们详细拆解它们的区别:
核心区别深度对比
- 核心目的与解决的问题
- 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 谁是主,谁是备,以便快速切换。
- 作用域与粒度
- 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 路由。
- 关键字段差异 (技术细节)
在 BGP Update 报文中,这两者的区分体现在 Route Distinguisher (RD) 和 Route Target (RT) 的使用上:
| 特性 | Per-ESI Ethernet A-D route | Per-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 Route | Per-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?它究竟是如何工作的?
- ES-Import RT 的核心定义
ES-Import RT (Ethernet Segment Import Route Target) 是 BGP EVPN 中一种特殊的扩展团体属性(Extended Community)。
它的核心使命是: 在庞大的运营商网络中,精准地帮助那些连接到同一个物理以太网段(ESI)的 PE 路由器互相“找到”对方,建立起一个小圈子,而不打扰网络中的其他无关 PE。
简单来说,它是多归属 PE 之间进行互相发现(Peer Discovery)的“联络暗号”。
- 为什么需要它?(解决什么痛点)
想象一个拥有上百台 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 的作用。
- 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 开始发送用于宣告自身物理状态的路由,主要是以下两种:
- Type 4 Route (Ethernet Segment Route): 纯粹用于宣告“我连接着 ESI 100”。
- 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流量
- 核心背景:为什么需要 Type 3 路由?
在传统的二层交换机网络中,如果你收到一个 ARP 广播请求,或者一个目的 MAC 地址未知的帧,交换机会怎么做?它会简单粗暴地把它从同一个 VLAN 内的所有其他接口泛洪(Flood)出去。
到了 EVPN 的世界,中间跨越了复杂的 IP/MPLS 核心网,我们不能简单地“泛洪”以太网帧。PE 路由器需要知道:
- 谁和我一样?:网络中还有哪些 PE 上也存在同一个广播域(比如 BD 10 或 VNI 100)?
- 怎么发给它们?:如果我收到了 BUM 流量,我应该用什么样的隧道技术(VXLAN, MPLS P2MP, Ingress Replication)把流量复制并发送给它们?
- 对方怎么识别?:当我把 BUM 流量发给远端 PE 时,我需要带上什么标识(标签或 VNI),以便远端 PE 知道这个流量属于哪个广播域?
EVPN Type 3 路由就是用来回答这三个问题的。
它的核心作用是:在还没有任何实际数据流量发生之前,预先建立起用于 BUM 流量复制和泛洪的“组播分发树”或“复制列表”。
- 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:“嘿,我也加入了这个广播组!”
Route Distinguisher (RD): 标识该路由所属的特定的 EVPN 实例(EVI)。
Ethernet Tag ID: 标识具体的广播域。在 VLAN-Based 模式下通常是 0;在 VLAN-Aware Bundle 模式下,它可能对应具体的 VLAN ID 或 Bridge Domain ID。
Originating Router’s IP Address: 通告这条路由的 PE 自己的环回口 IP 地址。这告诉别人“我是谁”。
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. 工作流程(构建泛洪列表)
- 通告: 网络中所有配置了 BD 100 的 PE(假设有 PE1, PE2, PE3),都会互相通告 Type 3 路由。
- 接收与构建: PE1 收到了来自 PE2 和 PE3 的关于 BD 100 的 Type 3 路由。
- 生成复制列表(Replication List): PE1 会在本地的 BD 100 转发表中创建一个“泛洪列表”。这个列表包含 PE2 和 PE3 的隧道端点信息以及它们分配的 BUM 标签。
- 数据转发: 当 CE1 发送一个 ARP 广播包到 PE1 的 BD 100 时:
- PE1 查表发现这是广播包。
- PE1 查找泛洪列表,发现需要发给 PE2 和 PE3。
- PE1 复制两份数据包。
- 第一份封装发往 PE2,佩戴 PE2 在 Type 3 路由中通告的 BUM 标签。
- 第二份封装发往 PE3,佩戴 PE3 在 Type 3 路由中通告的 BUM 标签。
EVPN Route Type 4路由
- 核心目的:为什么需要 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 地址,用于排序)。
- 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 的“自己人”才会接收和处理它,精确控制了传播范围。
- 工作流程与 DF 选举机制
让我们通过一个场景来把一切串联起来。
场景: CE1 通过 ESI 100 双归属到 PE1 (IP 1.1.1.1) 和 PE2 (IP 2.2.2.2)。
阶段 1:互相发现 (Discovery)
- 配置: 网络管理员在 PE1 和 PE2连接 CE1 的接口上都配置了
esi 00:11:22:33:44:55:66:77:88:99。 - 通告:
- 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 发送出去。
- PE1 生成一条 Type 4 路由:
- 接收: PE1 和 PE2 因为监听相同的 ES-Import RT,所以成功接收了对方的 Type 4 路由。
- 建组: 现在,PE1 知道 ESI 100 的成员有
{PE1, PE2};PE2 也知道成员有{PE1, PE2}。发现完成。
阶段 2:DF 选举 (Election)
发现完成后,必须立刻进行 DF 选举,决定谁负责处理 BUM 流量。
- 创建候选人列表: PE1 和 PE2 都会基于接收到的 Type 4 路由,创建一个包含所有成员 IP 地址的列表,并进行排序。
- 候选人列表(按 IP 升序):
[1.1.1.1 (PE1), 2.2.2.2 (PE2)]
- 候选人列表(按 IP 升序):
- 运行选举算法: 最常见的算法是基于 VLAN ID 的模运算(Modulo)。
- 规则(简化版): 假设有两个 PE,那么 VLAN ID 是偶数的由 PE1 负责,VLAN ID 是奇数的由 PE2 负责。
- 结果生效:
- 对于 VLAN 10(偶数):PE1 计算出自己是 DF,PE2 计算出自己是 NDF(Non-DF,非指定转发器)。
- 对于 VLAN 11(奇数):PE2 计算出自己是 DF,PE1 计算出自己是 NDF。
最终效果: 当核心网传来属于 VLAN 10 的广播包时,PE1 和 PE2 都收到了,但只有作为 DF 的 PE1 会把它转发给 CE1,PE2 会默默丢弃它(针对下行方向)。从而完美避免了重复包。
- 总结: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)。







