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

关键词

EVPN Type2、MAC/IP路由、EVPN Type3、IMET、Ingress Replication、BUM泛洪、ARP代理、MAC移动


一、EVPN Type 2 路由(MAC/IP Advertisement)

1.1 路由格式

Type 2 是 EVPN 中最核心的路由类型,用于通告主机的 MAC 地址和(可选的)IP 地址:

Type 2 路由 NLRI 格式:

┌─────────────────────────────────────────┐
│ Route Distinguisher (RD) - 8 字节       │
├─────────────────────────────────────────┤
│ Ethernet Tag ID - 4 字节                │
├─────────────────────────────────────────┤
│ MAC Address - 6 字节                    │
├─────────────────────────────────────────┤
│ IP Address Length - 1 字节              │
├─────────────────────────────────────────┤
│ IP Address - 0/4/16 字节                │
├─────────────────────────────────────────┤
│ MPLS Label 1 (VNI) - 3 字节             │
├─────────────────────────────────────────┤
│ MPLS Label 2 (可选,仅多归) - 3 字节    │
└─────────────────────────────────────────┘

关键字段说明:

RD(Route Distinguisher):
  格式:VTEP-IP:VNI 如 10.1.1.1:10001
  确保不同 VTEP 发布的相同 MAC 路由可区分

Ethernet Tag ID:
  通常为 0(默认),或关联 VLAN ID

MAC Address:
  主机的 MAC 地址,6 字节

IP Address:
  可选字段,0 字节表示仅 MAC(纯二层场景)
  4 字节表示 IPv4
  16 字节表示 IPv6

MPLS Label 1:
  实际承载 VNI 值(24-bit)

1.2 Type 2 路由的生成

Type 2 路由的触发条件:

条件 1:本地 MAC 学习(数据面触发)

┌─ Leaf 通过数据面学习到新 MAC ──────────┐ 1. Leaf 从本地端口收到 VM A 的帧 2. 数据面学习:MAC AA:AA:AA:AA:AA:01 3. 关联 VNI 10001 4. 触发 EVPN Type 2 路由发布

条件 2:免费 ARP(GARP)触发

┌─ VM 启动时发送 GARP ───────────────────┐ 1. VM A 发送免费 ARP: "我是 192.168.1.10, MAC AA:AA..." 2. Leaf 捕获 GARP 3. 生成 Type 2 路由(含 IP + MAC) 4. 立即发布

条件 3:ARP 触发

┌─ VM 发送 ARP 请求后 ───────────────────┐ 1. VM A 发送 ARP: "Who has 192.168.1.1?" 2. Leaf 检查 ARP 源 MAC/IP 3. 如果 MAC/IP 不在表中 → 学习并发布

1.3 Type 2 路由的处理

本地 Leaf 发布 Type 2(源端):

  1. 生成路由:
     RD: 10.1.1.1:10001
     MAC: AA:AA:AA:AA:AA:01
     IP: 192.168.1.10
     VNI: 10001
     Next-Hop: 10.1.1.1(本地 VTEP IP)

  2. 通过 BGP 发布到所有 iBGP 邻居

远端 Leaf 接收 Type 2(目的端):

  1. BGP 接收路由
  2. 验证 RT 匹配(import RT)
  3. 安装到 EVPN 转发表:
     MAC: AA:AA:AA:AA:AA:01
     → VTEP: 10.1.1.1
     → VNI: 10001
     → Outgoing Interface: NVE1
  4. 如果包含 IP:
     安装到 ARP 表:
     IP: 192.168.1.10
     → MAC: AA:AA:AA:AA:AA:01
     → Remote(非本地)
  5. 后续发往 AA:AA:AA:AA:AA:01 的帧:
     直接 VXLAN 封装 → 发送到 10.1.1.1

1.4 MAC 移动(MAC Mobility)

MAC 移动场景:VM 从 Leaf1 迁移到 Leaf2

迁移前:
  Leaf1 发布:MAC AA:AA:AA:AA:AA:01 → VTEP 10.1.1.1

VM 在 Leaf2 上线:
  Leaf2 学习到 MAC AA:AA:AA:AA:AA:01
  Leaf2 发布 Type 2:
    MAC: AA:AA:AA:AA:AA:01
    IP: 192.168.1.10
    VNI: 10001
    Next-Hop: 10.1.1.2(新的 VTEP)
    Sequence: 1(MAC 移动序列号)

其他 Leaf 处理:
  收到 Leaf2 的路由:
    1. 检查 Sequence Number
    2. Sequence 更高 → 新位置
    3. 更新转发表:MAC → VTEP 10.1.1.2
    4. 撤销旧的 Leaf1 路由

Leaf1 处理(源端):
  感知到 MAC 已移走:
    1. 撤销原 Type 2 路由
    2. 清理本地 MAC 表
    3. 完成迁移

MAC 移动保护:
  在短时间内超过 N 次移动 → 触发防抖
  # 华为配置
  evpn mac-mobility
   suppress-time 180                             # 180秒内抑制重复移动

二、EVPN Type 3 路由(IMET)

2.1 路由格式

Type 3 用于BUM(广播、未知单播、组播)流量控制:

Type 3 路由 NLRI 格式:

Route Distinguisher (RD) - 8 字节 Ethernet Tag ID - 4 字节 IP Address Length - 1 字节 Originating Router IP Address - 4/16 字节 MPLS Label (VNI) - 3 字节

关键字段说明:

RD:同 Type 2,通常 VTEP-IP:VNI

Ethernet Tag ID: 标识广播域(VLAN),通常为 0

Originating Router IP: 发送 VTEP 的 IP 地址

MPLS Label (VNI): 该 VTEP 参与的 VNI

2.2 IMET 的工作机制

Type 3 路由建立 BUM 组:

场景:VNI 10001 有 4 个 VTEP 成员

Leaf1 发布 Type 3:
  VNI: 10001
  Originating Router: 10.1.1.1

Leaf2 发布 Type 3:
  VNI: 10001
  Originating Router: 10.1.1.2

Leaf3 发布 Type 3:
  VNI: 10001
  Originating Router: 10.1.1.3

Leaf4 发布 Type 3:
  VNI: 10001
  Originating Router: 10.1.1.4

每台 Leaf 收到所有 Type 3 后:
  构建 VNI 10001 的 BUM 成员列表:
    [10.1.1.1, 10.1.1.2, 10.1.1.3, 10.1.1.4]

2.3 Ingress Replication

Ingress Replication(入口复制)是 EVPN 默认的 BUM 转发方式:

转发流程:

Leaf1 需要发送 BUM 帧(如 ARP 请求):

  1. 查 VNI 10001 的 BUM 成员列表:
     [10.1.1.2, 10.1.1.3, 10.1.1.4](排除自己)

  2. 原始帧(ARP 请求)封装为 3 份 VXLAN:
     副本1:Outer IP 10.1.1.2  ← 发送到 Leaf2
     副本2:Outer IP 10.1.1.3  ← 发送到 Leaf3
     副本3:Outer IP 10.1.1.4  ← 发送到 Leaf4

  3. 每份副本独立走 Underlay ECMP

优点:
  不需要 IP 组播(无需 IGMP/PIM)
  简单可靠
  适用于任何 IP 网络(包括 WAN/DCI)

缺点:
  入口 Leaf 需要复制 N 份(N=远端 VTEP 数量)
  CPU 开销随 VTEP 数量线性增长
  适合 VTEP < 100 的规模

优化:
  # 华为开启 Head-End Replication 硬件加速
  bridge-domain 10001
   vxlan replication-type ingress            # 硬件入口复制

2.4 BUM 流量优化

BUM 流量优化技术:

1. ARP 代理(消除 ARP 广播)

   # 开启 ARP 代理
   bridge-domain 10001
    arp-proxy inner-ip enable

   原理:Type 2 路由中已有所有主机的 MAC/IP
         ARP 请求在 VTEP 直接代答
         不需要泛洪到远端 VTEP

2. ND 代理(IPv6 版本)

   bridge-domain 10001
    nd-proxy inner-ip enable

3. 未知单播抑制

   # 开启后,不可达的目的 MAC 帧被丢弃(不泛洪)
   bridge-domain 10001
    unknown-unicast-suppress enable

4. BUM 流量限速

   # 限制 BUM 速率
   bridge-domain 10001
    vxlan bum-rate-limit 1000                 # 限制 1000 pps

三、Type 2 + Type 3 协同工作

3.1 完整转发流程

VM A(Leaf1)首次访问 VM B(Leaf2):

Step 1:VM A 发送 ARP 请求
  "Who has 192.168.1.20? Tell 192.168.1.10"

Step 2:Leaf1(VTEP1)处理
  ARP 代理检查:
    Type 2 路由中是否有 192.168.1.20?

    情况 A:已有(之前已学习)
      Leaf1 直接代答:192.168.1.20 → MAC BB:BB:BB:BB:BB:01
      → ARP 完成,不泛洪 ← 最理想

    情况 B:没有(首次通信)
      Leaf1 需要泛洪 ARP 请求:
      查 Type 3 BUM 列表 → [Leaf2, Leaf3, Leaf4]
      通过 Ingress Replication 发送 ARP 请求

Step 3:Leaf2 收到 ARP 请求
  解封装后泛洪到本地 VM
  VM B 回复 ARP

Step 4:Leaf2 学习到 VM A 的信息
  通过 ARP 数据包获取:
    MAC AA:AA:AA:AA:AA:01
    IP 192.168.1.10
  触发 Type 2 路由更新
  发布到所有 Leaf

Step 5:Leaf1 收到 VM B 的 Type 2 路由
  安装到 MAC 表:MAC BB:BB:BB:BB:BB:01 → VTEP 10.1.1.2
  安装到 ARP 表:192.168.1.20 → MAC BB:BB:BB:BB:BB:01

Step 6:VM A → VM B 数据流(无需再泛洪)
  VM A 发送以太网帧(dst MAC = BB:BB:BB:BB:BB:01)
  Leaf1 查 MAC 表 → VTEP 10.1.1.2
  封装 VXLAN → 发送到 10.1.1.2
  Leaf2 解封装 → 转发给 VM B

关键点:
  第一次通信需一次 ARP 泛洪
  之后所有通信直接封装转发
  如果开启 ARP 代理 → 第一次也不泛洪

3.2 故障处理

故障场景 1:VTEP 离线

  Leaf3 故障:
    1. BGP 邻居断连
    2. Spine(RR)撤销 Leaf3 的所有路由
    3. 其他 Leaf 收到撤销:
       Type 2:删除 MAC → VTEP 10.1.1.3 的表项
       Type 3:从 BUM 列表移除 10.1.1.3

  收敛时间:BGP Hold Time(默认 180s,可调至 3s)

  加速方案:
    # BFD for BGP
    bgp 65001
     peer 10.1.0.1 bfd enable
     peer 10.1.0.1 bfd min-tx-interval 100
     peer 10.1.0.1 bfd min-rx-interval 100

    BFD 检测时间:300ms → BGP 收敛 < 1s

故障场景 2:MAC 表老化

  Leaf1 上的 VM A MAC 老化:
    1. Leaf1 撤销 Type 2 路由(MACA → VTEP 10.1.1.1)
    2. 其他 Leaf 删除 MACA 表项
    3. 如果 VM A 仍然在线:
       发送数据 → Leaf1 重新学习 → 重新发布 Type 2

  不中断:重新学习后,业务自动恢复

四、查看 EVPN 路由

4.1 华为设备查看命令

# 查看 EVPN 路由表
display bgp evpn all routing-table

  BGP Local router ID: 10.1.1.1
   Total number of routes: 20

  Route Distinguisher: 10.1.1.1:10001
    Network            Nexthop        VNI        Label
  *>  [2][0][48][AA:AA:AA:AA:AA:01]
                      10.1.1.1       10001      -
  *>  [3][0][32][10.1.1.1]
                      10.1.1.1       10001      -
  *i  [2][0][48][BB:BB:BB:BB:BB:01]
                      10.1.1.2       10001      -

# 查看 Type 2 详细信息
display bgp evpn routing-table mac-route

  MAC address      IP address       VNI   NextHop      Seq
  AA:AA:AA:AA:AA:01 192.168.1.10   10001  10.1.1.1     0
  BB:BB:BB:BB:BB:01 192.168.1.20   10001  10.1.1.2     0

# 查看 Type 3 详细信息
display bgp evpn routing-table inclusive-multicast-route

  VNI   Originating Router    NextHop
  10001 10.1.1.1              10.1.1.1
  10001 10.1.1.2              10.1.1.2
  10001 10.1.1.3              10.1.1.3

五、总结

知识点 核心要点
Type 2 路由 通告 MAC+IP,替代数据面 MAC 学习
Type 2 触发 本地 MAC 学习、GARP、ARP 触发
MAC 移动 Sequence Number 标识迁移,自动更新
Type 3 路由 IMET,标识 VTEP 的 VNI 成员
Ingress Replication 入口 VTEP 复制 BUM 到所有成员
ARP 代理 Type 2 已有 IP-MAC 映射,VTEP 代答
BUM 优化 ARP 代理 + 未知单播抑制 + 速率限制
协同工作 Type 2 处理单播,Type 3 处理 BUM
故障收敛 BFD 加速,MAC 重新学习自动恢复

六、思考

  1. EVPN Type 2 路由包含哪些核心字段?收到一条 Type 2 路由后,接收方 VTEP 会做哪几步处理?
  2. Ingress Replication 的工作原理是什么?相比 IP 组播有什么优点和缺点?
  3. 当 VM 从 Leaf1 迁移到 Leaf2 时,EVPN 如何感知并更新路由?MAC Mobility 的 Sequence Number 是如何工作的?
  4. ARP 代理如何减少 BUM 流量?如果所有主机的 MAC/IP 都已通过 Type 2 路由通告,ARP 请求还需要泛洪吗?
  5. 在首次通信场景中,Type 2 和 Type 3 路由如何协同完成 MAC 学习和转发?请描述完整流程。

下篇预告:第258篇《分布式网关与集中式网关对比》——数据中心 VXLAN 网关的两种部署方式,对比性能、扩展性、故障域,以及为什么分布式网关是 Spine-Leaf 的默认选择。