第257篇:EVPN Type2/Type3 路由详解

关键词:EVPN路由类型、Type2 MAC/IP、Type3 Inclusive Multicast、ESI、MD、ETAG、华为CloudEngine


一、引言

第256篇中,我们介绍了BGP EVPN作为VXLAN控制面的整体架构和配置方法。BGP EVPN之所以能替代传统MAC自学习和静态VTEP配置,核心在于它定义了一套全新的路由类型,将这些二层网络信息作为BGP路由进行分发。

EVPN定义了多达6种路由类型(Type1~Type5),每种路由类型承载不同的语义。其中,Type2(MAC/IP Advertisement Route)和Type3(Inclusive Multicast Ethertag Route)是数据中心场景中最核心的两种路由类型,分别解决"VM的MAC地址在哪里"和"同一个VNI下有哪些VTEP"这两个基础问题。

本文将深入剖析Type2和Type3路由的内部结构、生成逻辑、分发流程,以及它们在故障场景下的行为。

二、EVPN 路由类型总览

BGP EVPN使用独立的地址族(AFI=25, SAFI=7),路由类型(Route Type)标识在Route Type字段中(1字节):

路由类型 名称 用途
Type1 ETH_AUTO_DIScovery_ETHERNET_SEGMENT ES(Ethernet Segment)发现,用于多宿主场景
Type2 MAC/IP Advertisement MAC地址/IP地址通告,核心转发信息
Type3 Inclusive Multicast Ethertag VTEP自动发现,泛洪域成员列表
Type4 MAC Mobility MAC地址移动通告,用于虚拟机迁移场景
Type5 IPv4/IPv6 Prefix 三层路由通告,用于EVPN网关场景

Route Distinguisher(RD)的生成规则为:RD = 。ETAG-ID等价于VNI,用于标识路由所属的逻辑网络。

三、Type2 路由(MAC/IP Advertisement Route)深度剖析

3.1 Type2 路由的作用

Type2路由是EVPN的核心,它通告了一条完整的MAC地址(或MAC+IP地址)与VTEP的映射关系。当Leaf-01从下联端口学习到某台VM的MAC地址后,立即生成一条Type2路由并通过BGP通告给所有其他VTEP。这样,任何其他VTEP需要转发到该VM时,直接从本地EVPN转发表中查询到目标VTEP地址,无需泛洪。

3.2 Type2 路由的格式

Type2路由的MP_REP_NLRI(地址信息)格式如下:

字段 长度 说明
Route Type 1 Byte 固定为 0x02,标识为Type2路由
Ethernet Tag ID 4 Bytes VNI 值,标识所属以太网段
Flags 1 Byte Bit 0: H Flag(1=主机MAC, 0=非主机MAC)
Bit 1: I Flag(1=携带IP地址, 0=仅MAC)
MAC Length 1 Byte 固定为 6(MAC地址长度)
Ethernet Destination Address 6 Bytes MAC地址
IP Address Length 1 Byte 可选,仅当 I Flag=1 时存在
IP Address 4/16 Bytes 可选,仅当 I Flag=1 时存在(IPv4=4, IPv6=16)
Router MAC 6 Bytes 可选,仅单臂网关模式使用
ESI Length 1 Byte 可选,取值 0~18
ESI ESI Length Bytes 可选,Ethernet Segment Identifier
MPLS Label Stack 可变 可选,仅非VXLAN场景使用

3.3 Type2 路由的生成时机

Type2路由的生成遵循以下规则:

  1. 本地学习触发:当VTEP从下联端口收到带有新MAC地址的报文时,生成Type2路由
  2. ARP触发:当VTEP(作为网关)完成本地ARP解析,获得IP↔MAC映射时,生成Type2路由
  3. DHCP触发:当VTEP上的DHCP Relay为VM分配IP地址后,生成Type2路由

Type2路由的撤销(Withdraw)时机: 1. MAC地址老化超时(默认300秒) 2. 下联端口Down 3. 收到更高优先级的Type2路由(如ESI冲突解决)

3.4 Type2 路由的示例

假设Leaf-01学习到VM-A的MAC地址为00:50:56:AA:BB:CC,IP地址为172.16.100.10,所属VNI为10001。

Leaf-01生成的Type2路由信息: - Route Type: 0x02 - ETAG-ID (VNI): 10001 - Flags: I=1, H=1(携带IP地址,为主机MAC) - MAC Address: 00:50:56:AA:BB:CC - IP Address: 172.16.100.10 - Next Hop: Leaf-01的Loopback IP(10.255.254.1)

# 在 Leaf-01 上查看 Type2 路由
Leaf-01> display bgp evpn routing-table type2

  Ethernet Segment Information:
    Route Distinguisher : 2:10001:0
    Ethernet Tag Id     : 10001
  MAC Address           : 0050-56AA-BBCC
  IP Address            : 172.16.100.10
  NextHop               : 10.255.254.1
  Flags                 : Host IP
  Preference            : 1
  learnt from           : Local

  Ethernet Segment Information:
    Route Distinguisher : 2:10001:0
    Ethernet Tag Id     : 10001
  MAC Address           : 0050-56DD-EEFF
  IP Address            : 172.16.100.20
  NextHop               : 10.255.254.2
  Flags                 : Host IP
  Preference            : 1
  learnt from           : 10.255.255.1 (Spine-01)

四、Type3 路由(Inclusive Multicast Ethertag Route)深度剖析

4.1 Type3 路由的作用

Type3路由通告了某个VNI(Ethernet Tag)的所有VTEP成员列表。它解决的核心问题是:当VTEP需要发送广播/组播/未知单播报文时,它应该将报文复制并发送到哪些远端VTEP?

在传统泛洪机制中,这个问题通过组播组或手动配置的头端复制列表来解决。Type3路由通过BGP自动分发VTEP列表,使每个VTEP都能获知同一VNI下的所有成员VTEP。

4.2 Type3 路由的格式

字段 长度 说明
Route Type 1 Byte 固定为 0x03,标识为Type3路由
Ethernet Tag ID 4 Bytes VNI 值,标识所属以太网段
Implication Flag 1 Bit 1=Inclusive Multicast Ethertag Route(包含VTEP列表)
0=MAC Mobility Notification Route(MAC移动通知)
ESI Length 1 Byte 可选,取值 0~18
ESI ESI Length Bytes 可选,Ethernet Segment Identifier

Type3路由的Next Hop为发送该路由的VTEP自身的Loopback IP。

4.3 Type3 路由的分发流程

Type3 路由的分发流程 - 图示

4.4 Type3 路由与泛洪的关系

Type3路由本身不直接参与数据转发,它为VTEP构建了一份"泛洪列表"(Flood List)。当VTEP收到需要泛洪的报文时:

  1. 根据报文的VNI查找泛洪列表
  2. 泛洪列表中的所有VTEP IP即为报文复制的目标
  3. 源VTEP逐个封装VXLAN报文并发送到每个目标VTEP(头端复制)

关键区别:Type3路由只解决"往哪发"的问题,不解决"怎么发"的问题。报文仍然通过VXLAN隧道(UDP 4789)在Underlay网络上传输。

4.5 Type3 路由的示例

# 在 Leaf-01 上查看 Type3 路由
Leaf-01> display bgp evpn routing-table type3

  Ethernet Segment Information:
    Route Distinguisher : 3:10001:0
    Ethernet Tag Id     : 10001
  NextHop               : 10.255.254.1 (Self)
  Preference            : 1
  learnt from           : Local

  Ethernet Segment Information:
    Route Distinguisher : 3:10001:0
    Ethernet Tag Id     : 10001
  NextHop               : 10.255.254.2 (Leaf-02)
  Preference            : 1
  learnt from           : 10.255.255.1 (Spine-01)

  Ethernet Segment Information:
    Route Distinguisher : 3:10001:0
    Ethernet Tag Id     : 10001
  NextHop               : 10.255.254.3 (Leaf-03)
  Preference            : 1
  learnt from           : 10.255.255.1 (Spine-01)

  Ethernet Segment Information:
    Route Distinguisher : 3:10001:0
    Ethernet Tag Id     : 10001
  NextHop               : 10.255.254.4 (Leaf-04)
  Preference            : 1
  learnt from           : 10.255.255.1 (Spine-01)

五、Type2 与 Type3 的协同工作

5.1 单播转发场景

当VM-A(Leaf-01)发送单播报文到VM-B(Leaf-02)时:

  1. Leaf-01收到VM-A的原始以太网帧,目的MAC为VM-B的MAC
  2. Leaf-01查询EVPN转发表(由Type2路由生成),找到VM-B的MAC对应的VTEP地址(Leaf-02的Loopback IP)
  3. Leaf-01将报文封装为VXLAN,目的IP为Leaf-02的Loopback IP
  4. Underlay网络通过ECMP将报文转发到Leaf-02
  5. Leaf-02解封装后直接转发到VM-B

此场景仅依赖Type2路由,不涉及Type3路由。

5.2 广播泛洪场景

当VM-A发送ARP请求(目的MAC为FF:FF:FF:FF:FF:FF)时:

  1. Leaf-01收到ARP请求报文,识别为目的MAC为广播地址
  2. Leaf-01查询该VNI的泛洪列表(由Type3路由构建),得到[VTEP2, VTEP3, VTEP4]
  3. Leaf-01将ARP请求复制3份,分别封装VXLAN后发送到VTEP2、VTEP3、VTEP4
  4. 各VTEP解封装后泛洪到本地端口,VM-B的VTEP(Leaf-02)收到后,VM-B回复ARP响应
  5. Leaf-02学习到VM-A的MAC地址(从ARP响应的源MAC),生成Type2路由并通告

此场景依赖Type3路由(泛洪列表)和Type2路由(MAC学习后通告)。

5.3 ARP 抑制(ARP Suppression)

EVPN的一项重要优化是ARP抑制。在传统二层网络中,ARP请求需要泛洪到整个广播域。在EVPN中,由于Type2路由已经通告了IP↔MAC的映射关系,VTEP可以直接本地回复ARP请求,无需泛洪。

ARP请求流程(EVPN ARP抑制):

VM-A 发送 ARP Request: Who has 172.16.100.20?
  ↓
Leaf-01 (VTEP) 收到 ARP 请求
  ↓
Leaf-01 查询 Type2 路由表,找到 172.16.100.20 ↔ 00:50:56:DD:EE:FF ↔ Leaf-02
  ↓
Leaf-01 直接生成 ARP Reply: 172.16.100.20 is at 00:50:56:DD:EE:FF
  ↓
VM-A 收到 ARP 回复,更新本地 ARP 缓存
(无需泛洪到全网)

六、故障案例:Type2 路由震荡导致虚拟机通信闪断

6.1 故障现象

某企业数据中心中,Leaf-01下挂的一台VM频繁出现网络闪断,表现为每隔30~60秒中断数秒。经确认,该VM在同Leaf内的通信正常,跨Leaf通信出现闪断。

6.2 排查过程

第一步:检查Type2路由的稳定性

# 在 Leaf-02 上持续监控 Type2 路由
Leaf-02> display bgp evpn routing-table type2 vpn-instance VRF-TenantA

# 观察到 VM-A 的 Type2 路由反复出现和消失
# Route: 00:50:56:AA:BB:CC <-> 10.255.254.1 (Leaf-01)
# 状态: Installed → Withdrawn → Installed → Withdrawn ...

第二步:检查 Leaf-01 上 MAC 地址表的稳定性

Leaf-01> display mac-address 0050-56AA-BBCC

  Mac Address      : 0050-56AA-BBCC
  VLAN             : 100
  Port             : 10GE1/0/5
  Type             : Dynamic
  Age              : 2 seconds  ← 持续重置

MAC地址持续老化并重新学习,说明下联端口存在链路闪断(Flapping)。

第三步:检查端口状态

Leaf-01> display interface 10GE1/0/5
  Physical status : Up
  Protocol status : Up
  ...
  Input errors    : 0
  CRC errors      : 247    ← 大量 CRC 错误

CRC错误表明链路存在物理层问题。

6.3 根因与解决

根因:服务器网卡与Leaf交换机之间的光模块老化,产生大量CRC错误。当CRC错误超过阈值时,端口协议状态暂时Down,导致MAC地址老化。重新UP后MAC重新学习,Type2路由重新生成并通告。这个"Up→Down→Up"的循环导致Type2路由震荡。

解决方案: 1. 更换服务器网卡的光模块 2. 在Leaf端口上配置mac-address flush delay,延缓MAC地址老化时间,减少路由震荡频率 3. 启用端口CRC错误告警,提前发现物理层劣化

# 延缓 MAC 地址老化
interface 10GE1/0/5
 mac-address flush delay 10  # MAC 老化延迟 10 秒

七、总结

路由类型 承载信息 生成触发 核心用途
Type2 MAC↔VTEP映射(可选含IP) MAC学习/ARP解析/DHCP 单播转发、ARP抑制
Type3 VNI的VTEP成员列表 VTEP上线/VNI创建 广播/组播/未知单播泛洪
对比维度 Type2 Type3
路由数量 每个VM一条 每个VNI×每个VTEP一条
路由变化频率 高(VM迁移/端口Down) 低(VTEP增删)
数据面依赖 直接(查Type2表转发) 间接(构建泛洪列表)
缺失影响 跨VTEP单播中断 广播泛洪失败

思考

  1. Type2路由在每个VTEP上可能产生数百万条路由条目(大规模虚拟化环境)。这对交换机的内存和CPU有什么影响?如何优化?
  2. Type3路由使用头端复制实现泛洪,当VTEP数量达到数百个时,一次广播可能产生数百份复制报文。是否存在带宽瓶颈?
  3. Type2路由的H Flag(Host Flag)用于标识该MAC是否属于主机(VM)。这个标志位在什么场景下有特殊意义?

下篇预告:第258篇:分布式网关与集中式网关对比